vdiffr/0000755000176200001440000000000014710644552011542 5ustar liggesusersvdiffr/tests/0000755000176200001440000000000014705713635012707 5ustar liggesusersvdiffr/tests/testthat/0000755000176200001440000000000014710644552014544 5ustar liggesusersvdiffr/tests/testthat/test-expect-doppelganger.R0000644000176200001440000000535214707722236021610 0ustar liggesusersvdiffr_skip_stale() test_that("ggplot doppelgangers pass", { skip_if_not_installed("ggplot2") p1_orig <- ggplot2::ggplot(mtcars, ggplot2::aes(disp)) + ggplot2::geom_histogram() expect_doppelganger("myplot", p1_orig) }) test_that("base doppelgangers pass", { p_base <- function() plot(mtcars$disp) expect_doppelganger("myplot2", p_base) p_base_symbol <- function() { plot.new() text(0.5, 0.8, expression(x[i] + over(x, y)), font = 5) } expect_doppelganger("Base doppelganger with symbol", p_base_symbol) }) test_that("grid doppelgangers pass", { p_grid <- function() { grid::grid.newpage() grid::grid.text("foobar", gp = grid::gpar(fontsize = 10.1)) grid::grid.text("foobaz", 0.5, 0.1, gp = grid::gpar(fontsize = 15.05)) } expect_doppelganger("Grid doppelganger", p_grid) }) test_that("no 'svglite supports one page' error (#85)", { test_draw_axis <- function(add_labels = FALSE) { theme <- theme_test() + theme(axis.line = element_line(size = 0.5)) positions <- c("top", "right", "bottom", "left") n_breaks <- 3 break_positions <- seq_len(n_breaks) / (n_breaks + 1) labels <- if (add_labels) as.character(seq_along(break_positions)) # create the axes axes <- lapply(positions, function(position) { ggplot2:::draw_axis(break_positions, labels, axis_position = position, theme = theme) }) axes_grob <- gTree(children = do.call(gList, axes)) # arrange them so there's some padding on each side gt <- gtable( widths = unit(c(0.05, 0.9, 0.05), "npc"), heights = unit(c(0.05, 0.9, 0.05), "npc") ) gtable_add_grob(gt, list(axes_grob), 2, 2, clip = "off") } environment(test_draw_axis) <- env(ns_env("ggplot2")) expect_doppelganger("page-error1", test_draw_axis(FALSE)) expect_doppelganger("page-error2", test_draw_axis(TRUE)) }) test_that("supports `grob` objects (#36)", { circle <- grid::circleGrob( x = 0.5, y = 0.5, r = 0.5, gp = grid::gpar(col = "gray", lty = 3) ) expect_doppelganger("grob", circle) }) test_that("skips and unexpected errors reset snapshots (r-lib/testthat#1393)", { regenerate <- FALSE if (regenerate) { withr::local_envvar(c(VDIFFR_REGENERATE_SNAPS = "true")) } suppressMessages( test_file( test_path("test-snapshot", "test-snapshot.R"), reporter = NULL ) ) expect_true(file.exists("test-snapshot/_snaps/snapshot/error-resets-snapshots.svg")) expect_true(file.exists("test-snapshot/_snaps/snapshot/skip-resets-snapshots.svg")) }) test_that("`expect_doppelganger()` supports variants", { p1 <- ggplot2::ggplot() p2 <- ggplot2::ggplot() + ggplot2::geom_histogram() expect_doppelganger("variant", p1, variant = "foo") expect_doppelganger("variant", p2, variant = "bar") }) vdiffr/tests/testthat/test-log.R0000644000176200001440000000142214707722644016431 0ustar liggesusersvdiffr_skip_stale() test_that("Failures are logged", { skip_on_cran() reporter <- testthat::SilentReporter$new() path <- create_mock_pkg() vars <- c("CI" = "true") suppressMessages(withr::with_envvar(vars, testthat::test_dir( file.path(path, "tests", "testthat"), reporter = reporter, stop_on_failure = FALSE, stop_on_warning = FALSE ) )) log_path <- file.path(path, "tests", "vdiffr.Rout.fail") if (!file.exists(log_path)) { abort("Can't find log.") } on.exit(file.remove(log_path)) log <- readLines(log_path) results <- reporter$expectations() n_expected <- sum(vapply(results, inherits, NA, "expectation_failure")) n_logged <- length(grep("Failed doppelganger:", log)) expect_equal(n_logged, n_expected) }) vdiffr/tests/testthat/test-ggplot.R0000644000176200001440000000034714062076235017141 0ustar liggesusersvdiffr_skip_stale() skip_if_not_installed("ggplot2") test_that("ggtitle is set correctly", { p <- ggplot2::ggplot() expect_doppelganger("Some title", p) expect_doppelganger("Some other title", p + ggplot2::ggtitle(NULL)) }) vdiffr/tests/testthat/helper-vdiffr.R0000644000176200001440000000005714057630265017426 0ustar liggesusersregenerate_snapshots <- function() { FALSE } vdiffr/tests/testthat/test-snapshot/0000755000176200001440000000000014062076325017355 5ustar liggesusersvdiffr/tests/testthat/test-snapshot/test-snapshot.R0000644000176200001440000000101114062076325022305 0ustar liggesuserstest_that("errors reset snapshots", { if (nzchar(Sys.getenv("VDIFFR_REGENERATE_SNAPS"))) { expect_doppelganger("error resets snapshots", function() plot(1:3)) } else { expect_doppelganger("error resets snapshots", function() stop("failing")) } }) test_that("skips reset snapshots", { if (nzchar(Sys.getenv("VDIFFR_REGENERATE_SNAPS"))) { expect_doppelganger("skip resets snapshots", function() plot(1:3)) } else { expect_doppelganger("skip resets snapshots", function() skip("skipping")) } }) vdiffr/tests/testthat/test-snapshot/_snaps/0000755000176200001440000000000014062076325020640 5ustar liggesusersvdiffr/tests/testthat/test-snapshot/_snaps/snapshot/0000755000176200001440000000000014062076325022477 5ustar liggesusersvdiffr/tests/testthat/test-snapshot/_snaps/snapshot/skip-resets-snapshots.svg0000644000176200001440000001063014062076325027511 0ustar liggesusers 1.0 1.5 2.0 2.5 3.0 1.0 1.5 2.0 2.5 3.0 Index 1:3 vdiffr/tests/testthat/test-snapshot/_snaps/snapshot/error-resets-snapshots.svg0000644000176200001440000001063014062076325027674 0ustar liggesusers 1.0 1.5 2.0 2.5 3.0 1.0 1.5 2.0 2.5 3.0 Index 1:3 vdiffr/tests/testthat/helper-mock.R0000644000176200001440000000053714062076247017102 0ustar liggesusersvdiffr_skip_stale <- function() { skip_if_not_installed("base", "4.1.0") } create_mock_pkg <- function(pkg = "mock-pkg") { dir <- tempfile() dir.create(dir, recursive = TRUE) file.copy(pkg, dir, recursive = TRUE) # Enable `R CMD check` logging from <- file.path(dir, pkg) to <- paste0(from, ".Rcheck") file.rename(from, to) to } vdiffr/tests/testthat/_snaps/0000755000176200001440000000000014707670764016041 5ustar liggesusersvdiffr/tests/testthat/_snaps/expect-doppelganger/0000755000176200001440000000000014705720475021767 5ustar liggesusersvdiffr/tests/testthat/_snaps/expect-doppelganger/page-error1.svg0000644000176200001440000000507414705713635024642 0ustar liggesusers vdiffr/tests/testthat/_snaps/expect-doppelganger/grid-doppelganger.svg0000644000176200001440000000217214062075640026075 0ustar liggesusers foobar foobaz vdiffr/tests/testthat/_snaps/expect-doppelganger/grob.svg0000644000176200001440000000167314062075640023441 0ustar liggesusers vdiffr/tests/testthat/_snaps/expect-doppelganger/page-error2.svg0000644000176200001440000001076214705713635024643 0ustar liggesusers 1 2 3 1 2 3 1 2 3 1 2 3 vdiffr/tests/testthat/_snaps/expect-doppelganger/myplot.svg0000644000176200001440000002227214705713635024041 0ustar liggesusers 0 1 2 3 4 100 200 300 400 disp count myplot vdiffr/tests/testthat/_snaps/expect-doppelganger/base-doppelganger-with-symbol.svg0000644000176200001440000000340214062076256030337 0ustar liggesusers x i + x y vdiffr/tests/testthat/_snaps/expect-doppelganger/myplot2.svg0000644000176200001440000001523514062075640024115 0ustar liggesusers 0 5 10 15 20 25 30 100 200 300 400 Index mtcars$disp vdiffr/tests/testthat/_snaps/ggplot/0000755000176200001440000000000014062076221017313 5ustar liggesusersvdiffr/tests/testthat/_snaps/ggplot/some-title.svg0000644000176200001440000000304214062075604022121 0ustar liggesusers Some title vdiffr/tests/testthat/_snaps/ggplot/some-other-title.svg0000644000176200001440000000262014062076221023235 0ustar liggesusers vdiffr/tests/testthat/_snaps/bar/0000755000176200001440000000000014707670764016605 5ustar liggesusersvdiffr/tests/testthat/_snaps/bar/expect-doppelganger/0000755000176200001440000000000014707670764022542 5ustar liggesusersvdiffr/tests/testthat/_snaps/bar/expect-doppelganger/variant.svg0000644000176200001440000000361114707670764024730 0ustar liggesusers count count variant vdiffr/tests/testthat/_snaps/foo/0000755000176200001440000000000014707670764016624 5ustar liggesusersvdiffr/tests/testthat/_snaps/foo/expect-doppelganger/0000755000176200001440000000000014707670764022561 5ustar liggesusersvdiffr/tests/testthat/_snaps/foo/expect-doppelganger/variant.svg0000644000176200001440000000303714707670764024751 0ustar liggesusers variant vdiffr/tests/testthat/mock-pkg/0000755000176200001440000000000014707722707016261 5ustar liggesusersvdiffr/tests/testthat/mock-pkg/tests/0000755000176200001440000000000014063036676017421 5ustar liggesusersvdiffr/tests/testthat/mock-pkg/tests/testthat/0000755000176200001440000000000014710644552021256 5ustar liggesusersvdiffr/tests/testthat/mock-pkg/tests/testthat/test-passed.R0000644000176200001440000000140214057630265023632 0ustar liggesuserslibrary("vdiffr") test_that("ggplot doppelgangers pass", { p1_orig <- ggplot2::ggplot(mtcars, ggplot2::aes(disp)) + ggplot2::geom_histogram() expect_doppelganger("myplot", p1_orig) }) test_that("base doppelgangers pass", { p_base <- function() plot(mtcars$disp) expect_doppelganger("myplot2", p_base) p_base_symbol <- function() { plot.new() text(0.5, 0.8, expression(x[i] + over(x, y)), font = 5) } expect_doppelganger("Base doppelganger with symbol", p_base_symbol) }) library("grid") test_that("grid doppelgangers pass", { p_grid <- function() { grid.newpage() grid.text("foobar", gp = gpar(fontsize = 10.1)) grid.text("foobaz", 0.5, 0.1, gp = gpar(fontsize = 15.05)) } expect_doppelganger("Grid doppelganger", p_grid) }) vdiffr/tests/testthat/mock-pkg/tests/testthat/test-new.R0000644000176200001440000000036514057630265023153 0ustar liggesuserslibrary("vdiffr") p1 <- function() plot(mtcars$disp) p2 <- ggplot2::ggplot(mtcars, ggplot2::aes(disp)) + ggplot2::geom_histogram() test_that("New plots are collected", { expect_doppelganger("new1", p1) expect_doppelganger("new2", p2) }) vdiffr/tests/testthat/mock-pkg/tests/testthat/test-failed.R0000644000176200001440000000217314705672775023621 0ustar liggesuserslibrary("vdiffr") p1_orig <- ggplot2::ggplot(mtcars, ggplot2::aes(disp)) + ggplot2::geom_histogram() p1_fail <- p1_orig + ggplot2::geom_vline(xintercept = 300) maintenance <- Sys.getenv("VDIFFR_REGENERATE_TESTS") == "yes" skip_if_maintenance <- function() { if (maintenance) { skip("maintenance") } } test_that("mismatches are hard failures when NOT_CRAN is set", { skip_if_maintenance() expect_doppelganger("myplot", p1_fail) }) test_that("Duplicated expectations issue a warning", { skip_if_maintenance() expect_doppelganger("myplot", p1_fail) }) test_that("mismatches are hard failures when CI is set", { skip_if_maintenance() withr::local_envvar(c(NOT_CRAN = "", CI = "true")) expect_doppelganger("myplot", p1_fail) }) test_that("mismatches are skipped when NOT_CRAN is unset", { skip_if_maintenance() withr::local_envvar(c(NOT_CRAN = "", CI = "")) expect_doppelganger("myplot", p1_fail) }) # Maintenance -------------------------------------------------------- test_that("(maintenance) Reset failing figure", { if (!maintenance) { skip("maintenance") } expect_doppelganger("myplot", p1_orig) }) vdiffr/tests/testthat/mock-pkg/tests/testthat/test-ggplot.R0000644000176200001440000000026114057630265023651 0ustar liggesuserstest_that("ggtitle is set correctly", { p <- ggplot2::ggplot() expect_doppelganger("Some title", p) expect_doppelganger("Some other title", p + ggplot2::ggtitle(NULL)) }) vdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/0000755000176200001440000000000014057630265022541 5ustar liggesusersvdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/new/0000755000176200001440000000000014063036675023334 5ustar liggesusersvdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/new/alt1.svg0000644000176200001440000001523514063036675024724 0ustar liggesusers 0 5 10 15 20 25 30 100 200 300 400 Index mtcars$disp vdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/new/new1.svg0000644000176200001440000001523514057630265024733 0ustar liggesusers 0 5 10 15 20 25 30 100 200 300 400 Index mtcars$disp vdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/new/context2.svg0000644000176200001440000002237014063036675025627 0ustar liggesusers 0 1 2 3 4 100 200 300 400 disp count context2 vdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/new/new2.svg0000644000176200001440000002236414057630265024735 0ustar liggesusers 0 1 2 3 4 100 200 300 400 disp count new2 vdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/new/context1.svg0000644000176200001440000001523514063036675025630 0ustar liggesusers 0 5 10 15 20 25 30 100 200 300 400 Index mtcars$disp vdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/new/alt2.svg0000644000176200001440000002236414063036675024726 0ustar liggesusers 0 1 2 3 4 100 200 300 400 disp count alt2 vdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/ggplot/0000755000176200001440000000000014057630265024035 5ustar liggesusersvdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/ggplot/some-title.svg0000644000176200001440000000304214057630265026637 0ustar liggesusers Some title vdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/ggplot/some-other-title.svg0000644000176200001440000000262014057630265027757 0ustar liggesusers vdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/passed/0000755000176200001440000000000014057630265024020 5ustar liggesusersvdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/passed/grid-doppelganger.svg0000644000176200001440000000217214057630265030135 0ustar liggesusers foobar foobaz vdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/passed/myplot.svg0000644000176200001440000002236614057630265026076 0ustar liggesusers 0 1 2 3 4 100 200 300 400 disp count myplot vdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/passed/base-doppelganger-with-symbol.svg0000644000176200001440000000340214057630265032373 0ustar liggesusers x i + x y vdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/passed/myplot2.svg0000644000176200001440000001523514057630265026155 0ustar liggesusers 0 5 10 15 20 25 30 100 200 300 400 Index mtcars$disp vdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/failed/0000755000176200001440000000000014063036676023770 5ustar liggesusersvdiffr/tests/testthat/mock-pkg/tests/testthat/_snaps/failed/myplot.svg0000644000176200001440000002236614057630265026043 0ustar liggesusers 0 1 2 3 4 100 200 300 400 disp count myplot vdiffr/tests/testthat/mock-pkg/tests/testthat.R0000654000176200001440000000007513137600254021375 0ustar liggesuserslibrary("testthat") library("vdiffr") test_check("mockpkg") vdiffr/tests/testthat/mock-pkg/tests/figs/0000755000176200001440000000000014707722707020353 5ustar liggesusersvdiffr/tests/testthat/mock-pkg/tests/figs/passed-plots/0000755000176200001440000000000014057630265022764 5ustar liggesusersvdiffr/tests/testthat/mock-pkg/tests/figs/passed-plots/grid-doppelganger.svg0000644000176200001440000000217214057630265027101 0ustar liggesusers foobar foobaz vdiffr/tests/testthat/mock-pkg/tests/figs/orphaned1.svg0000654000176200001440000002547513612055363022762 0ustar liggesusers 0 1 2 3 4 100 200 300 400 disp count myplot vdiffr/tests/testthat/mock-pkg/tests/figs/ggplot/0000755000176200001440000000000014057630265021642 5ustar liggesusersvdiffr/tests/testthat/mock-pkg/tests/figs/ggplot/some-title.svg0000644000176200001440000000304214057630265024444 0ustar liggesusers Some title vdiffr/tests/testthat/mock-pkg/tests/figs/ggplot/some-other-title.svg0000644000176200001440000000262014057630265025564 0ustar liggesusers vdiffr/tests/testthat/mock-pkg/tests/figs/myplot.svg0000644000176200001440000002236614057630265022424 0ustar liggesusers 0 1 2 3 4 100 200 300 400 disp count myplot vdiffr/tests/testthat/mock-pkg/tests/figs/base-doppelganger-with-symbol.svg0000644000176200001440000000340214057630265026721 0ustar liggesusers x i + x y vdiffr/tests/testthat/mock-pkg/tests/figs/path2/0000755000176200001440000000000014024420772021356 5ustar liggesusersvdiffr/tests/testthat/mock-pkg/tests/figs/path2/orphaned2.svg0000654000176200001440000002547513612055363024001 0ustar liggesusers 0 1 2 3 4 100 200 300 400 disp count myplot vdiffr/tests/testthat/mock-pkg/tests/figs/deps.txt0000644000176200001440000000005614057630265022043 0ustar liggesusers- vdiffr-svg-engine: 2.0 - vdiffr: 0.3.3.9000 vdiffr/tests/testthat/mock-pkg/tests/figs/myplot2.svg0000644000176200001440000001523514057630265022503 0ustar liggesusers 0 5 10 15 20 25 30 100 200 300 400 Index mtcars$disp vdiffr/tests/testthat/mock-pkg/DESCRIPTION0000644000176200001440000000035214057630265017762 0ustar liggesusersPackage: mockpkg Title: title License: GPL-2 Description: Package description. Author: author Maintainer: maintainer Version: 0.1 Suggests: testthat, vdiffr Config/testthat/edition: 3 vdiffr/tests/testthat.R0000644000176200001440000000007414705713635014673 0ustar liggesuserslibrary("testthat") library("vdiffr") test_check("vdiffr") vdiffr/MD50000644000176200001440000001457414710644552012065 0ustar liggesusersce8656510defaf567725482f59b29402 *DESCRIPTION 2613906139d24590c0e3c6d0a1236bf3 *LICENSE d3ded957b6e400f917ed8784d407dce9 *LICENSE.note 7998bb7cbe5f3e01bb14b21c6044ac51 *NAMESPACE 2cf75e0538b57f01f3d2f3646e9c21ce *NEWS.md f7e47e36768d23710243f70726558b37 *R/cpp11.R e6143847785f7e1dae8bb052a3c94bfb *R/embed-svglite.R 06c6e0f50f96a731d497c44c804213a7 *R/expect-doppelganger.R d4375fcade19d4b64f3e3e0ace0193bc *R/svg.R 567a17db0e6517fa7d6ce278f28eefff *R/svglite/SVG.R cdcb793f62f99afd861bd21d9d064b16 *R/svglite/inlineSVG.R 7542e47114d1adb0202ce7c0c2ce2ae6 *R/svglite/utils.R 263844394001a877ba2b018c47b7fa7e *R/utils.R 9f065370dc1d552f71c897102308380c *R/vdiffr-package.R 199196e1e919342707e00498f2d02eea *README.md 2bba96f23dfdd8ca54202bacffa3fb20 *inst/create_glyph_dims.R 59bed213611e8815a355f154a06b095b *man/expect_doppelganger.Rd cb1e46f469cfbbbde29c8b5113e1d789 *man/figures/lifecycle-archived.svg c0d2e5a54f1fa4ff02bf9533079dd1f7 *man/figures/lifecycle-defunct.svg a1b8c987c676c16af790f563f96cbb1f *man/figures/lifecycle-deprecated.svg c3978703d8f40f2679795335715e98f4 *man/figures/lifecycle-experimental.svg 952b59dc07b171b97d5d982924244f61 *man/figures/lifecycle-maturing.svg 27b879bf3677ea76e3991d56ab324081 *man/figures/lifecycle-questioning.svg 53b3f893324260b737b3c46ed2a0e643 *man/figures/lifecycle-stable.svg 1c1fe7a759b86dc6dbcbe7797ab8246c *man/figures/lifecycle-superseded.svg 0088172480d8e872dd974f445f32de1e *man/vdiffr-package.Rd 65e93f80c148d6132db104a446462163 *man/write_svg.Rd c38a387e5025d29da0a42bcec9d6b944 *src/Makevars 5f05efe55b70273f72fc1174e7da90c4 *src/Makevars.ucrt 4d2216b08763d48df028dbfa55699aa5 *src/Makevars.win d5751b7c4a3303df5279e6cb69c894ea *src/SvgStream.h 0d7a89dafb484ce7144c8fcb4ac8ab83 *src/algo-it.h dfe4d9008321756e568be701b0970190 *src/compare.cpp d0ca8ade2ce4c1fdee38d111fde51d8a *src/cpp11.cpp 9f79846d56c16977b3e374c8dcb2b296 *src/devSVG.cpp b41ae8758d99bbccb4bf54e4e448377a *src/engine_version.cpp 81482b01edde1b0929a7c5e1625dcc6a *src/engine_version.h 6c59a5120aac2f217425a11d8e9c4da1 *src/glyph_dims.h e26b8b3bfef1f45f93d853c8136e437e *src/tinyformat.h 27558899d0796abedbb08c5903053ea8 *src/utils.h 3ca7236a09d486462e6c63c161c5d489 *src/vdiffr_types.h 4e4c1d78cb962d55ce689a405648209e *tests/testthat.R 132338ecafa867a5c73b3948c0134125 *tests/testthat/_snaps/bar/expect-doppelganger/variant.svg c26675c7d067b958e28f5cfe228b93d9 *tests/testthat/_snaps/expect-doppelganger/base-doppelganger-with-symbol.svg 060614b15af5241d0144b3e6219e3b17 *tests/testthat/_snaps/expect-doppelganger/grid-doppelganger.svg f987c089e0a5c4fcd553f3db6ca01095 *tests/testthat/_snaps/expect-doppelganger/grob.svg 4b5fbae414d7f94990b7a10e4f5e75ed *tests/testthat/_snaps/expect-doppelganger/myplot.svg 3521d7d1079c4fb4501fecf1565a08fc *tests/testthat/_snaps/expect-doppelganger/myplot2.svg 8133b7c1b8c94c6bd7b16c189d238125 *tests/testthat/_snaps/expect-doppelganger/page-error1.svg 32834f22556013924faae0402b214333 *tests/testthat/_snaps/expect-doppelganger/page-error2.svg 050bb57ffefa289f8b7908e123c88d63 *tests/testthat/_snaps/foo/expect-doppelganger/variant.svg e1f46367c7414a9b10b69e8ebf4d31fb *tests/testthat/_snaps/ggplot/some-other-title.svg 5b7a12ba4c14d86fb64abc36f65db90c *tests/testthat/_snaps/ggplot/some-title.svg e2a5a2957ef0cf0853cf76c35e4f63df *tests/testthat/helper-mock.R 759b31d2ae56cb88b71b693affc65a3d *tests/testthat/helper-vdiffr.R a73b9366c952eb21d2dcae26621814d8 *tests/testthat/mock-pkg/DESCRIPTION c26675c7d067b958e28f5cfe228b93d9 *tests/testthat/mock-pkg/tests/figs/base-doppelganger-with-symbol.svg 51434f553af6f682d9a814ae425d35bf *tests/testthat/mock-pkg/tests/figs/deps.txt e1f46367c7414a9b10b69e8ebf4d31fb *tests/testthat/mock-pkg/tests/figs/ggplot/some-other-title.svg 5b7a12ba4c14d86fb64abc36f65db90c *tests/testthat/mock-pkg/tests/figs/ggplot/some-title.svg 268ec711f0b0621bae088228220e89de *tests/testthat/mock-pkg/tests/figs/myplot.svg 3521d7d1079c4fb4501fecf1565a08fc *tests/testthat/mock-pkg/tests/figs/myplot2.svg 96f958b68a8d91026c7bf8b12e1c632c *tests/testthat/mock-pkg/tests/figs/orphaned1.svg 060614b15af5241d0144b3e6219e3b17 *tests/testthat/mock-pkg/tests/figs/passed-plots/grid-doppelganger.svg 96f958b68a8d91026c7bf8b12e1c632c *tests/testthat/mock-pkg/tests/figs/path2/orphaned2.svg 545a30561a3deb2bf98a758acb2c84a5 *tests/testthat/mock-pkg/tests/testthat.R 268ec711f0b0621bae088228220e89de *tests/testthat/mock-pkg/tests/testthat/_snaps/failed/myplot.svg e1f46367c7414a9b10b69e8ebf4d31fb *tests/testthat/mock-pkg/tests/testthat/_snaps/ggplot/some-other-title.svg 5b7a12ba4c14d86fb64abc36f65db90c *tests/testthat/mock-pkg/tests/testthat/_snaps/ggplot/some-title.svg 3521d7d1079c4fb4501fecf1565a08fc *tests/testthat/mock-pkg/tests/testthat/_snaps/new/alt1.svg 8ade7ca1c0dbec7cd76b6b795e494616 *tests/testthat/mock-pkg/tests/testthat/_snaps/new/alt2.svg 3521d7d1079c4fb4501fecf1565a08fc *tests/testthat/mock-pkg/tests/testthat/_snaps/new/context1.svg 9c7c2a1cdc5211c39be509a025af10ae *tests/testthat/mock-pkg/tests/testthat/_snaps/new/context2.svg 3521d7d1079c4fb4501fecf1565a08fc *tests/testthat/mock-pkg/tests/testthat/_snaps/new/new1.svg fe272221ee9d3e2c903511b9d8333f20 *tests/testthat/mock-pkg/tests/testthat/_snaps/new/new2.svg c26675c7d067b958e28f5cfe228b93d9 *tests/testthat/mock-pkg/tests/testthat/_snaps/passed/base-doppelganger-with-symbol.svg 060614b15af5241d0144b3e6219e3b17 *tests/testthat/mock-pkg/tests/testthat/_snaps/passed/grid-doppelganger.svg 268ec711f0b0621bae088228220e89de *tests/testthat/mock-pkg/tests/testthat/_snaps/passed/myplot.svg 3521d7d1079c4fb4501fecf1565a08fc *tests/testthat/mock-pkg/tests/testthat/_snaps/passed/myplot2.svg 498e1fe9e1b46fa3f16005f7a4b27520 *tests/testthat/mock-pkg/tests/testthat/test-failed.R 56da6d63ae23c277462dc2f823bab100 *tests/testthat/mock-pkg/tests/testthat/test-ggplot.R deeabbddf500eb912c2ebf2689f1bcbc *tests/testthat/mock-pkg/tests/testthat/test-new.R d9c2a1ac3ba36deac838e1819fa0ecb5 *tests/testthat/mock-pkg/tests/testthat/test-passed.R 82e3a18437a86df425c70f1224a8a59f *tests/testthat/test-expect-doppelganger.R a0d7ad2a463cff1aa5d5d08aa35dacdc *tests/testthat/test-ggplot.R fcd3f7a8e96d8875c9051dc710aecdce *tests/testthat/test-log.R 850776639573200b634640574ea7054e *tests/testthat/test-snapshot/_snaps/snapshot/error-resets-snapshots.svg 850776639573200b634640574ea7054e *tests/testthat/test-snapshot/_snaps/snapshot/skip-resets-snapshots.svg 47b250ddfe5f1b3efe09595a533718f3 *tests/testthat/test-snapshot/test-snapshot.R 41b1e7cb2851ce354053145b660e0335 *tools/winlibs.R vdiffr/R/0000755000176200001440000000000014707670764011755 5ustar liggesusersvdiffr/R/svglite/0000755000176200001440000000000014057630265013420 5ustar liggesusersvdiffr/R/svglite/utils.R0000644000176200001440000000541314057630265014706 0ustar liggesusers mini_plot <- function(...) graphics::plot(..., axes = FALSE, xlab = "", ylab = "") plot_dim <- function(dim = c(NA, NA)) { if (any(is.na(dim))) { if (length(grDevices::dev.list()) == 0) { default_dim <- c(10, 8) } else { default_dim <- grDevices::dev.size() } dim[is.na(dim)] <- default_dim[is.na(dim)] dim_f <- prettyNum(dim, digits = 3) message("Saving ", dim_f[1], "\" x ", dim_f[2], "\" image") } dim } vapply_chr <- function(.x, .f, ...) { vapply(.x, .f, character(1), ...) } vapply_lgl <- function(.x, .f, ...) { vapply(.x, .f, logical(1), ...) } lapply_if <- function(.x, .p, .f, ...) { if (!is.logical(.p)) { .p <- vapply_lgl(.x, .p) } .x[.p] <- lapply(.x[.p], .f, ...) .x } keep <- function(.x, .p, ...) { .x[vapply_lgl(.x, .p, ...)] } compact <- function(x) { Filter(length, x) } `%||%` <- function(x, y) { if (is.null(x)) y else x } is_scalar_character <- function(x) { is.character(x) && length(x) == 1 } names2 <- function(x) { names(x) %||% rep("", length(x)) } ilapply <- function(.x, .f, ...) { idx <- names(.x) %||% seq_along(.x) out <- Map(.f, names(.x), .x, ...) names(out) <- names(.x) out } ilapply_if <- function(.x, .p, .f, ...) { if (!is.logical(.p)) { .p <- vapply_lgl(.x, .p) } .x[.p] <- ilapply(.x[.p], .f, ...) .x } set_names <- function(x, nm = x) { stats::setNames(x, nm) } zip <- function(.l) { fields <- set_names(names(.l[[1]])) lapply(fields, function(i) { lapply(.l, .subset2, i) }) } svglite_manual_tests <- new.env() register_manual_test <- function(file) { testthat_dir <- getwd() testfile <- file.path(testthat_dir, file) assign(file, testfile, svglite_manual_tests) } init_manual_tests <- function() { remove(list = names(svglite_manual_tests), envir = svglite_manual_tests) } open_manual_tests <- function() { lapply(names(svglite_manual_tests), function(test) { utils::browseURL(svglite_manual_tests[[test]]) }) } invalid_filename <- function(filename) { if (!is.character(filename) || length(filename) != 1) return(TRUE) # strip double occurences of % stripped_file <- gsub("%{2}", "", filename) # filename is fine if there are no % left if (!grepl("%", stripped_file)) return(FALSE) # remove first allowed pattern, % followed by digits followed by [diouxX] stripped_file <- sub("%[#0 ,+-]*[0-9.]*[diouxX]", "", stripped_file) # matching leftover % indicates multiple patterns or a single incorrect pattern (e.g., %s) return(grepl("%", stripped_file)) } #' Convert an svg file to svgz, overwriting the old file #' @param file the path to the file to convert #' @keywords internal #' @export create_svgz <- function(file) { svg <- readLines(file) out <- gzfile(file, "w") writeLines(svg, out) close(out) invisible(NULL) } vdiffr/R/svglite/SVG.R0000644000176200001440000000677014057630265014214 0ustar liggesusers#' An SVG Graphics Driver #' #' This function produces graphics compliant to the current w3 svg XML #' standard. The driver output is currently NOT specifying a DOCTYPE DTD. #' #' svglite provides two ways of controlling fonts: system fonts #' aliases and user fonts aliases. Supplying a font alias has two #' effects. First it determines the \code{font-family} property of all #' text anchors in the SVG output. Secondly, the font is used to #' determine the dimensions of graphical elements and has thus an #' influence on the overall aspect of the plots. This means that for #' optimal display, the font must be available on both the computer #' used to create the svg, and the computer used to render the #' svg. See the \code{fonts} vignette for more information. #' #' @param filename The file where output will appear. #' @param height,width Height and width in inches. #' @param bg Default background color for the plot (defaults to "white"). #' @param pointsize Default point size. #' @param standalone Produce a standalone svg file? If \code{FALSE}, omits #' xml header and default namespace. #' @param always_valid Should the svgfile be a valid svg file while it is being #' written to? Setting this to `TRUE` will incur a considerable performance #' hit (>50% additional rendering time) so this should only be set to `TRUE` #' if the file is being parsed while it is still being written to. #' @param file Identical to `filename`. Provided for backward compatibility. #' @references \emph{W3C Scalable Vector Graphics (SVG)}: #' \url{http://www.w3.org/Graphics/SVG/} #' @author This driver was written by T Jake Luciani #' \email{jakeluciani@@yahoo.com} 2012: updated by Matthieu Decorde #' \email{matthieu.decorde@@ens-lyon.fr} #' @seealso \code{\link{pictex}}, \code{\link{postscript}}, \code{\link{Devices}} #' #' @examples #' # Save to file #' svglite(tempfile("Rplots.svg")) #' plot(1:11, (-5:5)^2, type = 'b', main = "Simple Example") #' dev.off() #' #' @keywords device #' @useDynLib svglite, .registration = TRUE #' @importFrom systemfonts match_font #' @export svglite <- function(filename = "Rplot%03d.svg", width = 10, height = 8, bg = "white", pointsize = 12, standalone = TRUE, always_valid = FALSE, file) { if (!missing(file)) { filename <- file } if (invalid_filename(filename)) stop("invalid 'file': ", filename) invisible(svglite_(filename, bg, width, height, pointsize, standalone, always_valid)) } #' Access current SVG as a string. #' #' This is a variation on \code{\link{svglite}} that makes it easy to access #' the current value as a string. #' #' See \code{\link{svglite}()} documentation for information about #' specifying fonts. #' #' @return A function with no arguments: call the function to get the #' current value of the string. #' @examples #' s <- svgstring(); s() #' #' plot.new(); s(); #' text(0.5, 0.5, "Hi!"); s() #' dev.off() #' #' s <- svgstring() #' plot(rnorm(5), rnorm(5)) #' s() #' dev.off() #' @inheritParams svglite #' @export svgstring <- function(width = 10, height = 8, bg = "white", pointsize = 12, standalone = TRUE) { env <- new.env(parent = emptyenv()) string_src <- svgstring_(env, width = width, height = height, bg = bg, pointsize = pointsize, standalone = standalone) function() { svgstr <- env$svg_string if(!env$is_closed) { svgstr <- c(svgstr, get_svg_content(string_src)) } structure(svgstr, class = "svg") } } #' @export print.svg <- function(x, ...) cat(x, sep = "\n") vdiffr/R/svglite/inlineSVG.R0000644000176200001440000000445214057630265015406 0ustar liggesusers#' Run plotting code and view svg in RStudio Viewer or web browser. #' #' This is useful primarily for testing. Requires the \code{htmltools} #' package. #' #' @param code Plotting code to execute. #' @param ... Other arguments passed on to \code{\link{svglite}}. #' @keywords internal #' @export #' @examples #' if (interactive() && require("htmltools")) { #' htmlSVG(plot(1:10)) #' htmlSVG(hist(rnorm(100))) #' } htmlSVG <- function(code, ...) { svg <- inlineSVG(code, ...) htmltools::browsable( htmltools::HTML(svg) ) } #' Run plotting code and return svg #' #' This is useful primarily for testing. Requires the \code{xml2} package. #' #' @return A \code{xml2::xml_document} object. #' @inheritParams htmlSVG #' @inheritParams svglite #' @keywords internal #' @export #' @examples #' if (require("xml2")) { #' x <- xmlSVG(plot(1, axes = FALSE)) #' x #' xml_find_all(x, ".//text") #' } xmlSVG <- function(code, ..., standalone = FALSE, height = 7, width = 7) { plot <- inlineSVG(code, ..., standalone = standalone, height = height, width = width ) xml2::read_xml(plot) } #' Run plotting code and open svg in OS/system default svg viewer or editor. #' #' This is useful primarily for testing or post-processing the SVG. #' #' @inheritParams htmlSVG #' @inheritParams svglite #' @keywords internal #' @export #' @examples #' if (interactive()) { #' editSVG(plot(1:10)) #' editSVG(contour(volcano)) #' } editSVG <- function(code, ..., width = NA, height = NA) { dim <- plot_dim(c(width, height)) tmp <- tempfile(fileext = ".svg") svglite(tmp, width = dim[1], height = dim[2], ...) tryCatch(code, finally = grDevices::dev.off() ) system(sprintf("open %s", shQuote(tmp))) } #' Run plotting code and return svg as string #' #' This is useful primarily for testing but can be used as an #' alternative to \code{\link{svgstring}()}. #' #' @inheritParams htmlSVG #' @keywords internal #' @export #' @examples #' stringSVG(plot(1:10)) stringSVG <- function(code, ...) { svg <- inlineSVG(code, ...) structure(svg, class = "svg") } inlineSVG <- function(code, ..., width = NA, height = NA) { dim <- plot_dim(c(width, height)) svg <- svgstring(width = dim[1], height = dim[2], ...) tryCatch(code, finally = grDevices::dev.off() ) out <- svg() class(out) <- NULL out } vdiffr/R/vdiffr-package.R0000644000176200001440000000057614057630265014747 0ustar liggesusers#' @import rlang #' @importFrom glue glue #' @useDynLib vdiffr, .registration = TRUE #' @keywords internal "_PACKAGE" SVG_ENGINE_VER <- "2.0" svg_engine_ver <- function() { as.numeric_version(SVG_ENGINE_VER) } .onLoad <- function(lib, pkg) { set_engine_version(SVG_ENGINE_VER) } ## usethis namespace: start #' @importFrom lifecycle deprecated ## usethis namespace: end NULL vdiffr/R/cpp11.R0000644000176200001440000000120514705673354013016 0ustar liggesusers# Generated by cpp11: do not edit by hand compare_files <- function(expected, test) { .Call(`_vdiffr_compare_files`, expected, test) } svglite_ <- function(file, bg, width, height, pointsize, standalone, always_valid) { .Call(`_vdiffr_svglite_`, file, bg, width, height, pointsize, standalone, always_valid) } svgstring_ <- function(env, bg, width, height, pointsize, standalone) { .Call(`_vdiffr_svgstring_`, env, bg, width, height, pointsize, standalone) } get_svg_content <- function(p) { .Call(`_vdiffr_get_svg_content`, p) } set_engine_version <- function(version) { invisible(.Call(`_vdiffr_set_engine_version`, version)) } vdiffr/R/svg.R0000644000176200001440000000262714057632077012677 0ustar liggesusersmake_testcase_file <- function(fig_name) { file <- tempfile(fig_name, fileext = ".svg") structure(file, class = "vdiffr_testcase") } #' Default SVG writer #' #' This is the default SVG writer for vdiffr test cases. It uses #' embedded versions of [svglite](https://svglite.r-lib.org), #' [harfbuzz](https://harfbuzz.github.io/), and the Liberation and #' Symbola fonts in order to create deterministic SVGs. #' #' @param plot A plot object to convert to SVG. Can be a ggplot2 object, #' a [recorded plot][grDevices::recordPlot], or any object with a #' [print()][base::print] method. #' @param file The file to write the SVG to. #' @param title An optional title for the test case. #' #' @export write_svg <- function(plot, file, title = "") { svglite(file) on.exit(grDevices::dev.off()) print_plot(plot, title) } print_plot <- function(p, title = "") { UseMethod("print_plot") } #' @export print_plot.default <- function(p, title = "") { print(p) } #' @export print_plot.ggplot <- function(p, title = "") { if (title != "" && !"title" %in% names(p$labels)) { p <- p + ggplot2::ggtitle(title) } if (!length(p$theme)) { p <- p + ggplot2::theme_test() } print(p) } #' @export print_plot.grob <- function(p, title) { grid::grid.draw(p) } #' @export print_plot.recordedplot <- function(p, title) { grDevices::replayPlot(p) } #' @export print_plot.function <- function(p, title) { p() } vdiffr/R/utils.R0000644000176200001440000000324314707722571013234 0ustar liggesuserspackage_version <- function(pkg) { as.character(utils::packageVersion(pkg)) } cat_line <- function(..., trailing = TRUE, file = "") { cat(paste_line(..., trailing = trailing), file = file) } paste_line <- function(..., trailing = FALSE) { lines <- paste(chr(...), collapse = "\n") if (trailing) { lines <- paste0(lines, "\n") } lines } push_log <- function(name, old_path, new_path) { log_path <- Sys.getenv("VDIFFR_LOG_PATH") # If no envvar is set, check if we are running under R CMD check. In # that case, always push a log file. if (!nzchar(log_path)) { if (!is_checking_remotely()) { return(invisible(FALSE)) } log_path <- testthat::test_path("..", "vdiffr.Rout.fail") } log_exists <- file.exists(log_path) file <- file(log_path, "a") on.exit(close(file)) if (!log_exists) { cat_line( file = file, "Environment:", vdiffr_info(), "" ) } diff_lines <- diff_lines(name, old_path, new_path) cat_line(file = file, "", !!!diff_lines, "") } is_checking_remotely <- function() { nzchar(Sys.getenv("CI")) || !nzchar(Sys.getenv("NOT_CRAN")) } diff_lines <- function(name, before_path, after_path) { before <- readLines(before_path) after <- readLines(after_path) diff <- diffobj::diffChr( before, after, format = "raw", # For reproducibility disp.width = 80 ) lines <- as.character(diff) paste_line( glue("Failed doppelganger: {name} ({before_path})"), "", !!!lines ) } vdiffr_info <- function() { glue( "- vdiffr-svg-engine: { SVG_ENGINE_VER } - vdiffr: { utils::packageVersion('vdiffr') }" ) } vdiffr/R/expect-doppelganger.R0000644000176200001440000001617414707670764016046 0ustar liggesusers#' Does a figure look like its expected output? #' #' @description #' #' `expect_doppelganger()` is a testthat expectation for graphical #' plots. It generates SVG snapshots that you can review graphically #' with [testthat::snapshot_review()]. You will find more information #' about snapshotting in the [testthat snapshots #' vignette](https://testthat.r-lib.org/articles/snapshotting.html). #' #' Note that `expect_doppelgagner()` requires R version 4.1.0. If run #' on an earlier version of R, it emits a `testthat::skip()` so that you #' can still run other checks on old versions of R. #' #' @param title A brief description of what is being tested in the #' figure. For instance: "Points and lines overlap". #' #' If a ggplot2 figure doesn't have a title already, `title` is #' applied to the figure with `ggtitle()`. #' #' The title is also used as file name for storing SVG (in a #' sanitzed form, with special characters converted to `"-"`). #' @param fig A figure to test. This can be a ggplot object, a #' recordedplot, or more generally any object with a `print` method. #' #' If you need to test a plot with non-printable objects (e.g. base #' plots), `fig` can be a function that generates and prints the #' plot, e.g. `fig = function() plot(1:3)`. #' @param path,... `r lifecycle::badge('deprecated')`. #' @param writer A function that takes the plot, a target SVG file, #' and an optional plot title. It should transform the plot to SVG #' in a deterministic way and write it to the target file. See #' [write_svg()] (the default) for an example. #' @param cran If `FALSE` (the default), mismatched snapshots only #' cause a failure when you run tests locally or in your CI (Github #' Actions or any platform that sets the `CI` environment variable). #' If `TRUE`, failures may also occur on CRAN machines. #' #' Failures are disabled on CRAN by default because testing the #' appearance of a figure is inherently fragile. Changes in the R #' graphics engine or in ggplot2 may cause subtle differences in the #' aspect of a plot, such as a slightly smaller or larger margin. #' These changes will cause spurious failures because you need to #' update your snapshots to reflect the upstream changes. #' #' It would be distracting for both you and the CRAN maintainers if #' such changes systematically caused failures on CRAN. This is why #' snapshot expectations do not fail on CRAN by default and should #' be treated as a monitoring tool that allows you to quickly check #' how the appearance of your figures changes over time, and to #' manually assess whether changes reflect actual problems in your #' package. #' #' Internally, this argument is passed to #' [testthat::expect_snapshot_file()]. #' #' @inheritParams testthat::expect_snapshot_file #' #' @section Debugging: #' It is sometimes difficult to understand the cause of a failure. #' This usually indicates that the plot is not created #' deterministically. Potential culprits are: #' #' * Some of the plot components depend on random variation. Try #' setting a seed. #' #' * The plot depends on some system library. For instance sf plots #' depend on libraries like GEOS and GDAL. It might not be possible #' to test these plots with vdiffr. #' #' To help you understand the causes of a failure, vdiffr #' automatically logs the SVG diff of all failures when run under R #' CMD check. The log is located in `tests/vdiffr.Rout.fail` and #' should be displayed on Travis. #' #' You can also set the `VDIFFR_LOG_PATH` environment variable with #' `Sys.setenv()` to unconditionally (also interactively) log failures #' in the file pointed by the variable. #' #' @examples #' if (FALSE) { # Not run #' #' library("ggplot2") #' #' test_that("plots have known output", { #' disp_hist_base <- function() hist(mtcars$disp) #' expect_doppelganger("disp-histogram-base", disp_hist_base) #' #' disp_hist_ggplot <- ggplot(mtcars, aes(disp)) + geom_histogram() #' expect_doppelganger("disp-histogram-ggplot", disp_hist_ggplot) #' }) #' #' } #' @export expect_doppelganger <- function(title, fig, path = deprecated(), ..., writer = write_svg, cran = FALSE, variant = NULL) { testthat::local_edition(3) fig_name <- str_standardise(title) file <- paste0(fig_name, ".svg") # Announce snapshot file before touching `fig` in case evaluation # causes an error. This allows testthat to restore the files # (see r-lib/testthat#1393). testthat::announce_snapshot_file(name = file) testcase <- make_testcase_file(fig_name) writer(fig, testcase, title) if (!missing(...)) { lifecycle::deprecate_soft( "1.0.0", "vdiffr::expect_doppelganger(... = )", ) } if (lifecycle::is_present(path)) { lifecycle::deprecate_soft( "1.0.0", "vdiffr::expect_doppelganger(path = )", ) } if (is_graphics_engine_stale()) { testthat::skip(paste_line( "The R graphics engine is too old.", "Please update to R 4.1.0 and regenerate the vdiffr snapshots." )) } withCallingHandlers( testthat::expect_snapshot_file( testcase, name = file, cran = cran, variant = variant, compare = testthat::compare_file_text ), expectation_failure = function(cnd) { if (is_snapshot_stale(title, testcase)) { warn(paste_line( "SVG snapshot generated under a different vdiffr version.", "i" = "Please update your snapshots." )) } if (!is_null(snapshotter <- get_snapshotter())) { path_old <- snapshot_path(snapshotter, file) path_new <- snapshot_path(snapshotter, paste0(fig_name, ".new.svg")) if (all(file.exists(path_old, path_new))) { push_log(fig_name, path_old, path_new) } } } ) } # From testthat get_snapshotter <- function() { x <- getOption("testthat.snapshotter") if (is.null(x)) { return() } if (!x$is_active()) { return() } x } snapshot_path <- function(snapshotter, file) { file.path(snapshotter$snap_dir, snapshotter$file, file) } is_graphics_engine_stale <- function() { getRversion() < "4.1.0" } str_standardise <- function(s, sep = "-") { stopifnot(is_scalar_character(s)) s <- gsub("[^a-z0-9]", sep, tolower(s)) s <- gsub(paste0(sep, sep, "+"), sep, s) s <- gsub(paste0("^", sep, "|", sep, "$"), "", s) s } is_snapshot_stale <- function(title, testcase) { if (is_null(snapshotter <- get_snapshotter())) { return(FALSE) } file <- paste0(str_standardise(title), ".svg") path <- snapshot_path(snapshotter, file) if (!file.exists(path)) { return(FALSE) } lines <- readLines(path) match <- regexec( "data-engine-version='([0-9.]+)'", lines ) match <- Filter(length, regmatches(lines, match)) # Old vdiffr snapshot that doesn't embed a version if (!length(match)) { return(TRUE) } if (length(match) > 1) { abort("Found multiple vdiffr engine versions in SVG snapshot.") } snapshot_version <- match[[1]][[2]] svg_engine_ver() != snapshot_version } vdiffr/R/embed-svglite.R0000644000176200001440000000025514057630265014617 0ustar liggesuserssvglite_path <- function(...) { file.path("R", "svglite", ...) } for (file in list.files(svglite_path(), pattern = "*.R")) { source(svglite_path(file), local = TRUE) } vdiffr/LICENSE.note0000644000176200001440000000611114057630265013512 0ustar liggesusersvdiffr as a whole is released under MIT. It includes: - the jQuery library under the Apache 2.0 licence, - the js-imagediff library under the MIT licence, - the TwoFace library under the MIT licence, - the daff library under the MIT license, - the diff2html library under the MIT license, all of which are compatible with the MIT. js-imagediff ------------ Copyright (c) 2011 Carl Sutherland, Humble Software Development Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. TwoFace ------- Copyright (c) 2016 David Hong Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. jQuery ------ Copyright (c) 2016 jQuery Foundation and other contributors, https://jquery.org/ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.vdiffr/src/0000755000176200001440000000000014707722706012335 5ustar liggesusersvdiffr/src/devSVG.cpp0000644000176200001440000006503214705672254014205 0ustar liggesusers// (C) 2002 T Jake Luciani: SVG device, based on PicTex device // (C) 2008 Tony Plate: Line type support from RSVGTipsDevice package // (C) 2012 Matthieu Decorde: UTF-8 support, XML reserved characters and XML header // (C) 2015 RStudio (Hadley Wickham): modernisation & refactoring // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA extern "C" { #include } #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "SvgStream.h" #include "utils.h" #include "tinyformat.h" #include "engine_version.h" #include "glyph_dims.h" typedef std::shared_ptr SvgStreamPtr; // SVG device metadata class SVGDesc { public: SvgStreamPtr stream; int pageno; bool is_inited; std::string clipid; // ID for the clip path double clipx0, clipx1, clipy0, clipy1; // Save the previous clip path to avoid duplication bool standalone; bool always_valid; const std::string file; SVGDesc(SvgStreamPtr stream_, bool standalone_, const std::string& file_, bool always_valid_): stream(stream_), pageno(0), is_inited(false), clipx0(0), clipx1(0), clipy0(0), clipy1(0), standalone(standalone_), always_valid(always_valid_), file(file_) { } void nextFile() { stream->finish(false); if (stream->is_file_stream()) { SvgStreamPtr newStream(new SvgStreamFile(file, pageno + 1, always_valid)); stream = newStream; } clipid.clear(); } }; inline bool is_black(int col) { return (R_RED(col) == 0) && (R_GREEN(col) == 0) && (R_BLUE(col) == 0) && (R_ALPHA(col) == 255); } inline bool is_filled(int col) { return R_ALPHA(col) != 0; } inline bool is_bold(int face) { return face == 2 || face == 4; } inline bool is_italic(int face) { return face == 3 || face == 4; } inline bool is_bolditalic(int face) { return face == 4; } inline bool is_symbol(int face) { return face == 5; } const static char encode_lookup[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; const static char pad_character = '='; inline std::string base64_encode(const std::uint8_t* buffer, size_t size) { std::string encoded_string; encoded_string.reserve(((size/3) + (size % 3 > 0)) * 4); std::uint32_t temp{}; int index = 0; for (size_t idx = 0; idx < size/3; idx++) { temp = buffer[index++] << 16; //Convert to big endian temp += buffer[index++] << 8; temp += buffer[index++]; encoded_string.append(1, encode_lookup[(temp & 0x00FC0000) >> 18]); encoded_string.append(1, encode_lookup[(temp & 0x0003F000) >> 12]); encoded_string.append(1, encode_lookup[(temp & 0x00000FC0) >> 6 ]); encoded_string.append(1, encode_lookup[(temp & 0x0000003F) ]); } switch (size % 3) { case 1: temp = buffer[index++] << 16; //Convert to big endian encoded_string.append(1, encode_lookup[(temp & 0x00FC0000) >> 18]); encoded_string.append(1, encode_lookup[(temp & 0x0003F000) >> 12]); encoded_string.append(2, pad_character); break; case 2: temp = buffer[index++] << 16; //Convert to big endian temp += buffer[index++] << 8; encoded_string.append(1, encode_lookup[(temp & 0x00FC0000) >> 18]); encoded_string.append(1, encode_lookup[(temp & 0x0003F000) >> 12]); encoded_string.append(1, encode_lookup[(temp & 0x00000FC0) >> 6 ]); encoded_string.append(1, pad_character); break; } return encoded_string; } static void png_memory_write(png_structp png_ptr, png_bytep data, png_size_t length) { std::vector *p = (std::vector*)png_get_io_ptr(png_ptr); p->insert(p->end(), data, data + length); } inline std::string raster_to_string(unsigned int *raster, int w, int h, double width, double height, bool interpolate) { h = h < 0 ? -h : h; w = w < 0 ? -w : w; bool resize = false; int w_fac = 1, h_fac = 1; std::vector raster_resize; if (!interpolate && double(w) < width) { resize = true; w_fac = std::ceil(width / w); } if (!interpolate && double(h) < height) { resize = true; h_fac = std::ceil(height / h); } if (resize) { int w_new = w * w_fac; int h_new = h * h_fac; raster_resize.reserve(w_new * h_new); for (int i = 0; i < h; ++i) { for (int j = 0; j < w; ++j) { unsigned int val = raster[i * w + j]; for (int wrep = 0; wrep < w_fac; ++wrep) { raster_resize.push_back(val); } } for (int hrep = 1; hrep < h_fac; ++hrep) { raster_resize.insert(raster_resize.end(), raster_resize.end() - w_new, raster_resize.end()); } } raster = raster_resize.data(); w = w_new; h = h_new; } png_structp png = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png) { return ""; } png_infop info = png_create_info_struct(png); if (!info) { png_destroy_write_struct(&png, (png_infopp)NULL); return ""; } if (setjmp(png_jmpbuf(png))) { png_destroy_write_struct(&png, &info); return ""; } png_set_IHDR( png, info, w, h, 8, PNG_COLOR_TYPE_RGBA, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT ); std::vector rows(h); for (int y = 0; y < h; ++y) { rows[y] = (uint8_t*)raster + y * w * 4; } std::vector buffer; png_set_rows(png, info, &rows[0]); png_set_write_fn(png, &buffer, png_memory_write, NULL); png_write_png(png, info, PNG_TRANSFORM_IDENTITY, NULL); png_destroy_write_struct(&png, &info); return base64_encode(buffer.data(), buffer.size()); } inline void write_escaped(SvgStreamPtr stream, const char* text) { for(const char* cur = text; *cur != '\0'; ++cur) { switch(*cur) { case '&': (*stream) << "&"; break; case '<': (*stream) << "<"; break; case '>': (*stream) << ">"; break; default: (*stream) << *cur; } } } inline void write_attr_dbl(SvgStreamPtr stream, const char* attr, double value) { (*stream) << ' ' << attr << "='" << value << '\''; } inline void write_attr_str(SvgStreamPtr stream, const char* attr, const char* value) { (*stream) << ' ' << attr << "='" << value << '\''; } // Writing clip path attribute inline void write_attr_clip(SvgStreamPtr stream, std::string clipid) { if (clipid.empty()) return; (*stream) << " clip-path='url(#cp" << clipid << ")'"; } // Beginning of writing style attributes inline void write_style_begin(SvgStreamPtr stream) { (*stream) << " style='"; } // End of writing style attributes inline void write_style_end(SvgStreamPtr stream) { (*stream) << "'"; } // Writing style attributes related to colors inline void write_style_col(SvgStreamPtr stream, const char* attr, int col, bool first = false) { int alpha = R_ALPHA(col); if(!first) (*stream) << ' '; if (alpha == 0) { (*stream) << attr << ": none;"; return; } else { (*stream) << tfm::format("%s: #%02X%02X%02X;", attr, R_RED(col), R_GREEN(col), R_BLUE(col)); if (alpha != 255) (*stream) << ' ' << attr << "-opacity: " << alpha / 255.0 << ';'; } } // Writing style attributes whose values are double type inline void write_style_dbl(SvgStreamPtr stream, const char* attr, double value, bool first = false) { if(!first) (*stream) << ' '; (*stream) << attr << ": " << value << ';'; } // Writing style attributes whose values are int type inline void write_style_int(SvgStreamPtr stream, const char* attr, int value, bool first = false) { if(!first) (*stream) << ' '; (*stream) << attr << ": " << value << ';'; } inline void write_style_fontsize(SvgStreamPtr stream, double value, bool first = false) { if(!first) (*stream) << ' '; // Firefox requires that we provide a unit (even though px is // redundant here) (*stream) << "font-size: " << value << "px;"; } // Writing style attributes whose values are strings inline void write_style_str(SvgStreamPtr stream, const char* attr, const char* value, bool first = false) { if(!first) (*stream) << ' '; (*stream) << attr << ": " << value << ';'; } inline double scale_lty(int lty, double lwd) { // Don't rescale if lwd < 1 // https://github.com/wch/r-source/blob/master/src/library/grDevices/src/cairo/cairoFns.c#L134 return ((lwd > 1) ? lwd : 1) * (lty & 15); } // Writing style attributes related to line types inline void write_style_linetype(SvgStreamPtr stream, const pGEcontext gc, bool first = false) { int lty = gc->lty; double lwd = gc->lwd; // 1 lwd = 1/96", but units in rest of document are 1/72" write_style_dbl(stream, "stroke-width", lwd / 96.0 * 72, first); // Default is "stroke: #000000;" as declared in \n"; (*stream) << "\n"; (*stream) << "fill)) write_style_col(stream, "fill", gc->fill); else write_style_col(stream, "fill", dd->startfill); write_style_end(stream); (*stream) << "/>\n"; // Initialise clipping - make sure the stored clipping is bogus to force // svg_clip to do its thing svgd->clipx0 = R_PosInf; svgd->clipy0 = R_NegInf; svgd->clipx1 = R_NegInf; svgd->clipy1 = R_PosInf; svgd->is_inited = true; svg_clip(0, dd->right, dd->bottom, 0, dd); svgd->stream->flush(); svgd->pageno++; } void svg_close(pDevDesc dd) { SVGDesc *svgd = (SVGDesc*) dd->deviceSpecific; if (svgd->is_inited) { svgd->stream->finish(true); } delete(svgd); } void svg_line(double x1, double y1, double x2, double y2, const pGEcontext gc, pDevDesc dd) { SVGDesc *svgd = (SVGDesc*) dd->deviceSpecific; if (!svgd->is_inited) { return; } SvgStreamPtr stream = svgd->stream; (*stream) << "\n"; stream->flush(); } void svg_poly(int n, double *x, double *y, int filled, const pGEcontext gc, pDevDesc dd, const char* node_name) { SVGDesc *svgd = (SVGDesc*) dd->deviceSpecific; if (!svgd->is_inited) { return; } SvgStreamPtr stream = svgd->stream; (*stream) << "<" << node_name << " points='"; for (int i = 0; i < n; i++) { (*stream) << x[i] << ',' << y[i] << ' '; } stream->put('\''); write_style_begin(stream); write_style_linetype(stream, gc, true); if (filled) write_style_col(stream, "fill", gc->fill); write_style_end(stream); (*stream) << " />\n"; stream->flush(); } void svg_polyline(int n, double *x, double *y, const pGEcontext gc, pDevDesc dd) { svg_poly(n, x, y, 0, gc, dd, "polyline"); } void svg_polygon(int n, double *x, double *y, const pGEcontext gc, pDevDesc dd) { svg_poly(n, x, y, 1, gc, dd, "polygon"); } void svg_path(double *x, double *y, int npoly, int *nper, Rboolean winding, const pGEcontext gc, pDevDesc dd) { SVGDesc *svgd = (SVGDesc*) dd->deviceSpecific; if (!svgd->is_inited) { return; } SvgStreamPtr stream = svgd->stream; // Create path data (*stream) << "put('Z'); } // Finish path data stream->put('\''); write_style_begin(stream); // Specify fill rule write_style_str(stream, "fill-rule", winding ? "nonzero" : "evenodd", true); if (is_filled(gc->fill)) write_style_col(stream, "fill", gc->fill); write_style_linetype(stream, gc); write_style_end(stream); (*stream) << " />\n"; stream->flush(); } double svg_strwidth(const char *str, const pGEcontext gc, pDevDesc dd) { static UTF_UCS converter; double width = 0.0; int n_chars = 0; uint32_t* chars = converter.convert(str, n_chars); std::unordered_map::const_iterator match; for (int i = 0; i < n_chars; ++i) { if (gc->fontface == 5) { // Symbol match = SYMBOLA_DIM.find(chars[i]); if (match == SYMBOLA_DIM.end()) { match = SYMBOLA_DIM.find(1); } } else { match = LIBERATION_DIM.find(chars[i]); if (match == LIBERATION_DIM.end()) { match = LIBERATION_DIM.find(1); } } width += match->second.width; } double mod = gc->ps * gc->cex / 12; return width * mod; } void svg_rect(double x0, double y0, double x1, double y1, const pGEcontext gc, pDevDesc dd) { SVGDesc *svgd = (SVGDesc*) dd->deviceSpecific; if (!svgd->is_inited) { return; } SvgStreamPtr stream = svgd->stream; // x and y give top-left position (*stream) << "fill)) write_style_col(stream, "fill", gc->fill); write_style_end(stream); (*stream) << " />\n"; stream->flush(); } void svg_circle(double x, double y, double r, const pGEcontext gc, pDevDesc dd) { SVGDesc *svgd = (SVGDesc*) dd->deviceSpecific; if (!svgd->is_inited) { return; } SvgStreamPtr stream = svgd->stream; (*stream) << "fill)) write_style_col(stream, "fill", gc->fill); write_style_end(stream); (*stream) << " />\n"; stream->flush(); } void svg_text(double x, double y, const char *str, double rot, double hadj, const pGEcontext gc, pDevDesc dd) { SVGDesc *svgd = (SVGDesc*) dd->deviceSpecific; if (!svgd->is_inited) { return; } SvgStreamPtr stream = svgd->stream; (*stream) << "cex * gc->ps; if (hadj == 0.5) { write_attr_str(stream, "text-anchor", "middle"); } else if (hadj == 1) { write_attr_str(stream, "text-anchor", "end"); } write_style_begin(stream); write_style_fontsize(stream, fontsize, true); if (is_bold(gc->fontface)) { write_style_str(stream, "font-weight", "bold"); } if (is_italic(gc->fontface)) write_style_str(stream, "font-style", "italic"); if (!is_black(gc->col)) write_style_col(stream, "fill", gc->col); write_style_str(stream, "font-family", "sans"); write_style_end(stream); double width = svg_strwidth(str, gc, dd); (*stream) << " textLength='" << width << "px'"; (*stream) << " lengthAdjust='spacingAndGlyphs'"; stream->put('>'); write_escaped(stream, str); (*stream) << ""; stream->put('\n'); stream->flush(); } void svg_size(double *left, double *right, double *bottom, double *top, pDevDesc dd) { *left = dd->left; *right = dd->right; *bottom = dd->bottom; *top = dd->top; } void svg_raster(unsigned int *raster, int w, int h, double x, double y, double width, double height, double rot, Rboolean interpolate, const pGEcontext gc, pDevDesc dd) { SVGDesc *svgd = (SVGDesc*) dd->deviceSpecific; if (!svgd->is_inited) { return; } SvgStreamPtr stream = svgd->stream; if (height < 0) height = -height; std::string base64_str = raster_to_string(raster, w, h, width, height, interpolate); (*stream) << ""; stream->put('\n'); stream->flush(); } SEXP svg_set_pattern(SEXP pattern, pDevDesc dd) { return R_NilValue; } void svg_release_pattern(SEXP ref, pDevDesc dd) {} SEXP svg_set_clip_path(SEXP path, SEXP ref, pDevDesc dd) { return R_NilValue; } void svg_release_clip_path(SEXP ref, pDevDesc dd) {} SEXP svg_set_mask(SEXP path, SEXP ref, pDevDesc dd) { return R_NilValue; } void svg_release_mask(SEXP ref, pDevDesc dd) {} pDevDesc svg_driver_new(SvgStreamPtr stream, int bg, double width, double height, double pointsize, bool standalone, const std::string& file, bool always_valid) { pDevDesc dd = (DevDesc*) calloc(1, sizeof(DevDesc)); if (dd == NULL) return dd; dd->startfill = bg; dd->startcol = R_RGB(0, 0, 0); dd->startps = pointsize; dd->startlty = 0; dd->startfont = 1; dd->startgamma = 1; // Callbacks dd->activate = NULL; dd->deactivate = NULL; dd->close = svg_close; dd->clip = svg_clip; dd->size = svg_size; dd->newPage = svg_new_page; dd->line = svg_line; dd->text = svg_text; dd->strWidth = svg_strwidth; dd->rect = svg_rect; dd->circle = svg_circle; dd->polygon = svg_polygon; dd->polyline = svg_polyline; dd->path = svg_path; dd->mode = NULL; dd->metricInfo = svg_metric_info; dd->cap = NULL; dd->raster = svg_raster; #if R_GE_version >= 13 dd->setPattern = svg_set_pattern; dd->releasePattern = svg_release_pattern; dd->setClipPath = svg_set_clip_path; dd->releaseClipPath = svg_release_clip_path; dd->setMask = svg_set_mask; dd->releaseMask = svg_release_mask; #endif // UTF-8 support dd->wantSymbolUTF8 = (Rboolean) 1; dd->hasTextUTF8 = (Rboolean) 1; dd->textUTF8 = svg_text; dd->strWidthUTF8 = svg_strwidth; // Screen Dimensions in pts dd->left = 0; dd->top = 0; dd->right = width * 72; dd->bottom = height * 72; // Magic constants copied from other graphics devices // nominal character sizes in pts dd->cra[0] = 0.9 * pointsize; dd->cra[1] = 1.2 * pointsize; // character alignment offsets dd->xCharOffset = 0.4900; dd->yCharOffset = 0.3333; dd->yLineBias = 0.2; // inches per pt dd->ipr[0] = 1.0 / 72.0; dd->ipr[1] = 1.0 / 72.0; // Capabilities dd->canClip = TRUE; dd->canHAdj = 1; dd->canChangeGamma = FALSE; dd->displayListOn = FALSE; dd->haveTransparency = 2; dd->haveTransparentBg = 2; #if R_GE_version >= 13 dd->deviceVersion = R_GE_definitions; #endif dd->deviceSpecific = new SVGDesc(stream, standalone, file, always_valid); return dd; } void makeDevice(SvgStreamPtr stream, std::string bg_, double width, double height, double pointsize, bool standalone, const std::string& file, bool always_valid) { int bg = R_GE_str2col(bg_.c_str()); R_GE_checkVersionOrDie(R_GE_version); R_CheckDeviceAvailable(); BEGIN_SUSPEND_INTERRUPTS { pDevDesc dev = svg_driver_new(stream, bg, width, height, pointsize, standalone, file, always_valid); if (dev == NULL) cpp11::stop("Failed to start SVG device"); pGEDevDesc dd = GEcreateDevDesc(dev); GEaddDevice2(dd, "devSVG_vdiffr"); GEinitDisplayList(dd); } END_SUSPEND_INTERRUPTS; } [[cpp11::register]] bool svglite_(std::string file, std::string bg, double width, double height, double pointsize, bool standalone, bool always_valid) { SvgStreamPtr stream(new SvgStreamFile(file, 1, always_valid)); makeDevice(stream, bg, width, height, pointsize, standalone, file, always_valid); return true; } [[cpp11::register]] cpp11::external_pointer svgstring_(cpp11::environment env, std::string bg, double width, double height, double pointsize, bool standalone) { SvgStreamPtr stream(new SvgStreamString(env)); makeDevice(stream, bg, width, height, pointsize, standalone, "", true); SvgStreamString* strstream = static_cast(stream.get()); return {strstream->string_src(), false}; } [[cpp11::register]] std::string get_svg_content(cpp11::external_pointer p) { p->flush(); std::string svgstr = p->str(); // If the current SVG is empty, we also make the string empty // Otherwise append "" to make it a valid SVG if(!svgstr.empty()) { svgstr.append("\n"); } return svgstr; } vdiffr/src/glyph_dims.h0000644000176200001440000067642614057630265014666 0ustar liggesusers// Generated by inst/create_glyph_dims.R — Do not edit by hand #pragma once #include struct Dim { double width; double ascent; double descent; }; const std::unordered_map LIBERATION_DIM = { {1, {9.0000, 8.2584, -0.0000}}, {32, {3.3336, 0.0000, -0.0000}}, {33, {3.3336, 8.2584, -0.0000}}, {34, {4.2624, 8.2584, -5.6592}}, {35, {6.6744, 8.2080, -0.0000}}, {36, {6.6744, 8.8848, 0.8352}}, {37, {10.6704, 8.3304, 0.0720}}, {38, {8.0064, 8.3016, 0.1152}}, {39, {2.2896, 8.2584, -5.6592}}, {40, {3.9960, 8.6976, 2.4840}}, {41, {3.9960, 8.6976, 2.4840}}, {42, {4.6728, 8.2584, -4.0464}}, {43, {7.0128, 6.9336, -1.0512}}, {44, {3.3336, 1.2816, 1.5408}}, {45, {3.9960, 3.6576, -2.7144}}, {46, {3.3336, 1.2816, -0.0000}}, {47, {3.3336, 8.6976, 0.1152}}, {48, {6.6744, 8.3808, 0.1152}}, {49, {6.6744, 8.2584, -0.0000}}, {50, {6.6744, 8.3808, -0.0000}}, {51, {6.6744, 8.3808, 0.1152}}, {52, {6.6744, 8.2584, -0.0000}}, {53, {6.6744, 8.2584, 0.1152}}, {54, {6.6744, 8.3808, 0.1152}}, {55, {6.6744, 8.2584, -0.0000}}, {56, {6.6744, 8.3808, 0.1152}}, {57, {6.6744, 8.3808, 0.1152}}, {58, {3.3336, 6.3432, -0.0000}}, {59, {3.3336, 6.3432, 1.5408}}, {60, {7.0128, 6.9984, -0.9000}}, {61, {7.0128, 5.8824, -2.0088}}, {62, {7.0128, 6.9984, -0.9000}}, {63, {6.6744, 8.3808, -0.0000}}, {64, {12.1824, 8.6976, 1.6560}}, {65, {8.0064, 8.2584, -0.0000}}, {66, {8.0064, 8.2584, -0.0000}}, {67, {8.6688, 8.3808, 0.1152}}, {68, {8.6688, 8.2584, -0.0000}}, {69, {8.0064, 8.2584, -0.0000}}, {70, {7.3296, 8.2584, -0.0000}}, {71, {9.3384, 8.3808, 0.1152}}, {72, {8.6688, 8.2584, -0.0000}}, {73, {3.3336, 8.2584, -0.0000}}, {74, {6.0048, 8.2584, 0.1152}}, {75, {8.0064, 8.2584, -0.0000}}, {76, {6.6744, 8.2584, -0.0000}}, {77, {10.0008, 8.2584, -0.0000}}, {78, {8.6688, 8.2584, -0.0000}}, {79, {9.3384, 8.3808, 0.1152}}, {80, {8.0064, 8.2584, -0.0000}}, {81, {9.3384, 8.3808, 2.2680}}, {82, {8.6688, 8.2584, -0.0000}}, {83, {8.0064, 8.3808, 0.1152}}, {84, {7.3296, 8.2584, -0.0000}}, {85, {8.6688, 8.2584, 0.1152}}, {86, {8.0064, 8.2584, -0.0000}}, {87, {11.3256, 8.2584, -0.0000}}, {88, {8.0064, 8.2584, -0.0000}}, {89, {8.0064, 8.2584, -0.0000}}, {90, {7.3296, 8.2584, -0.0000}}, {91, {3.3336, 8.6976, 2.4912}}, {92, {3.3336, 8.6976, 0.1152}}, {93, {3.3336, 8.6976, 2.4912}}, {94, {5.6304, 8.2584, -3.9456}}, {95, {6.6744, -1.6200, 2.3832}}, {96, {3.9960, 8.8416, -7.0416}}, {97, {6.6744, 6.4584, 0.1152}}, {98, {6.6744, 8.6976, 0.1152}}, {99, {6.0048, 6.4584, 0.1152}}, {100, {6.6744, 8.6976, 0.1152}}, {101, {6.6744, 6.4584, 0.1152}}, {102, {3.3336, 8.6832, -0.0000}}, {103, {6.6744, 6.4440, 2.4912}}, {104, {6.6744, 8.6976, -0.0000}}, {105, {2.6640, 8.6976, -0.0000}}, {106, {2.6640, 8.6976, 2.4912}}, {107, {6.0048, 8.6976, -0.0000}}, {108, {2.6640, 8.6976, -0.0000}}, {109, {10.0008, 6.4584, -0.0000}}, {110, {6.6744, 6.4584, -0.0000}}, {111, {6.6744, 6.4584, 0.1152}}, {112, {6.6744, 6.4512, 2.4912}}, {113, {6.6744, 6.4584, 2.4912}}, {114, {3.9960, 6.4584, -0.0000}}, {115, {6.0048, 6.4440, 0.1152}}, {116, {3.3336, 7.7616, 0.0936}}, {117, {6.6744, 6.3432, 0.1152}}, {118, {6.0048, 6.3432, -0.0000}}, {119, {8.6688, 6.3432, -0.0000}}, {120, {6.0048, 6.3432, -0.0000}}, {121, {6.0048, 6.3432, 2.4912}}, {122, {6.0048, 6.3432, -0.0000}}, {123, {4.0104, 8.6976, 2.4912}}, {124, {3.1176, 8.6976, 2.5416}}, {125, {4.0104, 8.6976, 2.4912}}, {126, {7.0128, 4.7304, -3.2400}}, {160, {3.3336, 0.0000, -0.0000}}, {161, {3.9960, 6.3432, 1.9152}}, {162, {6.6744, 8.2584, 0.1800}}, {163, {6.6744, 8.3808, -0.0000}}, {164, {6.6744, 6.6816, -1.3176}}, {165, {6.6744, 8.2584, -0.0000}}, {166, {3.1176, 8.6976, 2.5416}}, {167, {6.6744, 8.6976, 1.0080}}, {168, {3.9960, 8.2224, -7.1424}}, {169, {8.8416, 8.3808, 0.0936}}, {170, {4.4424, 8.3952, -3.8160}}, {171, {6.6744, 5.5080, -0.8280}}, {172, {7.0128, 4.4208, -1.0584}}, {173, {3.9960, 3.6576, -2.7144}}, {174, {8.8416, 8.3808, 0.0936}}, {175, {6.6312, 9.0648, -8.5104}}, {176, {4.8024, 8.3808, -5.0400}}, {177, {6.5880, 7.1496, -0.0000}}, {178, {3.9960, 8.3304, -3.2976}}, {179, {3.9960, 8.3304, -3.2328}}, {180, {3.9960, 8.8416, -7.0416}}, {181, {6.9120, 6.3432, 2.4912}}, {182, {6.4440, 8.2584, 1.5480}}, {183, {3.9960, 3.9024, -2.6064}}, {184, {3.9960, 0.0000, 2.5416}}, {185, {3.9960, 8.2584, -3.2976}}, {186, {4.3848, 8.3952, -3.8160}}, {187, {6.6744, 5.5080, -0.8280}}, {188, {10.0080, 8.2584, -0.0000}}, {189, {10.0080, 8.2584, -0.0000}}, {190, {10.0080, 8.3304, -0.0000}}, {191, {7.3296, 6.3432, 2.0376}}, {192, {8.0064, 10.4040, -0.0000}}, {193, {8.0064, 10.4040, -0.0000}}, {194, {8.0064, 10.4904, -0.0000}}, {195, {8.0064, 10.5336, -0.0000}}, {196, {8.0064, 10.0440, -0.0000}}, {197, {8.0064, 10.4760, -0.0000}}, {198, {12.0024, 8.2584, -0.0000}}, {199, {8.6688, 8.3808, 2.5416}}, {200, {8.0064, 10.4040, -0.0000}}, {201, {8.0064, 10.4040, -0.0000}}, {202, {8.0064, 10.4904, -0.0000}}, {203, {8.0064, 10.0440, -0.0000}}, {204, {3.3336, 10.4040, -0.0000}}, {205, {3.3336, 10.4040, -0.0000}}, {206, {3.3336, 10.4904, -0.0000}}, {207, {3.3336, 10.0440, -0.0000}}, {208, {8.6688, 8.2584, -0.0000}}, {209, {8.6688, 10.5336, -0.0000}}, {210, {9.3384, 10.4040, 0.1152}}, {211, {9.3384, 10.4040, 0.1152}}, {212, {9.3384, 10.4904, 0.1152}}, {213, {9.3384, 10.5336, 0.1152}}, {214, {9.3384, 10.0440, 0.1152}}, {215, {7.0128, 6.6744, -1.3104}}, {216, {9.3384, 8.5968, 0.3096}}, {217, {8.6688, 10.4040, 0.1152}}, {218, {8.6688, 10.4040, 0.1152}}, {219, {8.6688, 10.4904, 0.1152}}, {220, {8.6688, 10.0440, 0.1152}}, {221, {8.0064, 10.4040, -0.0000}}, {222, {8.0064, 8.2584, -0.0000}}, {223, {7.3296, 8.6976, 0.1152}}, {224, {6.6744, 8.8416, 0.1152}}, {225, {6.6744, 8.8416, 0.1152}}, {226, {6.6744, 8.7408, 0.1152}}, {227, {6.6744, 8.6112, 0.1152}}, {228, {6.6744, 8.2224, 0.1152}}, {229, {6.6744, 9.6768, 0.1152}}, {230, {10.6704, 6.4584, 0.1152}}, {231, {6.0048, 6.4584, 2.5416}}, {232, {6.6744, 8.8416, 0.1152}}, {233, {6.6744, 8.8416, 0.1152}}, {234, {6.6744, 8.7408, 0.1152}}, {235, {6.6744, 8.2224, 0.1152}}, {236, {3.3336, 8.8416, -0.0000}}, {237, {3.3336, 8.8416, -0.0000}}, {238, {3.3336, 8.7408, -0.0000}}, {239, {3.3336, 8.2224, -0.0000}}, {240, {6.6744, 8.8704, 0.1152}}, {241, {6.6744, 8.6112, -0.0000}}, {242, {6.6744, 8.8416, 0.1152}}, {243, {6.6744, 8.8416, 0.1152}}, {244, {6.6744, 8.7408, 0.1152}}, {245, {6.6744, 8.6112, 0.1152}}, {246, {6.6744, 8.2224, 0.1152}}, {247, {6.5880, 6.6888, -1.3104}}, {248, {7.3296, 6.5448, 0.2232}}, {249, {6.6744, 8.8416, 0.1152}}, {250, {6.6744, 8.8416, 0.1152}}, {251, {6.6744, 8.7408, 0.1152}}, {252, {6.6744, 8.2224, 0.1152}}, {253, {6.0048, 8.8416, 2.4912}}, {254, {6.6744, 8.6976, 2.4912}}, {255, {6.0048, 8.2224, 2.4912}}, {256, {8.0064, 9.9216, -0.0000}}, {257, {6.6744, 7.9920, 0.1152}}, {258, {8.0064, 10.4256, -0.0000}}, {259, {6.6744, 8.8560, 0.1152}}, {260, {8.0064, 8.2584, 2.4408}}, {261, {6.6744, 6.4584, 2.5056}}, {262, {8.6688, 10.4040, 0.1152}}, {263, {6.0048, 8.8416, 0.1152}}, {264, {8.6688, 10.4904, 0.1152}}, {265, {6.0048, 8.7408, 0.1152}}, {266, {8.6688, 10.4112, 0.1152}}, {267, {6.0048, 8.6976, 0.1152}}, {268, {8.6688, 10.4904, 0.1152}}, {269, {6.0048, 8.7408, 0.1152}}, {270, {8.6688, 10.4904, -0.0000}}, {271, {7.3800, 8.6976, 0.1152}}, {272, {8.6688, 8.2584, -0.0000}}, {273, {6.6744, 8.6976, 0.1152}}, {274, {8.0064, 9.9216, -0.0000}}, {275, {6.6744, 7.9920, 0.1152}}, {276, {8.0064, 10.4256, -0.0000}}, {277, {6.6744, 8.8560, 0.1152}}, {278, {8.0064, 10.4112, -0.0000}}, {279, {6.6744, 8.6976, 0.1152}}, {280, {8.0064, 8.2584, 2.5056}}, {281, {6.6744, 6.4584, 2.5056}}, {282, {8.0064, 10.4904, -0.0000}}, {283, {6.6744, 8.7408, 0.1152}}, {284, {9.3384, 10.4904, 0.1152}}, {285, {6.6744, 8.7408, 2.4912}}, {286, {9.3384, 10.4256, 0.1152}}, {287, {6.6744, 8.8560, 2.4912}}, {288, {9.3384, 10.4112, 0.1152}}, {289, {6.6744, 8.6976, 2.4912}}, {290, {9.3384, 8.3808, 2.5416}}, {291, {6.6744, 9.1944, 2.4912}}, {292, {8.6688, 10.4904, -0.0000}}, {293, {6.6744, 10.8648, -0.0000}}, {294, {8.6688, 8.2584, -0.0000}}, {295, {6.6744, 8.6976, -0.0000}}, {296, {3.3336, 10.5336, -0.0000}}, {297, {3.3336, 8.6112, -0.0000}}, {298, {3.3336, 9.9216, -0.0000}}, {299, {3.3336, 7.9920, -0.0000}}, {300, {3.3336, 10.4256, -0.0000}}, {301, {3.3336, 8.8560, -0.0000}}, {302, {3.3336, 8.2584, 2.5056}}, {303, {2.6640, 8.6976, 2.5056}}, {304, {3.3336, 10.4112, -0.0000}}, {305, {3.3336, 6.3432, -0.0000}}, {306, {8.8200, 8.2584, 0.1152}}, {307, {5.3280, 8.6976, 2.4912}}, {308, {6.0048, 10.4904, 0.1152}}, {309, {2.6640, 8.7408, 2.4912}}, {310, {8.0064, 8.2584, 2.5416}}, {311, {6.0048, 8.6976, 2.5416}}, {312, {6.0048, 6.3432, -0.0000}}, {313, {6.6744, 10.4040, -0.0000}}, {314, {2.6640, 10.8576, -0.0000}}, {315, {6.6744, 8.2584, 2.5416}}, {316, {2.6640, 8.6976, 2.5416}}, {317, {6.6744, 8.2584, -0.0000}}, {318, {3.4992, 8.6976, -0.0000}}, {319, {6.6744, 8.2584, -0.0000}}, {320, {4.0104, 8.6976, -0.0000}}, {321, {6.6744, 8.2584, -0.0000}}, {322, {2.6640, 8.6976, -0.0000}}, {323, {8.6688, 10.4040, -0.0000}}, {324, {6.6744, 8.8416, -0.0000}}, {325, {8.6688, 8.2584, 2.5416}}, {326, {6.6744, 6.4584, 2.5416}}, {327, {8.6688, 10.4904, -0.0000}}, {328, {6.6744, 8.7408, -0.0000}}, {329, {7.2504, 8.2584, -0.0000}}, {330, {8.6760, 8.3736, 0.1152}}, {331, {6.6744, 6.4584, 2.4912}}, {332, {9.3384, 9.9216, 0.1152}}, {333, {6.6744, 7.9920, 0.1152}}, {334, {9.3384, 10.4256, 0.1152}}, {335, {6.6744, 8.8560, 0.1152}}, {336, {9.3384, 10.4112, 0.1152}}, {337, {6.6744, 8.8416, 0.1152}}, {338, {12.0024, 8.3232, 0.0576}}, {339, {11.3256, 6.4584, 0.1152}}, {340, {8.6688, 10.4040, -0.0000}}, {341, {3.9960, 8.8416, -0.0000}}, {342, {8.6688, 8.2584, 2.5416}}, {343, {3.9960, 6.4584, 2.5416}}, {344, {8.6688, 10.4904, -0.0000}}, {345, {3.9960, 8.7408, -0.0000}}, {346, {8.0064, 10.7712, 0.1152}}, {347, {6.0048, 8.8416, 0.1152}}, {348, {8.0064, 10.4904, 0.1152}}, {349, {6.0048, 8.7408, 0.1152}}, {350, {8.0064, 8.3808, 2.5416}}, {351, {6.0048, 6.4440, 2.5416}}, {352, {8.0064, 10.4904, 0.1152}}, {353, {6.0048, 8.7408, 0.1152}}, {354, {7.3296, 8.2584, 2.5416}}, {355, {3.3336, 7.7616, 2.5416}}, {356, {7.3296, 10.4904, -0.0000}}, {357, {4.5000, 8.6976, 0.0936}}, {358, {7.3296, 8.2584, -0.0000}}, {359, {3.3336, 7.7616, 0.0936}}, {360, {8.6688, 10.5336, 0.1152}}, {361, {6.6744, 8.6112, 0.1152}}, {362, {8.6688, 9.9216, 0.1152}}, {363, {6.6744, 7.9920, 0.1152}}, {364, {8.6688, 10.4256, 0.1152}}, {365, {6.6744, 8.8560, 0.1152}}, {366, {8.6688, 10.8648, 0.1152}}, {367, {6.6744, 9.6768, 0.1152}}, {368, {8.6688, 10.4112, 0.1152}}, {369, {6.6744, 8.8416, 0.1152}}, {370, {8.6688, 8.2584, 2.5056}}, {371, {6.6744, 6.3432, 2.5056}}, {372, {11.3256, 10.4904, -0.0000}}, {373, {8.6688, 8.7408, -0.0000}}, {374, {8.0064, 10.4904, -0.0000}}, {375, {6.0048, 8.7408, 2.4912}}, {376, {8.0064, 10.0440, -0.0000}}, {377, {7.3296, 10.4040, -0.0000}}, {378, {6.0048, 8.8416, -0.0000}}, {379, {7.3296, 10.4112, -0.0000}}, {380, {6.0048, 8.6976, -0.0000}}, {381, {7.3296, 10.4904, -0.0000}}, {382, {6.0048, 8.7408, -0.0000}}, {383, {2.6640, 8.6832, -0.0000}}, {384, {6.6744, 8.6976, 0.1152}}, {385, {9.1008, 8.2584, -0.0000}}, {386, {7.8768, 8.2584, -0.0000}}, {387, {6.6744, 8.6976, 0.1152}}, {388, {7.8768, 8.2584, -0.0000}}, {389, {6.6744, 8.6976, 0.1152}}, {390, {8.6688, 8.3808, 0.1152}}, {391, {8.6688, 9.4680, 0.1152}}, {392, {6.0048, 7.5168, 0.1152}}, {393, {8.6688, 8.2584, -0.0000}}, {394, {9.7200, 8.2584, -0.0000}}, {395, {7.8768, 8.2584, -0.0000}}, {396, {6.6744, 8.6976, 0.1152}}, {397, {6.6816, 6.4584, 2.4912}}, {398, {8.0064, 8.2584, -0.0000}}, {399, {9.0288, 8.3808, 0.1152}}, {400, {7.2504, 8.3736, 0.1152}}, {401, {7.3296, 8.2584, 2.4912}}, {402, {6.6744, 8.5248, 2.5416}}, {403, {9.3384, 9.5688, 0.1152}}, {404, {7.4880, 8.2584, 2.4912}}, {405, {10.5696, 8.6976, 0.1152}}, {406, {2.6640, 8.6976, -0.0000}}, {407, {3.3336, 8.6976, -0.0000}}, {408, {8.0064, 8.3520, -0.0000}}, {409, {6.0048, 8.7768, -0.0000}}, {410, {2.6640, 8.6976, -0.0000}}, {411, {6.0048, 8.6976, -0.0000}}, {412, {10.6920, 8.2584, 0.1152}}, {413, {8.6688, 8.2584, 2.4912}}, {414, {6.6744, 6.4584, 2.4984}}, {415, {9.3384, 8.3808, 0.1152}}, {416, {10.2888, 8.3808, 0.1152}}, {417, {7.8696, 6.4584, 0.1152}}, {418, {10.4184, 8.3808, 2.4840}}, {419, {8.0136, 6.4584, 2.4912}}, {420, {9.0576, 8.2584, -0.0000}}, {421, {6.6744, 8.7768, 2.4912}}, {422, {8.0064, 8.2584, 1.8720}}, {423, {8.0064, 8.3808, 0.1152}}, {424, {6.0048, 6.4440, 0.1152}}, {425, {7.4160, 8.2584, -0.0000}}, {426, {4.5648, 8.7480, 2.4912}}, {427, {3.3336, 7.7616, 2.4912}}, {428, {7.3296, 8.2584, -0.0000}}, {429, {3.3336, 8.7768, 0.0936}}, {430, {7.3296, 8.2584, 2.4912}}, {431, {10.2528, 8.2584, 0.1152}}, {432, {8.0352, 6.3432, 0.1152}}, {433, {8.9712, 8.2584, 0.1224}}, {434, {8.6688, 8.3304, 0.1152}}, {435, {9.2736, 8.3304, -0.0000}}, {436, {6.0048, 8.7408, 2.4912}}, {437, {7.3296, 8.2584, -0.0000}}, {438, {6.0048, 6.3432, -0.0000}}, {439, {7.3296, 8.2584, 2.4984}}, {440, {7.3296, 8.2584, 2.4984}}, {441, {6.5376, 6.3504, 2.5056}}, {442, {6.5376, 6.3432, 2.4984}}, {443, {6.6744, 8.3808, -0.0000}}, {444, {6.6744, 8.2584, 0.1152}}, {445, {5.5008, 6.3432, 0.1152}}, {446, {5.8464, 8.8344, 0.1152}}, {447, {6.6744, 6.4512, 2.5056}}, {448, {3.1176, 8.6976, -0.0000}}, {449, {4.9608, 8.6976, -0.0000}}, {450, {7.0128, 8.6976, -0.0000}}, {451, {3.3336, 8.2584, -0.0000}}, {452, {15.9984, 10.8288, -0.0000}}, {453, {14.6664, 8.7408, -0.0000}}, {454, {12.5856, 8.7408, 0.1152}}, {455, {12.7440, 8.2584, 0.1152}}, {456, {10.0008, 8.6976, 2.4912}}, {457, {5.4144, 8.6976, 2.4912}}, {458, {14.6664, 8.2584, 0.1152}}, {459, {11.3328, 8.6976, 2.4912}}, {460, {9.2520, 8.6976, 2.4912}}, {461, {8.0064, 10.4904, -0.0000}}, {462, {6.6744, 8.7408, 0.1152}}, {463, {3.3336, 10.4904, -0.0000}}, {464, {2.6640, 8.7408, -0.0000}}, {465, {9.3384, 10.4904, 0.1152}}, {466, {6.6744, 8.7408, 0.1152}}, {467, {8.6688, 10.4904, 0.1152}}, {468, {6.6744, 8.7408, 0.1152}}, {469, {8.6688, 10.7568, 0.1152}}, {470, {6.6744, 9.6264, 0.1152}}, {471, {8.6688, 10.7568, 0.1152}}, {472, {6.6744, 10.4832, 0.1152}}, {473, {8.6688, 10.7568, 0.1152}}, {474, {6.6744, 10.3824, 0.1152}}, {475, {8.6688, 10.7568, 0.1152}}, {476, {6.6744, 10.4832, 0.1152}}, {477, {6.6744, 6.4584, 0.1152}}, {478, {8.0064, 10.7568, -0.0000}}, {479, {6.6744, 9.6264, 0.1152}}, {480, {8.0064, 10.7568, -0.0000}}, {481, {6.6744, 9.6264, 0.1152}}, {482, {12.0024, 9.9216, -0.0000}}, {483, {10.6704, 7.9920, 0.1152}}, {484, {9.3384, 8.3808, 0.1152}}, {485, {6.6744, 6.4440, 2.4912}}, {486, {9.3384, 10.4904, 0.1152}}, {487, {6.6744, 8.7408, 2.4912}}, {488, {8.0064, 10.4904, -0.0000}}, {489, {6.0048, 10.6056, -0.0000}}, {490, {9.3384, 8.3808, 2.5056}}, {491, {6.6744, 6.4584, 2.5056}}, {492, {9.3384, 9.9216, 2.5056}}, {493, {6.6744, 7.9920, 2.5056}}, {494, {7.3296, 10.4904, 2.4984}}, {495, {6.5376, 8.7408, 2.4912}}, {496, {2.6640, 8.7408, 2.4912}}, {497, {15.9984, 8.2584, -0.0000}}, {498, {14.6664, 8.2584, -0.0000}}, {499, {12.5856, 8.6976, 0.1152}}, {500, {9.3384, 10.4040, 0.1152}}, {501, {6.6744, 8.8416, 2.4912}}, {502, {12.4128, 8.2584, 0.1152}}, {503, {7.4160, 8.3808, 2.4912}}, {504, {8.6688, 10.4040, -0.0000}}, {505, {6.6744, 8.8416, -0.0000}}, {506, {8.0064, 10.8648, -0.0000}}, {507, {6.6744, 10.8720, 0.1152}}, {508, {12.0024, 10.4040, -0.0000}}, {509, {10.6704, 8.8416, 0.1152}}, {510, {9.3384, 10.4040, 0.3096}}, {511, {7.3296, 8.8416, 0.2232}}, {512, {8.0064, 10.9656, -0.0000}}, {513, {6.6744, 8.8416, 0.1152}}, {514, {8.0064, 10.7208, -0.0000}}, {515, {6.6744, 8.5968, 0.1152}}, {516, {8.0064, 10.9656, -0.0000}}, {517, {6.6744, 8.8416, 0.1152}}, {518, {8.0064, 10.7208, -0.0000}}, {519, {6.6744, 8.5968, 0.1152}}, {520, {3.3336, 10.9656, -0.0000}}, {521, {3.3336, 8.8416, -0.0000}}, {522, {3.3336, 10.7208, -0.0000}}, {523, {3.3336, 8.5968, -0.0000}}, {524, {9.3384, 10.9656, 0.1152}}, {525, {6.6744, 8.8416, 0.1152}}, {526, {9.3384, 10.7208, 0.1152}}, {527, {6.6744, 8.5968, 0.1152}}, {528, {8.6688, 10.9656, -0.0000}}, {529, {3.9960, 8.8416, -0.0000}}, {530, {8.6688, 10.7208, -0.0000}}, {531, {3.9960, 8.5968, -0.0000}}, {532, {8.6688, 10.9656, 0.1152}}, {533, {6.6744, 8.8416, 0.1152}}, {534, {8.6688, 10.7208, 0.1152}}, {535, {6.6744, 8.5968, 0.1152}}, {536, {8.0064, 8.3808, 2.5416}}, {537, {6.0048, 6.4440, 2.5416}}, {538, {7.3296, 8.2584, 2.5416}}, {539, {3.3336, 7.7616, 2.5416}}, {540, {6.5376, 8.3880, 2.5056}}, {541, {5.2416, 6.4584, 2.4984}}, {542, {8.6688, 10.4904, -0.0000}}, {543, {6.6744, 10.6056, -0.0000}}, {544, {8.4744, 8.3736, 2.4912}}, {545, {8.1792, 8.6976, 2.4984}}, {546, {7.2576, 8.3808, 0.1152}}, {547, {6.7896, 8.7336, 0.1152}}, {548, {7.3296, 8.2584, 1.4976}}, {549, {6.0048, 6.3432, 1.4328}}, {550, {8.0064, 10.4112, -0.0000}}, {551, {6.6744, 8.6976, 0.1152}}, {552, {8.0064, 8.2584, 2.5416}}, {553, {6.6744, 6.4584, 2.5416}}, {554, {9.3384, 10.7568, 0.1152}}, {555, {6.6744, 9.6264, 0.1152}}, {556, {9.3384, 10.7568, 0.1152}}, {557, {6.6744, 9.9216, 0.1152}}, {558, {9.3384, 10.4112, 0.1152}}, {559, {6.6744, 8.6976, 0.1152}}, {560, {9.3384, 10.7568, 0.1152}}, {561, {6.6744, 9.6264, 0.1152}}, {562, {8.0064, 9.9216, -0.0000}}, {563, {6.0048, 7.9920, 2.4912}}, {564, {4.1904, 8.6976, 2.4984}}, {565, {8.2152, 6.4584, 2.4984}}, {566, {4.4064, 7.7616, 0.1224}}, {567, {2.6640, 6.3432, 2.4912}}, {568, {10.6416, 8.6976, 0.1152}}, {569, {10.6416, 6.4440, 2.4912}}, {570, {8.0064, 8.8704, 0.6264}}, {571, {8.6688, 8.8704, 0.6264}}, {572, {6.0048, 8.6976, 2.4912}}, {573, {6.6744, 8.2584, -0.0000}}, {574, {7.3296, 8.8704, 0.6264}}, {575, {6.0048, 6.4440, 2.4912}}, {576, {6.0048, 6.3432, 2.4984}}, {577, {6.9696, 8.3808, -0.0000}}, {578, {5.4360, 6.4584, -0.0000}}, {579, {8.0064, 8.2584, -0.0000}}, {580, {8.6688, 8.2584, 0.1152}}, {581, {8.0208, 8.2584, -0.0000}}, {582, {8.0064, 9.1080, 1.3104}}, {583, {6.6744, 8.6976, 2.4840}}, {584, {6.0048, 8.2584, 0.1152}}, {585, {2.6640, 8.6976, 2.4912}}, {586, {8.8488, 8.3808, 2.4912}}, {587, {6.6744, 6.4584, 2.4912}}, {588, {8.6688, 8.2584, -0.0000}}, {589, {3.9960, 6.4584, -0.0000}}, {590, {8.0064, 8.2584, -0.0000}}, {591, {6.0048, 6.3432, 2.4912}}, {592, {6.6744, 6.4584, 0.1152}}, {593, {6.6744, 6.4584, 0.1152}}, {594, {6.6744, 6.4584, 0.1152}}, {595, {6.6744, 8.7768, 0.1152}}, {596, {6.0048, 6.4584, 0.1152}}, {597, {6.0048, 6.4584, 0.5400}}, {598, {6.6744, 8.6976, 2.4912}}, {599, {6.6744, 8.7768, 0.1152}}, {600, {6.6744, 6.4584, 0.1152}}, {601, {6.6744, 6.4584, 0.1152}}, {602, {8.8704, 6.4584, 0.1152}}, {603, {5.5008, 6.4584, 0.1080}}, {604, {5.5008, 6.4584, 0.1080}}, {605, {7.5744, 6.4584, 0.1080}}, {606, {6.0912, 6.4584, 0.1080}}, {607, {3.3336, 6.3432, 2.4984}}, {608, {6.6744, 8.7768, 2.4912}}, {609, {6.6744, 6.4440, 2.4912}}, {610, {6.7032, 6.4584, 0.1152}}, {611, {6.0120, 6.3432, 2.4912}}, {612, {7.4016, 6.3792, 0.1440}}, {613, {6.6744, 6.3504, 2.3472}}, {614, {6.6744, 8.7768, -0.0000}}, {615, {6.6744, 8.7768, 2.4912}}, {616, {2.6640, 8.6976, -0.0000}}, {617, {2.6640, 6.3432, 0.1008}}, {618, {4.2696, 6.3432, -0.0000}}, {619, {3.9240, 8.6976, -0.0000}}, {620, {3.6432, 8.5896, -0.0000}}, {621, {2.6640, 8.6976, 2.4912}}, {622, {6.8616, 8.6976, 2.4912}}, {623, {10.0008, 6.3432, 0.1152}}, {624, {10.0008, 6.3432, 2.4912}}, {625, {10.0008, 6.4584, 2.4912}}, {626, {6.6744, 6.4584, 2.4912}}, {627, {6.6744, 6.4584, 2.4912}}, {628, {6.6312, 6.3432, -0.0000}}, {629, {6.6744, 6.4584, 0.1152}}, {630, {9.4896, 6.4584, 0.1152}}, {631, {9.3744, 6.4584, 0.1152}}, {632, {6.6024, 8.6976, 2.4912}}, {633, {3.9960, 6.3432, 0.1152}}, {634, {3.9960, 8.6904, 0.1152}}, {635, {3.9960, 6.3432, 2.4912}}, {636, {3.9960, 6.4584, 2.4912}}, {637, {3.9960, 6.4584, 2.4912}}, {638, {3.9960, 6.4584, -0.0000}}, {639, {3.9960, 6.4584, 2.4912}}, {640, {6.5016, 6.3432, -0.0000}}, {641, {6.5016, 6.3432, -0.0000}}, {642, {6.0048, 6.4440, 2.4912}}, {643, {2.6640, 8.6976, 2.4912}}, {644, {3.1176, 8.6976, 2.4912}}, {645, {2.6640, 6.4584, 2.4912}}, {646, {4.1904, 8.6976, 2.4984}}, {647, {3.3336, 8.3736, 0.0072}}, {648, {3.3336, 7.7616, 2.4912}}, {649, {6.6744, 6.3432, 0.1152}}, {650, {6.8184, 6.3432, 0.1152}}, {651, {6.5664, 6.3432, 0.1152}}, {652, {6.0048, 6.3432, -0.0000}}, {653, {8.6688, 6.3432, -0.0000}}, {654, {6.0048, 8.8344, -0.0000}}, {655, {6.2352, 6.3432, -0.0000}}, {656, {6.0048, 6.3432, 2.4912}}, {657, {6.4944, 6.3432, 1.0440}}, {658, {6.5376, 6.3432, 2.4912}}, {659, {6.5376, 6.3504, 2.4984}}, {660, {6.0048, 8.6976, -0.0000}}, {661, {6.0048, 8.6976, -0.0000}}, {662, {6.0048, 8.6976, 0.1152}}, {663, {6.0048, 6.4584, 2.4984}}, {664, {9.3384, 8.3808, 0.1152}}, {665, {6.3792, 6.3432, -0.0000}}, {666, {6.0912, 6.4584, 0.1080}}, {667, {6.7032, 7.5168, 0.1152}}, {668, {6.6312, 6.3432, -0.0000}}, {669, {4.7736, 8.6976, 2.4912}}, {670, {6.0048, 6.3432, 2.3544}}, {671, {4.8456, 6.3432, -0.0000}}, {672, {6.6744, 8.7768, 2.4912}}, {673, {6.0048, 8.6976, -0.0000}}, {674, {6.0048, 8.6976, -0.0000}}, {675, {11.5776, 8.6976, 0.1152}}, {676, {10.8792, 8.6976, 2.4912}}, {677, {12.0672, 8.6976, 1.0440}}, {678, {8.5536, 7.7616, -0.0000}}, {679, {5.1480, 8.6976, 2.4912}}, {680, {8.6256, 7.7616, 0.1152}}, {681, {9.1656, 8.6832, 2.4912}}, {682, {7.9344, 8.6976, 0.1152}}, {683, {7.5888, 8.6976, -0.0000}}, {684, {5.8248, 8.6976, -0.0072}}, {685, {6.3288, 8.6976, -0.0000}}, {686, {8.2440, 6.4440, 2.4984}}, {687, {8.2440, 6.4440, 2.4912}}, {688, {4.6008, 9.0000, -2.8728}}, {689, {4.6008, 9.0576, -2.8728}}, {690, {1.9080, 9.0000, -1.1160}}, {691, {2.8800, 7.4232, -2.8728}}, {692, {2.8800, 7.3440, -2.7864}}, {693, {2.8800, 7.3440, -1.1088}}, {694, {4.3704, 7.3440, -2.8728}}, {695, {5.7744, 7.3440, -2.8800}}, {696, {3.8520, 7.3440, -1.1160}}, {697, {2.2896, 8.2584, -5.6592}}, {698, {4.2624, 8.2584, -5.6592}}, {699, {2.6640, 8.6976, -6.0192}}, {700, {2.6640, 8.6976, -6.0192}}, {701, {2.6640, 8.6976, -6.0192}}, {702, {3.9960, 8.9280, -6.7032}}, {703, {3.9960, 8.9280, -6.7032}}, {704, {4.1832, 8.6976, -2.8728}}, {705, {4.1832, 8.6976, -2.8728}}, {706, {7.0128, 6.9984, -0.9000}}, {707, {7.0128, 6.9984, -0.9000}}, {708, {7.0128, 7.0776, -1.3896}}, {709, {7.0128, 7.0776, -1.3896}}, {710, {3.9960, 8.7408, -7.0416}}, {711, {3.9960, 8.7408, -7.0416}}, {712, {3.9960, 8.6976, -6.7536}}, {713, {3.9960, 7.9920, -7.2432}}, {714, {3.9960, 8.6976, -7.0632}}, {715, {3.9960, 8.6976, -7.0632}}, {716, {3.9960, -0.4320, 2.3760}}, {717, {3.9960, -0.8712, 1.6128}}, {718, {3.9960, -0.7416, 2.3760}}, {719, {3.9960, -0.7416, 2.3760}}, {720, {3.3336, 6.3432, -0.0000}}, {721, {3.3336, 6.3432, -5.0832}}, {722, {3.9960, 2.7648, -0.5400}}, {723, {3.9960, 2.7648, -0.5400}}, {724, {3.9960, 2.9880, -1.0152}}, {725, {3.9960, 2.9880, -1.0152}}, {726, {3.9960, 3.0528, -0.9576}}, {727, {3.9960, 2.4408, -1.6128}}, {728, {3.9960, 8.8560, -7.0416}}, {729, {3.9960, 8.6976, -7.6896}}, {730, {3.9960, 9.6768, -6.8472}}, {731, {3.9960, 0.0000, 2.5056}}, {732, {3.9960, 8.6112, -7.0416}}, {733, {3.9960, 8.8416, -7.0416}}, {734, {3.9960, 4.5720, -2.0952}}, {735, {3.9960, 8.7264, -4.7664}}, {736, {3.8664, 7.3440, -1.1160}}, {737, {1.8864, 9.0000, -2.8728}}, {738, {4.0824, 7.4232, -2.8008}}, {739, {3.9384, 7.3440, -2.8728}}, {740, {4.1832, 8.6976, -2.8728}}, {741, {4.5936, 8.2584, -0.0000}}, {742, {4.5936, 8.2584, -0.0000}}, {743, {4.5936, 8.2584, -0.0000}}, {744, {4.5936, 8.2584, -0.0000}}, {745, {4.5936, 8.2584, -0.0000}}, {746, {3.9960, 5.1552, -0.0000}}, {747, {3.9960, 5.1552, -0.0000}}, {748, {3.9960, -0.7848, 2.4840}}, {749, {3.9960, 9.1728, -7.2648}}, {750, {3.9960, 8.6976, -6.0192}}, {751, {3.9960, -0.4248, 2.0736}}, {752, {3.9960, -0.4248, 2.0736}}, {753, {3.9960, -0.0360, 2.4984}}, {754, {3.9960, -0.0360, 2.4984}}, {755, {3.9960, -0.2592, 2.4912}}, {756, {3.9960, 3.3912, -1.5912}}, {757, {3.9960, 3.3912, -1.5912}}, {758, {3.9960, 3.3912, -1.5912}}, {759, {3.9960, -0.7992, 2.3688}}, {760, {3.3336, 8.6976, -2.3544}}, {761, {3.9960, 8.6976, -6.7248}}, {762, {3.9960, 8.6976, -6.7248}}, {763, {3.9960, -0.5184, 2.4912}}, {764, {3.9960, -0.5184, 2.4912}}, {765, {4.7736, -0.5184, 2.4912}}, {766, {4.7736, -0.5184, 2.4840}}, {767, {3.9960, 0.9144, 2.4912}}, {768, {0.0000, 10.7064, -9.0720}}, {769, {0.0000, 10.7064, -9.0720}}, {770, {0.0000, 8.7408, -7.0416}}, {771, {0.0000, 8.6112, -7.0416}}, {772, {0.0000, 7.9920, -7.2432}}, {773, {0.0000, 9.9720, -9.2088}}, {774, {0.0000, 8.5968, -7.0704}}, {775, {0.0000, 8.2584, -7.2504}}, {776, {0.0000, 8.2224, -7.1424}}, {777, {0.0000, 10.7496, -8.6760}}, {778, {0.0000, 9.5760, -7.3440}}, {779, {0.0000, 8.8416, -7.0416}}, {780, {0.0000, 8.7408, -7.0416}}, {781, {0.0000, 8.6976, -6.7536}}, {782, {0.0000, 8.6976, -6.7536}}, {783, {0.0000, 8.8416, -7.0416}}, {784, {0.0000, 9.5904, -7.0488}}, {785, {0.0000, 8.5968, -7.0704}}, {786, {0.0000, 8.6976, -5.8752}}, {787, {0.0000, 8.6976, -5.8752}}, {788, {0.0000, 8.6976, -5.8752}}, {789, {0.0000, 8.6976, -5.8752}}, {790, {0.0000, -0.7488, 2.3832}}, {791, {0.0000, -0.7416, 2.3760}}, {792, {0.0000, -0.4392, 2.4408}}, {793, {0.0000, -0.4392, 2.4408}}, {794, {0.0000, 9.7992, -7.1568}}, {795, {0.0000, 8.6976, -6.0192}}, {796, {0.0000, -0.2664, 2.4912}}, {797, {0.0000, -0.5184, 2.4912}}, {798, {0.0000, -0.5184, 2.4912}}, {799, {0.0000, -0.3960, 2.4912}}, {800, {0.0000, -0.9216, 1.7496}}, {801, {0.0000, 0.9072, 2.4912}}, {802, {0.0000, 0.9072, 2.4912}}, {803, {0.0000, -0.8136, 1.8216}}, {804, {0.0000, -1.4112, 2.4912}}, {805, {0.0000, -0.2592, 2.4912}}, {806, {0.0000, -0.5760, 2.6712}}, {807, {0.0000, 0.0000, 2.5992}}, {808, {0.0000, 0.0000, 2.5056}}, {809, {0.0000, -0.4392, 2.4912}}, {810, {0.0000, -0.5184, 2.4912}}, {811, {0.0000, -0.7704, 2.1600}}, {812, {0.0000, -0.9648, 2.4912}}, {813, {0.0000, -0.9648, 2.4912}}, {814, {0.0000, -0.8064, 2.3328}}, {815, {0.0000, -0.8064, 2.3328}}, {816, {0.0000, -0.9216, 2.4912}}, {817, {0.0000, -1.1520, 1.9008}}, {818, {0.0000, -1.6200, 2.3832}}, {819, {0.0000, -0.5832, 2.4912}}, {820, {0.0000, 2.9808, -1.4112}}, {821, {0.0000, 2.4480, -1.6056}}, {822, {0.0000, 2.3976, -1.6632}}, {823, {0.0000, 5.8320, 0.1656}}, {824, {0.0000, 8.8560, 0.2016}}, {825, {0.0000, -0.3240, 2.5488}}, {826, {0.0000, -0.5184, 2.4912}}, {827, {0.0000, -0.2880, 2.4912}}, {828, {0.0000, -0.7416, 2.1312}}, {829, {0.0000, 9.2160, -6.6672}}, {830, {0.0000, 9.7992, -6.6312}}, {831, {0.0000, 10.7856, -9.0720}}, {832, {0.0000, 8.6400, -6.9984}}, {833, {0.0000, 8.6400, -6.9984}}, {834, {0.0000, 8.6112, -7.0416}}, {835, {0.0000, 8.6976, -6.0192}}, {836, {0.0000, 8.8344, -7.2144}}, {837, {0.0000, -0.7416, 2.4912}}, {838, {0.0000, 9.2016, -7.2288}}, {839, {0.0000, -0.7632, 2.4912}}, {840, {0.0000, -0.4392, 2.4912}}, {841, {0.0000, -0.5184, 2.4912}}, {842, {0.0000, 8.9640, -6.6888}}, {843, {0.0000, 10.5120, -6.5736}}, {844, {0.0000, 10.0656, -7.1352}}, {845, {0.0000, -0.4104, 2.4984}}, {846, {0.0000, -0.2592, 2.4912}}, {847, {0.0000, 8.6976, -0.0000}}, {848, {0.0000, 9.1944, -6.7320}}, {849, {0.0000, 8.9280, -6.7032}}, {850, {0.0000, 9.7848, -7.2504}}, {851, {0.0000, -0.0648, 2.6136}}, {852, {0.0000, -0.0360, 2.4984}}, {853, {0.0000, -0.0360, 2.4984}}, {854, {0.0000, -0.0360, 2.4984}}, {855, {0.0000, 8.9280, -6.7032}}, {856, {0.0000, 8.0928, -6.9768}}, {857, {0.0000, -0.3600, 2.4984}}, {858, {0.0000, -0.3960, 2.4912}}, {859, {0.0000, 9.3096, -6.6024}}, {860, {0.0000, -0.3168, 2.4912}}, {861, {0.0000, 9.2952, -7.1208}}, {862, {0.0000, 8.4168, -7.6680}}, {863, {0.0000, -1.0008, 1.7496}}, {864, {0.0000, 9.0000, -7.1352}}, {865, {0.0000, 9.3168, -7.1424}}, {866, {0.0000, -0.4176, 2.4912}}, {867, {0.0000, 7.4232, -2.7864}}, {868, {0.0000, 7.4232, -2.7864}}, {869, {0.0000, 9.0000, -2.8728}}, {870, {0.0000, 7.4232, -2.7864}}, {871, {0.0000, 7.3440, -2.7864}}, {872, {0.0000, 7.4304, -2.7864}}, {873, {0.0000, 9.0000, -2.7864}}, {874, {0.0000, 9.0000, -2.8728}}, {875, {0.0000, 7.4232, -2.8728}}, {876, {0.0000, 7.4232, -2.8728}}, {877, {0.0000, 8.3376, -2.8080}}, {878, {0.0000, 7.3440, -2.8728}}, {879, {0.0000, 7.3440, -2.8728}}, {884, {3.9960, 8.6976, -7.0056}}, {885, {3.9960, -0.7992, 2.4912}}, {890, {3.9960, -0.7416, 2.4912}}, {891, {6.0048, 6.4584, 0.1152}}, {892, {6.0048, 6.4584, 0.1152}}, {893, {6.0048, 6.4584, 0.1152}}, {894, {3.3336, 6.3432, 1.5408}}, {900, {3.9960, 9.0432, -7.1352}}, {901, {3.9960, 9.3816, -7.0344}}, {902, {8.0136, 8.2728, -0.0000}}, {903, {3.3336, 3.9024, -2.6064}}, {904, {9.4104, 8.2728, -0.0000}}, {905, {10.0584, 8.2728, -0.0000}}, {906, {4.6080, 8.2728, -0.0000}}, {908, {9.2952, 8.3808, 0.1152}}, {910, {10.2672, 8.2728, -0.0000}}, {911, {9.0288, 8.3808, -0.0000}}, {912, {2.6640, 9.3816, -0.0000}}, {913, {8.0064, 8.2584, -0.0000}}, {914, {8.0064, 8.2584, -0.0000}}, {915, {6.6096, 8.2656, -0.0072}}, {916, {8.0208, 8.2584, -0.0000}}, {917, {8.0064, 8.2584, -0.0000}}, {918, {7.3296, 8.2584, -0.0000}}, {919, {8.6688, 8.2584, -0.0000}}, {920, {9.3384, 8.3808, 0.1152}}, {921, {3.3336, 8.2584, -0.0000}}, {922, {8.0064, 8.2584, -0.0000}}, {923, {8.0208, 8.2656, -0.0072}}, {924, {10.0008, 8.2584, -0.0000}}, {925, {8.6688, 8.2584, -0.0000}}, {926, {7.7976, 8.2584, -0.0000}}, {927, {9.3384, 8.3808, 0.1152}}, {928, {8.6688, 8.2584, -0.0000}}, {929, {8.0064, 8.2584, -0.0000}}, {931, {7.4160, 8.2584, -0.0000}}, {932, {7.3296, 8.2584, -0.0000}}, {933, {8.0064, 8.2584, -0.0000}}, {934, {9.5760, 8.3160, 0.0648}}, {935, {8.0064, 8.2584, -0.0000}}, {936, {10.0296, 8.2584, -0.0000}}, {937, {8.9712, 8.3808, -0.0000}}, {938, {3.3336, 10.0440, -0.0000}}, {939, {8.0064, 10.0440, -0.0000}}, {940, {6.9408, 9.0432, 0.1152}}, {941, {5.3496, 9.0432, 0.1152}}, {942, {6.6744, 9.0432, 2.4840}}, {943, {2.6640, 9.0432, -0.0000}}, {944, {6.5664, 9.3816, 0.1152}}, {945, {6.9408, 6.4584, 0.1152}}, {946, {6.9048, 8.6976, 2.4912}}, {947, {6.0048, 6.3432, 2.4840}}, {948, {6.6816, 8.6976, 0.1152}}, {949, {5.3496, 6.4584, 0.1152}}, {950, {5.2920, 8.6976, 2.0664}}, {951, {6.6744, 6.4584, 2.4840}}, {952, {6.6744, 8.6904, 0.1152}}, {953, {2.6640, 6.3432, -0.0000}}, {954, {6.0048, 6.3432, -0.0000}}, {955, {6.0048, 8.6976, -0.0000}}, {956, {6.9120, 6.3432, 2.3040}}, {957, {6.0048, 6.3432, -0.0000}}, {958, {5.3712, 8.6976, 2.0664}}, {959, {6.6744, 6.4584, 0.1152}}, {960, {8.2800, 6.3432, 0.1152}}, {961, {6.8256, 6.4656, 2.4912}}, {962, {5.7816, 6.4584, 2.0664}}, {963, {7.4088, 6.3432, 0.1152}}, {964, {4.7448, 6.3432, 0.1152}}, {965, {6.5664, 6.3432, 0.1152}}, {966, {7.7832, 6.4872, 2.4912}}, {967, {6.3000, 6.4728, 2.4840}}, {968, {8.5536, 7.8552, 2.4912}}, {969, {9.3744, 6.4656, 0.1152}}, {970, {2.6640, 8.2224, -0.0000}}, {971, {6.5664, 8.2224, 0.1152}}, {972, {6.6744, 9.0432, 0.1152}}, {973, {6.5664, 9.0432, 0.1152}}, {974, {9.3744, 9.0432, 0.1152}}, {976, {6.9048, 8.6976, 0.1152}}, {977, {6.5664, 8.6976, 0.1152}}, {978, {9.2736, 8.3304, -0.0000}}, {979, {11.4984, 8.6976, -0.0000}}, {980, {9.2736, 10.0440, -0.0000}}, {981, {6.7248, 8.6976, 2.4912}}, {982, {9.3744, 6.3432, 0.1152}}, {983, {7.2144, 6.3648, 2.4912}}, {984, {9.3384, 8.3808, 2.4912}}, {985, {6.6744, 6.4584, 2.4912}}, {986, {8.6688, 8.3808, -0.0000}}, {987, {6.0048, 6.4584, 2.4912}}, {988, {7.3296, 8.2584, -0.0000}}, {989, {4.8456, 6.3432, 2.4840}}, {990, {7.4952, 8.7048, 0.1080}}, {991, {6.3504, 8.2584, -0.0000}}, {992, {9.0792, 8.6976, 2.4768}}, {993, {6.9192, 8.7408, 2.4984}}, {994, {10.6920, 8.2584, 2.4840}}, {995, {10.0008, 6.3432, 2.4840}}, {996, {8.0928, 8.3808, -0.0000}}, {997, {6.6744, 8.7696, -0.0000}}, {998, {8.0856, 8.2656, 2.4840}}, {999, {6.0048, 6.8832, 0.1152}}, {1000, {8.0064, 8.3808, 0.1152}}, {1001, {8.0064, 8.3808, 0.1152}}, {1002, {7.3152, 8.3808, -0.0000}}, {1003, {7.1568, 6.3792, -0.0000}}, {1004, {8.8416, 8.2584, 0.1152}}, {1005, {6.6456, 6.4656, 0.1152}}, {1006, {5.5656, 8.2656, -0.0000}}, {1007, {4.9176, 8.7696, 0.0864}}, {1008, {7.2144, 6.3648, 0.1152}}, {1009, {6.8760, 6.4584, 2.4912}}, {1010, {6.0048, 6.4584, 0.1152}}, {1011, {2.6640, 8.6976, 2.4912}}, {1012, {9.3384, 8.3808, 0.1152}}, {1013, {5.3064, 6.3432, -0.0000}}, {1014, {5.3064, 6.3432, -0.0000}}, {1015, {8.0064, 8.2584, -0.0000}}, {1016, {6.6744, 8.6976, 2.4912}}, {1017, {8.6688, 8.3808, 0.1152}}, {1018, {10.0008, 8.2584, -0.0000}}, {1019, {8.2512, 6.3432, 2.4912}}, {1020, {6.8256, 6.4656, 2.4912}}, {1021, {8.6688, 8.3808, 0.1152}}, {1022, {8.6688, 8.3808, 0.1152}}, {1023, {8.6688, 8.3808, 0.1152}}, {1024, {8.0064, 10.4040, -0.0000}}, {1025, {8.0136, 10.0440, -0.0000}}, {1026, {10.3824, 8.2584, 0.1152}}, {1027, {6.5016, 10.4040, -0.0072}}, {1028, {8.6256, 8.3808, 0.1152}}, {1029, {8.0064, 8.3808, 0.1152}}, {1030, {3.3336, 8.2584, -0.0000}}, {1031, {3.3336, 10.0440, -0.0000}}, {1032, {6.0048, 8.2584, 0.1152}}, {1033, {12.6864, 8.2584, 0.0936}}, {1034, {12.1248, 8.2584, -0.0000}}, {1035, {10.2528, 8.2584, -0.0000}}, {1036, {6.9912, 10.4040, -0.0000}}, {1037, {8.6256, 10.4040, -0.0000}}, {1038, {7.6248, 10.8432, 0.1152}}, {1039, {8.6256, 8.2584, 2.3904}}, {1040, {8.0064, 8.2584, -0.0000}}, {1041, {7.8768, 8.2584, -0.0000}}, {1042, {8.0064, 8.2584, -0.0000}}, {1043, {6.5016, 8.2656, -0.0072}}, {1044, {8.1288, 8.2584, 2.3904}}, {1045, {8.0064, 8.2584, -0.0000}}, {1046, {11.0808, 8.2584, -0.0000}}, {1047, {7.2504, 8.3736, 0.1152}}, {1048, {8.6256, 8.2584, -0.0000}}, {1049, {8.6256, 10.8432, -0.0000}}, {1050, {6.9912, 8.2584, -0.0000}}, {1051, {7.8768, 8.2584, 0.0936}}, {1052, {10.0008, 8.2584, -0.0000}}, {1053, {8.6688, 8.2584, -0.0000}}, {1054, {9.3384, 8.3808, 0.1152}}, {1055, {8.6256, 8.2584, -0.0000}}, {1056, {8.0064, 8.2584, -0.0000}}, {1057, {8.6688, 8.3808, 0.1152}}, {1058, {7.3296, 8.2584, -0.0000}}, {1059, {7.6248, 8.2584, 0.1152}}, {1060, {9.1224, 8.3160, 0.0648}}, {1061, {8.0064, 8.2584, -0.0000}}, {1062, {8.8776, 8.2584, 2.3904}}, {1063, {7.9992, 8.2584, -0.0000}}, {1064, {11.0016, 8.2584, -0.0000}}, {1065, {11.2536, 8.2584, 2.3904}}, {1066, {9.4968, 8.2584, -0.0000}}, {1067, {10.6272, 8.2584, -0.0000}}, {1068, {7.8768, 8.2584, -0.0000}}, {1069, {8.6256, 8.3808, 0.1152}}, {1070, {12.1248, 8.3808, 0.1152}}, {1071, {8.6688, 8.2584, -0.0000}}, {1072, {6.6744, 6.4584, 0.1152}}, {1073, {6.8760, 8.8056, 0.1152}}, {1074, {6.3792, 6.3432, -0.0000}}, {1075, {4.3776, 6.3432, -0.0000}}, {1076, {7.0056, 6.3432, 2.3904}}, {1077, {6.6744, 6.4584, 0.1152}}, {1078, {8.0280, 6.3432, -0.0000}}, {1079, {5.5008, 6.4584, 0.1152}}, {1080, {6.7032, 6.3432, -0.0000}}, {1081, {6.7032, 8.9064, -0.0000}}, {1082, {5.2488, 6.3432, -0.0000}}, {1083, {7.0056, 6.3432, 0.1152}}, {1084, {8.2512, 6.3432, -0.0000}}, {1085, {6.6312, 6.3432, -0.0000}}, {1086, {6.6744, 6.4584, 0.1152}}, {1087, {6.5016, 6.3432, -0.0000}}, {1088, {6.6744, 6.4512, 2.4912}}, {1089, {6.0048, 6.4584, 0.1152}}, {1090, {5.5008, 6.3432, -0.0000}}, {1091, {6.0048, 6.3432, 2.4912}}, {1092, {9.8784, 8.6976, 2.4912}}, {1093, {6.0048, 6.3432, -0.0000}}, {1094, {6.8760, 6.3432, 2.3904}}, {1095, {6.2568, 6.3432, -0.0000}}, {1096, {9.6264, 6.3432, -0.0000}}, {1097, {9.8784, 6.3432, 2.3904}}, {1098, {7.5024, 6.3432, -0.0000}}, {1099, {8.6256, 6.3432, -0.0000}}, {1100, {6.2568, 6.3432, -0.0000}}, {1101, {6.1272, 6.4584, 0.1152}}, {1102, {9.0000, 6.4584, 0.1152}}, {1103, {6.5016, 6.3432, -0.0000}}, {1104, {6.6744, 8.8416, 0.1152}}, {1105, {6.6744, 8.2224, 0.1152}}, {1106, {6.6744, 8.6976, 2.4912}}, {1107, {4.3776, 8.8416, -0.0000}}, {1108, {6.1272, 6.4584, 0.1152}}, {1109, {6.0048, 6.4440, 0.1152}}, {1110, {2.6640, 8.6976, -0.0000}}, {1111, {3.3336, 8.2224, -0.0000}}, {1112, {2.6640, 8.6976, 2.4912}}, {1113, {10.8792, 6.3432, 0.1152}}, {1114, {9.7488, 6.3432, -0.0000}}, {1115, {6.6744, 8.6976, -0.0000}}, {1116, {5.2488, 8.8416, -0.0000}}, {1117, {6.7032, 8.8416, -0.0000}}, {1118, {6.0048, 8.9064, 2.4912}}, {1119, {6.6312, 6.3432, 2.3904}}, {1120, {16.0560, 8.3808, 0.1152}}, {1121, {7.4880, 6.3432, -0.0000}}, {1122, {9.3384, 8.2584, -0.0000}}, {1123, {7.3584, 8.6904, -0.0000}}, {1124, {11.3976, 8.3808, 0.1152}}, {1125, {8.5608, 6.4584, 0.1152}}, {1126, {8.0208, 8.2584, -0.0000}}, {1127, {6.0048, 6.3432, -0.0000}}, {1128, {10.7712, 8.2584, -0.0000}}, {1129, {8.3448, 6.3432, -0.0000}}, {1130, {9.9432, 8.2584, -0.0000}}, {1131, {8.2224, 6.3432, -0.0000}}, {1132, {12.6432, 8.2584, -0.0000}}, {1133, {10.4112, 6.3432, -0.0000}}, {1134, {7.2504, 10.3752, 2.4912}}, {1135, {5.5008, 8.4960, 2.4912}}, {1136, {9.5616, 8.2584, -0.0000}}, {1137, {8.2656, 6.3432, 2.4912}}, {1138, {9.3384, 8.3808, 0.1152}}, {1139, {6.6744, 6.4584, 0.1152}}, {1140, {9.6408, 8.3808, -0.0000}}, {1141, {7.5744, 6.4584, -0.0000}}, {1142, {9.6408, 10.9512, -0.0000}}, {1143, {7.5744, 8.8416, -0.0000}}, {1144, {12.8952, 8.3808, 2.4912}}, {1145, {10.7568, 6.4584, 2.4912}}, {1146, {10.0008, 8.9352, 0.6912}}, {1147, {7.3512, 7.0200, 0.6624}}, {1148, {14.2920, 11.7432, 0.1152}}, {1149, {10.2240, 9.8712, 0.1152}}, {1150, {16.0560, 10.3680, 0.1152}}, {1151, {7.4880, 8.2584, -0.0000}}, {1152, {8.6688, 8.3808, 2.4984}}, {1153, {6.0048, 6.4440, 2.4912}}, {1154, {6.0408, 8.7768, 0.1872}}, {1155, {0.0000, 8.8488, -6.7248}}, {1156, {0.0000, 8.6328, -7.1856}}, {1157, {0.0000, 8.6976, -6.4296}}, {1158, {0.0000, 8.6976, -6.4296}}, {1159, {0.0000, 9.8712, -7.8480}}, {1160, {0.0000, 8.5752, 2.0016}}, {1161, {0.0000, 8.8560, 2.2464}}, {1162, {8.6256, 10.8360, 2.4048}}, {1163, {6.7032, 8.9064, 1.8216}}, {1164, {7.8768, 8.2584, -0.0000}}, {1165, {6.2568, 8.6976, -0.0000}}, {1166, {8.0064, 8.2584, -0.0000}}, {1167, {6.6744, 6.4512, 2.4912}}, {1168, {5.8680, 10.6632, -0.0072}}, {1169, {4.9320, 8.6976, -0.0000}}, {1170, {6.5016, 8.2656, -0.0000}}, {1171, {4.3776, 6.3432, -0.0000}}, {1172, {8.0496, 8.2584, 2.4912}}, {1173, {6.5880, 6.3432, 2.4912}}, {1174, {11.0808, 8.2584, 2.3904}}, {1175, {8.0280, 6.3432, 2.3904}}, {1176, {7.2504, 8.3736, 2.4912}}, {1177, {5.5008, 6.4584, 2.4912}}, {1178, {6.9912, 8.2584, 2.3904}}, {1179, {5.2488, 6.3432, 2.3904}}, {1180, {6.9912, 8.2584, -0.0000}}, {1181, {5.2488, 6.3432, -0.0000}}, {1182, {6.9912, 8.2584, -0.0000}}, {1183, {5.2488, 8.6976, -0.0000}}, {1184, {8.8992, 8.2584, -0.0000}}, {1185, {6.4296, 6.3432, -0.0000}}, {1186, {8.6688, 8.2584, 2.3904}}, {1187, {6.6312, 6.3432, 2.3904}}, {1188, {10.5552, 8.2584, -0.0000}}, {1189, {7.7760, 6.3432, -0.0000}}, {1190, {13.6440, 8.2584, 2.4912}}, {1191, {10.4400, 6.3432, 2.4912}}, {1192, {9.0360, 8.3808, 0.1152}}, {1193, {6.2568, 6.4440, 0.1152}}, {1194, {8.6688, 8.3808, 2.4840}}, {1195, {6.0048, 6.4584, 2.4912}}, {1196, {7.3296, 8.2584, 2.3904}}, {1197, {5.5008, 6.3432, 2.3904}}, {1198, {6.6744, 8.2584, -0.0000}}, {1199, {6.0048, 6.3432, 2.4912}}, {1200, {6.6744, 8.2584, -0.0000}}, {1201, {6.0048, 6.3432, 2.4912}}, {1202, {8.0064, 8.2584, 2.3904}}, {1203, {6.0048, 6.3432, 2.3904}}, {1204, {11.1024, 8.2584, 2.3904}}, {1205, {8.2944, 6.3504, 2.3904}}, {1206, {7.9992, 8.2584, 2.3904}}, {1207, {6.2568, 6.2208, 1.7640}}, {1208, {7.9992, 8.2584, -0.0000}}, {1209, {6.2568, 6.3432, -0.0000}}, {1210, {7.9992, 8.2584, -0.0000}}, {1211, {6.6744, 8.6976, -0.0000}}, {1212, {10.3392, 8.3808, 0.1152}}, {1213, {7.9920, 6.4584, 0.1152}}, {1214, {10.3392, 8.3808, 1.8144}}, {1215, {7.9920, 6.4584, 1.8144}}, {1216, {3.3336, 8.2584, -0.0000}}, {1217, {11.0808, 10.7496, -0.0000}}, {1218, {8.0280, 8.9064, -0.0000}}, {1219, {8.0136, 8.2584, 2.4912}}, {1220, {6.6096, 6.3432, 2.4912}}, {1221, {7.8768, 8.2584, 2.4048}}, {1222, {7.0056, 6.3432, 1.8216}}, {1223, {8.6688, 8.2584, 2.4912}}, {1224, {6.6312, 6.3432, 2.4912}}, {1225, {8.6688, 8.2584, 2.4048}}, {1226, {6.6312, 6.3432, 1.8216}}, {1227, {7.9992, 8.2584, 2.3904}}, {1228, {6.2568, 6.3432, 2.3904}}, {1229, {10.0008, 8.2584, 2.4048}}, {1230, {8.2512, 6.3432, 1.8216}}, {1231, {2.6640, 8.6976, -0.0000}}, {1232, {8.0064, 10.4256, -0.0000}}, {1233, {6.6744, 8.8560, 0.1152}}, {1234, {8.0064, 10.0440, -0.0000}}, {1235, {6.6744, 8.2224, 0.1152}}, {1236, {12.0024, 8.2584, -0.0000}}, {1237, {10.6704, 6.4584, 0.1152}}, {1238, {8.0064, 10.4256, -0.0000}}, {1239, {6.6744, 8.8560, 0.1152}}, {1240, {9.0288, 8.3808, 0.1152}}, {1241, {6.6744, 6.4584, 0.1152}}, {1242, {9.0288, 10.0440, 0.1152}}, {1243, {6.6744, 8.2224, 0.1152}}, {1244, {11.0808, 10.0440, -0.0000}}, {1245, {8.0280, 8.2224, -0.0000}}, {1246, {7.2504, 10.0440, 0.1152}}, {1247, {5.5008, 8.2224, 0.1152}}, {1248, {7.2504, 8.2584, 0.1152}}, {1249, {6.5376, 6.3432, 2.4912}}, {1250, {8.6256, 9.9216, -0.0000}}, {1251, {6.7032, 7.9920, -0.0000}}, {1252, {8.6256, 10.0440, -0.0000}}, {1253, {6.7032, 8.2224, -0.0000}}, {1254, {9.3384, 10.0440, 0.1152}}, {1255, {6.6744, 8.2224, 0.1152}}, {1256, {9.3384, 8.3808, 0.1152}}, {1257, {6.6744, 6.4584, 0.1152}}, {1258, {9.3384, 10.0440, 0.1152}}, {1259, {6.6744, 8.2224, 0.1152}}, {1260, {8.6256, 10.0440, 0.1152}}, {1261, {6.1272, 8.2224, 0.1152}}, {1262, {7.6248, 9.9216, 0.1152}}, {1263, {6.0048, 7.9920, 2.4912}}, {1264, {7.6248, 10.0440, 0.1152}}, {1265, {6.0048, 8.2224, 2.4912}}, {1266, {7.6248, 10.4112, 0.1152}}, {1267, {6.0048, 8.8416, 2.4912}}, {1268, {7.9992, 10.0440, -0.0000}}, {1269, {6.2568, 8.2224, -0.0000}}, {1270, {6.5016, 8.2656, 2.3904}}, {1271, {4.3776, 6.3432, 2.3904}}, {1272, {10.6272, 10.0440, -0.0000}}, {1273, {8.6256, 8.2224, -0.0000}}, {1274, {6.5016, 8.2656, 2.4912}}, {1275, {4.3776, 6.3432, 2.4912}}, {1276, {8.0064, 8.2584, 2.4912}}, {1277, {6.0048, 6.3432, 2.4912}}, {1278, {8.0064, 8.2584, -0.0000}}, {1279, {6.0048, 6.3432, -0.0000}}, {1280, {7.8768, 8.2584, -0.0000}}, {1281, {6.6744, 8.6976, 0.1152}}, {1282, {11.6208, 8.2584, 0.1152}}, {1283, {10.5192, 8.6976, 0.1152}}, {1284, {11.4768, 8.3736, 0.1152}}, {1285, {9.7848, 6.4584, 0.1152}}, {1286, {7.9560, 8.3736, 2.3904}}, {1287, {6.1128, 6.4584, 2.3904}}, {1288, {11.6424, 8.2584, 0.1152}}, {1289, {10.9152, 6.3432, 0.1152}}, {1290, {12.4128, 8.2584, 0.1152}}, {1291, {10.5408, 6.3432, 0.1152}}, {1292, {9.3384, 8.3808, 0.1152}}, {1293, {6.7032, 6.4584, 0.1152}}, {1294, {8.9640, 8.2584, 0.1152}}, {1295, {7.9848, 6.3432, 0.1152}}, {1296, {7.2504, 8.3736, 0.1152}}, {1297, {5.5008, 6.4584, 0.1152}}, {1298, {7.8768, 8.2584, 2.4912}}, {1299, {7.0056, 6.3432, 2.4912}}, {1306, {9.3384, 8.3808, 2.2680}}, {1307, {6.6744, 6.4584, 2.4912}}, {1308, {11.3256, 8.2584, -0.0000}}, {1309, {8.6688, 6.3432, -0.0000}}, {1425, {0.0000, -0.3096, 2.2536}}, {1426, {0.0000, 10.1016, -7.9560}}, {1427, {0.0000, 10.4760, -7.9560}}, {1428, {0.0000, 10.1016, -7.9560}}, {1429, {0.0000, 10.1016, -7.9560}}, {1430, {0.0000, -0.4824, 2.2608}}, {1431, {0.0000, 9.9936, -8.0208}}, {1432, {0.0000, 9.7704, -7.9704}}, {1433, {0.0000, 9.7416, -7.9560}}, {1434, {0.0000, -0.1440, 2.2536}}, {1435, {0.0000, -0.0792, 2.2536}}, {1436, {0.0000, 9.7416, -7.9560}}, {1437, {0.0000, 9.7416, -7.9560}}, {1438, {0.0000, 9.7416, -7.9560}}, {1439, {0.0000, 10.7424, -7.8408}}, {1440, {0.0000, 10.7424, -7.8408}}, {1441, {0.0000, 9.9000, -7.9560}}, {1442, {0.0000, -0.3096, 2.2536}}, {1443, {0.0000, -0.2016, 2.0376}}, {1444, {0.0000, -0.1440, 2.2536}}, {1445, {0.0000, -0.4824, 2.2608}}, {1446, {0.0000, -0.4824, 2.2608}}, {1447, {0.0000, -0.0504, 2.2608}}, {1448, {0.0000, 9.7416, -7.9560}}, {1449, {0.0000, 10.7424, -7.8408}}, {1450, {0.0000, -0.3096, 2.2536}}, {1451, {0.0000, 10.0656, -7.9560}}, {1452, {0.0000, 9.7920, -7.9560}}, {1453, {0.0000, -0.4824, 2.2608}}, {1454, {0.0000, 9.7704, -7.9704}}, {1455, {0.0000, 10.7424, -8.2224}}, {1456, {0.0000, -0.1080, 2.2608}}, {1457, {0.0000, -0.1080, 2.2608}}, {1458, {0.0000, -0.1080, 2.2608}}, {1459, {0.0000, -0.1080, 2.2608}}, {1460, {0.0000, -1.1160, 2.0448}}, {1461, {0.0000, -1.1016, 2.0448}}, {1462, {0.0000, -0.1080, 2.2608}}, {1463, {0.0000, -0.7344, 1.3608}}, {1464, {0.0000, -0.7272, 2.0448}}, {1465, {0.0000, 9.4176, -8.4744}}, {1466, {0.0000, 9.4176, -8.4744}}, {1467, {0.0000, -0.0936, 2.2536}}, {1468, {0.0000, 4.5864, -3.6648}}, {1469, {0.0000, -0.7344, 2.0448}}, {1470, {4.5936, 7.9488, -6.7104}}, {1471, {0.0000, 9.2592, -8.6328}}, {1472, {6.7608, 11.7648, 2.4408}}, {1473, {0.0000, 9.4176, -8.4744}}, {1474, {0.0000, 9.4176, -8.4744}}, {1475, {3.3336, 6.3360, -0.0000}}, {1476, {0.0000, 10.0728, -9.1368}}, {1477, {0.0000, -1.4544, 2.3832}}, {1478, {4.5504, 7.1928, -0.0000}}, {1479, {0.0000, -0.5688, 2.2608}}, {1488, {7.5384, 7.1928, -0.0000}}, {1489, {7.1784, 7.1928, -0.0000}}, {1490, {5.0760, 7.1928, -0.0000}}, {1491, {6.6528, 7.1928, -0.0000}}, {1492, {7.6104, 7.1928, -0.0000}}, {1493, {3.1176, 7.1928, -0.0000}}, {1494, {3.8808, 7.2936, -0.0000}}, {1495, {7.8984, 7.1928, -0.0000}}, {1496, {7.8336, 7.3080, 0.1152}}, {1497, {3.1176, 7.1928, -3.4128}}, {1498, {6.4080, 7.1928, 2.2536}}, {1499, {6.3000, 7.1928, -0.0000}}, {1500, {6.3576, 9.7560, 0.2664}}, {1501, {8.1432, 7.1928, -0.0000}}, {1502, {8.2440, 7.3080, -0.0000}}, {1503, {3.1176, 7.1928, 2.2536}}, {1504, {4.6728, 7.1928, -0.0000}}, {1505, {7.8696, 7.1928, 0.1152}}, {1506, {6.9840, 7.1928, 0.1944}}, {1507, {7.4808, 7.1928, 2.2536}}, {1508, {7.3224, 7.1928, -0.0000}}, {1509, {6.0480, 7.1928, 2.2536}}, {1510, {6.5376, 7.1928, -0.0000}}, {1511, {7.0776, 7.1928, 2.2536}}, {1512, {6.4080, 7.1928, -0.0000}}, {1513, {8.7624, 7.1928, 0.0576}}, {1514, {8.2944, 7.1928, -0.0000}}, {1520, {6.1056, 7.1928, -0.0000}}, {1521, {6.1056, 7.1928, -0.0000}}, {1522, {6.1056, 7.1928, -3.4128}}, {1523, {4.6152, 9.7560, -6.0336}}, {1524, {7.2360, 9.7560, -6.0336}}, {7424, {5.9544, 6.3432, -0.0000}}, {7425, {8.9712, 6.3432, -0.0000}}, {7426, {10.6704, 6.4440, 0.1152}}, {7427, {6.3792, 6.3432, -0.0000}}, {7428, {6.0048, 6.4584, 0.1152}}, {7429, {6.6168, 6.3432, -0.0000}}, {7430, {6.6168, 6.3432, -0.0000}}, {7431, {5.8752, 6.3432, -0.0000}}, {7432, {5.5008, 6.4584, 0.1152}}, {7433, {2.6640, 6.3432, 2.3544}}, {7434, {5.0688, 6.3432, 0.1152}}, {7435, {6.0048, 6.3432, -0.0000}}, {7436, {4.8168, 6.3432, -0.0000}}, {7437, {8.2512, 6.3432, -0.0000}}, {7438, {6.7032, 6.3432, -0.0000}}, {7439, {6.6744, 6.4584, 0.1152}}, {7440, {6.0048, 6.4584, 0.1152}}, {7441, {7.3008, 5.9544, -0.2880}}, {7442, {7.3008, 5.8032, -0.6264}}, {7443, {7.3008, 6.5592, 0.2448}}, {7444, {11.3256, 6.4584, 0.1152}}, {7445, {5.4864, 6.3432, 0.1152}}, {7446, {6.6744, 6.4584, -3.1752}}, {7447, {6.6744, 3.1752, 0.1152}}, {7448, {6.2568, 6.3432, -0.0000}}, {7449, {6.5016, 6.3432, -0.0000}}, {7450, {6.5016, 6.3432, -0.0000}}, {7451, {5.5008, 6.3432, -0.0000}}, {7452, {6.5664, 6.3432, 0.1152}}, {7453, {7.1640, 5.6160, -0.5184}}, {7454, {8.8056, 5.6160, -0.5184}}, {7455, {7.1640, 7.4304, 0.9792}}, {7456, {6.0048, 6.3432, -0.0000}}, {7457, {8.6688, 6.3432, -0.0000}}, {7458, {6.0048, 6.3432, -0.0000}}, {7459, {5.5008, 6.3432, 0.1152}}, {7460, {5.1264, 6.4440, 0.1224}}, {7461, {7.2864, 6.4512, 0.1152}}, {7462, {4.3776, 6.3432, -0.0000}}, {7463, {6.0048, 6.3432, -0.0000}}, {7464, {6.5016, 6.3432, -0.0000}}, {7465, {6.2568, 6.3432, -0.0000}}, {7466, {8.5536, 6.3432, -0.0000}}, {7467, {7.0056, 6.3432, 0.1152}}, {7468, {5.4360, 8.6976, -2.8728}}, {7469, {7.9632, 8.6976, -2.8728}}, {7470, {4.9752, 8.6976, -2.8728}}, {7471, {4.9752, 8.6976, -2.8728}}, {7472, {5.3928, 8.6976, -2.8728}}, {7473, {4.9248, 8.6976, -2.8728}}, {7474, {4.9248, 8.6976, -2.8728}}, {7475, {5.9544, 8.7840, -2.7864}}, {7476, {5.1480, 8.6976, -2.8728}}, {7477, {2.0016, 8.6976, -2.8728}}, {7478, {3.7728, 8.6976, -2.7864}}, {7479, {5.0976, 8.6976, -2.8728}}, {7480, {4.2192, 8.6976, -2.8728}}, {7481, {6.1272, 8.6976, -2.8728}}, {7482, {5.1624, 8.6976, -2.8728}}, {7483, {5.1480, 8.6976, -2.8728}}, {7484, {6.1416, 8.7840, -2.7864}}, {7485, {4.5864, 8.5536, -2.7936}}, {7486, {5.0256, 8.6976, -2.8728}}, {7487, {5.4144, 8.6976, -2.8728}}, {7488, {5.1912, 8.6976, -2.8728}}, {7489, {5.1480, 8.6976, -2.7864}}, {7490, {7.4736, 8.6976, -2.8728}}, {7491, {4.4640, 7.4232, -2.7864}}, {7492, {4.4640, 7.4232, -2.7864}}, {7493, {4.5216, 7.4160, -2.7864}}, {7494, {7.2000, 7.4232, -2.7864}}, {7495, {4.5288, 9.0000, -2.7864}}, {7496, {4.5288, 9.0000, -2.7864}}, {7497, {4.4568, 7.4232, -2.7864}}, {7498, {4.4568, 7.4232, -2.7864}}, {7499, {3.8232, 7.4232, -2.7864}}, {7500, {3.8232, 7.4232, -2.7864}}, {7501, {4.5216, 7.4160, -1.1160}}, {7502, {1.8864, 7.3440, -1.2168}}, {7503, {4.0680, 9.0000, -2.8728}}, {7504, {6.8760, 7.4232, -2.8728}}, {7505, {4.5864, 7.4232, -1.1160}}, {7506, {4.5288, 7.4232, -2.7864}}, {7507, {4.2480, 7.4232, -2.7864}}, {7508, {4.5288, 7.4232, -5.1048}}, {7509, {4.5288, 5.1048, -2.7864}}, {7510, {4.5360, 7.4160, -1.1160}}, {7511, {2.6352, 8.3376, -2.8080}}, {7512, {4.5864, 7.3440, -2.7864}}, {7513, {4.8888, 6.6024, -3.1320}}, {7514, {6.8760, 7.3512, -2.7936}}, {7515, {3.8592, 7.3440, -2.8728}}, {7516, {4.6872, 7.4232, -2.7936}}, {7517, {4.6224, 9.0000, -1.1160}}, {7518, {3.8592, 7.3440, -1.1160}}, {7519, {4.5360, 9.0000, -2.7864}}, {7520, {5.2776, 7.4448, -1.1160}}, {7521, {4.1184, 7.4304, -1.1160}}, {7522, {1.8864, 5.3280, 0.7992}}, {7523, {2.8800, 3.7512, 0.7992}}, {7524, {4.5864, 3.6720, 0.8856}}, {7525, {3.8592, 3.6720, 0.7992}}, {7526, {4.6224, 5.3352, 2.4336}}, {7527, {3.8592, 3.6720, 2.4408}}, {7528, {4.5504, 3.7584, 2.4408}}, {7529, {5.2776, 3.7512, 2.4336}}, {7530, {4.1184, 3.7584, 2.5560}}, {7531, {10.9008, 6.4584, 0.1152}}, {7532, {6.6744, 8.6976, 0.1152}}, {7533, {6.6744, 8.6976, 0.1152}}, {7534, {3.3336, 8.6832, -0.0000}}, {7535, {10.0008, 6.4584, -0.0000}}, {7536, {6.6744, 6.4584, -0.0000}}, {7537, {6.6744, 6.4512, 2.4912}}, {7538, {3.9960, 6.4584, -0.0000}}, {7539, {3.9960, 6.4584, -0.0000}}, {7540, {6.0048, 6.4440, 0.1152}}, {7541, {3.3336, 7.7616, 0.0936}}, {7542, {6.0048, 6.3432, -0.0000}}, {7543, {6.6744, 6.4440, 2.4912}}, {7544, {4.5648, 6.9840, -2.7864}}, {7545, {6.6816, 6.3432, 2.4912}}, {7546, {9.4320, 8.8776, 0.3312}}, {7547, {2.6640, 6.3432, -0.0000}}, {7548, {2.6640, 6.3432, -0.0000}}, {7549, {6.6744, 6.4512, 2.4912}}, {7550, {6.5664, 6.3432, 0.1152}}, {7551, {6.8184, 6.3432, 0.1152}}, {7552, {6.6744, 8.6976, 2.4912}}, {7553, {6.6744, 8.6976, 2.4912}}, {7554, {3.3336, 8.6832, 2.4912}}, {7555, {8.5536, 6.4440, 2.4912}}, {7556, {6.0048, 8.6976, 2.4912}}, {7557, {2.6640, 8.6976, 2.4912}}, {7558, {10.0008, 6.4584, 2.4912}}, {7559, {6.6744, 6.4584, 2.4912}}, {7560, {6.6744, 6.4512, 2.4912}}, {7561, {3.9960, 6.4584, 2.4912}}, {7562, {6.0048, 6.4440, 2.4912}}, {7563, {4.6440, 8.6976, 2.4912}}, {7564, {6.0048, 6.3432, 2.4984}}, {7565, {6.0048, 6.3432, 2.4984}}, {7566, {6.0048, 6.3432, 2.4984}}, {7567, {6.6744, 6.4584, 2.4984}}, {7568, {6.6744, 6.4584, 2.4912}}, {7569, {6.6744, 8.7768, 2.4912}}, {7570, {6.6744, 6.4584, 2.4912}}, {7571, {5.5008, 6.4584, 2.4912}}, {7572, {5.5008, 6.4584, 2.4912}}, {7573, {7.8048, 6.4584, 2.4912}}, {7574, {2.6640, 8.6976, 2.4912}}, {7575, {6.0048, 6.4584, 2.4912}}, {7576, {2.6640, 8.6976, 2.4912}}, {7577, {6.6744, 6.3432, 2.4912}}, {7578, {6.5376, 6.3432, 2.4912}}, {7579, {4.5216, 7.4232, -2.7792}}, {7580, {4.2480, 7.4304, -2.7864}}, {7581, {4.1760, 7.4304, -2.4912}}, {7582, {4.4784, 9.1296, -2.7936}}, {7583, {3.8232, 7.4160, -2.7864}}, {7584, {2.7504, 8.9928, -2.8728}}, {7585, {2.7504, 7.3440, -1.2240}}, {7586, {4.5216, 7.4160, -1.1160}}, {7587, {4.6008, 9.0000, -2.8728}}, {7588, {1.8864, 9.0000, -2.8728}}, {7589, {1.8864, 7.3440, -2.8728}}, {7590, {1.8864, 7.3440, -2.8728}}, {7591, {1.8864, 7.3440, -2.8728}}, {7592, {3.2472, 9.0000, -1.1160}}, {7593, {1.8864, 9.0000, -1.1160}}, {7594, {1.8864, 9.0000, -1.1232}}, {7595, {3.2976, 7.3440, -2.8728}}, {7596, {6.8616, 7.4232, -1.1160}}, {7597, {6.8616, 7.3440, -1.1160}}, {7598, {4.5864, 7.4232, -1.1160}}, {7599, {4.5864, 7.4232, -1.1160}}, {7600, {4.5864, 7.3368, -2.8728}}, {7601, {4.5288, 7.4304, -2.7864}}, {7602, {4.5000, 9.0000, -1.1160}}, {7603, {4.0824, 7.4160, -1.1232}}, {7604, {1.8864, 9.0000, -1.1160}}, {7605, {2.6352, 8.3448, -1.1160}}, {7606, {4.5864, 7.3440, -2.7936}}, {7607, {4.6512, 7.3440, -2.7936}}, {7608, {4.5360, 7.3440, -2.7936}}, {7609, {4.2408, 7.3440, -2.7936}}, {7610, {3.8592, 7.3440, -2.8728}}, {7611, {4.2984, 7.3440, -2.8728}}, {7612, {4.2984, 7.3440, -1.1160}}, {7613, {4.2984, 7.3440, -2.1384}}, {7614, {4.4280, 7.3440, -1.1160}}, {7615, {4.3704, 9.0288, -2.8224}}, {7616, {0.0000, 9.2376, -7.1352}}, {7617, {0.0000, 9.2376, -7.1352}}, {7618, {0.0000, -0.5040, 2.5416}}, {7619, {0.0000, 8.7480, -7.3296}}, {7620, {0.0000, 8.7408, -7.2432}}, {7621, {0.0000, 8.7408, -7.2432}}, {7622, {0.0000, 8.7408, -7.2432}}, {7623, {0.0000, 8.7408, -7.2432}}, {7624, {0.0000, 8.7480, -7.2432}}, {7625, {0.0000, 8.7480, -7.2432}}, {7626, {0.0000, -0.3168, 2.4912}}, {7678, {0.0000, 9.1944, -6.7320}}, {7679, {0.0000, -0.0360, 2.4984}}, {7680, {8.0064, 8.2584, 2.4912}}, {7681, {6.6744, 6.4584, 2.4912}}, {7682, {8.0064, 10.4112, -0.0000}}, {7683, {6.6744, 8.6976, 0.1152}}, {7684, {8.0064, 8.2584, 1.8216}}, {7685, {6.6744, 8.6976, 1.8216}}, {7686, {8.0064, 8.2584, 1.9008}}, {7687, {6.6744, 8.6976, 1.9008}}, {7688, {8.6688, 10.4040, 2.5416}}, {7689, {6.0048, 8.8416, 2.4264}}, {7690, {8.6688, 10.4112, -0.0000}}, {7691, {6.6744, 8.6976, 0.1152}}, {7692, {8.6688, 8.2584, 1.8216}}, {7693, {6.6744, 8.6976, 1.8216}}, {7694, {8.6688, 8.2584, 1.9008}}, {7695, {6.6744, 8.6976, 1.9008}}, {7696, {8.6688, 8.2584, 2.6712}}, {7697, {6.6744, 8.6976, 2.6712}}, {7698, {8.6688, 8.2584, 2.4912}}, {7699, {6.6744, 8.6976, 2.4912}}, {7700, {8.0064, 10.7568, -0.0000}}, {7701, {6.6744, 10.4544, 0.1152}}, {7702, {8.0064, 10.7568, -0.0000}}, {7703, {6.6744, 10.4544, 0.1152}}, {7704, {8.0064, 8.2584, 2.4912}}, {7705, {6.6744, 6.4584, 2.4912}}, {7706, {8.0064, 8.2584, 2.4912}}, {7707, {6.6744, 6.4584, 2.4912}}, {7708, {8.0064, 10.9800, 2.5416}}, {7709, {6.6744, 8.8560, 2.5416}}, {7710, {7.3296, 10.4112, -0.0000}}, {7711, {3.3336, 10.4112, -0.0000}}, {7712, {9.3384, 9.9216, 0.1152}}, {7713, {6.6744, 7.9920, 2.4912}}, {7714, {8.6688, 10.4112, -0.0000}}, {7715, {6.6744, 10.4112, -0.0000}}, {7716, {8.6688, 8.2584, 1.8216}}, {7717, {6.6744, 8.6976, 1.8216}}, {7718, {8.6688, 10.0440, -0.0000}}, {7719, {6.6744, 10.3464, -0.0000}}, {7720, {8.6688, 8.2584, 2.5416}}, {7721, {6.6744, 8.6976, 2.5416}}, {7722, {8.6688, 8.2584, 2.3328}}, {7723, {6.6744, 8.6976, 2.3328}}, {7724, {3.3336, 8.2584, 2.4912}}, {7725, {2.6640, 8.6976, 2.4912}}, {7726, {3.3336, 10.7568, -0.0000}}, {7727, {3.3336, 10.3680, -0.0000}}, {7728, {8.0064, 10.4040, -0.0000}}, {7729, {6.0048, 10.6416, -0.0000}}, {7730, {8.0064, 8.2584, 1.8216}}, {7731, {6.0048, 8.6976, 1.8216}}, {7732, {8.0064, 8.2584, 1.9008}}, {7733, {6.0048, 8.6976, 1.9008}}, {7734, {6.6744, 8.2584, 1.8216}}, {7735, {2.6640, 8.6976, 1.8216}}, {7736, {6.6744, 9.9216, 1.8216}}, {7737, {2.6640, 9.9504, 1.8216}}, {7738, {6.6744, 8.2584, 1.9008}}, {7739, {2.6640, 8.6976, 1.9008}}, {7740, {6.6744, 8.2584, 2.4912}}, {7741, {2.6640, 8.6976, 2.4912}}, {7742, {10.0008, 10.4040, -0.0000}}, {7743, {10.0008, 8.8416, -0.0000}}, {7744, {10.0008, 10.4112, -0.0000}}, {7745, {10.0008, 8.6976, -0.0000}}, {7746, {10.0008, 8.2584, 1.8216}}, {7747, {10.0008, 6.4584, 1.8216}}, {7748, {8.6688, 10.4112, -0.0000}}, {7749, {6.6744, 8.6976, -0.0000}}, {7750, {8.6688, 8.2584, 1.8216}}, {7751, {6.6744, 6.4584, 1.8216}}, {7752, {8.6688, 8.2584, 1.9008}}, {7753, {6.6744, 6.4584, 1.9008}}, {7754, {8.6688, 8.2584, 2.4912}}, {7755, {6.6744, 6.4584, 2.4912}}, {7756, {9.3384, 10.7568, 0.1152}}, {7757, {6.6744, 10.4616, 0.1152}}, {7758, {9.3384, 10.7568, 0.1152}}, {7759, {6.6744, 10.1016, 0.1152}}, {7760, {9.3384, 10.7568, 0.1152}}, {7761, {6.6744, 10.4544, 0.1152}}, {7762, {9.3384, 10.7568, 0.1152}}, {7763, {6.6744, 10.4544, 0.1152}}, {7764, {8.0064, 10.4040, -0.0000}}, {7765, {6.6744, 8.8416, 2.4912}}, {7766, {8.0064, 10.4112, -0.0000}}, {7767, {6.6744, 8.6976, 2.4912}}, {7768, {8.6688, 10.4112, -0.0000}}, {7769, {3.9960, 8.6976, -0.0000}}, {7770, {8.6688, 8.2584, 1.8216}}, {7771, {3.9960, 6.4584, 1.8216}}, {7772, {8.6688, 9.9216, 1.8216}}, {7773, {3.9960, 7.9920, 1.8216}}, {7774, {8.6688, 8.2584, 1.9008}}, {7775, {3.9960, 6.4584, 1.9008}}, {7776, {8.0064, 10.4112, 0.1152}}, {7777, {6.0048, 8.6976, 0.1152}}, {7778, {8.0064, 8.3808, 1.8216}}, {7779, {6.0048, 6.4440, 1.8216}}, {7780, {8.0064, 10.6272, 0.1152}}, {7781, {6.0048, 8.7696, 0.1152}}, {7782, {8.0064, 10.7568, 0.1152}}, {7783, {6.0048, 8.8992, 0.1152}}, {7784, {8.0064, 10.4112, 1.8216}}, {7785, {6.0048, 8.6976, 1.8216}}, {7786, {7.3296, 10.4112, -0.0000}}, {7787, {3.3336, 10.2744, 0.0936}}, {7788, {7.3296, 8.2584, 1.8216}}, {7789, {3.3336, 7.7616, 1.8216}}, {7790, {7.3296, 8.2584, 1.9008}}, {7791, {3.3336, 7.7616, 1.9008}}, {7792, {7.3296, 8.2584, 2.4912}}, {7793, {3.3336, 7.7616, 2.4912}}, {7794, {8.6688, 8.2584, 2.4912}}, {7795, {6.6744, 6.3432, 2.4912}}, {7796, {8.6688, 8.2584, 2.4912}}, {7797, {6.6744, 6.3432, 2.4912}}, {7798, {8.6688, 8.2584, 2.4912}}, {7799, {6.6744, 6.3432, 2.4912}}, {7800, {8.6688, 10.7568, 0.1152}}, {7801, {6.6744, 10.4616, 0.1152}}, {7802, {8.6688, 10.7568, 0.1152}}, {7803, {6.6744, 9.6840, 0.1152}}, {7804, {8.0064, 10.5336, -0.0000}}, {7805, {6.0048, 8.6112, -0.0000}}, {7806, {8.0064, 8.2584, 1.8216}}, {7807, {6.0048, 6.3432, 1.8216}}, {7808, {11.3256, 10.4040, -0.0000}}, {7809, {8.6688, 8.8416, -0.0000}}, {7810, {11.3256, 10.4040, -0.0000}}, {7811, {8.6688, 8.8416, -0.0000}}, {7812, {11.3256, 10.0440, -0.0000}}, {7813, {8.6688, 8.2224, -0.0000}}, {7814, {11.3256, 10.4112, -0.0000}}, {7815, {8.6688, 8.6976, -0.0000}}, {7816, {11.3256, 8.2584, 1.8216}}, {7817, {8.6688, 6.3432, 1.8216}}, {7818, {8.0064, 10.4112, -0.0000}}, {7819, {6.0048, 8.6976, -0.0000}}, {7820, {8.0064, 10.0440, -0.0000}}, {7821, {6.0048, 8.2224, -0.0000}}, {7822, {8.0064, 10.4112, -0.0000}}, {7823, {6.0048, 8.6976, 2.4912}}, {7824, {7.3296, 10.4904, -0.0000}}, {7825, {6.0048, 8.7408, -0.0000}}, {7826, {7.3296, 8.2584, 1.8216}}, {7827, {6.0048, 6.3432, 1.8216}}, {7828, {7.3296, 8.2584, 1.9008}}, {7829, {6.0048, 6.3432, 1.9008}}, {7830, {6.6744, 8.6976, 1.9008}}, {7831, {3.3336, 9.7992, 0.0936}}, {7832, {8.6688, 9.6768, -0.0000}}, {7833, {6.0048, 9.6768, 2.4912}}, {7834, {6.6744, 8.9280, 0.1152}}, {7835, {2.6640, 10.4112, -0.0000}}, {7838, {8.4312, 8.3808, 0.1152}}, {7840, {8.0064, 8.2584, 1.8216}}, {7841, {6.6744, 6.4584, 1.8216}}, {7842, {8.0064, 10.7496, -0.0000}}, {7843, {6.6744, 8.9352, 0.1152}}, {7844, {8.0064, 10.7568, -0.0000}}, {7845, {6.6744, 9.2304, 0.1152}}, {7846, {8.0064, 10.7568, -0.0000}}, {7847, {6.6744, 9.2304, 0.1152}}, {7848, {8.0064, 10.7496, -0.0000}}, {7849, {6.6744, 9.6912, 0.1152}}, {7850, {8.0064, 10.7568, -0.0000}}, {7851, {6.6744, 10.4040, 0.1152}}, {7852, {8.0064, 10.4904, 1.8216}}, {7853, {6.6744, 8.7408, 1.8216}}, {7854, {8.0064, 10.7568, -0.0000}}, {7855, {6.6744, 10.4112, 0.1152}}, {7856, {8.0064, 10.7568, -0.0000}}, {7857, {6.6744, 10.4112, 0.1152}}, {7858, {8.0064, 10.7568, -0.0000}}, {7859, {6.6744, 10.7640, 0.1152}}, {7860, {8.0064, 10.7568, -0.0000}}, {7861, {6.6744, 10.4112, 0.1152}}, {7862, {8.0064, 10.4256, 1.8216}}, {7863, {6.6744, 8.8560, 1.8216}}, {7864, {8.0064, 8.2584, 1.8216}}, {7865, {6.6744, 6.4584, 1.8216}}, {7866, {8.0064, 10.7496, -0.0000}}, {7867, {6.6744, 8.9352, 0.1152}}, {7868, {8.0064, 10.5336, -0.0000}}, {7869, {6.6744, 8.6112, 0.1152}}, {7870, {8.0064, 10.7568, -0.0000}}, {7871, {6.6744, 9.2304, 0.1152}}, {7872, {8.0064, 10.7568, -0.0000}}, {7873, {6.6744, 9.2304, 0.1152}}, {7874, {8.0064, 10.7496, -0.0000}}, {7875, {6.6744, 9.6912, 0.1152}}, {7876, {8.0064, 10.7568, -0.0000}}, {7877, {6.6744, 10.4040, 0.1152}}, {7878, {8.0064, 10.4904, 1.8216}}, {7879, {6.6744, 8.7408, 1.8216}}, {7880, {3.3336, 10.7496, -0.0000}}, {7881, {2.6640, 9.0648, -0.0000}}, {7882, {3.3336, 8.2584, 1.8216}}, {7883, {2.6640, 8.6976, 1.8216}}, {7884, {9.3384, 8.3808, 1.8216}}, {7885, {6.6744, 6.4584, 1.8216}}, {7886, {9.3384, 10.7496, 0.1152}}, {7887, {6.6744, 9.0648, 0.1152}}, {7888, {9.3384, 10.7568, 0.1152}}, {7889, {6.6744, 9.2304, 0.1152}}, {7890, {9.3384, 10.7568, 0.1152}}, {7891, {6.6744, 9.2304, 0.1152}}, {7892, {9.3384, 10.7496, 0.1152}}, {7893, {6.6744, 9.6912, 0.1152}}, {7894, {9.3384, 10.7568, 0.1152}}, {7895, {6.6744, 10.4040, 0.1152}}, {7896, {9.3384, 10.5192, 1.8216}}, {7897, {6.6744, 8.7408, 1.8216}}, {7898, {10.2888, 10.4040, 0.1152}}, {7899, {7.8696, 8.8416, 0.1152}}, {7900, {10.2888, 10.4040, 0.1152}}, {7901, {7.8696, 8.8416, 0.1152}}, {7902, {10.2888, 10.7496, 0.1152}}, {7903, {7.8696, 9.0648, 0.1152}}, {7904, {10.2888, 10.5336, 0.1152}}, {7905, {7.8696, 8.6112, 0.1152}}, {7906, {10.2888, 8.3808, 1.8216}}, {7907, {7.8696, 6.4584, 1.8216}}, {7908, {8.6688, 8.2584, 1.8216}}, {7909, {6.6744, 6.3432, 1.8216}}, {7910, {8.6688, 10.7496, 0.1152}}, {7911, {6.6744, 9.0648, 0.1152}}, {7912, {10.2528, 10.4040, 0.1152}}, {7913, {8.0352, 8.8416, 0.1152}}, {7914, {10.2528, 10.4040, 0.1152}}, {7915, {8.0352, 8.8416, 0.1152}}, {7916, {10.2528, 10.7496, 0.1152}}, {7917, {8.0352, 9.0648, 0.1152}}, {7918, {10.2528, 10.5336, 0.1152}}, {7919, {8.0352, 8.6112, 0.1152}}, {7920, {10.2528, 8.2584, 1.8216}}, {7921, {8.0352, 6.3432, 1.8216}}, {7922, {8.0064, 10.4040, -0.0000}}, {7923, {6.0048, 8.8416, 2.4912}}, {7924, {8.0064, 8.2584, 1.8216}}, {7925, {6.0048, 6.3432, 2.4912}}, {7926, {8.0064, 10.7496, -0.0000}}, {7927, {6.0048, 9.0648, 2.4912}}, {7928, {8.0064, 10.5336, -0.0000}}, {7929, {6.0048, 8.6112, 2.4912}}, {7936, {6.9408, 9.2808, 0.1152}}, {7937, {6.9408, 9.2808, 0.1152}}, {7938, {6.9408, 9.2808, 0.1152}}, {7939, {6.9408, 9.2808, 0.1152}}, {7940, {6.9408, 9.2808, 0.1152}}, {7941, {6.9408, 9.2808, 0.1152}}, {7942, {6.9408, 10.7640, 0.1152}}, {7943, {6.9408, 10.7064, 0.1152}}, {7944, {8.0064, 8.6976, -0.0000}}, {7945, {8.0064, 8.6976, -0.0000}}, {7946, {9.7632, 8.6976, -0.0000}}, {7947, {9.7632, 8.6976, -0.0000}}, {7948, {9.7632, 8.6976, -0.0000}}, {7949, {9.7632, 8.6976, -0.0000}}, {7950, {9.7632, 10.3536, -0.0000}}, {7951, {9.7632, 10.3536, -0.0000}}, {7952, {5.3496, 9.2808, 0.1152}}, {7953, {5.3496, 9.2808, 0.1152}}, {7954, {5.3496, 9.2808, 0.1152}}, {7955, {5.3496, 9.2808, 0.1152}}, {7956, {5.3496, 9.2808, 0.1152}}, {7957, {5.3496, 9.2808, 0.1152}}, {7960, {9.1800, 8.6976, -0.0000}}, {7961, {9.1800, 8.6976, -0.0000}}, {7962, {11.1384, 8.6976, -0.0000}}, {7963, {11.1384, 8.6976, -0.0000}}, {7964, {11.1384, 8.6976, -0.0000}}, {7965, {11.1384, 8.6976, -0.0000}}, {7968, {6.6744, 9.2808, 2.4840}}, {7969, {6.6744, 9.2808, 2.4840}}, {7970, {6.6744, 9.2808, 2.4840}}, {7971, {6.6744, 9.2808, 2.4840}}, {7972, {6.6744, 9.2808, 2.4840}}, {7973, {6.6744, 9.2808, 2.4840}}, {7974, {6.6744, 10.7064, 2.4840}}, {7975, {6.6744, 10.7064, 2.4840}}, {7976, {9.8424, 8.6976, -0.0000}}, {7977, {9.8424, 8.6976, -0.0000}}, {7978, {12.1824, 8.6976, -0.0000}}, {7979, {12.1824, 8.6976, -0.0000}}, {7980, {12.1824, 8.6976, -0.0000}}, {7981, {12.1824, 8.6976, -0.0000}}, {7982, {12.1824, 10.3536, -0.0000}}, {7983, {12.1824, 10.3536, -0.0000}}, {7984, {2.6640, 9.2808, -0.0000}}, {7985, {2.6640, 9.2808, -0.0000}}, {7986, {2.6640, 9.2808, -0.0000}}, {7987, {2.6640, 9.2808, -0.0000}}, {7988, {2.6640, 9.2808, -0.0000}}, {7989, {2.6640, 9.2808, -0.0000}}, {7990, {2.6640, 10.9368, -0.0000}}, {7991, {2.6640, 10.9368, -0.0000}}, {7992, {4.5072, 8.6976, -0.0000}}, {7993, {4.5072, 8.6976, -0.0000}}, {7994, {6.8544, 8.6976, -0.0000}}, {7995, {6.8544, 8.6976, -0.0000}}, {7996, {6.8544, 8.6976, -0.0000}}, {7997, {6.8544, 8.6976, -0.0000}}, {7998, {6.8544, 10.3536, -0.0000}}, {7999, {6.8544, 10.3536, -0.0000}}, {8000, {6.6744, 9.2808, 0.1152}}, {8001, {6.6744, 9.2808, 0.1152}}, {8002, {6.6744, 9.2808, 0.1152}}, {8003, {6.6744, 9.2808, 0.1152}}, {8004, {6.6744, 9.2808, 0.1152}}, {8005, {6.6744, 9.2808, 0.1152}}, {8008, {9.9216, 8.6976, 0.1152}}, {8009, {9.9216, 8.6976, 0.1152}}, {8010, {12.2688, 8.6976, 0.1152}}, {8011, {12.2688, 8.6976, 0.1152}}, {8012, {11.6784, 8.6976, 0.1152}}, {8013, {11.6784, 8.6976, 0.1152}}, {8016, {6.5664, 9.2808, 0.1152}}, {8017, {6.5664, 9.2808, 0.1152}}, {8018, {6.5664, 9.2808, 0.1152}}, {8019, {6.5664, 9.2808, 0.1152}}, {8020, {6.5664, 9.2808, 0.1152}}, {8021, {6.5664, 9.2808, 0.1152}}, {8022, {6.5664, 10.7064, 0.1152}}, {8023, {6.5664, 10.7064, 0.1152}}, {8025, {9.7632, 8.6976, -0.0000}}, {8027, {11.5200, 8.6976, -0.0000}}, {8029, {12.1104, 8.6976, -0.0000}}, {8031, {11.5200, 10.3536, -0.0000}}, {8032, {9.3744, 9.2808, 0.1152}}, {8033, {9.3744, 9.2808, 0.1152}}, {8034, {9.3744, 9.2808, 0.1152}}, {8035, {9.3744, 9.2808, 0.1152}}, {8036, {9.3744, 9.2808, 0.1152}}, {8037, {9.3744, 9.2808, 0.1152}}, {8038, {9.3744, 10.9368, 0.1152}}, {8039, {9.3744, 10.9368, 0.1152}}, {8040, {9.5616, 8.6976, -0.0000}}, {8041, {9.5616, 8.6976, -0.0000}}, {8042, {11.9016, 8.6976, -0.0000}}, {8043, {11.9016, 8.6976, -0.0000}}, {8044, {11.3184, 8.6976, -0.0000}}, {8045, {11.3184, 8.6976, -0.0000}}, {8046, {11.3184, 10.3536, -0.0000}}, {8047, {11.3184, 10.3536, -0.0000}}, {8048, {6.9408, 9.0432, 0.1152}}, {8049, {6.9408, 9.0432, 0.1152}}, {8050, {5.3496, 9.0432, 0.1152}}, {8051, {5.3496, 9.0432, 0.1152}}, {8052, {6.6744, 9.0432, 2.4840}}, {8053, {6.6744, 9.0432, 2.4840}}, {8054, {2.6640, 9.0432, -0.0000}}, {8055, {2.6640, 9.0432, -0.0000}}, {8056, {6.6744, 9.0432, 0.1152}}, {8057, {6.6744, 9.0432, 0.1152}}, {8058, {6.5664, 9.0432, 0.1152}}, {8059, {6.5664, 9.0432, 0.1152}}, {8060, {9.3744, 9.0432, 0.1152}}, {8061, {9.3744, 9.0432, 0.1152}}, {8064, {6.9408, 9.2808, 2.4912}}, {8065, {6.9408, 9.2808, 2.4912}}, {8066, {6.9408, 9.2808, 2.4912}}, {8067, {6.9408, 9.2808, 2.4912}}, {8068, {6.9408, 9.2808, 2.4912}}, {8069, {6.9408, 9.2808, 2.4912}}, {8070, {6.9408, 10.7064, 2.4912}}, {8071, {6.9408, 10.7064, 2.4912}}, {8072, {8.0064, 8.6976, 2.4912}}, {8073, {8.0064, 8.6976, 2.4912}}, {8074, {9.7632, 8.6976, 2.4912}}, {8075, {9.7632, 8.6976, 2.4912}}, {8076, {9.7632, 8.6976, 2.4912}}, {8077, {9.7632, 8.6976, 2.4912}}, {8078, {9.7632, 10.3536, 2.4912}}, {8079, {9.7632, 10.3536, 2.4912}}, {8080, {6.6744, 9.2808, 2.4912}}, {8081, {6.6744, 9.2808, 2.4912}}, {8082, {6.6744, 9.2808, 2.4912}}, {8083, {6.6744, 9.2808, 2.4912}}, {8084, {6.6744, 9.2808, 2.4912}}, {8085, {6.6744, 9.2808, 2.4912}}, {8086, {6.6744, 10.9368, 2.4912}}, {8087, {6.6744, 10.9368, 2.4912}}, {8088, {9.8424, 8.6976, 2.4912}}, {8089, {9.8424, 8.6976, 2.4912}}, {8090, {12.1824, 8.6976, 2.4912}}, {8091, {12.1824, 8.6976, 2.4912}}, {8092, {12.1824, 8.6976, 2.4912}}, {8093, {12.1824, 8.6976, 2.4912}}, {8094, {12.1824, 10.3536, 2.4912}}, {8095, {12.1824, 10.3536, 2.4912}}, {8096, {9.3744, 9.2808, 2.4912}}, {8097, {9.3744, 9.2808, 2.4912}}, {8098, {9.3744, 9.2808, 2.4912}}, {8099, {9.3744, 9.2808, 2.4912}}, {8100, {9.3744, 9.2808, 2.4912}}, {8101, {9.3744, 9.2808, 2.4912}}, {8102, {9.3744, 10.7064, 2.4912}}, {8103, {9.3744, 10.7064, 2.4912}}, {8104, {9.5616, 8.6976, 2.4912}}, {8105, {9.5616, 8.6976, 2.4912}}, {8106, {11.9016, 8.6976, 2.4912}}, {8107, {11.9016, 8.6976, 2.4912}}, {8108, {11.3184, 8.6976, 2.4912}}, {8109, {11.3184, 8.6976, 2.4912}}, {8110, {11.3184, 10.3536, 2.4912}}, {8111, {11.3184, 10.3536, 2.4912}}, {8112, {6.9408, 8.8560, 0.1152}}, {8113, {6.9408, 7.9920, 0.1152}}, {8114, {6.9408, 9.0432, 2.4912}}, {8115, {6.9408, 6.4584, 2.4912}}, {8116, {6.9408, 9.0432, 2.4912}}, {8118, {6.9408, 8.6112, 0.1152}}, {8119, {6.9408, 8.6112, 2.4912}}, {8120, {8.0064, 10.4256, -0.0000}}, {8121, {8.0064, 9.9216, -0.0000}}, {8122, {8.0064, 9.0432, -0.0000}}, {8123, {8.0064, 9.0432, -0.0000}}, {8124, {8.0064, 8.2584, 2.4912}}, {8125, {3.9960, 8.6976, -6.7824}}, {8126, {3.9960, -0.7416, 2.4912}}, {8127, {3.9960, 8.6976, -6.7824}}, {8128, {3.9960, 8.6112, -7.0416}}, {8129, {3.9960, 10.1304, -7.1424}}, {8130, {6.6744, 9.0432, 2.4912}}, {8131, {6.6744, 6.4584, 2.4912}}, {8132, {6.6744, 9.0432, 2.4912}}, {8134, {6.6744, 8.6112, 2.4840}}, {8135, {6.6744, 8.6112, 2.4912}}, {8136, {9.7632, 9.0432, -0.0000}}, {8137, {9.7632, 9.0432, -0.0000}}, {8138, {10.4256, 9.0432, -0.0000}}, {8139, {10.4256, 9.0432, -0.0000}}, {8140, {8.6688, 8.2584, 2.4912}}, {8141, {3.9960, 8.6976, -6.7824}}, {8142, {3.9960, 8.6976, -6.7824}}, {8143, {3.9960, 10.3536, -6.7248}}, {8144, {2.6640, 8.8560, -0.0000}}, {8145, {2.6640, 7.9920, -0.0000}}, {8146, {2.6640, 10.4472, -0.0000}}, {8147, {2.6640, 10.4472, -0.0000}}, {8150, {2.6640, 8.6112, -0.0000}}, {8151, {2.6640, 10.1304, -0.0000}}, {8152, {3.3336, 10.9800, -0.0000}}, {8153, {3.3336, 9.9504, -0.0000}}, {8154, {5.0904, 9.0432, -0.0000}}, {8155, {5.0904, 9.0432, -0.0000}}, {8157, {3.9960, 8.6976, -6.7824}}, {8158, {3.9960, 8.6976, -6.7824}}, {8159, {3.9960, 10.3536, -6.7248}}, {8160, {6.5664, 8.8560, 0.1152}}, {8161, {6.5664, 7.9920, 0.1152}}, {8162, {6.5664, 10.4472, 0.1152}}, {8163, {6.5664, 10.4472, 0.1152}}, {8164, {6.8256, 9.2808, 2.4912}}, {8165, {6.8256, 9.2808, 2.4912}}, {8166, {6.5664, 8.6112, 0.1152}}, {8167, {6.5664, 10.1304, 0.1152}}, {8168, {8.0064, 10.4256, -0.0000}}, {8169, {8.0064, 9.9216, -0.0000}}, {8170, {10.3464, 9.0432, -0.0000}}, {8171, {10.6416, 9.0432, -0.0000}}, {8172, {9.1800, 8.6976, -0.0000}}, {8173, {3.9960, 8.8344, -7.2216}}, {8174, {3.9960, 8.8344, -7.2216}}, {8175, {3.9960, 9.0432, -7.1352}}, {8178, {9.3744, 9.0432, 2.4912}}, {8179, {9.3744, 6.4656, 2.4912}}, {8180, {9.3744, 9.0432, 2.4912}}, {8182, {9.3744, 8.6112, 0.1152}}, {8183, {9.3744, 8.6112, 2.4912}}, {8184, {11.0952, 9.0432, 0.1152}}, {8185, {9.9216, 9.0432, 0.1152}}, {8186, {10.7280, 9.0432, -0.0000}}, {8187, {9.5616, 9.0432, -0.0000}}, {8188, {8.9712, 8.3808, 2.4912}}, {8189, {3.9960, 8.6400, -7.0056}}, {8190, {3.9960, 8.6976, -6.7824}}, {8192, {6.0048, 0.0000, -0.0000}}, {8193, {12.0024, 0.0000, -0.0000}}, {8194, {6.0048, 0.0000, -0.0000}}, {8195, {12.0024, 0.0000, -0.0000}}, {8196, {4.0032, 0.0000, -0.0000}}, {8197, {3.0024, 0.0000, -0.0000}}, {8198, {2.0016, 0.0000, -0.0000}}, {8199, {6.6744, 0.0000, -0.0000}}, {8200, {3.3336, 0.0000, -0.0000}}, {8201, {2.4048, 0.0000, -0.0000}}, {8202, {1.0008, 0.0000, -0.0000}}, {8203, {0.0000, 0.0000, -0.0000}}, {8204, {0.0000, 7.5456, 1.5984}}, {8205, {0.0000, 8.2872, 1.5984}}, {8206, {0.0000, 8.2872, 1.5984}}, {8207, {0.0000, 8.2872, 1.5984}}, {8210, {6.6744, 3.4488, -2.6424}}, {8211, {6.6744, 3.4488, -2.6424}}, {8212, {12.0024, 3.4488, -2.6424}}, {8213, {12.0024, 3.4488, -2.6424}}, {8214, {4.9608, 8.6976, -0.0000}}, {8215, {6.6312, -0.5040, 2.5416}}, {8216, {2.6640, 8.2584, -5.5800}}, {8217, {2.6640, 8.2584, -5.5800}}, {8218, {2.6640, 1.1448, 1.5336}}, {8219, {2.6640, 8.2584, -5.5800}}, {8220, {3.9960, 8.2584, -5.5800}}, {8221, {3.9960, 8.2584, -5.5800}}, {8222, {3.9960, 1.1448, 1.5336}}, {8223, {3.9960, 8.2584, -5.5800}}, {8224, {6.6744, 8.6976, 0.8064}}, {8225, {6.6744, 8.6976, 0.8280}}, {8226, {4.2048, 5.6016, -2.3472}}, {8230, {12.0024, 1.2816, -0.0000}}, {8234, {0.0000, 7.2288, 1.5984}}, {8235, {0.0000, 7.2288, 1.5984}}, {8236, {0.0000, 8.2728, 1.5984}}, {8237, {0.0000, 8.2728, 1.5984}}, {8238, {0.0000, 8.2728, 1.5984}}, {8239, {2.4048, 0.0000, -0.0000}}, {8240, {12.0024, 8.3304, 0.0648}}, {8242, {2.2536, 8.2584, -5.2200}}, {8243, {4.2480, 8.2584, -5.2200}}, {8244, {4.2480, 8.2584, -5.2200}}, {8249, {3.9960, 5.5080, -0.8280}}, {8250, {3.9960, 5.5080, -0.8280}}, {8252, {6.0048, 8.2584, -0.0000}}, {8254, {3.9960, 9.4896, -8.8056}}, {8260, {2.0016, 8.2584, -0.0000}}, {8286, {3.3336, 8.6976, -0.0000}}, {8298, {0.0000, 8.2728, 1.5984}}, {8299, {0.0000, 8.2728, 1.5984}}, {8300, {0.0000, 8.2728, 1.5984}}, {8301, {0.0000, 8.3088, 1.5984}}, {8302, {0.0000, 8.2872, 1.5984}}, {8303, {0.0000, 8.2728, 1.5984}}, {8308, {3.9960, 8.2584, -3.2976}}, {8309, {3.9960, 8.2584, -3.2328}}, {8311, {3.9960, 8.2584, -3.3048}}, {8312, {3.9960, 8.3304, -3.2328}}, {8319, {4.3776, 6.9192, -3.0384}}, {8336, {4.4640, 3.7368, 0.9000}}, {8337, {4.4568, 3.7512, 0.8856}}, {8338, {4.5288, 3.7512, 0.8856}}, {8339, {3.9384, 3.6720, 0.7992}}, {8340, {4.4568, 3.7512, 0.8856}}, {8352, {6.6744, 8.7408, -0.0000}}, {8353, {8.6688, 9.0504, 0.6624}}, {8354, {8.6688, 8.3808, 0.1152}}, {8355, {6.6744, 8.2584, -0.0000}}, {8356, {6.6744, 8.3808, -0.0000}}, {8357, {10.0008, 7.8768, 1.1736}}, {8358, {8.6688, 8.2584, -0.0000}}, {8359, {13.1256, 8.2584, 0.1152}}, {8360, {13.9752, 8.2584, 0.1152}}, {8361, {11.3256, 8.2584, -0.0000}}, {8362, {10.1880, 7.1928, -0.0000}}, {8363, {6.1560, 8.6976, -1.3680}}, {8364, {6.6744, 8.3808, 0.1152}}, {8365, {8.0064, 8.2584, -0.0000}}, {8366, {7.3296, 8.2584, -0.0000}}, {8367, {12.0024, 9.6696, 2.3832}}, {8368, {6.2568, 8.6976, 2.4912}}, {8369, {8.0064, 8.2584, -0.0000}}, {8370, {9.3384, 9.2016, 1.2456}}, {8371, {8.0064, 8.2584, -0.0000}}, {8372, {6.6744, 8.7552, 0.1152}}, {8373, {8.6688, 9.1944, 1.2456}}, {8432, {0.0000, 9.9432, -5.7312}}, {8453, {10.6272, 8.3232, 0.0720}}, {8467, {3.8808, 8.3736, 0.1152}}, {8470, {12.8736, 8.2584, -0.0000}}, {8471, {8.8416, 8.3808, 0.0936}}, {8482, {12.0024, 8.2584, -3.7152}}, {8486, {9.2160, 8.3808, -0.0000}}, {8494, {7.2000, 6.4224, 0.2016}}, {8525, {11.3184, 8.8704, 0.3312}}, {8526, {5.8752, 6.3432, -0.0000}}, {8531, {10.0080, 8.2584, 0.0648}}, {8532, {10.0080, 8.3304, 0.0648}}, {8539, {10.0080, 8.2584, 0.0576}}, {8540, {10.0080, 8.3304, 0.0576}}, {8541, {10.0080, 8.2584, 0.0576}}, {8542, {10.0080, 8.2584, 0.0576}}, {8580, {6.0048, 6.4584, 0.1152}}, {8592, {12.0024, 3.4056, -0.5832}}, {8593, {6.0048, 6.7464, 0.3600}}, {8594, {12.0024, 3.4056, -0.5832}}, {8595, {6.0048, 6.7464, 0.3600}}, {8596, {12.0024, 3.4056, -0.5832}}, {8597, {6.0048, 6.7464, 0.3600}}, {8616, {6.0048, 6.7464, 1.0800}}, {8706, {5.9328, 8.6544, 0.1584}}, {8710, {7.3440, 8.2584, -0.0000}}, {8719, {9.8784, 8.2584, 2.5416}}, {8721, {8.5536, 8.2584, 2.5416}}, {8722, {7.0128, 4.4208, -3.5640}}, {8725, {2.0016, 8.2584, -0.0000}}, {8729, {3.3336, 3.9024, -2.6064}}, {8730, {6.5880, 9.4968, 0.0792}}, {8734, {8.5536, 5.7600, -1.1880}}, {8735, {11.7504, 7.1640, -0.0000}}, {8745, {8.6256, 6.0480, 0.0144}}, {8747, {3.2904, 8.8344, 2.5416}}, {8776, {6.5880, 5.9328, -1.9656}}, {8800, {6.5880, 7.5960, -0.3168}}, {8801, {7.0056, 6.4728, -1.4328}}, {8804, {6.5880, 7.2144, -0.0000}}, {8805, {6.5880, 7.2144, -0.0000}}, {8962, {7.2504, 6.7608, -0.0000}}, {8976, {7.0128, 4.4208, -1.0584}}, {8992, {7.2504, 10.0008, 3.6000}}, {8993, {7.2504, 10.0008, 3.6000}}, {9472, {8.5032, 4.0680, -3.2112}}, {9474, {7.5024, 10.9224, 3.6360}}, {9484, {8.5032, 4.0680, 3.6360}}, {9488, {8.5032, 4.0680, 3.6360}}, {9492, {8.5032, 10.9224, -3.2112}}, {9496, {8.5032, 10.9224, -3.2112}}, {9500, {8.5032, 10.9224, 3.6360}}, {9508, {8.5032, 10.9224, 3.6360}}, {9516, {8.5032, 4.0680, 3.6360}}, {9524, {8.5032, 10.9224, -3.2112}}, {9532, {8.5032, 10.9224, 3.6360}}, {9552, {8.5032, 5.1192, -2.1528}}, {9553, {8.5032, 10.9224, 3.6360}}, {9554, {8.5032, 5.1192, 3.6360}}, {9555, {8.5032, 4.0680, 3.6360}}, {9556, {8.5032, 5.1192, 3.6360}}, {9557, {8.5032, 5.1192, 3.6360}}, {9558, {8.5032, 4.0680, 3.6360}}, {9559, {8.5032, 5.1192, 3.6360}}, {9560, {8.5032, 10.9224, -2.1528}}, {9561, {8.5032, 10.9224, -3.2112}}, {9562, {8.5032, 10.9224, -2.1528}}, {9563, {8.5032, 10.9224, -2.1528}}, {9564, {8.5032, 10.9224, -3.2112}}, {9565, {8.5032, 10.9224, -2.1528}}, {9566, {8.5032, 10.9224, 3.6360}}, {9567, {8.5032, 10.9224, 3.6360}}, {9568, {8.5032, 10.9224, 3.6360}}, {9569, {8.5032, 10.9224, 3.6360}}, {9570, {8.5032, 10.9224, 3.6360}}, {9571, {8.5032, 10.9224, 3.6360}}, {9572, {8.5032, 5.1192, 3.6360}}, {9573, {8.5032, 4.0680, 3.6360}}, {9574, {8.5032, 5.1192, 3.6360}}, {9575, {8.5032, 10.9224, -2.1528}}, {9576, {8.5032, 10.9224, -3.2112}}, {9577, {8.5032, 10.9224, -2.1528}}, {9578, {8.5032, 10.9224, 3.6360}}, {9579, {8.5032, 10.9224, 3.6360}}, {9580, {8.5032, 10.9224, 3.6360}}, {9600, {8.5032, 10.9224, -3.6360}}, {9604, {8.5032, 3.6360, 3.6360}}, {9608, {8.5032, 10.9224, 3.6360}}, {9612, {8.5032, 10.9224, 3.6360}}, {9616, {8.5032, 10.9224, 3.6360}}, {9617, {8.5032, 9.9576, 3.0672}}, {9618, {8.5032, 9.9576, 3.0672}}, {9619, {8.7480, 9.9576, 3.6432}}, {9632, {7.2504, 6.4944, -0.6840}}, {9633, {7.2504, 7.1784, -0.0000}}, {9642, {4.2552, 5.2200, -2.2464}}, {9643, {4.2552, 5.2200, -2.2464}}, {9644, {12.0024, 3.6072, -0.0000}}, {9650, {11.8800, 7.0200, -0.0000}}, {9658, {11.8800, 7.0056, 0.1584}}, {9660, {11.8800, 6.8616, 0.1584}}, {9668, {11.8800, 7.0056, 0.1584}}, {9674, {5.9328, 8.4384, -0.0000}}, {9675, {7.2504, 6.2424, -0.9504}}, {9676, {7.1352, 6.4872, -0.5040}}, {9679, {7.2504, 5.9688, -0.8064}}, {9688, {7.2504, 6.7680, -0.0000}}, {9689, {7.2504, 6.7680, -0.0000}}, {9702, {4.2552, 5.1840, -2.2824}}, {9786, {12.2544, 7.0056, 0.1584}}, {9787, {12.6288, 7.0056, 0.1584}}, {9788, {11.0016, 6.3504, 0.8280}}, {9792, {9.0000, 6.7608, -0.4680}}, {9794, {9.0000, 6.7680, -1.4688}}, {9824, {6.3792, 7.2144, -0.0000}}, {9827, {7.8768, 7.1640, -0.0000}}, {9829, {7.1280, 6.7104, 0.1368}}, {9830, {6.1272, 7.1640, 0.1440}}, {9834, {6.0048, 6.7608, -0.1728}}, {9835, {9.0000, 6.7896, 0.2520}}, {9839, {6.0048, 8.6976, 1.1736}}, {11360, {6.6744, 8.2584, -0.0000}}, {11361, {2.6640, 8.6976, -0.0000}}, {11362, {6.6744, 8.2584, -0.0000}}, {11363, {8.0064, 8.2584, -0.0000}}, {11364, {8.6688, 8.2584, 2.4912}}, {11365, {6.6744, 8.6976, 2.4840}}, {11366, {3.3336, 8.6976, 2.4840}}, {11367, {8.6688, 8.2584, 2.3904}}, {11368, {6.6744, 8.6976, 2.3904}}, {11369, {8.0064, 8.2584, 2.3904}}, {11370, {6.0048, 8.6976, 2.3904}}, {11371, {7.3296, 8.2584, 2.3904}}, {11372, {6.0048, 6.3432, 2.3904}}, {11373, {8.7912, 8.3808, 0.1152}}, {11377, {7.1640, 6.4584, -0.0000}}, {11378, {12.4488, 8.3808, -0.0000}}, {11379, {10.0944, 6.4584, -0.0000}}, {11380, {6.0048, 6.4080, -0.0000}}, {11381, {6.9264, 8.2584, -0.0000}}, {11382, {5.1048, 6.3432, -0.0000}}, {11383, {7.7832, 6.4800, 0.1152}}, {11799, {3.9960, 5.2920, -0.8136}}, {42775, {0.0000, 8.6976, -5.5656}}, {42776, {0.0000, 8.6976, -5.9472}}, {42777, {0.0000, 8.6976, -6.5592}}, {42778, {0.0000, 8.6976, -6.5592}}, {42779, {6.0048, 11.1960, -6.0480}}, {42780, {6.0048, 11.1960, -6.0480}}, {42781, {3.3336, 11.7000, -5.4720}}, {42782, {3.3336, 11.7000, -5.4720}}, {42783, {3.3336, 8.6976, -2.4696}}, {42784, {0.0000, 8.6976, -6.6168}}, {42785, {0.0000, 2.0808, -0.0000}}, {42888, {3.9960, -0.8208, 2.4912}}, {42889, {3.3336, 6.3432, -1.1808}}, {42890, {5.2488, 5.1192, -1.4328}}, {42891, {2.2896, 8.6976, -3.5208}}, {42892, {2.2896, 8.6976, -4.9680}} }; const std::unordered_map SYMBOLA_DIM = { {1, {6.7536, 8.7552, -0.0000}}, {13, {3.0024, 0.0000, -0.0000}}, {32, {3.0024, 0.0000, -0.0000}}, {33, {3.9960, 8.5896, -0.0000}}, {34, {4.7376, 7.8408, -4.5144}}, {35, {6.0048, 7.4088, 0.7128}}, {36, {5.6520, 8.4744, 0.6336}}, {37, {9.7416, 9.2448, 0.7920}}, {38, {9.3312, 8.5824, 0.2664}}, {39, {3.1392, 7.8408, -4.5144}}, {40, {3.9960, 8.8704, 2.0520}}, {41, {3.9888, 8.8704, 2.0520}}, {42, {5.6520, 9.1512, -4.2912}}, {43, {9.3168, 7.0776, 0.2592}}, {44, {3.0024, 1.2744, 2.3184}}, {45, {4.4928, 3.6504, -3.1680}}, {46, {3.0024, 1.2744, -0.0000}}, {47, {3.3336, 8.8848, 2.0592}}, {48, {5.9976, 8.1288, 0.2664}}, {49, {5.9976, 8.1360, -0.0000}}, {50, {5.9976, 8.1288, -0.0000}}, {51, {5.9976, 8.1288, 0.2664}}, {52, {5.9976, 8.2728, -0.0000}}, {53, {5.9976, 8.1288, 0.2664}}, {54, {5.9976, 8.1288, 0.2664}}, {55, {5.9976, 8.2656, 0.2592}}, {56, {5.9976, 8.1288, 0.2664}}, {57, {5.9976, 8.1288, 0.2664}}, {58, {3.1896, 5.0184, -0.0000}}, {59, {3.1968, 5.0184, 2.3184}}, {60, {9.3168, 6.8688, 0.0576}}, {61, {9.3168, 4.8384, -1.9872}}, {62, {9.3168, 6.8832, 0.0504}}, {63, {5.3280, 8.4600, -0.0000}}, {64, {8.9064, 6.6240, 1.7496}}, {65, {8.6976, 8.2656, 0.0072}}, {66, {7.8912, 7.8624, -0.0000}}, {67, {7.8192, 8.1432, 0.2520}}, {68, {8.5536, 7.8624, -0.0000}}, {69, {7.9416, 7.8624, -0.0000}}, {70, {7.4448, 7.8696, -0.0000}}, {71, {8.6256, 8.1432, 0.2520}}, {72, {8.6760, 7.8840, -0.0000}}, {73, {4.3128, 7.8840, -0.0000}}, {74, {5.6808, 7.8912, 0.2520}}, {75, {8.8992, 7.8840, -0.0000}}, {76, {7.1208, 7.8840, -0.0000}}, {77, {10.5048, 7.8696, -0.0000}}, {78, {8.6760, 7.8840, -0.0000}}, {79, {8.4600, 8.1432, 0.2520}}, {80, {7.5888, 7.8696, -0.0000}}, {81, {8.5392, 8.1432, 2.2392}}, {82, {8.8344, 7.8624, 0.2520}}, {83, {5.9040, 8.1432, 0.2520}}, {84, {8.2800, 7.8696, -0.0000}}, {85, {8.6760, 7.8840, 0.2520}}, {86, {8.9928, 7.8912, 0.2520}}, {87, {12.2256, 7.8912, 0.2520}}, {88, {8.8920, 7.8912, -0.0000}}, {89, {9.1800, 7.8840, -0.0000}}, {90, {6.6096, 7.8624, -0.0000}}, {91, {3.9960, 8.8632, 2.0520}}, {92, {3.3336, 8.8848, 2.0592}}, {93, {3.9960, 8.8632, 2.0520}}, {94, {5.3136, 7.9704, -5.7960}}, {95, {5.9976, -2.0880, 2.5920}}, {96, {3.1392, 7.8408, -4.5144}}, {97, {6.2640, 5.6232, 0.1440}}, {98, {6.7968, 8.6976, 0.1440}}, {99, {5.3928, 5.6232, 0.1440}}, {100, {6.7896, 8.6976, 0.1440}}, {101, {5.4648, 5.6232, 0.1440}}, {102, {4.6728, 8.8344, -0.0000}}, {103, {6.3360, 5.6808, 2.5776}}, {104, {6.9192, 8.6976, 0.0072}}, {105, {3.2904, 8.1360, -0.0000}}, {106, {3.4416, 8.1360, 2.5704}}, {107, {6.6744, 8.7048, -0.0000}}, {108, {3.3912, 8.7048, -0.0000}}, {109, {10.3968, 5.5368, 0.0072}}, {110, {6.9192, 5.5368, 0.0072}}, {111, {6.1704, 5.6232, 0.1440}}, {112, {6.7968, 5.5368, 2.4336}}, {113, {6.7896, 5.5368, 2.4336}}, {114, {4.8168, 5.5440, -0.0000}}, {115, {4.7088, 5.6232, 0.1440}}, {116, {4.5360, 7.7112, 0.1440}}, {117, {6.9192, 5.5440, 0.1440}}, {118, {6.7392, 5.4072, 0.1440}}, {119, {9.2016, 5.4072, 0.1440}}, {120, {6.9264, 5.4072, -0.0000}}, {121, {6.7392, 5.4072, 2.5704}}, {122, {5.2992, 5.4072, -0.0000}}, {123, {5.7528, 8.8704, 2.0520}}, {124, {2.3976, 8.8848, 2.0592}}, {125, {5.7528, 8.8704, 2.0520}}, {126, {6.1992, 4.1904, -2.2248}}, {160, {3.0024, 0.0000, -0.0000}}, {161, {3.9960, 6.1200, 2.4696}}, {162, {5.3928, 8.4744, 0.6336}}, {163, {6.1560, 8.1000, 0.1440}}, {164, {6.0048, 6.2280, -0.5832}}, {165, {9.1800, 7.8840, -0.0000}}, {166, {2.2608, 8.8704, 2.0520}}, {167, {5.6520, 7.9704, 1.8792}}, {168, {3.8448, 8.2512, -7.0560}}, {169, {8.9280, 7.1280, 0.7056}}, {170, {4.8168, 7.2504, -3.2976}}, {171, {6.6816, 5.0616, 0.1296}}, {172, {9.3240, 4.2696, -1.0584}}, {173, {4.4928, 3.6504, -3.1680}}, {174, {8.9280, 7.1280, 0.7056}}, {175, {5.9976, 8.4528, -7.9488}}, {176, {4.5144, 8.2584, -4.8744}}, {177, {9.3168, 7.3296, -0.0000}}, {178, {4.6872, 8.9208, -3.3912}}, {179, {4.6944, 8.9208, -3.2184}}, {180, {2.2176, 8.7984, -6.5304}}, {181, {6.5592, 5.4072, 2.4480}}, {182, {5.6520, 7.5312, 2.3904}}, {183, {3.0024, 4.5648, -3.2904}}, {184, {2.7216, 0.0288, 2.3544}}, {185, {4.6944, 8.9280, -3.3840}}, {186, {4.7520, 7.2504, -3.2976}}, {187, {6.6816, 5.0616, 0.1296}}, {188, {10.0944, 8.9280, 1.9368}}, {189, {10.0944, 8.9208, 1.9296}}, {190, {10.0944, 8.9208, 1.9368}}, {191, {5.3280, 6.1200, 2.3400}}, {215, {9.3240, 6.4944, -0.3312}}, {216, {8.4600, 9.1800, 1.3176}}, {230, {8.7552, 5.6160, 0.1440}}, {231, {5.3928, 5.6304, 2.3400}}, {240, {5.9976, 8.3232, 0.1368}}, {247, {9.3168, 6.6960, -0.1224}}, {248, {6.1704, 6.7464, 1.2816}}, {295, {6.9192, 8.6976, 0.0072}}, {305, {3.2904, 5.5440, -0.0000}}, {331, {6.8184, 5.5440, 2.5704}}, {339, {9.6696, 5.6160, 0.1440}}, {402, {6.0552, 8.4672, 2.4696}}, {411, {6.5592, 8.8344, 0.1656}}, {448, {3.4776, 8.1864, 0.2952}}, {449, {5.9400, 8.1864, 0.2952}}, {450, {6.8760, 8.1792, 0.3024}}, {451, {3.9960, 8.5896, -0.0000}}, {567, {3.4488, 5.5440, 2.5704}}, {568, {10.1952, 8.6976, 0.1440}}, {569, {10.1520, 5.5368, 2.4336}}, {572, {5.3928, 6.7176, 1.2456}}, {576, {5.3568, 5.4072, 1.2816}}, {592, {6.2640, 5.6232, 0.1440}}, {593, {6.7896, 5.5368, 0.1440}}, {594, {6.7896, 5.5368, 0.1440}}, {595, {6.7968, 8.4168, 0.1440}}, {596, {5.3928, 5.6232, 0.1440}}, {597, {5.3928, 5.6232, 1.4688}}, {598, {6.7896, 8.6976, 2.5992}}, {599, {7.7616, 8.4168, 0.1440}}, {600, {5.4648, 5.6232, 0.1440}}, {601, {5.4648, 5.6232, 0.1440}}, {602, {7.9200, 6.9264, 0.1440}}, {603, {5.1696, 5.6232, 0.1440}}, {604, {5.1696, 5.6232, 0.1440}}, {605, {7.5096, 6.9264, 0.1440}}, {606, {5.7240, 5.6232, 0.1440}}, {607, {3.4992, 5.5440, 2.5704}}, {608, {7.7472, 8.4168, 2.5920}}, {609, {6.7968, 5.5368, 2.5920}}, {610, {6.6456, 5.5944, 0.1728}}, {611, {6.7392, 5.4072, 2.5920}}, {612, {6.1560, 5.4072, 0.1440}}, {613, {6.9192, 5.4072, 2.5920}}, {614, {6.9192, 8.4168, 0.0072}}, {615, {6.8184, 8.4240, 2.5704}}, {616, {3.3912, 8.1360, 0.0072}}, {617, {4.3848, 5.5440, 0.1440}}, {618, {3.3840, 5.4144, -0.0000}}, {619, {4.1328, 8.7048, -0.0000}}, {620, {4.3920, 8.6976, 0.0072}}, {621, {3.8880, 8.6976, 2.5920}}, {622, {6.7248, 8.7048, 2.1888}}, {623, {10.3968, 5.4072, 0.1368}}, {624, {10.3968, 5.4072, 2.5920}}, {625, {10.3104, 5.5440, 2.5704}}, {626, {7.0704, 5.5440, 2.5704}}, {627, {7.9488, 5.5440, 2.5704}}, {628, {6.7968, 5.4216, -0.0000}}, {629, {6.1704, 5.6232, 0.1440}}, {630, {8.7120, 5.6016, 0.1728}}, {631, {8.3088, 5.8320, 0.1152}}, {632, {6.9984, 7.7832, 2.3472}}, {633, {4.8240, 5.4072, 0.1368}}, {634, {4.8240, 7.8696, 0.1368}}, {635, {5.8464, 5.4072, 2.5704}}, {636, {4.8168, 5.5440, 2.4264}}, {637, {4.8168, 5.5440, 2.5704}}, {638, {4.8168, 5.5368, 0.0072}}, {639, {4.8168, 5.5368, 2.3472}}, {640, {6.8328, 5.4072, 0.1728}}, {641, {6.8328, 5.5872, -0.0000}}, {642, {4.7088, 5.6232, 2.5920}}, {643, {5.6664, 8.8344, 2.2968}}, {644, {5.6664, 8.8344, 2.2968}}, {645, {5.3640, 5.5368, 2.2968}}, {646, {5.9472, 8.8344, 2.5920}}, {647, {4.5360, 7.7112, 0.1440}}, {648, {4.5504, 7.7184, 2.5704}}, {649, {6.9624, 5.5440, 0.1440}}, {650, {6.5088, 5.4072, 0.1440}}, {651, {7.0200, 5.5728, 0.1440}}, {652, {6.7392, 5.5440, -0.0000}}, {653, {9.2016, 5.5512, -0.0000}}, {654, {6.7392, 7.9776, -0.0000}}, {655, {7.0632, 5.4144, 0.0144}}, {656, {7.0272, 5.4000, 2.5920}}, {657, {5.4792, 5.4072, 1.4688}}, {658, {5.5584, 5.4072, 2.1888}}, {659, {5.5584, 5.4072, 2.5920}}, {660, {5.1696, 8.4240, -0.0000}}, {661, {5.1696, 8.4240, -0.0000}}, {662, {5.1696, 8.2800, 0.1440}}, {663, {5.3928, 5.6232, 2.3544}}, {664, {7.1424, 6.3792, 0.1440}}, {665, {6.5448, 5.4072, -0.0000}}, {666, {5.7240, 5.6232, 0.1440}}, {667, {7.9920, 8.4240, 0.1728}}, {668, {6.9048, 5.4072, -0.0000}}, {669, {3.4488, 8.1360, 2.5704}}, {670, {6.6744, 5.4072, 2.5920}}, {671, {5.7744, 5.3784, -0.0000}}, {672, {7.7616, 8.4168, 2.4336}}, {673, {5.1696, 8.4168, 0.0072}}, {674, {5.1696, 8.4168, 0.0072}}, {675, {10.0080, 8.6976, 0.1440}}, {676, {10.1304, 8.7048, 2.1888}}, {677, {10.1880, 8.6976, 1.4688}}, {678, {8.3232, 7.7112, 0.1440}}, {679, {8.1216, 8.8344, 2.2968}}, {680, {9.0072, 7.7112, 1.4688}}, {681, {10.3608, 8.8344, 2.5704}}, {682, {6.7608, 8.6976, 0.1440}}, {683, {6.6024, 8.7048, -0.0000}}, {684, {9.2088, 7.7472, 0.1440}}, {685, {8.5104, 7.8696, -0.1512}}, {686, {8.2008, 5.5368, 2.5920}}, {687, {9.1800, 5.5440, 2.5704}}, {688, {5.3064, 9.3024, -3.3912}}, {689, {5.3064, 9.1152, -3.3912}}, {690, {2.7072, 8.9208, -1.6848}}, {691, {3.7368, 7.2000, -3.3840}}, {692, {3.7368, 7.1064, -3.2904}}, {693, {4.5000, 7.1208, -1.6848}}, {694, {5.2344, 7.2216, -3.3912}}, {695, {7.0200, 7.1208, -3.2976}}, {696, {5.1696, 7.1208, -1.6848}}, {697, {3.1392, 9.4032, -6.0768}}, {698, {4.7376, 9.4032, -6.0768}}, {699, {3.9960, 8.7696, -6.4584}}, {700, {3.9960, 8.7624, -6.4512}}, {701, {3.9960, 8.7624, -6.4512}}, {702, {4.0032, 8.7336, -6.4872}}, {703, {3.9960, 8.7336, -6.4872}}, {704, {3.9960, 9.1080, -3.3912}}, {705, {3.9960, 9.1080, -3.3912}}, {706, {6.7680, 6.8688, -1.0944}}, {707, {6.7680, 6.8688, -1.0944}}, {708, {6.7680, 7.1424, -0.8352}}, {709, {6.7680, 7.1424, -0.8352}}, {710, {3.9960, 8.6112, -6.7392}}, {711, {3.9960, 8.6112, -6.7392}}, {712, {3.9960, 8.6112, -6.6672}}, {713, {3.9960, 7.9848, -7.2360}}, {714, {3.9960, 8.6112, -6.5880}}, {715, {3.9960, 8.6112, -6.5880}}, {716, {3.9960, -0.5184, 2.4624}}, {717, {4.0032, -0.8784, 1.6272}}, {718, {3.9960, -0.5400, 2.5632}}, {719, {3.9960, -0.5400, 2.5632}}, {720, {3.3336, 5.4432, -0.0000}}, {721, {3.3336, 5.4432, -4.2408}}, {722, {4.0032, 2.8296, -0.5832}}, {723, {3.9960, 2.8296, -0.5832}}, {724, {3.9960, 2.9880, -1.0440}}, {725, {3.9960, 2.9880, -1.0368}}, {726, {3.9960, 2.9880, -1.0440}}, {727, {4.0032, 2.7648, -1.8936}}, {728, {3.9960, 8.4312, -6.8328}}, {729, {3.9960, 8.2080, -7.0128}}, {730, {3.9888, 8.6040, -6.6024}}, {731, {3.9960, 0.3528, 2.5128}}, {732, {3.9960, 8.2728, -7.0848}}, {733, {3.9960, 8.6112, -6.5808}}, {734, {3.9960, 4.6872, -2.3832}}, {735, {4.5792, 8.3304, -4.2696}}, {736, {5.1696, 7.1208, -1.6704}}, {737, {2.6640, 9.3096, -3.3912}}, {738, {3.6576, 7.2504, -3.2976}}, {739, {5.3136, 7.1136, -3.3840}}, {740, {3.9960, 9.1152, -3.3912}}, {741, {4.5936, 8.5896, -0.0000}}, {742, {4.5936, 8.5896, -0.0000}}, {743, {4.5936, 8.5896, -0.0000}}, {744, {4.5936, 8.5896, -0.0000}}, {745, {4.5936, 8.5896, -0.0000}}, {746, {3.9960, 5.1552, -0.0000}}, {747, {3.9960, 5.1552, -0.0000}}, {748, {3.9960, -0.6192, 2.5632}}, {749, {3.9960, 8.7048, -6.4584}}, {750, {3.9960, 8.7624, -6.4512}}, {751, {3.9960, -0.5112, 2.5344}}, {752, {3.9960, -0.5112, 2.5344}}, {753, {3.9960, -0.3024, 2.5272}}, {754, {3.9960, -0.3024, 2.5272}}, {755, {3.9960, -0.3168, 2.5632}}, {756, {3.9960, 3.0672, -1.0440}}, {757, {3.9960, 3.0744, -1.0440}}, {758, {3.9960, 3.0744, -1.0440}}, {759, {3.9960, -0.9216, 2.1096}}, {760, {3.3336, 8.1288, -2.4336}}, {761, {3.9960, 7.9416, -5.9904}}, {762, {3.9960, 7.9416, -5.9904}}, {763, {3.9960, -0.5184, 2.4624}}, {764, {3.9960, -0.5184, 2.4624}}, {765, {4.7664, -0.5904, 2.5920}}, {766, {4.7664, -0.5904, 2.5920}}, {767, {3.9960, -0.3024, 2.5344}}, {768, {0.0000, 8.7984, -6.5304}}, {769, {0.0000, 8.7984, -6.5304}}, {770, {0.0000, 8.5464, -6.7392}}, {771, {0.0000, 8.2152, -7.0848}}, {772, {0.0000, 7.7616, -7.2792}}, {773, {0.0000, 8.4528, -7.9488}}, {774, {0.0000, 8.4312, -6.8328}}, {775, {0.0000, 8.2512, -7.0560}}, {776, {0.0000, 8.2512, -7.0560}}, {777, {0.0000, 8.6616, -6.7032}}, {778, {0.0000, 8.6472, -6.6456}}, {779, {0.0000, 8.7840, -6.6384}}, {780, {0.0000, 8.5464, -6.7392}}, {781, {0.0000, 8.6616, -6.7176}}, {782, {0.0000, 8.6616, -6.7176}}, {783, {0.0000, 8.7840, -6.6384}}, {784, {0.0000, 9.0576, -6.2424}}, {785, {0.0000, 8.4240, -6.8256}}, {786, {0.0000, 8.7696, -6.4584}}, {787, {0.0000, 8.7624, -6.4512}}, {788, {0.0000, 8.7624, -6.4512}}, {789, {0.0000, 8.1144, -5.8032}}, {790, {0.0000, -0.3312, 2.5992}}, {791, {0.0000, -0.3312, 2.5992}}, {792, {0.0000, -0.6480, 2.5920}}, {793, {0.0000, -0.6480, 2.5920}}, {794, {0.0000, 8.9352, -5.8896}}, {795, {0.0000, 6.1488, -4.4424}}, {796, {0.0000, -0.3456, 2.5920}}, {797, {0.0000, -0.6480, 2.5920}}, {798, {0.0000, -0.6408, 2.5920}}, {799, {0.0000, -0.6480, 2.5920}}, {800, {0.0000, -1.5192, 2.0016}}, {801, {0.0000, 0.7560, 2.5920}}, {802, {0.0000, 0.7560, 2.5920}}, {803, {0.0000, -1.3968, 2.5920}}, {804, {0.0000, -1.3968, 2.5920}}, {805, {0.0000, -0.3456, 2.5920}}, {806, {0.0000, -0.1872, 2.5920}}, {807, {0.0000, 0.0288, 2.3544}}, {808, {0.0000, 0.1872, 2.4696}}, {809, {0.0000, -0.6480, 2.5920}}, {810, {0.0000, -1.1592, 2.5920}}, {811, {0.0000, -1.3896, 2.5920}}, {812, {0.0000, -0.7848, 2.5920}}, {813, {0.0000, -0.7848, 2.5920}}, {814, {0.0000, -0.9936, 2.5920}}, {815, {0.0000, -0.9936, 2.5920}}, {816, {0.0000, -1.4616, 2.5920}}, {817, {0.0000, -1.5408, 2.0232}}, {818, {0.0000, -1.5408, 2.0232}}, {819, {0.0000, -0.8712, 2.4048}}, {820, {0.0000, 3.7296, -1.7640}}, {821, {0.0000, 2.9808, -2.4984}}, {822, {0.0000, 2.9808, -2.4984}}, {823, {0.0000, 5.6232, 0.1440}}, {824, {0.0000, 8.0712, 2.5920}}, {825, {0.0000, -0.3456, 2.5920}}, {826, {0.0000, -0.9648, 2.4048}}, {827, {0.0000, -0.3816, 2.4048}}, {828, {0.0000, -1.0872, 2.4048}}, {829, {0.0000, 8.9496, -6.3504}}, {830, {0.0000, 9.2376, -6.2280}}, {831, {0.0000, 9.0432, -7.3656}}, {832, {0.0000, 8.5896, -6.5664}}, {833, {0.0000, 8.5896, -6.5664}}, {834, {0.0000, 8.4096, -6.8688}}, {835, {0.0000, 8.5896, -6.3936}}, {836, {0.0000, 8.9496, -6.4224}}, {837, {0.0000, -0.6408, 2.5920}}, {838, {0.0000, 8.0064, -6.9336}}, {839, {0.0000, -0.7488, 2.4048}}, {840, {0.0000, -0.6480, 2.5920}}, {841, {0.0000, -0.6408, 2.5920}}, {842, {0.0000, 8.7624, -6.5160}}, {843, {0.0000, 9.4032, -5.8896}}, {844, {0.0000, 9.1512, -6.1416}}, {845, {0.0000, -0.2304, 2.5920}}, {846, {0.0000, -0.3888, 2.5920}}, {847, {0.0000, 0.0000, -0.0000}}, {848, {0.0000, 8.7912, -6.5088}}, {849, {0.0000, 8.7696, -6.5232}}, {850, {0.0000, 9.0504, -6.2424}}, {851, {0.0000, -0.1584, 2.5920}}, {852, {0.0000, -0.3024, 2.5272}}, {853, {0.0000, -0.3024, 2.5272}}, {854, {0.0000, -0.3024, 2.5272}}, {855, {0.0000, 8.7696, -6.5232}}, {856, {0.0000, 8.2512, -7.0560}}, {857, {0.0000, -0.1224, 2.5920}}, {858, {0.0000, -0.5904, 2.5920}}, {859, {0.0000, 9.0576, -6.2352}}, {860, {0.0000, -0.6552, 2.5920}}, {861, {0.0000, 8.7768, -6.8400}}, {862, {0.0000, 8.2584, -7.7760}}, {863, {0.0000, -1.1664, 1.6488}}, {864, {0.0000, 8.7768, -6.8328}}, {865, {0.0000, 8.7696, -6.8328}}, {866, {0.0000, -0.2232, 2.5920}}, {867, {0.0000, 8.4960, -6.3288}}, {868, {0.0000, 8.4960, -6.3288}}, {869, {0.0000, 9.4104, -6.3864}}, {870, {0.0000, 8.4960, -6.3288}}, {871, {0.0000, 8.4744, -6.3144}}, {872, {0.0000, 8.4960, -6.3288}}, {873, {0.0000, 9.4032, -6.3144}}, {874, {0.0000, 9.4104, -6.3864}}, {875, {0.0000, 8.4816, -6.3864}}, {876, {0.0000, 8.4744, -6.3792}}, {877, {0.0000, 9.2304, -6.3288}}, {878, {0.0000, 8.4384, -6.3288}}, {879, {0.0000, 8.4312, -6.3792}}, {880, {6.7536, 7.8840, -0.0000}}, {881, {4.9752, 5.5512, -0.0000}}, {882, {8.8632, 7.8696, -0.0000}}, {883, {6.5736, 5.4072, 0.0072}}, {884, {2.9664, 8.8704, -4.2336}}, {885, {2.9664, 2.0736, 2.5632}}, {886, {9.5616, 7.8840, -0.0000}}, {887, {6.5736, 5.5440, -0.0000}}, {890, {5.7528, -0.3888, 2.5920}}, {891, {5.3856, 5.6232, 0.1440}}, {892, {5.3928, 5.6232, 0.1440}}, {893, {5.3856, 5.6232, 0.1440}}, {894, {3.1392, 4.8744, 2.1816}}, {895, {5.6808, 7.8840, 1.4832}}, {900, {3.2976, 8.7984, -6.6240}}, {901, {3.3624, 9.4104, -6.6240}}, {902, {8.6976, 8.2656, 0.0072}}, {903, {3.0024, 5.6232, -4.3488}}, {904, {10.3464, 8.0208, -0.0000}}, {905, {11.0808, 8.0208, -0.0000}}, {906, {6.7176, 8.0208, -0.0000}}, {908, {10.2816, 8.1432, 0.2520}}, {910, {10.7496, 8.0280, -0.0000}}, {911, {9.9216, 8.1432, -0.0000}}, {912, {4.3776, 9.4032, 0.1440}}, {913, {8.6976, 8.2656, 0.0072}}, {914, {7.8912, 7.8624, -0.0000}}, {915, {7.1208, 7.8696, -0.0000}}, {916, {7.0416, 8.2656, -0.0000}}, {917, {7.9416, 7.8624, -0.0000}}, {918, {6.6096, 7.8624, -0.0000}}, {919, {8.6760, 7.8840, -0.0000}}, {920, {8.4600, 8.1432, 0.2520}}, {921, {4.3128, 7.8840, -0.0000}}, {922, {8.8992, 7.8840, -0.0000}}, {923, {8.0496, 8.2656, -0.0000}}, {924, {10.5048, 7.8696, -0.0000}}, {925, {8.6760, 7.8840, -0.0000}}, {926, {7.5168, 7.8624, -0.0000}}, {927, {8.4600, 8.1432, 0.2520}}, {928, {8.6760, 7.8696, -0.0000}}, {929, {7.5888, 7.8696, -0.0000}}, {931, {7.8192, 7.8624, -0.0000}}, {932, {8.2800, 7.8696, -0.0000}}, {933, {8.4600, 8.0280, -0.0000}}, {934, {8.1648, 7.9056, -0.0000}}, {935, {8.8920, 7.8912, -0.0000}}, {936, {8.4384, 7.9056, -0.0000}}, {937, {8.1000, 8.1432, -0.0000}}, {938, {4.3200, 9.4104, -0.0000}}, {939, {8.4600, 9.4104, -0.0000}}, {940, {7.2000, 8.7984, 0.1440}}, {941, {5.1696, 8.7984, 0.1440}}, {942, {6.4296, 8.7984, 2.5056}}, {943, {4.3848, 8.7984, 0.1440}}, {944, {6.4584, 9.4032, 0.1440}}, {945, {7.2000, 5.5368, 0.1440}}, {946, {5.5656, 8.6112, 2.4480}}, {947, {5.4792, 5.4072, 2.4192}}, {948, {5.4432, 8.6832, 0.1440}}, {949, {5.1696, 5.6232, 0.1440}}, {950, {4.8960, 8.5320, 2.5704}}, {951, {6.4296, 5.6232, 2.5056}}, {952, {5.7384, 8.7192, 0.1440}}, {953, {4.3848, 5.5440, 0.1440}}, {954, {6.6816, 5.5440, -0.0000}}, {955, {6.1128, 8.7192, 0.1440}}, {956, {6.5592, 5.4072, 2.4480}}, {957, {6.0408, 5.6232, 0.1440}}, {958, {5.4792, 8.4960, 2.5848}}, {959, {5.8464, 5.6232, 0.1440}}, {960, {6.6456, 5.4072, 0.1224}}, {961, {5.7960, 5.6232, 2.4480}}, {962, {5.2992, 5.6232, 2.5560}}, {963, {6.3720, 5.4000, 0.1440}}, {964, {5.4864, 5.4000, 0.1440}}, {965, {6.4584, 5.5728, 0.1440}}, {966, {7.0344, 5.5224, 2.4120}}, {967, {5.5800, 5.6232, 2.4840}}, {968, {7.3440, 5.6232, 2.4192}}, {969, {7.7760, 5.6088, 0.1440}}, {970, {4.3776, 7.9056, 0.1440}}, {971, {6.4584, 7.9056, 0.1440}}, {972, {5.8464, 8.7984, 0.1440}}, {973, {6.4584, 8.7984, 0.1440}}, {974, {7.7760, 8.7984, 0.1440}}, {975, {8.8992, 7.8840, 2.4264}}, {976, {5.8968, 8.3952, 0.1440}}, {977, {7.0632, 8.8344, 0.1224}}, {978, {9.1800, 7.8840, -0.0000}}, {979, {11.4120, 8.0208, -0.0000}}, {980, {9.1800, 9.4104, -0.0000}}, {981, {7.0344, 6.5808, 2.4120}}, {982, {9.7632, 5.4000, 0.1440}}, {983, {6.2568, 5.6160, 2.5920}}, {984, {8.4600, 8.1432, 2.5920}}, {985, {6.1704, 5.6232, 2.5920}}, {986, {6.7392, 8.3088, 2.5920}}, {987, {7.4088, 5.4072, 2.5560}}, {988, {7.1208, 7.8696, -0.0000}}, {989, {5.4072, 5.4072, 2.4408}}, {990, {5.3280, 8.4456, 2.5920}}, {991, {4.7736, 6.5232, 2.5848}}, {992, {8.6400, 8.2656, -0.0000}}, {993, {7.2504, 5.5224, 0.1656}}, {994, {9.8712, 8.1432, 2.5920}}, {995, {7.5816, 5.6088, 2.5920}}, {996, {9.1872, 8.1432, -0.0000}}, {997, {7.0560, 5.6232, -0.0000}}, {998, {8.9784, 7.8912, 2.5920}}, {999, {6.9264, 7.5096, 0.1440}}, {1000, {5.9616, 8.1432, 0.2520}}, {1001, {5.4360, 5.6232, 2.5920}}, {1002, {8.6688, 8.1432, -0.0000}}, {1003, {5.8824, 5.6232, -0.0000}}, {1004, {9.9288, 8.3088, 0.2520}}, {1005, {6.8904, 5.8536, 0.1440}}, {1006, {7.5312, 7.8840, -0.0000}}, {1007, {5.6808, 5.4144, -0.0000}}, {1008, {6.2568, 5.6160, 0.1440}}, {1009, {5.8464, 5.6232, 2.5920}}, {1010, {5.3928, 5.6232, 0.1440}}, {1011, {3.4488, 5.5440, 2.5704}}, {1012, {8.4672, 8.1432, 0.2520}}, {1013, {5.3928, 5.6232, 0.1440}}, {1014, {5.3928, 5.6232, 0.1440}}, {1015, {6.3000, 7.9056, -0.0000}}, {1016, {5.8032, 8.2152, 2.4480}}, {1017, {7.8192, 8.1432, 0.2520}}, {1018, {12.2184, 8.1360, -0.0000}}, {1019, {8.9712, 5.6232, 0.1440}}, {1020, {5.7960, 5.6232, 2.5272}}, {1021, {7.8192, 8.1432, 0.2520}}, {1022, {7.8192, 8.1432, 0.2520}}, {1023, {7.8120, 8.1432, 0.2520}}, {1024, {7.9416, 9.4104, -0.0000}}, {1025, {7.9344, 9.4104, -0.0000}}, {1026, {9.7776, 7.8624, 0.1152}}, {1027, {7.1208, 9.4104, -0.0000}}, {1028, {7.8192, 8.1432, 0.2520}}, {1029, {5.9040, 8.1432, 0.2520}}, {1030, {4.3128, 7.8840, -0.0000}}, {1031, {4.3200, 9.4104, -0.0000}}, {1032, {5.6808, 7.8912, 0.2520}}, {1033, {12.2688, 7.8624, -0.0000}}, {1034, {11.9592, 7.8840, -0.0000}}, {1035, {9.6480, 7.8624, 0.0072}}, {1036, {8.8632, 9.4104, 0.2520}}, {1037, {9.5616, 9.4104, -0.0000}}, {1038, {9.3168, 9.4104, 0.1152}}, {1039, {8.6760, 7.8768, 1.6848}}, {1040, {8.6976, 8.2656, 0.0072}}, {1041, {7.8912, 7.8624, -0.0000}}, {1042, {7.8912, 7.8624, -0.0000}}, {1043, {7.1208, 7.8696, -0.0000}}, {1044, {9.2592, 7.8624, 2.3112}}, {1045, {7.9416, 7.8624, -0.0000}}, {1046, {12.9672, 7.9920, 0.2520}}, {1047, {7.2792, 8.1432, 0.2520}}, {1048, {9.5616, 7.8840, -0.0000}}, {1049, {9.5616, 9.4104, -0.0000}}, {1050, {8.8632, 7.9920, 0.2520}}, {1051, {9.1008, 7.8624, -0.0000}}, {1052, {10.5048, 7.8696, -0.0000}}, {1053, {8.6760, 7.8840, -0.0000}}, {1054, {8.4600, 8.1432, 0.2520}}, {1055, {8.6760, 7.8696, -0.0000}}, {1056, {7.5888, 7.8696, -0.0000}}, {1057, {7.8192, 8.1432, 0.2520}}, {1058, {8.2800, 7.8696, -0.0000}}, {1059, {9.3168, 7.8912, 0.1152}}, {1060, {8.1648, 7.9056, -0.0000}}, {1061, {8.8920, 7.8912, -0.0000}}, {1062, {8.6688, 7.8768, 2.3112}}, {1063, {9.3816, 7.8912, -0.0000}}, {1064, {12.6576, 7.8768, -0.0000}}, {1065, {12.6576, 7.8768, 2.3112}}, {1066, {10.1736, 7.8624, -0.0000}}, {1067, {11.6352, 7.8840, -0.0000}}, {1068, {7.8840, 7.8840, -0.0000}}, {1069, {7.8192, 8.1432, 0.2520}}, {1070, {11.5632, 8.1432, 0.2520}}, {1071, {8.8344, 7.8624, 0.2520}}, {1072, {6.2640, 5.6232, 0.1440}}, {1073, {6.1776, 8.6472, 0.1440}}, {1074, {6.5448, 5.4072, -0.0000}}, {1075, {6.0696, 5.4072, -0.0000}}, {1076, {7.1784, 5.4072, 1.5624}}, {1077, {5.4648, 5.6232, 0.1440}}, {1078, {9.4464, 5.5008, 0.0864}}, {1079, {5.3856, 5.5872, 0.1800}}, {1080, {7.3872, 5.4144, -0.0000}}, {1081, {7.3872, 8.1864, 0.0072}}, {1082, {6.3288, 5.5008, 0.0864}}, {1083, {7.4232, 5.4072, -0.0000}}, {1084, {8.3664, 5.4072, -0.0000}}, {1085, {6.9048, 5.4072, -0.0000}}, {1086, {6.1704, 5.6232, 0.1440}}, {1087, {6.9048, 5.4072, -0.0000}}, {1088, {6.7968, 5.5368, 2.4336}}, {1089, {5.3928, 5.6232, 0.1440}}, {1090, {6.6888, 5.4072, -0.0000}}, {1091, {6.7392, 5.4072, 2.5704}}, {1092, {7.4664, 8.6904, 2.5992}}, {1093, {6.9264, 5.4072, -0.0000}}, {1094, {6.9048, 5.4072, 1.5624}}, {1095, {7.3872, 5.4072, -0.0000}}, {1096, {9.8280, 5.4072, -0.0000}}, {1097, {9.8280, 5.4072, 1.5624}}, {1098, {8.5032, 5.4072, -0.0000}}, {1099, {8.9928, 5.4072, -0.0000}}, {1100, {6.5448, 5.4072, -0.0000}}, {1101, {6.0696, 5.5872, 0.1728}}, {1102, {10.3536, 5.5872, 0.1728}}, {1103, {6.8328, 5.4144, 0.1728}}, {1104, {5.4648, 8.3736, 0.1440}}, {1105, {5.4648, 7.9056, 0.1440}}, {1106, {6.8472, 8.7048, 2.4336}}, {1107, {6.0696, 8.3808, -0.0000}}, {1108, {6.0696, 5.5872, 0.1728}}, {1109, {4.7088, 5.6232, 0.1440}}, {1110, {3.2904, 8.1360, -0.0000}}, {1111, {3.2904, 7.9128, -0.0000}}, {1112, {3.4416, 8.1360, 2.5704}}, {1113, {9.6120, 5.4072, -0.0000}}, {1114, {9.7272, 5.4072, -0.0000}}, {1115, {6.9192, 8.6976, 0.0072}}, {1116, {6.3288, 8.3808, 0.0864}}, {1117, {7.3872, 8.3808, -0.0000}}, {1118, {6.7392, 8.1864, 2.5704}}, {1119, {6.9048, 5.4072, 1.6272}}, {1120, {9.8712, 8.1432, 0.2520}}, {1121, {7.5816, 5.6088, 0.1440}}, {1122, {9.6912, 9.3528, -0.0000}}, {1123, {8.1216, 8.6904, -0.0000}}, {1124, {11.8584, 8.1432, 0.2520}}, {1125, {8.9496, 5.6232, 0.1440}}, {1126, {10.0656, 8.2656, -0.0000}}, {1127, {7.8048, 5.5512, 0.0072}}, {1128, {13.8240, 8.2656, -0.0000}}, {1129, {11.1456, 5.5440, 0.0072}}, {1130, {9.3096, 7.8696, -0.0000}}, {1131, {7.1208, 5.4072, 0.0144}}, {1132, {13.1688, 7.8912, -0.0000}}, {1133, {10.5192, 5.4072, 0.0072}}, {1134, {6.8976, 9.4032, 2.5920}}, {1135, {5.3928, 7.5168, 2.5632}}, {1136, {9.3024, 7.9056, -0.0000}}, {1137, {7.3440, 5.6232, 2.4192}}, {1138, {8.4600, 8.1432, 0.2520}}, {1139, {6.1704, 5.6232, 0.1440}}, {1140, {9.3744, 7.9992, 0.2664}}, {1141, {6.8328, 5.4936, 0.1440}}, {1142, {9.3744, 9.4104, 0.2664}}, {1143, {6.8328, 8.3736, 0.1440}}, {1144, {14.5296, 8.1432, 2.5704}}, {1145, {11.4264, 5.6232, 2.5704}}, {1146, {10.3320, 9.3096, 1.4256}}, {1147, {7.8264, 6.6168, 1.1376}}, {1148, {9.8712, 9.4104, 0.2520}}, {1149, {7.5816, 8.3016, 0.1440}}, {1150, {9.8712, 9.4032, 0.2520}}, {1151, {7.5816, 7.8624, 0.1440}}, {1152, {7.8192, 8.1432, 2.5776}}, {1153, {5.2488, 5.6232, 2.4480}}, {1154, {5.1192, 6.5664, 1.4112}}, {1155, {0.0000, 8.6688, -6.6240}}, {1156, {0.0000, 8.5896, -6.6888}}, {1157, {0.0000, 8.4168, -6.8904}}, {1158, {0.0000, 8.4168, -6.8904}}, {1159, {0.0000, 8.5032, -6.7968}}, {1160, {0.0000, 8.0712, 2.5920}}, {1161, {0.0000, 8.0712, 2.5920}}, {1162, {9.5616, 9.4104, 2.5056}}, {1163, {7.3872, 8.1864, 1.9728}}, {1164, {7.8840, 7.8480, -0.0000}}, {1165, {6.5448, 5.4072, -0.0000}}, {1166, {7.5888, 7.8696, -0.0000}}, {1167, {6.7968, 5.5368, 2.4336}}, {1168, {7.1208, 9.4104, -0.0000}}, {1169, {5.4792, 6.9480, -0.0000}}, {1170, {7.1208, 7.8696, -0.0000}}, {1171, {6.0696, 5.4072, -0.0000}}, {1172, {7.1208, 7.8696, 2.5272}}, {1173, {6.0624, 5.4072, 2.5920}}, {1174, {12.9672, 7.9920, 2.3112}}, {1175, {9.4464, 5.5008, 1.5552}}, {1176, {7.2864, 8.1360, 2.3616}}, {1177, {5.3928, 5.5800, 1.8864}}, {1178, {8.8704, 7.9920, 2.3112}}, {1179, {6.3288, 5.5008, 1.5552}}, {1180, {8.8632, 7.9920, 0.2520}}, {1181, {6.3288, 5.5008, 0.0864}}, {1182, {8.8632, 7.9920, 0.2520}}, {1183, {6.3288, 5.5008, 0.0864}}, {1184, {11.0952, 7.9920, 0.2520}}, {1185, {8.4168, 5.5008, 0.0936}}, {1186, {8.6760, 7.8840, 2.3112}}, {1187, {6.9048, 5.4072, 1.5624}}, {1188, {11.5992, 7.8912, -0.0000}}, {1189, {9.4824, 5.4072, -0.0000}}, {1190, {11.8224, 7.8768, 2.5272}}, {1191, {9.3384, 5.4072, 2.5920}}, {1192, {9.0864, 8.1432, 0.2520}}, {1193, {6.9696, 5.6160, 0.1440}}, {1194, {7.8192, 8.1360, 2.3616}}, {1195, {5.3928, 5.6232, 1.8864}}, {1196, {8.2800, 7.8696, 2.3112}}, {1197, {6.6888, 5.4072, 1.5624}}, {1198, {9.1800, 7.8840, -0.0000}}, {1199, {6.7392, 5.4072, 2.5848}}, {1200, {9.1800, 7.8840, -0.0000}}, {1201, {6.7392, 5.4072, 2.5848}}, {1202, {8.8920, 7.8912, 2.3112}}, {1203, {6.9336, 5.4072, 1.5624}}, {1204, {12.2400, 7.8768, 2.3112}}, {1205, {10.0872, 5.4072, 1.5624}}, {1206, {9.3816, 7.8840, 2.3112}}, {1207, {7.3872, 5.4072, 1.5624}}, {1208, {9.3816, 7.8912, -0.0000}}, {1209, {7.3872, 5.4144, -0.0000}}, {1210, {8.6832, 7.8840, -0.0000}}, {1211, {6.9192, 8.6976, 0.0072}}, {1212, {11.1456, 8.1432, 0.2520}}, {1213, {7.2720, 5.6232, 0.1440}}, {1214, {11.1456, 8.1432, 1.8000}}, {1215, {7.2720, 5.6232, 1.7424}}, {1216, {4.3128, 7.8840, -0.0000}}, {1217, {12.9672, 9.4104, 0.2520}}, {1218, {9.4464, 8.1864, 0.0864}}, {1219, {8.8704, 7.9992, 2.5272}}, {1220, {6.3288, 5.5008, 2.5920}}, {1221, {9.1008, 7.8624, 2.5056}}, {1222, {7.4232, 5.4072, 1.9728}}, {1223, {8.6760, 7.8840, 2.5920}}, {1224, {6.9048, 5.4072, 2.5848}}, {1225, {9.5616, 7.8840, 2.5056}}, {1226, {7.3872, 5.4072, 1.9728}}, {1227, {9.3816, 7.8840, 2.3112}}, {1228, {7.3872, 5.4072, 1.5624}}, {1229, {10.5048, 7.8696, 2.5056}}, {1230, {8.3664, 5.4072, 1.9728}}, {1231, {3.3840, 5.4144, -0.0000}}, {1232, {8.6976, 9.4032, 0.0072}}, {1233, {6.2640, 8.1864, 0.1440}}, {1234, {8.6976, 9.4032, 0.0072}}, {1235, {6.2640, 7.9056, 0.1440}}, {1236, {10.5120, 7.8696, -0.0000}}, {1237, {8.7552, 5.6160, 0.1440}}, {1238, {7.9344, 9.4104, -0.0000}}, {1239, {5.4648, 8.1864, 0.1440}}, {1240, {8.4600, 8.1432, 0.2520}}, {1241, {5.4648, 5.6232, 0.1440}}, {1242, {8.4600, 9.4104, 0.2520}}, {1243, {5.4648, 7.9056, 0.1440}}, {1244, {12.9672, 9.4104, 0.2520}}, {1245, {9.4464, 7.9128, 0.0864}}, {1246, {7.2864, 9.4104, 0.2520}}, {1247, {5.3928, 7.9128, 0.1800}}, {1248, {6.9120, 7.8624, 0.2520}}, {1249, {5.5584, 5.4072, 2.1888}}, {1250, {9.5616, 9.3528, -0.0000}}, {1251, {7.3872, 7.5744, -0.0000}}, {1252, {9.5616, 9.4104, -0.0000}}, {1253, {7.3872, 7.9128, -0.0000}}, {1254, {8.4600, 9.4104, 0.2520}}, {1255, {6.1704, 7.9056, 0.1440}}, {1256, {8.4672, 8.1432, 0.2520}}, {1257, {6.1704, 5.6232, 0.1440}}, {1258, {8.4672, 9.4104, 0.2520}}, {1259, {6.1704, 7.9056, 0.1440}}, {1260, {7.8264, 9.4104, 0.2520}}, {1261, {6.6888, 7.9128, 0.1728}}, {1262, {9.3168, 9.3528, 0.1152}}, {1263, {6.7392, 7.5744, 2.5704}}, {1264, {9.3168, 9.4104, 0.1152}}, {1265, {6.7392, 7.9128, 2.5704}}, {1266, {9.3168, 9.4104, 0.1152}}, {1267, {6.7392, 8.3808, 2.5704}}, {1268, {9.3816, 9.4104, -0.0000}}, {1269, {7.3872, 7.9056, -0.0000}}, {1270, {7.1208, 7.8624, 2.3112}}, {1271, {6.0696, 5.4072, 1.5624}}, {1272, {11.6352, 9.4104, -0.0000}}, {1273, {8.9928, 7.9056, -0.0000}}, {1274, {7.1208, 7.8696, 2.5704}}, {1275, {6.0696, 5.4072, 2.5704}}, {1276, {8.8920, 7.8840, 2.5200}}, {1277, {6.9336, 5.4144, 2.5272}}, {1278, {8.8920, 7.8912, -0.0000}}, {1279, {6.9264, 5.4072, -0.0000}}, {1280, {7.5888, 7.8696, -0.0000}}, {1281, {6.7896, 8.6976, 0.1440}}, {1282, {10.7712, 7.8696, 0.2520}}, {1283, {10.2096, 8.6976, 0.1440}}, {1284, {11.2680, 8.1432, 0.2520}}, {1285, {9.2520, 5.5800, 0.1440}}, {1286, {7.5456, 8.1432, 2.3112}}, {1287, {5.9184, 5.5800, 1.5624}}, {1288, {12.2184, 7.8624, 0.2520}}, {1289, {10.6128, 5.4072, 0.1440}}, {1290, {11.8440, 7.8840, 0.2520}}, {1291, {10.2888, 5.4072, 0.1440}}, {1292, {8.3232, 8.1432, 0.2520}}, {1293, {6.4440, 5.6232, 0.1440}}, {1294, {9.4104, 7.8696, 0.2520}}, {1295, {8.4816, 5.4000, 0.1440}}, {1296, {7.2936, 8.1432, 0.2520}}, {1297, {5.3928, 5.6232, 0.1440}}, {1298, {9.1008, 7.8696, 2.5272}}, {1299, {7.4232, 5.4072, 2.5704}}, {1300, {13.2408, 7.8912, -0.0000}}, {1301, {10.6200, 5.4072, -0.0000}}, {1302, {10.8360, 7.8912, -0.0000}}, {1303, {9.6624, 5.5368, 2.4336}}, {1304, {12.4704, 7.8624, 0.2520}}, {1305, {9.6048, 5.6232, 0.1728}}, {1306, {8.5392, 8.1432, 2.2392}}, {1307, {6.7896, 5.5368, 2.4336}}, {1308, {12.2256, 7.8912, 0.2520}}, {1309, {9.2016, 5.4072, 0.1440}}, {1310, {8.8632, 7.9920, 0.2520}}, {1311, {6.3288, 5.5008, 0.0864}}, {1312, {12.1968, 7.8696, 2.5272}}, {1313, {9.6624, 5.4072, 2.5920}}, {1314, {11.8224, 7.8912, 2.5272}}, {1315, {9.3384, 5.4072, 2.5920}}, {1316, {8.6760, 7.8696, 2.3112}}, {1317, {6.9048, 5.4072, 1.5624}}, {1318, {8.6760, 7.8840, 2.3112}}, {1319, {6.9192, 8.6976, 1.5624}}, {1320, {10.1088, 7.8912, 2.5272}}, {1321, {7.0848, 5.4144, 2.5704}}, {1322, {18.2736, 7.9920, 2.3112}}, {1323, {13.6440, 5.5008, 1.5552}}, {1324, {9.3816, 7.8840, 2.3112}}, {1325, {7.2288, 5.4072, 1.5624}}, {1326, {9.0432, 7.8624, 2.3112}}, {1327, {7.2288, 5.4072, 1.5624}}, {1632, {7.1352, 4.1904, -1.0224}}, {1633, {7.1352, 7.7832, -0.0000}}, {1634, {7.1352, 7.8696, -0.0000}}, {1635, {7.1352, 7.8696, -0.0000}}, {1636, {7.1352, 7.7472, -0.0000}}, {1637, {7.1352, 6.5016, -1.4112}}, {1638, {7.1352, 7.7112, -0.1800}}, {1639, {7.1352, 7.7112, -0.0000}}, {1640, {7.1352, 7.7832, -0.0792}}, {1641, {7.1352, 7.9056, -0.0000}}, {1645, {6.1632, 9.3456, -4.7160}}, {1780, {7.1352, 7.8408, -0.0504}}, {1781, {7.1352, 7.6752, -0.2160}}, {1782, {7.1352, 7.8048, -0.0504}}, {8192, {5.9976, 0.0000, -0.0000}}, {8193, {12.0024, 9.4104, -9.4032}}, {8194, {5.9976, 0.0000, -0.0000}}, {8195, {12.0024, 9.4104, -9.4032}}, {8196, {4.0032, 0.0000, -0.0000}}, {8197, {3.0024, 0.0000, -0.0000}}, {8198, {2.0016, 0.0000, -0.0000}}, {8199, {5.9976, 0.0000, -0.0000}}, {8200, {3.0024, 0.0000, -0.0000}}, {8201, {1.4976, 0.0000, -0.0000}}, {8202, {0.7488, 0.0000, -0.0000}}, {8203, {0.0000, 0.0000, -0.0000}}, {8204, {0.0000, 0.0000, -0.0000}}, {8205, {0.0000, 0.0000, -0.0000}}, {8206, {0.0000, 0.0000, -0.0000}}, {8207, {0.0000, 0.0000, -0.0000}}, {8208, {4.4928, 3.6504, -3.1680}}, {8209, {4.4928, 3.6504, -3.1680}}, {8210, {5.9976, 3.6504, -3.1680}}, {8211, {5.9976, 3.6504, -3.1680}}, {8212, {12.0024, 3.6504, -3.1680}}, {8213, {9.0000, 3.6504, -3.1680}}, {8214, {4.6224, 8.8848, 2.0592}}, {8215, {5.9976, -0.5688, 2.3400}}, {8216, {3.1392, 7.8264, -4.4496}}, {8217, {3.1392, 7.8408, -4.4640}}, {8218, {2.8224, 1.1952, 2.1816}}, {8219, {3.1392, 7.8408, -4.4640}}, {8220, {5.6448, 7.8264, -4.4496}}, {8221, {5.6448, 7.8408, -4.4640}}, {8222, {5.0184, 1.1952, 2.1816}}, {8223, {5.6520, 7.8408, -4.4640}}, {8224, {5.7528, 8.4312, 2.4192}}, {8225, {5.7600, 8.4240, 2.4264}}, {8226, {4.3272, 5.3424, -1.4832}}, {8227, {3.0024, 4.1976, -1.2816}}, {8228, {4.0032, 0.0504, 1.2744}}, {8229, {8.0064, 0.0504, 1.2744}}, {8230, {12.0096, 0.0504, 1.2744}}, {8231, {3.0096, 3.6000, -1.8864}}, {8232, {0.0000, 0.0000, -0.0000}}, {8233, {0.0000, 0.0000, -0.0000}}, {8234, {0.0000, 0.0000, -0.0000}}, {8235, {0.0000, 0.0000, -0.0000}}, {8236, {0.0000, 0.0000, -0.0000}}, {8237, {0.0000, 0.0000, -0.0000}}, {8238, {0.0000, 0.0000, -0.0000}}, {8239, {1.4976, 0.0000, -0.0000}}, {8240, {13.7304, 9.2448, 0.7920}}, {8241, {17.7120, 9.2448, 0.7920}}, {8242, {2.9664, 9.0072, -4.2984}}, {8243, {5.1048, 9.0072, -4.2984}}, {8244, {7.2144, 9.0072, -4.2984}}, {8245, {2.9664, 9.0072, -4.2984}}, {8246, {5.1048, 9.0072, -4.2984}}, {8247, {7.2144, 9.0072, -4.2984}}, {8248, {4.2336, 1.6344, 2.3112}}, {8249, {4.1976, 5.0616, 0.1296}}, {8250, {4.2048, 5.0616, 0.1296}}, {8251, {7.5528, 5.8032, 0.7776}}, {8252, {6.6960, 8.5896, -0.0000}}, {8253, {5.3280, 8.4600, -0.0000}}, {8254, {5.9976, 9.4104, -8.9064}}, {8255, {5.6736, -1.0152, 2.5920}}, {8256, {5.6736, 9.1152, -7.5384}}, {8257, {5.5800, 6.3648, 2.3112}}, {8258, {10.9944, 8.6688, -0.0000}}, {8259, {3.0024, 3.4416, -2.0232}}, {8260, {0.0000, 8.5320, 1.5912}}, {8261, {3.9960, 8.8632, 2.0520}}, {8262, {3.9960, 8.8632, 2.0520}}, {8263, {10.0152, 8.4600, -0.0000}}, {8264, {9.0936, 8.5896, -0.0000}}, {8265, {9.4176, 8.5896, -0.0000}}, {8266, {6.3072, 7.2072, 2.1384}}, {8267, {5.6520, 7.5384, 2.3832}}, {8268, {8.5320, 6.9336, -0.0000}}, {8269, {8.5320, 6.9336, -0.0000}}, {8270, {5.7816, 3.3984, 0.8784}}, {8271, {3.1968, 5.0184, 2.3184}}, {8272, {8.6472, 6.6672, -0.7848}}, {8273, {5.7816, 8.6688, 0.8784}}, {8274, {8.9136, 8.5320, 1.5912}}, {8275, {6.1992, 4.1904, -2.2248}}, {8276, {5.9760, -1.1304, 2.5920}}, {8277, {3.8664, 4.3056, -1.1592}}, {8278, {4.5936, 5.0184, -0.0000}}, {8279, {9.3240, 9.0072, -4.2984}}, {8280, {5.9904, 5.0184, -0.0000}}, {8281, {6.9408, 5.0184, -0.0000}}, {8282, {3.1896, 7.9488, -0.0000}}, {8283, {9.2736, 8.8272, 2.0016}}, {8284, {6.9408, 5.5872, 0.5616}}, {8285, {3.1896, 7.9488, -0.0000}}, {8286, {3.1896, 9.0504, 2.2392}}, {8287, {2.6640, 0.0000, -0.0000}}, {8288, {0.0000, 0.0000, -0.0000}}, {8289, {0.0000, 0.0000, -0.0000}}, {8290, {0.0000, 0.0000, -0.0000}}, {8291, {0.0000, 0.0000, -0.0000}}, {8292, {0.0000, 0.0000, -0.0000}}, {8294, {0.0000, 0.0000, -0.0000}}, {8295, {0.0000, 0.0000, -0.0000}}, {8296, {0.0000, 0.0000, -0.0000}}, {8297, {0.0000, 0.0000, -0.0000}}, {8298, {0.0000, 0.0000, -0.0000}}, {8299, {0.0000, 0.0000, -0.0000}}, {8300, {0.0000, 0.0000, -0.0000}}, {8301, {0.0000, 0.0000, -0.0000}}, {8302, {0.0000, 0.0000, -0.0000}}, {8303, {0.0000, 0.0000, -0.0000}}, {8304, {4.6872, 8.9208, -3.2184}}, {8305, {2.5920, 8.9784, -3.3912}}, {8308, {4.6944, 9.0216, -3.3840}}, {8309, {4.6872, 8.9136, -3.2184}}, {8310, {4.7016, 8.9208, -3.2184}}, {8311, {4.6944, 9.0000, -3.2112}}, {8312, {4.7016, 8.9208, -3.2184}}, {8313, {4.7016, 8.9208, -3.2184}}, {8314, {7.0992, 8.5248, -2.9088}}, {8315, {7.0992, 5.9328, -5.5008}}, {8316, {7.0992, 7.0848, -4.3632}}, {8317, {3.1104, 9.4176, -2.0304}}, {8318, {3.1032, 9.4176, -2.0304}}, {8319, {5.3064, 7.2072, -3.3912}}, {8320, {4.6872, 3.9528, 1.7496}}, {8321, {4.6944, 3.9456, 1.5912}}, {8322, {4.6872, 3.9456, 1.5768}}, {8323, {4.6944, 3.9528, 1.7496}}, {8324, {4.6944, 4.0392, 1.5840}}, {8325, {4.6872, 3.9456, 1.7496}}, {8326, {4.7016, 3.9528, 1.7496}}, {8327, {4.6944, 4.0320, 1.7496}}, {8328, {4.7016, 3.9528, 1.7496}}, {8329, {4.7016, 3.9528, 1.7496}}, {8330, {7.0992, 3.5568, 2.0592}}, {8331, {7.0992, 0.9648, -0.5328}}, {8332, {7.0992, 2.1096, 0.6120}}, {8333, {3.1104, 4.7952, 2.5920}}, {8334, {3.1032, 4.7952, 2.5920}}, {8336, {4.8168, 2.2752, 1.6704}}, {8337, {4.2192, 2.2752, 1.6704}}, {8338, {4.7520, 2.2752, 1.6704}}, {8339, {5.3136, 2.1384, 1.5912}}, {8340, {4.2192, 2.2824, 1.6704}}, {8341, {5.3064, 4.3344, 1.5768}}, {8342, {5.1192, 4.3344, 1.5912}}, {8343, {2.6640, 4.3344, 1.5840}}, {8344, {7.9128, 2.2392, 1.5768}}, {8345, {5.3064, 2.2392, 1.5768}}, {8346, {5.2128, 2.2320, 2.5848}}, {8347, {3.6576, 2.2752, 1.6704}}, {8348, {3.5280, 3.6720, 1.6704}}, {8352, {8.0352, 6.8832, 1.5192}}, {8353, {7.8192, 8.4744, 0.6336}}, {8354, {7.8192, 8.1360, 0.2520}}, {8355, {7.4448, 7.8624, 0.0072}}, {8356, {6.1632, 8.1000, 0.1440}}, {8357, {10.3968, 8.0640, 2.0592}}, {8358, {8.6760, 7.8840, -0.0000}}, {8359, {13.6800, 7.8624, 0.1440}}, {8360, {10.3320, 7.8624, 0.1440}}, {8361, {12.2256, 7.8840, 0.2520}}, {8362, {9.3168, 6.1848, -0.0000}}, {8363, {6.7896, 8.6976, 1.5552}}, {8364, {9.7056, 8.1432, 0.2520}}, {8365, {8.8992, 7.8840, -0.0000}}, {8366, {8.2800, 7.8696, -0.0000}}, {8367, {4.2408, 8.0784, 0.2088}}, {8368, {6.4872, 8.7336, 1.9008}}, {8369, {8.6184, 7.8696, -0.0000}}, {8370, {8.6256, 8.4744, 0.6336}}, {8371, {8.0496, 8.2728, -0.0000}}, {8372, {6.8472, 8.1432, 0.2520}}, {8373, {7.8192, 8.4744, 0.6336}}, {8374, {7.9344, 8.6976, 0.1440}}, {8375, {6.4872, 8.1432, 0.3816}}, {8376, {7.0344, 7.8624, 0.0072}}, {8377, {6.4008, 7.8696, 0.2520}}, {8378, {6.5592, 7.8480, -0.0000}}, {8379, {11.5848, 7.3440, 2.4552}}, {8380, {9.9576, 7.7328, -0.0000}}, {8381, {7.7040, 7.8696, -0.0000}}, {8382, {10.1736, 9.0936, 0.6768}}, {8400, {0.0000, 8.8344, -7.4232}}, {8401, {0.0000, 8.8344, -7.4232}}, {8402, {0.0000, 8.0784, 2.5920}}, {8403, {0.0000, 6.7896, 1.3032}}, {8404, {0.0000, 9.2376, -6.1632}}, {8405, {0.0000, 9.2376, -6.1632}}, {8406, {0.0000, 8.8344, -6.4728}}, {8407, {0.0000, 8.8344, -6.4728}}, {8408, {0.0000, 6.2424, -0.5760}}, {8409, {0.0000, 6.2424, -0.5760}}, {8410, {0.0000, 6.2424, -0.5760}}, {8411, {0.0000, 8.2512, -7.0488}}, {8412, {0.0000, 8.2512, -7.0488}}, {8413, {0.0000, 8.0784, 2.5920}}, {8414, {0.0000, 7.4952, 2.0088}}, {8415, {0.0000, 8.0784, 2.5920}}, {8416, {0.0000, 8.0784, 2.5920}}, {8417, {0.0000, 8.8344, -6.4728}}, {8418, {0.0000, 7.6896, 2.1600}}, {8419, {0.0000, 7.8408, 2.5920}}, {8420, {0.0000, 9.1944, 0.9144}}, {8421, {0.0000, 8.0784, 2.5920}}, {8422, {0.0000, 8.0784, 2.5920}}, {8423, {1.7496, 7.8264, -0.0000}}, {8424, {0.0000, -1.3896, 2.5920}}, {8425, {0.0000, 8.1144, -6.6672}}, {8426, {0.0000, 3.9240, -1.5624}}, {8427, {0.0000, 8.0784, 2.5920}}, {8428, {0.0000, -1.1808, 2.5920}}, {8429, {0.0000, -1.1808, 2.5920}}, {8430, {0.0000, -0.2304, 2.5920}}, {8431, {0.0000, -0.2304, 2.5920}}, {8432, {0.0000, 8.8920, -6.4224}}, {8448, {8.3160, 8.5320, 1.7064}}, {8449, {8.3952, 8.5320, 1.7064}}, {8450, {8.1360, 8.1648, 0.2232}}, {8451, {11.8584, 8.1504, 0.2520}}, {8452, {8.0280, 7.8912, -0.0000}}, {8453, {8.9640, 8.5248, 1.7064}}, {8454, {10.1664, 8.5248, 1.7064}}, {8455, {7.3800, 8.1288, 0.1800}}, {8456, {6.5016, 8.1288, 0.2448}}, {8457, {11.5488, 8.1216, -0.0000}}, {8458, {5.8824, 4.1616, 2.5920}}, {8459, {9.8928, 8.4024, 0.1152}}, {8460, {7.9560, 8.2008, 1.9008}}, {8461, {9.8208, 7.8696, -0.0000}}, {8462, {6.8112, 8.8632, 0.1440}}, {8463, {6.8112, 8.8632, 0.1440}}, {8464, {6.9408, 8.4096, 0.1440}}, {8465, {7.3656, 8.2224, 0.0504}}, {8466, {8.5824, 8.4456, 0.1152}}, {8467, {5.0544, 8.9784, -0.0000}}, {8468, {9.7848, 8.7048, 0.1440}}, {8469, {9.0216, 7.8696, 0.2232}}, {8470, {11.4480, 8.0280, 0.1872}}, {8471, {11.5704, 8.6400, 2.2248}}, {8472, {8.8920, 8.5392, 0.2520}}, {8473, {7.0704, 7.8696, -0.0000}}, {8474, {8.7480, 8.0856, 2.0592}}, {8475, {10.7136, 8.4024, 0.1440}}, {8476, {8.5464, 8.1792, 0.0504}}, {8477, {9.0720, 7.8696, -0.0000}}, {8478, {9.3528, 7.8696, 0.0360}}, {8479, {8.8344, 9.4176, 1.4904}}, {8480, {12.7368, 8.9856, -3.2184}}, {8481, {17.7552, 5.4288, 0.0072}}, {8482, {14.3208, 8.8056, -3.3840}}, {8483, {9.0000, 9.4176, 1.4904}}, {8484, {7.9128, 7.8696, -0.0000}}, {8485, {5.2992, 7.8696, 2.5416}}, {8486, {8.5680, 8.1432, -0.0000}}, {8487, {8.5680, 7.8696, 0.2736}}, {8488, {7.9560, 8.0928, 1.9512}}, {8489, {4.3848, 5.5512, 0.1368}}, {8490, {8.8992, 7.8912, -0.0000}}, {8491, {8.6976, 9.4104, -0.0000}}, {8492, {10.1592, 8.4384, 0.1008}}, {8493, {7.3656, 8.2008, 0.0504}}, {8494, {6.9624, 6.7320, 0.1440}}, {8495, {4.3560, 4.1616, 0.0864}}, {8496, {7.0560, 8.4528, 0.1152}}, {8497, {8.2872, 8.4384, 0.1224}}, {8498, {7.4448, 7.8696, -0.0000}}, {8499, {12.2616, 8.3736, 0.1224}}, {8500, {4.6512, 4.1616, 0.0864}}, {8501, {8.3016, 8.0928, 0.2160}}, {8502, {8.0064, 8.0928, -0.0000}}, {8503, {5.5656, 8.0928, 0.4896}}, {8504, {7.6032, 8.0928, 0.4896}}, {8505, {5.4000, 8.3592, 0.1296}}, {8506, {8.5392, 9.4104, 0.9720}}, {8507, {17.5968, 5.6736, 0.0072}}, {8508, {8.3232, 5.4144, 0.1584}}, {8509, {8.3448, 5.6232, 2.5920}}, {8510, {7.4304, 7.8696, -0.0000}}, {8511, {9.7632, 7.8696, -0.0000}}, {8512, {8.0712, 7.8696, -0.0000}}, {8513, {8.4240, 8.1432, 0.2520}}, {8514, {6.5736, 7.8696, 0.2520}}, {8515, {6.5736, 8.1216, -0.0000}}, {8516, {6.6240, 8.1216, 0.1368}}, {8517, {8.2584, 7.8696, -0.0000}}, {8518, {7.9056, 8.6616, 0.1440}}, {8519, {6.8832, 5.6232, 0.1440}}, {8520, {5.2416, 8.8848, 0.1440}}, {8521, {4.5144, 8.8848, 2.5848}}, {8522, {9.3456, 8.1216, -0.0000}}, {8523, {8.7912, 8.0928, 0.2520}}, {8524, {8.6904, 8.6904, 0.2952}}, {8525, {12.1320, 9.0648, 1.7496}}, {8526, {5.8752, 5.4144, 0.0072}}, {8527, {9.5616, 3.9528, -0.0000}}, {8528, {10.0944, 8.9208, 2.1024}}, {8529, {10.0944, 8.9208, 2.1024}}, {8530, {13.9824, 8.9280, 1.7496}}, {8531, {10.0944, 8.9208, 2.1024}}, {8532, {10.0872, 8.9208, 2.1024}}, {8533, {10.0944, 8.9208, 2.1024}}, {8534, {10.0872, 8.9208, 2.1024}}, {8535, {10.0944, 8.9208, 2.1024}}, {8536, {10.0872, 9.0144, 2.1024}}, {8537, {10.0944, 8.9208, 2.1024}}, {8538, {10.0872, 8.9136, 2.1024}}, {8539, {10.0944, 8.9208, 2.1024}}, {8540, {10.0944, 8.9208, 2.1024}}, {8541, {10.0944, 8.9136, 2.1024}}, {8542, {10.0944, 9.0072, 2.1024}}, {8543, {5.5080, 8.9208, 1.7064}}, {8544, {4.3200, 7.8840, -0.0000}}, {8545, {7.8480, 7.8912, -0.0000}}, {8546, {11.3760, 7.8912, -0.0000}}, {8547, {12.5208, 7.8840, 0.2520}}, {8548, {8.9928, 7.8840, 0.2520}}, {8549, {12.5208, 7.8840, 0.2520}}, {8550, {16.0488, 7.8912, 0.2520}}, {8551, {19.5768, 7.8912, 0.2520}}, {8552, {12.4200, 7.8840, -0.0000}}, {8553, {8.8920, 7.8912, -0.0000}}, {8554, {12.4200, 7.8840, -0.0000}}, {8555, {15.9480, 7.8912, -0.0000}}, {8556, {7.1280, 7.8840, -0.0000}}, {8557, {7.8192, 8.1432, 0.2520}}, {8558, {8.5536, 7.8624, -0.0000}}, {8559, {10.5048, 7.8696, -0.0000}}, {8560, {3.2976, 8.1360, -0.0000}}, {8561, {5.9760, 8.1360, -0.0000}}, {8562, {8.6544, 8.1360, -0.0000}}, {8563, {9.2016, 8.1360, 0.1368}}, {8564, {6.7464, 5.4072, 0.1440}}, {8565, {9.3816, 8.1360, 0.1368}}, {8566, {12.0600, 8.1360, 0.1368}}, {8567, {14.7384, 8.1360, 0.1368}}, {8568, {9.6120, 8.1360, -0.0000}}, {8569, {6.9336, 5.4072, -0.0000}}, {8570, {9.6120, 8.1360, -0.0000}}, {8571, {12.2904, 8.1360, -0.0000}}, {8572, {3.3912, 8.7048, -0.0000}}, {8573, {5.3928, 5.6232, 0.1440}}, {8574, {6.7896, 8.6976, 0.1440}}, {8575, {10.3968, 5.5368, 0.0072}}, {8576, {12.9456, 7.8624, -0.0000}}, {8577, {8.5536, 7.8624, -0.0000}}, {8578, {12.9456, 7.8624, -0.0000}}, {8579, {7.8192, 8.1432, 0.2520}}, {8580, {5.3928, 5.6232, 0.1440}}, {8581, {7.9272, 8.1360, 2.3616}}, {8582, {8.1792, 7.8048, 1.1448}}, {8583, {9.1008, 7.8624, -0.0000}}, {8584, {14.0472, 7.8624, -0.0000}}, {8585, {10.0872, 8.9208, 2.1024}}, {8586, {5.9976, 7.8624, 0.2664}}, {8587, {5.9976, 8.1288, 0.2664}}, {8592, {12.0024, 6.5520, -0.2664}}, {8593, {5.9976, 8.6832, 1.8648}}, {8594, {12.0024, 6.5520, -0.2664}}, {8595, {5.9976, 8.6832, 1.8648}}, {8596, {12.0024, 6.5520, -0.2664}}, {8597, {5.9976, 8.6832, 1.8648}}, {8598, {12.0024, 8.6832, 1.8648}}, {8599, {12.0024, 8.6832, 1.8648}}, {8600, {12.0024, 8.6904, 1.8648}}, {8601, {12.0024, 8.6904, 1.8648}}, {8602, {12.0024, 6.5520, -0.2664}}, {8603, {12.0024, 6.5520, -0.2664}}, {8604, {12.0024, 6.5448, -0.2736}}, {8605, {12.0024, 6.5448, -0.2736}}, {8606, {12.0024, 6.5520, -0.2664}}, {8607, {5.9976, 8.6832, 1.8648}}, {8608, {12.0024, 6.5520, -0.2664}}, {8609, {5.9976, 8.6832, 1.8648}}, {8610, {12.0024, 6.5520, -0.2664}}, {8611, {12.0024, 6.5520, -0.2664}}, {8612, {12.0024, 6.9264, 0.1080}}, {8613, {5.9976, 9.1152, 2.2968}}, {8614, {12.0024, 6.9264, 0.1080}}, {8615, {5.9976, 9.1152, 2.3040}}, {8616, {5.9976, 8.6832, 2.5920}}, {8617, {12.0024, 7.3224, -0.2664}}, {8618, {12.0024, 7.3224, -0.2664}}, {8619, {12.0024, 7.3224, 0.1008}}, {8620, {12.0024, 7.3224, 0.1008}}, {8621, {14.9976, 6.5448, -0.2736}}, {8622, {14.9976, 6.5520, -0.2664}}, {8623, {12.0024, 8.9784, 2.4840}}, {8624, {5.9976, 8.6832, 0.0072}}, {8625, {5.9976, 8.6832, 0.0072}}, {8626, {5.9976, 8.6904, -0.0000}}, {8627, {5.9976, 8.6904, -0.0000}}, {8628, {5.9976, 8.6832, 0.0072}}, {8629, {12.0024, 8.6904, -0.2664}}, {8630, {12.0024, 5.6808, 0.2448}}, {8631, {12.0024, 5.6808, 0.2448}}, {8632, {12.0024, 9.4104, 1.8648}}, {8633, {12.0024, 8.6904, 1.8648}}, {8634, {9.3168, 8.3520, 0.8208}}, {8635, {9.3168, 8.3520, 0.8208}}, {8636, {12.0024, 6.5520, -3.1680}}, {8637, {12.0024, 3.6504, -0.2664}}, {8638, {5.9976, 8.7768, 1.8648}}, {8639, {5.9976, 8.7768, 1.8648}}, {8640, {12.0024, 6.5520, -3.1680}}, {8641, {12.0024, 3.6504, -0.2664}}, {8642, {5.9976, 8.7768, 1.8648}}, {8643, {5.9976, 8.7768, 1.8648}}, {8644, {12.0024, 8.4024, 1.2096}}, {8645, {9.9864, 8.6832, 1.8648}}, {8646, {12.0024, 8.4024, 1.2096}}, {8647, {12.0024, 8.2152, 1.3968}}, {8648, {9.9864, 8.6832, 1.8648}}, {8649, {12.0024, 8.2152, 1.3968}}, {8650, {9.9864, 8.6832, 1.8648}}, {8651, {12.0024, 7.7256, 0.9072}}, {8652, {12.0024, 7.7256, 0.9072}}, {8653, {12.0024, 6.7176, -0.1008}}, {8654, {14.9976, 6.7176, -0.1008}}, {8655, {12.0024, 6.7176, -0.1008}}, {8656, {12.0024, 6.7176, -0.1008}}, {8657, {7.3296, 8.6904, 1.8648}}, {8658, {12.0024, 6.7176, -0.1008}}, {8659, {7.3296, 8.6904, 1.8648}}, {8660, {14.9976, 6.7176, -0.1008}}, {8661, {7.3296, 9.4104, 2.5920}}, {8662, {12.0024, 8.6832, 1.8720}}, {8663, {12.0024, 8.6832, 1.8720}}, {8664, {12.0024, 8.6904, 1.8648}}, {8665, {12.0024, 8.6904, 1.8648}}, {8666, {12.0024, 7.7400, 0.9216}}, {8667, {12.0024, 7.7400, 0.9216}}, {8668, {12.0024, 5.4432, -1.3680}}, {8669, {12.0024, 5.4504, -1.3824}}, {8670, {5.9976, 8.6832, 1.8648}}, {8671, {5.9976, 8.6832, 1.8648}}, {8672, {12.0024, 6.5520, -0.2664}}, {8673, {5.9976, 8.6904, 1.8648}}, {8674, {12.0024, 6.5520, -0.2664}}, {8675, {5.9976, 8.6904, 1.8648}}, {8676, {12.0024, 6.9264, 0.1080}}, {8677, {12.0024, 6.9264, 0.1080}}, {8678, {12.0024, 6.7248, -0.0936}}, {8679, {7.3224, 8.6904, 1.8648}}, {8680, {12.0024, 6.7248, -0.0936}}, {8681, {7.3224, 8.6904, 1.8648}}, {8682, {7.3224, 8.6904, 1.8648}}, {8683, {7.3224, 8.6904, 1.8648}}, {8684, {7.3224, 8.6832, 1.8648}}, {8685, {7.3224, 8.6904, 1.8648}}, {8686, {7.3224, 8.6904, 1.8648}}, {8687, {7.3224, 8.6904, 1.8648}}, {8688, {12.0024, 6.7248, -0.0936}}, {8689, {9.2160, 7.8552, 0.3816}}, {8690, {9.2160, 8.2368, -0.0000}}, {8691, {7.3224, 9.4104, 2.5920}}, {8692, {12.0024, 6.5520, -0.2664}}, {8693, {9.9936, 8.6832, 1.8648}}, {8694, {12.0024, 9.3744, 2.5560}}, {8695, {12.0024, 6.5520, -0.2664}}, {8696, {12.0024, 6.5520, -0.2664}}, {8697, {12.0024, 6.5520, -0.2664}}, {8698, {12.0024, 6.5520, -0.2664}}, {8699, {12.0024, 6.5520, -0.2664}}, {8700, {12.0024, 6.5520, -0.2664}}, {8701, {12.0024, 6.7248, -0.1008}}, {8702, {12.0024, 6.7248, -0.1008}}, {8703, {12.0024, 6.5520, -0.2664}}, {8704, {6.6600, 8.3304, 0.2664}}, {8705, {5.9976, 9.3528, 0.6480}}, {8706, {6.3720, 8.5896, 0.2664}}, {8707, {6.6600, 8.3304, -0.0000}}, {8708, {6.6600, 9.0648, 2.2464}}, {8709, {9.3240, 8.8920, 2.0808}}, {8710, {9.9360, 8.6112, -0.0000}}, {8711, {9.9360, 8.2008, 0.4104}}, {8712, {7.9920, 6.8184, -0.0000}}, {8713, {7.9920, 9.0648, 2.2464}}, {8714, {6.8184, 5.4144, -0.0000}}, {8715, {7.9920, 6.8184, -0.0000}}, {8716, {7.9920, 9.0648, 2.2464}}, {8717, {6.8184, 5.4144, -0.0000}}, {8718, {3.3192, 2.2464, -0.0000}}, {8719, {9.6768, 8.5176, 1.6992}}, {8720, {9.6768, 8.5176, 1.6992}}, {8721, {9.9576, 8.5176, 1.6992}}, {8722, {9.3240, 3.6504, -3.1680}}, {8723, {9.3240, 5.9976, 1.9944}}, {8724, {9.3240, 9.1944, 1.1376}}, {8725, {5.9976, 9.0648, 2.2392}}, {8726, {5.9976, 9.0648, 2.2392}}, {8727, {5.6520, 5.6448, -0.7776}}, {8728, {3.3984, 4.8816, -1.9440}}, {8729, {3.3984, 4.8744, -1.9440}}, {8730, {9.9000, 9.4104, 2.4048}}, {8731, {9.9000, 9.4104, 2.4120}}, {8732, {9.9000, 9.4176, 2.4048}}, {8733, {9.3240, 5.3064, 0.1368}}, {8734, {12.0024, 5.3064, 0.1368}}, {8735, {9.2160, 8.2368, -0.0000}}, {8736, {8.6688, 8.3304, -0.0000}}, {8737, {8.6688, 8.5680, 0.2448}}, {8738, {8.6688, 6.6096, 0.6120}}, {8739, {3.6648, 9.4104, 2.5920}}, {8740, {3.6648, 9.4104, 2.5920}}, {8741, {5.9976, 9.4104, 2.5920}}, {8742, {5.9976, 9.4104, 2.5920}}, {8743, {7.9920, 7.1784, 0.2664}}, {8744, {7.9920, 7.1784, 0.2736}}, {8745, {7.9920, 7.1784, 0.2664}}, {8746, {7.9920, 7.1784, 0.2664}}, {8747, {5.9688, 9.4104, 2.5920}}, {8748, {9.1368, 9.4104, 2.5920}}, {8749, {12.2976, 9.4104, 2.5920}}, {8750, {5.9688, 9.4104, 2.5920}}, {8751, {9.1368, 9.4104, 2.5920}}, {8752, {12.2976, 9.4104, 2.5920}}, {8753, {5.9688, 9.4104, 2.5920}}, {8754, {5.9688, 9.4104, 2.5920}}, {8755, {5.9688, 9.4104, 2.5920}}, {8756, {7.9920, 6.5160, -0.0000}}, {8757, {7.9920, 6.5160, -0.0000}}, {8758, {4.0032, 6.5160, -0.0000}}, {8759, {7.9920, 6.5160, -0.0000}}, {8760, {9.3240, 6.7104, -3.1680}}, {8761, {9.3240, 6.3576, -0.4608}}, {8762, {9.3240, 6.6744, -0.1512}}, {8763, {9.3240, 7.8840, 1.0584}}, {8764, {9.3240, 4.7376, -2.0808}}, {8765, {9.3240, 4.7376, -2.0808}}, {8766, {9.3240, 5.0040, -1.8288}}, {8767, {12.0024, 7.6680, -0.0432}}, {8768, {5.9976, 7.4016, 0.5832}}, {8769, {9.3240, 6.4944, -0.3240}}, {8770, {9.3240, 5.4072, -0.2736}}, {8771, {9.3240, 6.5448, -1.4112}}, {8772, {9.3240, 9.0648, 2.2464}}, {8773, {9.3240, 6.9048, -0.0000}}, {8774, {9.3240, 6.9048, 1.9584}}, {8775, {9.3240, 9.0720, 2.2464}}, {8776, {9.3240, 6.1992, -0.6120}}, {8777, {9.3240, 9.0648, 2.2464}}, {8778, {9.3240, 6.1992, 1.2888}}, {8779, {9.3240, 7.6680, 0.8496}}, {8780, {9.3240, 6.9048, -0.0000}}, {8781, {9.3240, 6.2496, -0.5760}}, {8782, {9.3240, 6.3216, -0.4968}}, {8783, {9.3240, 6.3216, -1.9944}}, {8784, {9.3240, 7.8696, -1.9944}}, {8785, {9.3240, 7.8696, 1.0512}}, {8786, {9.3240, 7.8696, 1.0512}}, {8787, {9.3240, 7.8696, 1.0512}}, {8788, {11.5488, 5.2416, -1.5768}}, {8789, {11.5488, 5.2416, -1.5768}}, {8790, {9.3240, 4.8240, -1.9944}}, {8791, {9.3240, 8.8344, -1.9944}}, {8792, {9.3240, 8.1576, -1.9944}}, {8793, {9.3240, 9.4104, -1.9944}}, {8794, {9.3240, 9.4104, -1.9944}}, {8795, {9.3240, 9.1440, -1.9944}}, {8796, {9.3240, 9.4104, -1.9944}}, {8797, {9.3240, 9.1224, -1.9944}}, {8798, {9.3240, 7.9416, -1.9944}}, {8799, {9.3240, 9.3168, -1.9944}}, {8800, {9.3240, 8.0208, 1.2024}}, {8801, {9.3240, 5.9976, -0.8280}}, {8802, {9.3240, 8.0208, 1.1952}}, {8803, {9.3240, 7.1640, 0.3456}}, {8804, {9.3240, 6.8832, 1.7568}}, {8805, {9.3240, 6.8832, 1.7568}}, {8806, {9.3240, 8.6400, 1.7568}}, {8807, {9.3240, 8.6400, 1.7568}}, {8808, {9.3240, 8.6400, 2.5920}}, {8809, {9.3240, 8.6400, 2.5920}}, {8810, {12.9528, 6.8832, 0.0576}}, {8811, {12.9528, 6.8832, 0.0576}}, {8812, {5.9976, 9.4104, 2.5920}}, {8813, {9.3240, 8.0208, 1.1952}}, {8814, {9.3240, 9.0720, 2.2464}}, {8815, {9.3240, 9.0720, 2.2464}}, {8816, {9.3240, 8.7264, 2.5920}}, {8817, {9.3240, 8.7264, 2.5920}}, {8818, {9.3240, 8.6400, 2.0232}}, {8819, {9.3240, 8.6400, 2.0232}}, {8820, {9.3240, 9.4104, 2.5920}}, {8821, {9.3240, 9.4176, 2.5920}}, {8822, {9.3240, 9.4104, 2.5920}}, {8823, {9.3240, 9.4104, 2.5920}}, {8824, {9.3240, 9.4104, 2.5920}}, {8825, {9.3240, 9.4104, 2.5920}}, {8826, {9.3240, 6.8976, 0.0648}}, {8827, {9.3240, 6.8976, 0.0648}}, {8828, {9.3240, 6.8976, 1.8648}}, {8829, {9.3240, 6.8976, 1.8648}}, {8830, {9.3240, 8.6544, 2.0232}}, {8831, {9.3240, 8.6544, 2.0232}}, {8832, {9.3240, 7.1352, 0.3024}}, {8833, {9.3240, 7.1352, 0.3024}}, {8834, {9.3240, 6.8184, -0.0000}}, {8835, {9.3240, 6.8184, -0.0000}}, {8836, {9.3240, 9.0648, 2.2464}}, {8837, {9.3240, 9.0648, 2.2464}}, {8838, {9.3240, 6.8184, 1.7568}}, {8839, {9.3240, 6.8184, 1.7568}}, {8840, {9.3240, 7.9272, 2.5920}}, {8841, {9.3240, 7.9272, 2.5920}}, {8842, {9.3240, 6.8184, 2.5920}}, {8843, {9.3240, 6.8184, 2.5920}}, {8844, {7.9920, 7.1784, 0.2664}}, {8845, {7.9920, 7.1784, 0.2664}}, {8846, {7.9920, 7.1856, 0.2664}}, {8847, {9.3240, 6.8184, -0.0000}}, {8848, {9.3240, 6.8184, -0.0000}}, {8849, {9.3240, 6.8184, 2.1024}}, {8850, {9.3240, 6.8184, 2.1024}}, {8851, {7.9920, 7.1784, -0.0000}}, {8852, {7.9920, 7.1784, -0.0000}}, {8853, {9.3240, 7.6536, 0.8280}}, {8854, {9.3240, 7.6464, 0.8280}}, {8855, {9.3240, 7.6464, 0.8280}}, {8856, {9.3240, 7.6464, 0.8280}}, {8857, {9.2448, 7.8048, 0.9792}}, {8858, {9.2448, 7.8048, 0.9792}}, {8859, {9.3240, 7.6464, 0.8280}}, {8860, {9.3240, 7.6464, 0.8280}}, {8861, {9.3240, 7.6464, 0.8280}}, {8862, {9.3240, 7.4736, 0.6480}}, {8863, {9.3240, 7.4736, 0.6480}}, {8864, {9.3240, 7.4736, 0.6480}}, {8865, {9.3240, 7.4736, 0.6480}}, {8866, {7.3296, 8.3304, -0.0000}}, {8867, {7.3296, 8.3304, -0.0000}}, {8868, {9.3240, 7.9920, 0.0072}}, {8869, {9.3240, 7.9992, -0.0000}}, {8870, {4.3992, 8.3304, -0.0000}}, {8871, {4.3992, 8.3304, -0.0000}}, {8872, {7.3296, 8.3304, -0.0000}}, {8873, {8.6688, 8.3304, -0.0000}}, {8874, {10.6560, 8.3304, -0.0000}}, {8875, {8.6688, 8.3304, -0.0000}}, {8876, {7.3296, 8.3304, 1.2024}}, {8877, {7.3296, 8.3304, 1.2024}}, {8878, {8.6688, 8.3304, 1.2024}}, {8879, {8.6688, 8.3304, 1.2024}}, {8880, {9.3240, 7.4448, 0.6264}}, {8881, {9.3240, 7.4448, 0.6264}}, {8882, {9.3240, 6.8832, 0.0720}}, {8883, {9.3240, 6.8832, 0.0720}}, {8884, {9.3240, 6.8832, 2.1024}}, {8885, {9.3240, 6.8832, 2.1024}}, {8886, {12.0024, 5.3208, -1.4976}}, {8887, {12.0024, 5.3208, -1.4976}}, {8888, {12.0024, 5.3208, -1.4976}}, {8889, {9.3240, 7.2000, 0.3816}}, {8890, {6.6600, 5.0904, 2.4696}}, {8891, {7.3296, 8.5968, -0.0000}}, {8892, {7.3296, 8.5896, 0.0072}}, {8893, {7.3296, 8.5896, 0.0072}}, {8894, {9.2160, 8.2368, -0.0000}}, {8895, {10.6632, 9.0864, -0.0000}}, {8896, {7.9920, 7.1784, 0.2664}}, {8897, {7.9920, 7.1784, 0.2664}}, {8898, {9.9864, 9.0576, 2.3616}}, {8899, {9.9864, 9.0648, 2.3544}}, {8900, {4.3272, 5.4216, -1.3968}}, {8901, {2.6928, 4.5288, -2.2968}}, {8902, {7.0776, 6.8832, -0.5976}}, {8903, {9.3240, 6.6960, -0.1224}}, {8904, {9.3240, 6.3072, -0.5112}}, {8905, {9.3240, 6.3072, -0.5112}}, {8906, {9.3240, 6.3072, -0.5112}}, {8907, {9.3240, 8.3304, 0.2664}}, {8908, {9.3240, 8.3304, 0.2664}}, {8909, {9.3240, 6.5448, -1.4112}}, {8910, {9.1152, 6.9408, 0.2664}}, {8911, {9.1152, 6.9408, 0.2664}}, {8912, {9.3240, 6.8184, -0.0000}}, {8913, {9.3240, 6.8184, -0.0000}}, {8914, {7.9920, 7.1784, 0.2664}}, {8915, {7.9920, 7.1784, 0.2664}}, {8916, {7.9920, 8.6904, 0.2664}}, {8917, {5.9976, 9.4104, 2.5920}}, {8918, {9.3240, 6.8832, 0.0576}}, {8919, {9.3240, 6.8832, 0.0576}}, {8920, {16.5888, 6.8832, 0.0576}}, {8921, {16.5888, 6.8832, 0.0576}}, {8922, {9.3240, 9.4104, 2.5920}}, {8923, {9.3240, 9.4104, 2.5920}}, {8924, {9.3240, 6.8832, 1.7568}}, {8925, {9.3240, 6.8832, 1.7568}}, {8926, {9.3240, 8.6904, 0.0648}}, {8927, {9.3240, 8.6904, 0.0648}}, {8928, {9.3240, 7.1352, 2.1096}}, {8929, {9.3240, 7.1352, 2.1096}}, {8930, {9.3240, 9.0720, 2.2464}}, {8931, {9.3240, 9.0648, 2.2464}}, {8932, {9.3240, 7.4088, 2.5704}}, {8933, {9.3240, 7.4088, 2.5704}}, {8934, {9.3240, 8.6400, 2.5920}}, {8935, {9.3240, 8.6400, 2.5920}}, {8936, {9.3240, 8.6544, 2.5920}}, {8937, {9.3240, 8.6544, 2.5920}}, {8938, {9.3240, 8.0208, 1.2024}}, {8939, {9.3240, 8.0208, 1.2024}}, {8940, {9.3240, 9.0648, 2.2464}}, {8941, {9.3240, 9.0648, 2.2464}}, {8942, {3.9960, 8.0928, 1.2744}}, {8943, {12.0024, 4.0752, -2.7432}}, {8944, {12.0024, 8.0928, 1.2744}}, {8945, {12.0024, 8.0928, 1.2744}}, {8946, {9.5760, 6.8184, -0.0000}}, {8947, {7.9920, 6.8184, -0.0000}}, {8948, {6.8184, 5.4144, -0.0000}}, {8949, {7.9920, 9.4104, -0.0000}}, {8950, {7.9920, 8.9280, -0.0000}}, {8951, {6.8184, 7.1856, -0.0000}}, {8952, {7.9920, 6.8184, 2.1024}}, {8953, {7.9920, 6.8184, -0.0000}}, {8954, {9.5760, 6.8184, -0.0000}}, {8955, {7.9920, 6.8184, -0.0000}}, {8956, {6.8184, 5.4144, -0.0000}}, {8957, {7.9920, 8.9280, -0.0000}}, {8958, {6.8184, 7.1856, -0.0000}}, {8959, {9.0648, 8.3304, -0.0000}}, {8960, {9.3240, 7.0344, 0.0360}}, {8961, {12.7512, 7.2432, -1.0944}}, {8962, {9.5400, 8.1144, -0.0000}}, {8963, {7.2360, 9.2952, -5.9184}}, {8964, {7.2360, 1.0944, 2.2824}}, {8965, {7.2360, 6.2352, -1.2384}}, {8966, {7.2360, 8.5824, -1.2384}}, {8967, {4.7448, 9.1440, 2.4408}}, {8968, {5.3280, 9.4104, 2.5920}}, {8969, {5.3280, 9.4104, 2.5920}}, {8970, {5.3280, 9.4104, 2.5920}}, {8971, {5.3280, 9.4104, 2.5920}}, {8972, {5.9976, 8.3304, -3.6720}}, {8973, {5.9976, 8.3304, -3.6720}}, {8974, {5.9976, 4.3992, 0.2664}}, {8975, {5.9976, 4.3992, 0.2664}}, {8976, {9.3240, 4.2696, -1.0584}}, {8977, {6.0696, 5.2056, -1.7352}}, {8978, {9.2232, 7.5600, -3.0168}}, {8979, {9.2232, 7.5600, -3.1680}}, {8980, {9.2232, 7.5456, -3.1248}}, {8981, {6.7248, 5.5296, -0.0576}}, {8982, {6.7680, 7.1496, -0.8208}}, {8983, {6.7752, 7.1496, -0.8136}}, {8984, {6.7752, 7.2288, -0.6192}}, {8985, {9.3240, 6.3792, -3.1680}}, {8986, {9.5400, 8.1072, 0.2880}}, {8987, {7.9344, 9.2952, 2.4624}}, {8988, {5.9976, 8.3304, -3.6720}}, {8989, {5.9976, 8.3304, -3.6720}}, {8990, {5.9976, 4.3992, 0.2664}}, {8991, {5.9976, 4.3992, 0.2664}}, {8992, {7.7904, 9.4104, 2.5920}}, {8993, {7.7904, 9.4104, 2.5920}}, {8994, {8.2584, 4.6008, -2.2248}}, {8995, {8.2584, 4.6008, -2.2248}}, {8996, {9.5400, 6.2640, -1.2096}}, {8997, {9.5400, 6.2640, -0.0000}}, {8998, {13.6368, 7.7760, -0.0000}}, {8999, {10.3104, 7.7760, -0.0000}}, {9000, {12.8664, 6.0768, 0.0216}}, {9001, {4.6584, 9.4104, 2.5920}}, {9002, {4.6584, 9.4104, 2.5920}}, {9003, {13.6368, 7.7760, -0.0000}}, {9004, {10.9224, 8.5176, 1.6992}}, {9005, {9.5400, 6.8832, -0.1584}}, {9006, {9.5400, 6.5160, 0.2232}}, {9007, {9.5400, 4.8672, -0.8640}}, {9008, {9.5400, 5.7240, -0.0000}}, {9009, {9.5400, 7.1496, -0.8208}}, {9010, {9.5400, 6.9408, -0.0000}}, {9011, {9.5400, 6.9048, -3.1608}}, {9012, {9.5400, 6.3072, -0.0000}}, {9013, {9.5400, 5.4144, -0.0216}}, {9014, {9.3240, 7.9920, -0.0000}}, {9015, {5.8104, 7.4736, 0.6480}}, {9016, {9.3240, 8.6400, 0.6480}}, {9017, {9.3240, 8.6400, 0.6480}}, {9018, {9.3240, 8.6400, 0.6480}}, {9019, {9.3240, 8.6400, 0.6480}}, {9020, {9.3240, 8.6400, 0.6480}}, {9021, {9.3240, 8.7480, 1.9224}}, {9022, {9.2448, 7.8048, 0.9792}}, {9023, {7.6464, 6.7320, -0.0936}}, {9024, {7.6464, 6.7320, -0.0936}}, {9025, {9.3240, 7.4736, 0.6480}}, {9026, {9.3240, 7.4736, 0.6480}}, {9027, {9.3240, 7.4736, 0.6480}}, {9028, {9.3240, 7.4736, 0.6480}}, {9029, {12.0024, 9.4104, 2.5920}}, {9030, {12.0024, 9.4104, 2.5920}}, {9031, {9.3240, 8.6400, 0.6480}}, {9032, {9.3240, 8.6400, 0.6480}}, {9033, {9.3240, 8.0640, 1.2456}}, {9034, {8.6688, 7.8192, 1.2456}}, {9035, {9.9288, 9.0648, 2.2392}}, {9036, {9.3240, 7.4736, 0.6480}}, {9037, {9.3240, 8.6400, 0.6480}}, {9038, {9.3240, 7.9992, -0.0000}}, {9039, {9.6768, 8.7336, 1.9080}}, {9040, {9.3240, 8.6400, 0.6480}}, {9041, {8.6688, 7.8192, 1.2528}}, {9042, {9.9288, 9.0648, 2.2392}}, {9043, {9.3240, 7.4736, 0.6480}}, {9044, {9.3240, 8.6400, 0.6480}}, {9045, {9.3240, 7.9920, 0.0072}}, {9046, {9.6768, 8.7336, 1.9080}}, {9047, {9.3240, 8.6400, 0.6480}}, {9048, {9.3240, 8.1288, -1.9944}}, {9049, {9.9288, 8.5968, 1.8144}}, {9050, {9.3240, 7.8984, 1.7568}}, {9051, {9.3240, 8.1792, -1.9944}}, {9052, {9.3240, 7.6464, 1.7568}}, {9053, {9.9936, 9.2376, 2.4192}}, {9054, {9.3240, 8.6400, 0.6480}}, {9055, {9.3240, 7.6464, 0.8280}}, {9056, {9.3240, 8.6400, 0.6480}}, {9057, {9.3240, 9.3312, 0.7056}}, {9058, {9.9288, 9.3528, 1.6272}}, {9059, {5.9976, 9.3312, -0.8280}}, {9060, {5.9976, 9.3312, -2.1024}}, {9061, {9.3240, 9.3312, 0.8280}}, {9062, {7.9920, 8.1000, 0.8496}}, {9063, {9.3240, 8.2440, 1.4184}}, {9064, {9.3240, 9.0360, -2.0808}}, {9065, {9.3240, 9.0360, 0.0576}}, {9066, {9.3240, 3.6504, 1.6488}}, {9067, {9.9288, 8.1432, 0.4536}}, {9068, {7.7688, 8.7264, 0.1440}}, {9069, {7.1568, 9.4104, 2.5920}}, {9070, {7.3296, 7.1208, 0.4176}}, {9071, {9.3240, 8.6400, 0.6480}}, {9072, {9.3240, 8.6400, 0.6480}}, {9073, {7.9920, 7.1784, 0.2664}}, {9074, {7.9920, 7.1784, 0.2664}}, {9075, {4.3848, 5.5440, 0.1440}}, {9076, {5.8032, 5.6304, 2.4480}}, {9077, {7.7832, 5.6304, 0.1440}}, {9078, {7.3224, 5.6304, 1.8144}}, {9079, {5.1768, 5.6304, 1.8144}}, {9080, {4.3848, 5.5440, 1.8144}}, {9081, {7.7832, 5.6304, 1.8144}}, {9082, {7.3224, 5.6304, 0.1440}}, {9083, {9.0576, 8.0928, 0.2520}}, {9084, {10.8864, 8.2368, 2.5920}}, {9085, {9.3240, 6.1560, -0.0000}}, {9086, {9.5400, 7.1784, 0.0072}}, {9087, {3.6648, 9.4104, 2.5920}}, {9088, {7.9920, 9.2520, 2.4768}}, {9089, {12.0024, 5.1984, -0.0000}}, {9090, {12.0024, 5.1984, -0.0000}}, {9091, {11.6712, 7.6392, 0.8208}}, {9092, {11.2536, 8.1216, -0.0000}}, {9093, {9.2808, 9.3168, 1.3536}}, {9094, {12.0024, 9.0648, 2.2320}}, {9095, {10.4544, 6.2496, -0.0000}}, {9096, {11.6640, 8.2512, 1.4328}}, {9097, {9.3240, 7.6464, 0.8280}}, {9098, {9.3240, 7.6464, 0.8280}}, {9099, {9.3240, 7.6392, 0.8208}}, {9100, {9.3312, 8.5176, -0.0000}}, {9101, {9.3240, 7.9128, -0.0000}}, {9102, {10.2456, 7.9128, -0.0000}}, {9103, {9.3240, 7.9704, 0.0072}}, {9104, {9.3240, 7.9704, -0.0000}}, {9105, {9.3240, 7.9704, 0.0072}}, {9106, {9.3240, 7.9704, -0.0000}}, {9107, {9.3240, 4.5288, -2.2896}}, {9108, {9.6912, 7.5240, 0.7056}}, {9109, {9.3240, 8.1216, -0.0000}}, {9110, {4.1040, 7.8768, -3.7800}}, {9111, {10.3104, 8.6760, 2.3472}}, {9112, {10.3104, 8.6760, 2.3472}}, {9113, {12.3048, 9.3528, 2.5344}}, {9114, {12.3048, 8.6760, -0.0000}}, {9115, {5.9976, 9.4104, 2.5920}}, {9116, {5.9976, 9.4104, 2.5920}}, {9117, {5.9976, 9.4104, 2.5920}}, {9118, {5.9976, 9.4104, 2.5920}}, {9119, {5.9976, 9.4104, 2.5920}}, {9120, {5.9976, 9.4104, 2.5920}}, {9121, {5.9976, 9.4176, 2.5920}}, {9122, {5.9976, 9.4104, 2.5920}}, {9123, {5.9976, 9.4176, 2.5920}}, {9124, {5.9976, 9.4176, 2.5920}}, {9125, {5.9976, 9.4104, 2.5920}}, {9126, {5.9976, 9.4176, 2.5920}}, {9127, {5.9976, 9.4176, 2.5920}}, {9128, {5.9976, 9.4104, 2.5920}}, {9129, {5.9976, 9.4176, 2.5920}}, {9130, {5.9976, 9.4104, 2.5920}}, {9131, {5.9976, 9.4176, 2.5920}}, {9132, {5.9976, 9.4104, 2.5920}}, {9133, {5.9976, 9.4176, 2.5920}}, {9134, {7.7904, 9.4104, 2.5920}}, {9135, {12.0024, 3.6504, -3.1680}}, {9136, {5.9976, 9.4104, 2.5920}}, {9137, {5.9976, 9.4104, 2.5920}}, {9138, {15.4440, 4.9752, 2.5920}}, {9139, {15.4440, 9.4104, -1.8432}}, {9140, {10.9224, 0.4824, 2.2104}}, {9141, {10.9224, 2.6928, -0.0000}}, {9142, {10.9224, 5.0616, 2.2104}}, {9143, {7.9344, 9.4104, 2.4048}}, {9144, {9.3240, 7.0848, 0.2520}}, {9145, {9.3240, 7.0848, 0.2520}}, {9146, {5.9976, 7.4952, -6.9912}}, {9147, {5.9976, 5.5800, -5.0760}}, {9148, {5.9976, 1.7496, -1.2456}}, {9149, {5.9976, -0.1728, 0.6768}}, {9150, {3.3840, 6.1560, 0.0072}}, {9151, {3.3840, 6.1632, -0.0000}}, {9152, {7.0920, 8.0496, 1.0224}}, {9153, {7.0920, 8.0496, 1.0224}}, {9154, {7.0920, 8.0568, 1.0224}}, {9155, {7.0920, 8.0496, 1.0224}}, {9156, {7.0920, 8.0496, 1.0224}}, {9157, {7.0920, 8.0568, 1.0224}}, {9158, {7.0920, 8.0496, 1.0224}}, {9159, {7.0920, 8.0496, 1.0224}}, {9160, {7.0920, 8.0568, 1.0224}}, {9161, {7.0920, 8.0496, 1.0224}}, {9162, {7.0920, 8.0568, 1.0224}}, {9163, {3.3840, 6.1560, 0.0072}}, {9164, {3.3840, 6.1632, -0.0000}}, {9165, {8.0424, 6.1560, -0.0000}}, {9166, {10.2960, 8.7336, 0.6336}}, {9167, {9.5400, 8.7696, -0.0000}}, {9168, {5.9976, 9.4104, 2.5920}}, {9169, {9.3240, 4.1256, -1.9800}}, {9170, {9.3240, 5.4072, -1.4112}}, {9171, {9.3240, 5.4144, -1.4112}}, {9172, {15.0120, 5.4072, -1.4112}}, {9173, {15.0120, 5.4144, -1.4112}}, {9174, {15.0120, 4.1256, -1.9800}}, {9175, {9.3240, 5.4144, -1.4112}}, {9176, {9.3240, 5.4144, -1.4112}}, {9177, {9.3240, 5.4144, -1.4112}}, {9178, {8.6688, 8.7264, 2.1024}}, {9179, {12.0024, 4.6008, -0.0000}}, {9180, {10.9224, 1.7064, 1.3752}}, {9181, {10.9224, 1.7064, 1.3752}}, {9182, {10.9224, 2.0808, 2.1888}}, {9183, {10.9224, 2.1888, 2.0808}}, {9184, {10.9224, 0.3312, 1.9656}}, {9185, {10.9224, 1.9584, 0.3312}}, {9186, {9.3240, 8.1216, -0.0000}}, {9187, {10.9224, 8.5176, 1.6992}}, {9188, {11.3112, 3.6504, -3.1680}}, {9189, {11.3112, 5.0256, -0.0000}}, {9190, {12.0024, 7.6680, -0.0432}}, {9191, {12.0024, 8.6760, 2.3688}}, {9192, {8.2080, 3.9528, 1.7496}}, {9193, {9.6552, 6.9408, 0.5688}}, {9194, {9.6552, 6.9408, 0.5688}}, {9195, {9.6552, 7.0848, 0.7128}}, {9196, {9.6552, 7.0848, 0.7128}}, {9197, {9.6552, 6.9408, 0.5616}}, {9198, {9.6552, 6.9408, 0.5616}}, {9199, {9.6552, 6.9408, 0.5616}}, {9200, {12.0024, 9.2088, 1.2816}}, {9201, {12.0024, 9.2736, 1.2816}}, {9202, {12.0024, 8.1000, 1.2816}}, {9203, {9.0936, 8.8200, 1.9008}}, {9204, {9.6552, 7.3152, 0.1944}}, {9205, {9.6552, 7.3152, 0.1944}}, {9206, {9.6552, 5.4432, -1.6848}}, {9207, {9.6552, 4.6944, -0.9360}}, {9208, {9.6552, 6.9408, 0.5616}}, {9209, {9.6552, 6.7896, -0.0360}}, {9210, {9.6552, 6.7896, -0.0360}}, {9211, {12.0024, 8.4888, 1.6272}}, {9212, {12.0024, 8.4240, 1.6272}}, {9213, {4.8312, 6.6744, -0.1224}}, {9214, {11.2896, 8.0640, 1.3680}}, {9216, {12.0024, 9.2232, 2.4048}}, {9217, {12.0024, 9.2232, 2.4048}}, {9218, {12.0024, 9.2232, 2.4048}}, {9219, {12.0024, 9.2232, 2.4048}}, {9220, {12.0024, 9.2232, 2.4048}}, {9221, {12.0024, 9.2232, 2.4048}}, {9222, {12.0024, 9.2232, 2.4048}}, {9223, {12.0024, 9.2232, 2.4048}}, {9224, {12.0024, 9.2232, 2.4048}}, {9225, {12.0024, 9.2232, 2.4048}}, {9226, {12.0024, 9.2304, 2.4048}}, {9227, {12.0024, 9.2232, 2.4048}}, {9228, {12.0024, 9.2304, 2.4048}}, {9229, {12.0024, 9.2232, 2.4048}}, {9230, {12.0024, 9.2232, 2.4048}}, {9231, {12.0024, 9.2232, 2.4048}}, {9232, {12.0024, 9.2232, 2.4048}}, {9233, {12.0024, 9.2232, 2.4048}}, {9234, {12.0024, 9.2232, 2.4048}}, {9235, {12.0024, 9.2232, 2.4048}}, {9236, {12.0024, 9.2232, 2.4048}}, {9237, {12.0024, 9.2232, 2.4048}}, {9238, {12.0024, 9.2232, 2.4048}}, {9239, {12.0024, 9.2232, 2.4048}}, {9240, {12.0024, 9.2232, 2.4048}}, {9241, {12.0024, 9.2232, 2.4048}}, {9242, {12.0024, 9.2232, 2.4048}}, {9243, {12.0024, 9.2232, 2.4048}}, {9244, {12.0024, 9.2232, 2.4048}}, {9245, {12.0024, 9.2232, 2.4048}}, {9246, {12.0024, 9.2232, 2.4048}}, {9247, {12.0024, 9.2232, 2.4048}}, {9248, {12.0024, 9.2232, 2.4048}}, {9249, {12.0024, 9.2232, 2.4048}}, {9250, {12.0024, 9.2232, 2.4048}}, {9251, {12.0024, 9.2232, 2.4048}}, {9252, {12.0024, 9.2232, 2.4048}}, {9253, {12.0024, 9.2232, 2.4048}}, {9254, {12.0024, 9.2232, 2.4048}}, {9280, {9.0576, 8.3304, -0.0000}}, {9281, {7.2432, 8.3304, 0.0144}}, {9282, {7.2432, 8.3304, 0.0144}}, {9283, {7.2432, 8.3304, 0.0144}}, {9284, {7.2432, 8.3304, -0.0000}}, {9285, {9.5544, 5.4792, -1.4616}}, {9286, {9.2376, 8.1576, -0.0000}}, {9287, {9.3960, 7.3152, -0.0000}}, {9288, {8.9424, 8.1576, -0.0000}}, {9289, {10.5696, 2.5344, -0.0000}}, {9290, {7.4448, 8.3304, -0.0000}}, {9312, {12.0024, 8.3592, 1.5336}}, {9313, {12.0024, 8.3592, 1.5336}}, {9314, {12.0024, 8.3592, 1.5336}}, {9315, {12.0024, 8.3592, 1.5336}}, {9316, {12.0024, 8.3592, 1.5336}}, {9317, {12.0024, 8.3592, 1.5336}}, {9318, {12.0024, 8.3592, 1.5336}}, {9319, {12.0024, 8.3592, 1.5336}}, {9320, {12.0024, 8.3592, 1.5336}}, {9321, {12.0024, 8.3592, 1.5336}}, {9322, {12.0024, 8.3592, 1.5336}}, {9323, {12.0024, 8.3592, 1.5336}}, {9324, {12.0024, 8.3592, 1.5336}}, {9325, {12.0024, 8.3592, 1.5336}}, {9326, {12.0024, 8.3592, 1.5336}}, {9327, {12.0024, 8.3592, 1.5336}}, {9328, {12.0024, 8.3592, 1.5336}}, {9329, {12.0024, 8.3592, 1.5336}}, {9330, {12.0024, 8.3592, 1.5336}}, {9331, {12.0024, 8.3592, 1.5336}}, {9332, {12.0024, 8.3304, 1.5624}}, {9333, {12.0024, 8.3304, 1.5624}}, {9334, {12.0024, 8.3304, 1.5624}}, {9335, {12.0024, 8.3304, 1.5624}}, {9336, {12.0024, 8.3304, 1.5624}}, {9337, {12.0024, 8.3304, 1.5624}}, {9338, {12.0024, 8.3304, 1.5624}}, {9339, {12.0024, 8.3304, 1.5624}}, {9340, {12.0024, 8.3304, 1.5624}}, {9341, {12.0024, 8.3304, 1.5624}}, {9342, {12.0024, 8.3304, 1.5624}}, {9343, {12.0024, 8.3304, 1.5624}}, {9344, {12.0024, 8.3304, 1.5624}}, {9345, {12.0024, 8.3304, 1.5624}}, {9346, {12.0024, 8.3304, 1.5624}}, {9347, {12.0024, 8.3304, 1.5624}}, {9348, {12.0024, 8.3304, 1.5624}}, {9349, {12.0024, 8.3304, 1.5624}}, {9350, {12.0024, 8.3304, 1.5624}}, {9351, {12.0024, 8.3376, 1.5624}}, {9352, {12.0024, 5.9904, -0.7416}}, {9353, {12.0024, 6.0912, -0.7416}}, {9354, {12.0024, 6.0912, -0.7344}}, {9355, {12.0024, 5.9904, -0.7416}}, {9356, {12.0024, 6.0048, -0.7416}}, {9357, {12.0024, 6.0768, -0.7416}}, {9358, {12.0024, 5.9904, -0.7416}}, {9359, {12.0024, 6.0912, -0.7416}}, {9360, {12.0024, 6.0768, -0.7416}}, {9361, {12.0024, 6.0912, -0.7416}}, {9362, {12.0024, 5.9904, -0.7416}}, {9363, {12.0024, 6.0912, -0.7416}}, {9364, {12.0024, 6.0912, -0.7416}}, {9365, {12.0024, 5.9904, -0.7416}}, {9366, {12.0024, 6.0048, -0.7416}}, {9367, {12.0024, 6.0768, -0.7416}}, {9368, {12.0024, 6.0120, -0.7416}}, {9369, {12.0024, 6.0912, -0.7416}}, {9370, {12.0024, 6.0768, -0.7416}}, {9371, {12.0024, 6.0912, -0.7416}}, {9372, {12.0024, 8.3304, 1.5624}}, {9373, {12.0024, 8.3304, 1.5624}}, {9374, {12.0024, 8.3304, 1.5624}}, {9375, {12.0024, 8.3304, 1.5624}}, {9376, {12.0024, 8.3304, 1.5624}}, {9377, {12.0024, 8.3304, 1.5624}}, {9378, {12.0024, 8.3304, 1.5624}}, {9379, {12.0024, 8.3304, 1.5624}}, {9380, {12.0024, 8.3304, 1.5624}}, {9381, {12.0024, 8.3304, 1.5624}}, {9382, {12.0024, 8.3304, 1.5624}}, {9383, {12.0024, 8.3304, 1.5624}}, {9384, {12.0024, 8.3376, 1.5624}}, {9385, {12.0024, 8.3304, 1.5624}}, {9386, {12.0024, 8.3304, 1.5624}}, {9387, {12.0024, 8.3304, 1.5624}}, {9388, {12.0024, 8.3304, 1.5624}}, {9389, {12.0024, 8.3304, 1.5624}}, {9390, {12.0024, 8.3304, 1.5624}}, {9391, {12.0024, 8.3304, 1.5624}}, {9392, {12.0024, 8.3304, 1.5624}}, {9393, {12.0024, 8.3304, 1.5624}}, {9394, {12.0024, 8.3376, 1.5624}}, {9395, {12.0024, 8.3304, 1.5624}}, {9396, {12.0024, 8.3304, 1.5624}}, {9397, {12.0024, 8.3304, 1.5624}}, {9398, {12.0024, 8.3592, 1.5336}}, {9399, {12.0024, 8.3592, 1.5336}}, {9400, {12.0024, 8.3592, 1.5336}}, {9401, {12.0024, 8.3592, 1.5336}}, {9402, {12.0024, 8.3592, 1.5336}}, {9403, {12.0024, 8.3592, 1.5336}}, {9404, {12.0024, 8.3592, 1.5336}}, {9405, {12.0024, 8.3592, 1.5336}}, {9406, {12.0024, 8.3592, 1.5336}}, {9407, {12.0024, 8.3592, 1.5336}}, {9408, {12.0024, 8.3592, 1.5336}}, {9409, {12.0024, 8.3592, 1.5336}}, {9410, {12.0024, 8.3592, 1.5336}}, {9411, {12.0024, 8.3592, 1.5336}}, {9412, {12.0024, 8.3592, 1.5336}}, {9413, {12.0024, 8.3592, 1.5336}}, {9414, {12.0024, 8.3592, 1.5336}}, {9415, {12.0024, 8.3592, 1.5336}}, {9416, {12.0024, 8.3592, 1.5336}}, {9417, {12.0024, 8.3592, 1.5336}}, {9418, {12.0024, 8.3592, 1.5336}}, {9419, {12.0024, 8.3592, 1.5336}}, {9420, {12.0024, 8.3592, 1.5336}}, {9421, {12.0024, 8.3592, 1.5336}}, {9422, {12.0024, 8.3592, 1.5336}}, {9423, {12.0024, 8.3592, 1.5336}}, {9424, {12.0024, 8.3592, 1.5336}}, {9425, {12.0024, 8.3592, 1.5336}}, {9426, {12.0024, 8.3592, 1.5336}}, {9427, {12.0024, 8.3592, 1.5336}}, {9428, {12.0024, 8.3592, 1.5336}}, {9429, {12.0024, 8.3592, 1.5336}}, {9430, {12.0024, 8.3592, 1.5336}}, {9431, {12.0024, 8.3592, 1.5336}}, {9432, {12.0024, 8.3592, 1.5336}}, {9433, {12.0024, 8.3592, 1.5336}}, {9434, {12.0024, 8.3592, 1.5336}}, {9435, {12.0024, 8.3592, 1.5336}}, {9436, {12.0024, 8.3592, 1.5336}}, {9437, {12.0024, 8.3592, 1.5336}}, {9438, {12.0024, 8.3592, 1.5336}}, {9439, {12.0024, 8.3592, 1.5336}}, {9440, {12.0024, 8.3592, 1.5336}}, {9441, {12.0024, 8.3592, 1.5336}}, {9442, {12.0024, 8.3592, 1.5336}}, {9443, {12.0024, 8.3592, 1.5336}}, {9444, {12.0024, 8.3592, 1.5336}}, {9445, {12.0024, 8.3592, 1.5336}}, {9446, {12.0024, 8.3592, 1.5336}}, {9447, {12.0024, 8.3592, 1.5336}}, {9448, {12.0024, 8.3592, 1.5336}}, {9449, {12.0024, 8.3592, 1.5336}}, {9450, {12.0024, 8.3592, 1.5336}}, {9451, {12.0024, 8.3592, 1.5408}}, {9452, {12.0024, 8.3592, 1.5408}}, {9453, {12.0024, 8.3592, 1.5336}}, {9454, {12.0024, 8.3592, 1.5408}}, {9455, {12.0024, 8.3592, 1.5408}}, {9456, {12.0024, 8.3592, 1.5336}}, {9457, {12.0024, 8.3592, 1.5408}}, {9458, {12.0024, 8.3592, 1.5336}}, {9459, {12.0024, 8.3592, 1.5336}}, {9460, {12.0024, 8.3592, 1.5408}}, {9461, {12.0024, 8.7696, 1.9440}}, {9462, {12.0024, 8.7696, 1.9440}}, {9463, {12.0024, 8.7696, 1.9440}}, {9464, {12.0024, 8.7696, 1.9440}}, {9465, {12.0024, 8.7696, 1.9440}}, {9466, {12.0024, 8.7696, 1.9440}}, {9467, {12.0024, 8.7696, 1.9440}}, {9468, {12.0024, 8.7696, 1.9440}}, {9469, {12.0024, 8.7696, 1.9440}}, {9470, {12.0024, 8.7696, 1.9440}}, {9471, {12.0024, 9.2304, 0.6624}}, {9472, {12.0024, 3.8448, -2.9736}}, {9473, {12.0024, 3.9960, -2.8296}}, {9474, {12.0024, 9.4104, 2.5920}}, {9475, {12.0024, 9.4104, 2.5920}}, {9476, {12.0024, 3.8448, -2.9736}}, {9477, {12.0024, 3.9960, -2.8296}}, {9478, {12.0024, 8.9784, 2.1600}}, {9479, {12.0024, 8.9784, 2.1600}}, {9480, {12.0024, 3.8448, -2.9736}}, {9481, {12.0024, 3.9960, -2.8296}}, {9482, {12.0024, 8.9784, 2.1600}}, {9483, {12.0024, 8.9784, 2.1600}}, {9484, {12.0024, 3.8448, 2.5920}}, {9485, {12.0024, 3.9960, 2.5920}}, {9486, {12.0024, 3.8448, 2.5920}}, {9487, {12.0024, 3.9960, 2.5920}}, {9488, {12.0024, 3.8448, 2.5920}}, {9489, {12.0024, 3.9960, 2.5920}}, {9490, {12.0024, 3.8448, 2.5920}}, {9491, {12.0024, 3.9960, 2.5920}}, {9492, {12.0024, 9.4176, -2.9736}}, {9493, {12.0024, 9.4104, -2.8296}}, {9494, {12.0024, 9.4176, -2.9736}}, {9495, {12.0024, 9.4104, -2.8296}}, {9496, {12.0024, 9.4176, -2.9736}}, {9497, {12.0024, 9.4104, -2.8296}}, {9498, {12.0024, 9.4176, -2.9736}}, {9499, {12.0024, 9.4104, -2.8296}}, {9500, {12.0024, 9.4104, 2.5920}}, {9501, {12.0024, 9.4104, 2.5920}}, {9502, {12.0024, 9.4176, 2.5920}}, {9503, {12.0024, 9.4104, 2.5920}}, {9504, {12.0024, 9.4104, 2.5920}}, {9505, {12.0024, 9.4104, 2.5920}}, {9506, {12.0024, 9.4104, 2.5920}}, {9507, {12.0024, 9.4104, 2.5920}}, {9508, {12.0024, 9.4104, 2.5920}}, {9509, {12.0024, 9.4104, 2.5920}}, {9510, {12.0024, 9.4176, 2.5920}}, {9511, {12.0024, 9.4104, 2.5920}}, {9512, {12.0024, 9.4104, 2.5920}}, {9513, {12.0024, 9.4104, 2.5920}}, {9514, {12.0024, 9.4104, 2.5920}}, {9515, {12.0024, 9.4104, 2.5920}}, {9516, {12.0024, 3.8448, 2.5920}}, {9517, {12.0024, 3.9960, 2.5920}}, {9518, {12.0024, 3.9960, 2.5920}}, {9519, {12.0024, 3.9960, 2.5920}}, {9520, {12.0024, 3.8448, 2.5920}}, {9521, {12.0024, 3.9960, 2.5920}}, {9522, {12.0024, 3.9960, 2.5920}}, {9523, {12.0024, 3.9960, 2.5920}}, {9524, {12.0024, 9.4176, -2.9736}}, {9525, {12.0024, 9.4104, -2.8296}}, {9526, {12.0024, 9.4104, -2.8296}}, {9527, {12.0024, 9.4104, -2.8296}}, {9528, {12.0024, 9.4176, -2.9736}}, {9529, {12.0024, 9.4104, -2.8296}}, {9530, {12.0024, 9.4104, -2.8296}}, {9531, {12.0024, 9.4104, -2.8296}}, {9532, {12.0024, 9.4104, 2.5920}}, {9533, {12.0024, 9.4104, 2.5920}}, {9534, {12.0024, 9.4104, 2.5920}}, {9535, {12.0024, 9.4104, 2.5920}}, {9536, {12.0024, 9.4176, 2.5920}}, {9537, {12.0024, 9.4176, 2.5920}}, {9538, {12.0024, 9.4104, 2.5920}}, {9539, {12.0024, 9.4104, 2.5920}}, {9540, {12.0024, 9.4104, 2.5920}}, {9541, {12.0024, 9.4104, 2.5920}}, {9542, {12.0024, 9.4104, 2.5920}}, {9543, {12.0024, 9.4104, 2.5920}}, {9544, {12.0024, 9.4104, 2.5920}}, {9545, {12.0024, 9.4104, 2.5920}}, {9546, {12.0024, 9.4104, 2.5920}}, {9547, {12.0024, 9.4104, 2.5920}}, {9548, {12.0024, 3.8448, -2.9736}}, {9549, {12.0024, 3.9960, -2.8296}}, {9550, {12.0024, 8.9784, 2.1600}}, {9551, {12.0024, 8.9784, 2.1600}}, {9552, {12.0024, 4.7160, -2.1024}}, {9553, {12.0024, 9.4104, 2.5920}}, {9554, {12.0024, 4.7160, 2.5920}}, {9555, {12.0024, 3.8448, 2.5920}}, {9556, {12.0024, 4.7160, 2.5920}}, {9557, {12.0024, 4.7160, 2.5920}}, {9558, {12.0024, 3.8448, 2.5920}}, {9559, {12.0024, 4.7160, 2.5920}}, {9560, {12.0024, 9.4104, -2.1024}}, {9561, {12.0024, 9.4176, -2.9736}}, {9562, {12.0024, 9.4104, -2.1024}}, {9563, {12.0024, 9.4104, -2.1024}}, {9564, {12.0024, 9.4176, -2.9736}}, {9565, {12.0024, 9.4104, -2.1024}}, {9566, {12.0024, 9.4104, 2.5920}}, {9567, {12.0024, 9.4104, 2.5920}}, {9568, {12.0024, 9.4104, 2.5920}}, {9569, {12.0024, 9.4104, 2.5920}}, {9570, {12.0024, 9.4104, 2.5920}}, {9571, {12.0024, 9.4104, 2.5920}}, {9572, {12.0024, 4.7160, 2.5920}}, {9573, {12.0024, 3.8448, 2.5920}}, {9574, {12.0024, 4.7160, 2.5920}}, {9575, {12.0024, 9.4104, -2.1024}}, {9576, {12.0024, 9.4176, -2.9736}}, {9577, {12.0024, 9.4104, -2.1024}}, {9578, {12.0024, 9.4104, 2.5920}}, {9579, {12.0024, 9.4104, 2.5920}}, {9580, {12.0024, 9.4104, 2.5920}}, {9581, {12.0024, 3.8448, 2.5920}}, {9582, {12.0024, 3.8448, 2.5920}}, {9583, {12.0024, 9.4176, -2.9736}}, {9584, {12.0024, 9.4176, -2.9736}}, {9585, {12.0024, 9.4104, 2.5920}}, {9586, {12.0024, 9.4104, 2.5920}}, {9587, {12.0024, 9.4104, 2.5920}}, {9588, {12.0024, 3.8448, -2.9736}}, {9589, {12.0024, 9.4104, -3.4056}}, {9590, {12.0024, 3.8448, -2.9736}}, {9591, {12.0024, 3.4128, 2.5920}}, {9592, {12.0024, 3.9960, -2.8296}}, {9593, {12.0024, 9.4104, -3.4056}}, {9594, {12.0024, 3.9960, -2.8296}}, {9595, {12.0024, 3.4128, 2.5920}}, {9596, {12.0024, 3.9960, -2.8296}}, {9597, {12.0024, 9.4104, 2.5920}}, {9598, {12.0024, 3.9960, -2.8296}}, {9599, {12.0024, 9.4104, 2.5920}}, {9600, {12.0024, 9.4104, -3.4056}}, {9601, {12.0024, -1.0872, 2.5920}}, {9602, {12.0024, 0.4104, 2.5920}}, {9603, {12.0024, 1.9080, 2.5920}}, {9604, {12.0024, 3.4128, 2.5920}}, {9605, {12.0024, 4.9104, 2.5920}}, {9606, {12.0024, 6.4080, 2.5920}}, {9607, {12.0024, 7.9128, 2.5920}}, {9608, {12.0024, 9.4104, 2.5920}}, {9609, {12.0024, 9.4104, 2.5920}}, {9610, {12.0024, 9.4104, 2.5920}}, {9611, {12.0024, 9.4104, 2.5920}}, {9612, {12.0024, 9.4104, 2.5920}}, {9613, {12.0024, 9.4104, 2.5920}}, {9614, {12.0024, 9.4104, 2.5920}}, {9615, {12.0024, 9.4104, 2.5920}}, {9616, {12.0024, 9.4104, 2.5920}}, {9617, {12.0024, 9.4104, 1.8432}}, {9618, {12.0024, 9.4176, 2.5920}}, {9619, {12.0024, 9.4104, 2.5920}}, {9620, {12.0024, 9.4104, -7.9056}}, {9621, {12.0024, 9.4104, 2.5920}}, {9622, {12.0024, 3.4128, 2.5920}}, {9623, {12.0024, 3.4128, 2.5920}}, {9624, {12.0024, 9.4104, -3.4056}}, {9625, {12.0024, 9.4104, 2.5920}}, {9626, {12.0024, 9.4104, 2.5920}}, {9627, {12.0024, 9.4104, 2.5920}}, {9628, {12.0024, 9.4104, 2.5920}}, {9629, {12.0024, 9.4104, -3.4056}}, {9630, {12.0024, 9.4104, 2.5920}}, {9631, {12.0024, 9.4104, 2.5920}}, {9632, {9.2448, 7.8768, -0.0000}}, {9633, {9.2448, 7.8768, -0.0000}}, {9634, {9.2448, 7.8768, -0.0000}}, {9635, {9.2448, 7.8768, -0.0000}}, {9636, {9.2448, 7.8768, -0.0000}}, {9637, {9.2448, 7.8768, -0.0000}}, {9638, {9.2448, 7.8768, -0.0000}}, {9639, {9.2448, 7.8768, -0.0000}}, {9640, {9.2448, 7.8768, -0.0000}}, {9641, {9.2448, 7.8768, -0.0000}}, {9642, {4.3272, 5.1480, -1.6776}}, {9643, {4.3272, 5.1480, -1.6704}}, {9644, {7.8408, 5.1480, -1.6776}}, {9645, {7.8408, 5.1480, -1.6704}}, {9646, {4.3272, 6.9048, 0.0864}}, {9647, {4.3272, 6.9048, 0.0864}}, {9648, {9.5976, 5.1480, -1.6776}}, {9649, {9.5976, 5.1480, -1.6704}}, {9650, {9.2448, 7.0848, -0.1008}}, {9651, {9.2448, 7.0848, -0.1008}}, {9652, {4.3272, 5.0328, -1.9512}}, {9653, {4.3272, 5.0328, -1.9512}}, {9654, {7.9488, 7.7544, 0.9360}}, {9655, {7.9488, 7.7544, 0.9360}}, {9656, {3.7800, 5.3208, -1.4976}}, {9657, {3.7800, 5.3208, -1.4976}}, {9658, {11.0592, 6.7176, -0.1008}}, {9659, {11.0592, 6.7176, -0.1008}}, {9660, {9.2448, 7.0848, -0.1008}}, {9661, {9.2448, 7.0848, -0.1008}}, {9662, {4.3272, 5.0328, -1.9512}}, {9663, {4.3272, 5.0328, -1.9512}}, {9664, {7.9488, 7.7544, 0.9360}}, {9665, {7.9488, 7.7544, 0.9360}}, {9666, {3.7800, 5.3208, -1.4976}}, {9667, {3.7800, 5.3208, -1.4976}}, {9668, {11.0592, 6.7176, -0.1008}}, {9669, {11.0592, 6.7176, -0.1008}}, {9670, {9.2448, 7.9776, 1.1592}}, {9671, {9.2448, 7.9776, 1.1592}}, {9672, {9.2448, 7.9776, 1.1592}}, {9673, {9.2448, 7.8048, 0.9792}}, {9674, {9.2448, 7.9776, 1.1592}}, {9675, {9.2448, 7.8048, 0.9792}}, {9676, {6.0912, 5.6304, 0.1440}}, {9677, {9.2448, 7.8048, 0.9792}}, {9678, {9.2448, 7.8048, 0.9792}}, {9679, {9.2448, 7.8048, 0.9792}}, {9680, {9.2448, 7.8048, 0.9792}}, {9681, {9.2448, 7.8048, 0.9792}}, {9682, {9.2448, 7.8048, 0.9792}}, {9683, {9.2448, 7.7976, 0.9792}}, {9684, {9.2448, 7.8048, 0.9792}}, {9685, {9.2448, 7.8048, 0.9792}}, {9686, {5.3064, 7.8048, 0.9792}}, {9687, {5.3064, 7.8048, 0.9792}}, {9688, {12.0024, 9.4104, 2.5920}}, {9689, {12.0024, 9.4104, 2.5920}}, {9690, {12.0024, 9.4104, -3.4056}}, {9691, {12.0024, 3.4128, 2.5920}}, {9692, {9.2448, 7.8048, -3.4056}}, {9693, {9.2448, 7.8048, -3.4056}}, {9694, {9.2448, 3.4128, 0.9792}}, {9695, {9.2448, 3.4128, 0.9792}}, {9696, {9.2448, 7.8048, -3.4056}}, {9697, {9.2448, 3.4128, 0.9792}}, {9698, {9.2448, 7.3512, 0.5328}}, {9699, {9.2448, 7.3512, 0.5328}}, {9700, {9.2448, 7.3512, 0.5328}}, {9701, {9.2448, 7.3512, 0.5328}}, {9702, {4.3272, 5.3424, -1.4760}}, {9703, {9.2448, 7.3512, 0.5328}}, {9704, {9.2448, 7.3512, 0.5328}}, {9705, {9.2448, 7.3512, 0.5328}}, {9706, {9.2448, 7.3512, 0.5328}}, {9707, {9.2448, 7.3512, 0.5328}}, {9708, {9.2448, 7.0848, -0.1008}}, {9709, {9.2448, 7.0848, -0.1008}}, {9710, {9.2448, 7.0848, -0.1008}}, {9711, {12.0024, 9.1800, 2.3616}}, {9712, {9.2448, 7.3512, 0.5328}}, {9713, {9.2448, 7.3512, 0.5328}}, {9714, {9.2448, 7.3512, 0.5328}}, {9715, {9.2448, 7.3512, 0.5328}}, {9716, {9.2448, 7.8048, 0.9792}}, {9717, {9.2448, 7.8048, 0.9792}}, {9718, {9.2448, 7.8048, 0.9792}}, {9719, {9.2448, 7.8048, 0.9792}}, {9720, {9.2448, 7.3512, 0.5328}}, {9721, {9.2448, 7.3512, 0.5328}}, {9722, {9.2448, 7.3512, 0.5328}}, {9723, {7.1352, 6.4152, -0.4032}}, {9724, {7.1352, 6.4152, -0.4032}}, {9725, {5.5440, 5.6952, -1.1304}}, {9726, {5.5440, 5.6952, -1.1304}}, {9727, {9.2448, 7.3512, 0.5328}}, {9728, {12.0024, 9.0144, 1.9080}}, {9729, {12.0024, 8.0280, -1.4760}}, {9730, {12.6360, 6.6600, 2.5920}}, {9731, {12.0024, 9.2592, 1.3032}}, {9732, {12.0024, 5.2128, 1.3248}}, {9733, {9.1656, 7.9776, 0.2880}}, {9734, {9.1656, 7.9776, 0.2880}}, {9735, {5.6160, 8.1288, 0.0288}}, {9736, {8.1000, 7.9776, 1.3464}}, {9737, {9.2448, 7.8048, 0.9792}}, {9738, {11.3544, 7.5384, 0.1800}}, {9739, {11.3544, 7.5384, 0.1728}}, {9740, {6.7248, 5.5368, -0.0576}}, {9741, {9.3240, 7.4088, 1.6416}}, {9742, {12.2472, 7.8480, -0.0000}}, {9743, {12.2472, 7.8480, -0.0000}}, {9744, {12.0024, 9.2232, 2.4048}}, {9745, {12.0024, 9.2232, 2.4048}}, {9746, {12.0024, 9.2232, 2.4048}}, {9747, {10.6992, 8.1720, -0.2664}}, {9748, {12.6360, 9.4176, 2.5920}}, {9749, {12.0960, 9.0936, 1.7496}}, {9750, {9.1728, 7.8696, -0.0000}}, {9751, {9.1728, 7.8696, -0.0000}}, {9752, {10.7856, 8.8272, 1.5552}}, {9753, {12.0024, 6.9840, -0.0360}}, {9754, {11.3040, 5.8464, -1.2816}}, {9755, {11.3040, 5.8464, -1.2816}}, {9756, {11.3040, 5.8536, -1.2816}}, {9757, {11.3040, 8.5824, 1.4544}}, {9758, {11.3040, 5.8536, -1.2816}}, {9759, {11.3040, 8.5824, 1.4544}}, {9760, {8.7336, 9.3168, 2.5200}}, {9761, {7.7328, 8.9280, -0.0000}}, {9762, {12.0024, 9.1224, 2.2968}}, {9763, {12.0024, 8.9352, 0.9072}}, {9764, {12.0024, 9.2232, 2.4048}}, {9765, {7.1712, 8.5896, 2.2968}}, {9766, {7.4448, 8.7480, 1.7136}}, {9767, {8.6688, 8.9064, 1.1736}}, {9768, {7.4448, 8.7480, 1.7136}}, {9769, {12.0024, 8.1144, 1.2960}}, {9770, {10.6200, 8.6760, -0.0000}}, {9771, {12.0024, 9.3024, 2.4048}}, {9772, {10.4616, 8.9856, 2.2968}}, {9773, {9.8928, 8.6760, 0.0288}}, {9774, {10.1160, 8.9064, 0.2232}}, {9775, {10.1160, 8.9064, 0.2232}}, {9776, {12.0024, 7.3368, -1.2384}}, {9777, {12.0024, 7.3368, -1.2384}}, {9778, {12.0024, 7.3368, -1.2384}}, {9779, {12.0024, 7.3368, -1.2384}}, {9780, {12.0024, 7.3368, -1.2384}}, {9781, {12.0024, 7.3368, -1.2384}}, {9782, {12.0024, 7.3368, -1.2384}}, {9783, {12.0024, 7.3368, -1.2384}}, {9784, {12.0024, 8.9208, 2.1024}}, {9785, {10.9944, 8.4312, 1.6056}}, {9786, {10.9944, 8.4312, 1.6056}}, {9787, {10.9944, 8.4312, 1.6056}}, {9788, {9.0360, 8.8200, 0.1512}}, {9789, {8.9424, 8.9712, 0.2952}}, {9790, {8.9424, 8.9712, 0.2952}}, {9791, {7.1856, 9.4104, 2.5848}}, {9792, {8.6400, 9.3312, 2.4048}}, {9793, {8.6400, 9.3312, 2.4048}}, {9794, {10.5480, 8.7408, 0.8712}}, {9795, {9.4896, 8.7408, 1.1736}}, {9796, {7.1280, 8.7480, 1.8360}}, {9797, {8.8920, 8.7480, 1.4688}}, {9798, {11.3832, 8.7408, 1.1736}}, {9799, {6.1200, 8.7408, 1.1736}}, {9800, {13.8816, 8.8992, 2.3184}}, {9801, {12.6504, 8.6760, 2.4552}}, {9802, {11.5704, 9.2160, 0.5832}}, {9803, {13.0896, 8.6832, -0.0000}}, {9804, {11.2968, 9.3960, 2.4552}}, {9805, {11.2032, 8.8344, 2.3184}}, {9806, {11.3472, 8.6760, -0.8640}}, {9807, {12.2976, 8.8488, 2.4336}}, {9808, {11.1456, 8.8920, 0.2232}}, {9809, {13.1616, 8.8992, 1.7352}}, {9810, {12.7872, 7.9560, -0.7200}}, {9811, {9.3600, 8.8920, 0.2232}}, {9812, {11.1528, 8.9136, 2.0304}}, {9813, {11.6784, 8.9640, 2.1528}}, {9814, {9.9504, 8.7120, 2.0016}}, {9815, {12.6360, 9.1656, 2.2320}}, {9816, {11.4696, 9.1224, 2.3112}}, {9817, {9.3024, 9.0144, 2.1888}}, {9818, {11.5992, 8.9136, 2.0304}}, {9819, {11.6784, 8.9568, 2.1600}}, {9820, {9.9504, 8.7192, 2.0016}}, {9821, {12.6360, 9.1656, 2.2392}}, {9822, {11.4696, 9.1224, 2.3112}}, {9823, {9.3024, 9.0144, 2.1888}}, {9824, {8.2872, 9.0000, -0.0000}}, {9825, {9.1440, 9.0000, 0.1872}}, {9826, {7.8840, 9.0000, 0.1656}}, {9827, {10.1808, 9.0072, -0.0000}}, {9828, {8.2872, 9.0072, -0.0000}}, {9829, {9.1440, 9.0000, 0.1872}}, {9830, {7.8840, 9.0000, 0.1656}}, {9831, {10.1808, 9.0000, -0.0000}}, {9832, {12.3048, 8.5608, 1.8504}}, {9833, {4.7952, 9.1224, 2.2968}}, {9834, {7.5024, 9.1224, 2.2968}}, {9835, {9.3960, 9.1224, 2.2968}}, {9836, {9.3960, 9.1224, 2.2968}}, {9837, {5.3496, 9.1224, 2.3040}}, {9838, {4.8960, 9.1224, 2.3040}}, {9839, {4.8960, 9.1224, 2.3040}}, {9840, {8.6112, 8.7264, 1.6416}}, {9841, {9.2664, 9.1296, 2.0520}}, {9842, {12.0024, 8.9928, 2.3112}}, {9843, {12.0024, 9.0504, 2.3472}}, {9844, {12.0024, 9.0504, 2.3472}}, {9845, {12.0024, 9.0504, 2.3472}}, {9846, {12.0024, 9.0504, 2.3472}}, {9847, {12.0024, 9.0504, 2.3472}}, {9848, {12.0024, 9.0504, 2.3472}}, {9849, {12.0024, 9.0504, 2.3472}}, {9850, {12.0024, 9.0504, 2.3472}}, {9851, {12.0024, 8.7840, 2.1096}}, {9852, {12.0024, 9.4104, 2.5920}}, {9853, {12.0024, 9.4104, 2.5920}}, {9854, {12.0024, 9.4104, 2.5920}}, {9855, {12.0024, 8.8128, 2.0808}}, {9856, {12.0024, 8.5248, 1.7064}}, {9857, {12.0024, 8.5248, 1.7064}}, {9858, {12.0024, 8.5248, 1.7064}}, {9859, {12.0024, 8.5248, 1.7064}}, {9860, {12.0024, 8.5248, 1.7064}}, {9861, {12.0024, 8.5248, 1.7064}}, {9862, {12.0024, 9.1224, 2.2968}}, {9863, {12.0024, 9.1224, 2.2968}}, {9864, {12.0024, 9.1224, 2.3040}}, {9865, {12.0024, 9.1224, 2.3040}}, {9866, {12.0024, 4.8528, -3.7224}}, {9867, {12.0024, 4.8528, -3.7224}}, {9868, {12.0024, 6.0984, -2.4840}}, {9869, {12.0024, 6.0984, -2.4840}}, {9870, {12.0024, 6.0984, -2.4840}}, {9871, {12.0024, 6.0984, -2.4840}}, {9872, {12.0024, 9.2232, 2.4048}}, {9873, {12.0024, 9.2232, 2.4048}}, {9874, {13.6296, 9.0000, 1.9800}}, {9875, {10.9008, 9.1224, 2.3040}}, {9876, {12.0024, 7.4520, 0.9792}}, {9877, {7.5024, 8.5176, 1.8576}}, {9878, {13.2768, 9.2376, 2.4192}}, {9879, {11.1096, 8.6832, 1.1736}}, {9880, {6.8472, 8.6616, 1.7136}}, {9881, {11.1528, 8.3808, 1.5624}}, {9882, {13.1400, 8.5320, 2.3616}}, {9883, {10.9080, 8.8632, 2.0448}}, {9884, {9.7488, 8.1072, 1.7424}}, {9885, {12.0024, 8.7264, 1.7784}}, {9886, {12.0024, 8.8344, 2.0088}}, {9887, {12.0024, 8.8344, 2.0088}}, {9888, {12.0024, 9.0504, 1.1808}}, {9889, {5.6448, 9.0648, 2.3472}}, {9890, {9.4104, 6.0048, 1.8576}}, {9891, {9.5472, 8.1720, 0.9432}}, {9892, {8.9568, 9.3600, 2.5344}}, {9893, {6.6168, 8.1720, 1.8504}}, {9894, {7.3152, 8.4312, 0.1440}}, {9895, {8.5104, 9.1008, 2.1456}}, {9896, {6.1272, 9.3528, 0.1440}}, {9897, {10.4328, 6.0048, -0.8136}}, {9898, {7.1352, 6.7464, -0.0720}}, {9899, {7.1352, 6.7464, -0.0720}}, {9900, {5.5440, 5.9544, -0.8712}}, {9901, {9.4104, 6.0048, -0.8136}}, {9902, {11.9088, 6.2928, -0.5256}}, {9903, {14.8248, 6.0048, -0.8136}}, {9904, {10.8792, 6.0048, -1.6920}}, {9905, {7.6608, 9.0072, 2.1888}}, {9906, {6.1272, 6.0048, 1.8576}}, {9907, {7.7112, 8.5968, 2.4048}}, {9908, {8.6688, 8.5968, 2.4048}}, {9909, {8.6400, 8.3232, 2.4048}}, {9910, {9.3312, 7.4664, 2.0376}}, {9911, {5.9400, 8.3232, 2.3832}}, {9912, {7.2288, 9.0000, 2.4048}}, {9913, {10.0368, 7.3656, 0.7920}}, {9914, {7.9920, 7.3080, -0.0000}}, {9915, {7.9920, 7.3080, 0.0072}}, {9916, {8.2944, 5.9544, 2.1240}}, {9917, {12.0024, 9.2160, 2.3976}}, {9918, {12.0024, 9.2160, 2.3976}}, {9919, {12.0024, 9.0072, 2.1456}}, {9920, {12.0024, 9.4104, 2.5920}}, {9921, {12.0024, 9.4104, 2.5920}}, {9922, {12.0024, 9.4104, 2.5920}}, {9923, {12.0024, 9.4104, 2.5920}}, {9924, {12.0024, 7.6824, 2.0952}}, {9925, {12.0024, 9.1800, -1.4760}}, {9926, {12.0024, 8.4024, 1.5768}}, {9927, {12.0024, 8.8056, 2.0952}}, {9928, {12.0024, 8.0280, 2.5920}}, {9929, {9.1728, 7.5744, 0.2952}}, {9930, {9.1728, 7.5744, 0.2952}}, {9931, {12.0024, 8.7048, 1.8864}}, {9932, {12.0024, 6.7320, -0.0936}}, {9933, {12.0024, 8.2368, 1.8288}}, {9934, {12.0024, 8.0208, 0.9432}}, {9935, {12.0024, 8.8776, 2.0808}}, {9936, {12.0024, 9.0720, 2.2176}}, {9937, {12.0024, 8.6328, 1.7136}}, {9938, {12.0024, 8.8272, 2.0088}}, {9939, {12.0024, 8.9784, 2.0736}}, {9940, {12.0024, 8.8272, 2.0088}}, {9941, {12.0024, 9.1152, 2.1888}}, {9942, {12.0024, 9.0792, 2.2536}}, {9943, {12.0024, 9.0792, 2.2536}}, {9944, {12.0024, 8.8848, 2.0664}}, {9945, {12.0024, 8.8848, 2.0664}}, {9946, {12.0024, 8.8272, 2.0088}}, {9947, {12.0024, 8.1072, 1.4760}}, {9948, {12.0024, 8.8848, 2.0664}}, {9949, {12.0024, 8.8848, 2.0664}}, {9950, {12.0024, 8.8848, 2.0664}}, {9951, {12.0024, 5.5152, -0.0000}}, {9952, {12.0024, 8.8848, 2.0736}}, {9953, {12.0024, 9.2448, 1.4184}}, {9954, {7.7688, 9.0000, 2.2464}}, {9955, {12.0024, 8.8560, 1.8504}}, {9956, {12.0024, 8.5608, 1.7424}}, {9957, {12.0024, 8.5608, 1.7424}}, {9958, {12.0024, 8.5608, 1.7424}}, {9959, {12.0024, 8.5608, 1.7424}}, {9960, {9.1728, 8.3304, 1.9368}}, {9961, {12.0024, 8.8128, 2.0016}}, {9962, {12.0024, 9.0144, 1.6992}}, {9963, {12.0024, 8.5032, 1.6056}}, {9964, {12.0024, 7.9632, 0.2952}}, {9965, {9.4320, 7.8984, 1.0728}}, {9966, {12.0024, 7.8984, 1.0728}}, {9967, {9.4320, 7.8984, 1.0728}}, {9968, {12.0024, 8.9856, 1.3176}}, {9969, {12.0024, 8.6328, 1.5984}}, {9970, {12.0024, 8.8128, 2.0304}}, {9971, {12.0024, 9.1224, 2.1672}}, {9972, {12.0024, 7.7040, 0.3960}}, {9973, {12.0024, 9.2016, 1.9728}}, {9974, {12.0024, 8.9280, 2.1096}}, {9975, {12.0024, 9.0864, 2.0592}}, {9976, {12.0024, 8.3088, 1.8144}}, {9977, {12.0024, 8.9208, 1.7568}}, {9978, {12.0024, 8.4456, 1.4976}}, {9979, {12.0024, 9.0936, 2.0952}}, {9980, {12.0024, 8.7408, 1.8072}}, {9981, {12.0024, 8.6040, 1.8936}}, {9982, {12.0024, 9.0576, 2.0808}}, {9983, {12.0024, 9.2232, 2.4048}}, {9984, {13.7376, 8.4888, 0.1944}}, {9985, {12.0168, 7.4520, -0.8568}}, {9986, {11.8800, 7.3296, -0.9720}}, {9987, {12.0168, 7.4592, -0.8568}}, {9988, {13.7376, 8.4888, 0.1872}}, {9989, {10.4688, 8.4672, 0.1728}}, {9990, {12.0024, 9.1224, 2.2968}}, {9991, {12.0024, 9.1224, 2.2968}}, {9992, {11.3688, 8.8416, 1.5336}}, {9993, {8.6112, 6.6384, -1.6560}}, {9994, {9.5904, 8.0064, 0.9864}}, {9995, {9.1224, 8.6112, 1.6776}}, {9996, {7.0488, 9.2160, 0.3384}}, {9997, {10.9152, 6.2352, 0.1872}}, {9998, {11.2608, 7.7040, -0.5904}}, {9999, {11.5344, 6.6024, -1.6632}}, {10000, {11.2608, 7.7112, -0.5976}}, {10001, {11.6568, 6.6456, -1.6632}}, {10002, {12.0024, 7.0488, -1.2456}}, {10003, {9.4176, 8.4672, 0.1584}}, {10004, {10.4688, 8.4672, 0.1728}}, {10005, {9.4752, 8.3088, -0.0000}}, {10006, {9.4752, 8.3088, -0.0000}}, {10007, {8.0352, 7.9344, 0.8208}}, {10008, {8.4456, 8.4672, 0.1584}}, {10009, {9.4896, 8.3088, -0.0000}}, {10010, {9.4608, 8.3088, -0.0000}}, {10011, {9.4536, 8.3088, -0.0000}}, {10012, {9.3960, 8.3016, -0.0000}}, {10013, {6.2712, 8.3088, -0.0000}}, {10014, {6.9552, 8.3088, -0.0000}}, {10015, {6.7824, 8.3016, -0.0000}}, {10016, {9.9720, 8.6040, 0.2664}}, {10017, {8.6400, 8.4672, 0.1728}}, {10018, {9.7632, 8.4600, 0.1728}}, {10019, {9.7704, 8.4672, 0.1728}}, {10020, {9.7848, 8.4672, 0.1728}}, {10021, {9.8280, 8.4672, 0.1728}}, {10022, {9.8640, 8.4672, 0.1584}}, {10023, {9.8640, 8.4672, 0.1584}}, {10024, {12.0024, 8.5608, 1.8720}}, {10025, {10.1952, 8.4672, 0.1728}}, {10026, {9.8064, 8.4672, 0.1728}}, {10027, {10.4328, 8.4672, 0.1728}}, {10028, {10.2168, 8.4672, 0.1728}}, {10029, {10.3320, 8.4600, 0.1728}}, {10030, {10.1376, 8.4672, 0.1584}}, {10031, {10.3032, 8.4600, 0.1800}}, {10032, {11.4048, 8.4672, 0.1728}}, {10033, {9.2664, 8.3088, -0.0000}}, {10034, {9.0072, 8.3088, -0.0000}}, {10035, {9.3240, 8.3088, -0.0000}}, {10036, {9.8352, 8.4600, 0.1728}}, {10037, {9.8496, 8.4600, 0.1728}}, {10038, {8.6832, 8.4744, 0.1728}}, {10039, {9.6480, 8.3952, 0.0720}}, {10040, {9.5616, 8.3952, 0.0864}}, {10041, {9.8352, 8.4672, 0.1728}}, {10042, {9.4536, 8.3088, -0.0000}}, {10043, {8.8200, 8.4528, 0.1584}}, {10044, {8.8200, 8.4672, 0.1728}}, {10045, {8.5104, 8.4168, 0.1512}}, {10046, {8.5104, 8.4672, 0.2160}}, {10047, {10.2456, 8.4672, 0.1728}}, {10048, {10.1160, 8.4672, 0.1728}}, {10049, {9.8064, 8.4600, 0.1728}}, {10050, {9.8064, 8.4672, 0.1728}}, {10051, {8.8416, 8.4600, 0.1728}}, {10052, {8.5536, 8.3088, -0.0000}}, {10053, {8.6832, 8.3592, -0.0000}}, {10054, {8.6112, 8.3088, -0.0000}}, {10055, {9.7704, 8.4672, 0.1728}}, {10056, {9.7704, 8.4672, 0.1728}}, {10057, {8.8920, 8.4600, 0.1728}}, {10058, {9.8280, 8.4600, 0.1728}}, {10059, {9.7488, 8.4600, 0.1728}}, {10060, {8.0496, 7.6248, -0.6912}}, {10061, {10.8072, 8.4672, 0.1728}}, {10062, {9.4464, 8.3088, -0.0000}}, {10063, {9.4752, 8.3016, -0.0000}}, {10064, {9.4752, 8.3016, -0.0000}}, {10065, {9.4536, 8.3016, -0.0000}}, {10066, {9.4536, 8.3088, -0.0000}}, {10067, {8.4312, 8.5608, 1.3392}}, {10068, {8.4312, 8.5608, 1.3392}}, {10069, {4.8312, 8.6112, 1.3392}}, {10070, {9.7416, 8.4672, 0.1728}}, {10071, {4.9248, 8.9352, 1.9152}}, {10072, {2.0016, 8.3088, -0.0000}}, {10073, {3.6576, 8.3088, -0.0000}}, {10074, {5.3136, 8.3088, -0.0000}}, {10075, {5.0544, 8.4600, -3.1464}}, {10076, {5.0544, 8.4600, -3.1464}}, {10077, {8.3520, 8.4960, -3.1536}}, {10078, {8.3520, 8.4600, -3.1320}}, {10079, {5.0544, 2.7720, 2.5416}}, {10080, {8.3520, 2.7720, 2.5560}}, {10081, {9.1152, 9.2664, 2.1312}}, {10082, {6.3576, 8.4744, 0.1728}}, {10083, {6.8616, 8.4672, 0.1728}}, {10084, {11.2536, 7.8120, -0.4752}}, {10085, {8.3520, 8.4600, 0.1728}}, {10086, {10.5912, 8.5536, 1.7352}}, {10087, {12.0024, 6.9840, -0.0360}}, {10088, {5.5512, 9.0072, 2.1888}}, {10089, {5.0976, 9.0072, 2.1888}}, {10090, {4.7736, 8.8056, 1.9872}}, {10091, {4.5648, 8.8056, 1.9872}}, {10092, {4.0536, 8.9712, 2.1528}}, {10093, {4.0536, 8.9712, 2.1528}}, {10094, {6.1704, 7.5888, 0.7704}}, {10095, {6.1704, 7.5888, 0.7704}}, {10096, {6.6096, 8.9712, 2.1528}}, {10097, {6.6096, 8.9712, 2.1528}}, {10098, {3.8160, 8.9856, 2.1672}}, {10099, {2.8512, 8.9856, 2.1672}}, {10100, {5.9976, 9.0360, 2.2176}}, {10101, {5.9976, 9.0360, 2.2176}}, {10102, {12.0024, 9.1224, 2.2968}}, {10103, {12.0024, 9.1224, 2.2968}}, {10104, {12.0024, 9.1224, 2.3040}}, {10105, {12.0024, 9.1152, 2.2968}}, {10106, {12.0024, 9.1152, 2.3040}}, {10107, {12.0024, 9.1224, 2.3040}}, {10108, {12.0024, 9.1152, 2.3040}}, {10109, {12.0024, 9.1224, 2.3040}}, {10110, {12.0024, 9.1224, 2.3040}}, {10111, {12.0024, 9.1224, 2.2968}}, {10112, {12.0024, 9.1224, 2.2968}}, {10113, {12.0024, 9.1224, 2.2968}}, {10114, {12.0024, 9.1224, 2.2968}}, {10115, {12.0024, 9.1224, 2.2968}}, {10116, {12.0024, 9.1224, 2.2968}}, {10117, {12.0024, 9.1224, 2.2968}}, {10118, {12.0024, 9.1224, 2.2968}}, {10119, {12.0024, 9.1224, 2.2968}}, {10120, {12.0024, 9.1224, 2.2968}}, {10121, {12.0024, 9.1224, 2.2968}}, {10122, {12.0024, 9.1152, 2.2968}}, {10123, {12.0024, 9.1224, 2.2968}}, {10124, {12.0024, 9.1224, 2.3040}}, {10125, {12.0024, 9.1152, 2.3040}}, {10126, {12.0024, 9.1152, 2.3040}}, {10127, {12.0024, 9.1152, 2.3040}}, {10128, {12.0024, 9.1152, 2.2968}}, {10129, {12.0024, 9.1152, 2.2968}}, {10130, {12.0024, 9.1224, 2.2968}}, {10131, {12.0024, 9.1224, 2.3040}}, {10132, {11.0736, 7.6104, -0.6912}}, {10133, {9.4536, 8.3088, -0.0000}}, {10134, {9.4536, 4.8744, -3.4272}}, {10135, {9.4536, 8.3088, -0.0000}}, {10136, {9.1296, 7.1712, -1.1304}}, {10137, {11.4336, 6.6240, -1.6776}}, {10138, {9.1296, 7.1712, -1.1304}}, {10139, {11.3616, 6.3144, -1.9872}}, {10140, {11.4552, 7.9272, -0.3816}}, {10141, {11.4408, 6.7464, -1.5624}}, {10142, {11.9160, 6.3576, -0.4680}}, {10143, {11.9664, 6.1056, -0.7128}}, {10144, {12.5064, 6.9408, 0.1224}}, {10145, {12.5064, 6.9408, 0.1152}}, {10146, {11.4192, 7.1352, -1.1736}}, {10147, {11.4192, 7.1352, -1.1736}}, {10148, {11.3400, 8.3088, -0.0000}}, {10149, {11.5056, 7.3008, -1.0008}}, {10150, {11.5056, 7.2936, -1.0008}}, {10151, {5.9040, 8.9568, 1.7352}}, {10152, {10.9296, 7.4808, -0.8496}}, {10153, {10.3752, 7.7832, -0.5256}}, {10154, {10.3752, 7.7832, -0.5256}}, {10155, {10.7352, 7.0920, -1.2096}}, {10156, {10.7352, 7.0920, -1.2096}}, {10157, {8.6832, 7.7760, -0.5256}}, {10158, {8.6832, 7.7760, -0.5256}}, {10159, {10.8360, 7.4376, -0.9216}}, {10160, {10.0800, 5.3424, -0.0000}}, {10161, {10.8360, 7.3872, -0.8712}}, {10162, {9.4536, 8.3016, -0.0000}}, {10163, {11.6856, 6.4008, -1.9224}}, {10164, {9.5976, 7.8624, -0.4392}}, {10165, {10.7136, 5.7744, -2.4840}}, {10166, {9.5976, 7.8624, -0.4392}}, {10167, {11.0016, 8.5464, 0.2304}}, {10168, {11.9376, 6.8184, -1.4832}}, {10169, {11.0016, 8.5464, 0.2304}}, {10170, {10.3032, 6.9552, -1.3464}}, {10171, {10.7928, 6.9408, -1.4112}}, {10172, {11.4408, 6.5088, -1.7928}}, {10173, {11.9232, 7.4016, -0.9072}}, {10174, {11.3760, 7.1136, -1.1880}}, {10175, {15.2712, 5.3424, -0.0000}}, {10176, {9.2160, 8.2368, -0.0000}}, {10177, {12.0024, 9.1008, -0.0000}}, {10178, {9.3240, 7.9992, -0.0000}}, {10179, {9.3240, 6.8184, -0.0000}}, {10180, {9.3240, 6.8184, -0.0000}}, {10181, {5.9976, 8.8704, 2.0520}}, {10182, {5.9976, 8.8704, 2.0520}}, {10183, {7.9920, 7.1784, 0.2736}}, {10184, {11.6640, 8.8848, 2.0664}}, {10185, {11.6640, 8.8848, 2.0664}}, {10186, {6.9984, 8.8272, 2.0016}}, {10187, {10.7784, 8.6904, 1.8648}}, {10188, {7.1568, 7.8264, -1.0368}}, {10189, {10.7784, 8.6904, 1.8648}}, {10190, {9.3240, 7.4736, 0.6480}}, {10191, {9.3240, 7.4736, 0.6480}}, {10192, {9.3240, 7.8984, 1.0728}}, {10193, {7.9920, 7.1784, 0.2664}}, {10194, {7.9920, 6.0048, -0.0000}}, {10195, {5.9976, 4.3992, 0.2664}}, {10196, {5.9976, 8.3304, -3.6720}}, {10197, {12.0024, 7.7544, 0.9360}}, {10198, {12.0024, 7.7544, 0.9360}}, {10199, {13.9608, 7.7544, 0.9360}}, {10200, {9.3240, 8.9280, -0.0000}}, {10201, {9.3240, 8.9280, -0.0000}}, {10202, {12.0024, 8.3304, -0.0000}}, {10203, {12.0024, 8.3304, -0.0000}}, {10204, {12.0024, 5.3208, -1.4976}}, {10205, {10.2888, 7.5744, 0.7560}}, {10206, {10.2888, 7.5744, 0.7560}}, {10207, {4.2336, 8.8272, 2.0016}}, {10208, {7.9920, 8.8920, 2.0736}}, {10209, {11.4048, 8.4888, 1.5768}}, {10210, {12.5424, 8.4384, 1.6200}}, {10211, {12.5424, 8.4384, 1.6200}}, {10212, {12.0024, 7.0632, 0.2376}}, {10213, {12.0024, 7.0632, 0.2376}}, {10214, {3.9960, 8.8704, 2.0520}}, {10215, {3.9960, 8.8704, 2.0520}}, {10216, {3.9024, 8.8704, 2.0520}}, {10217, {3.9024, 8.8704, 2.0520}}, {10218, {5.6592, 8.8704, 2.0520}}, {10219, {5.6592, 8.8704, 2.0520}}, {10220, {5.1120, 8.8704, 2.0520}}, {10221, {5.1120, 8.8704, 2.0520}}, {10222, {3.4128, 8.8704, 2.0520}}, {10223, {3.4128, 8.8704, 2.0520}}, {10224, {9.3888, 8.6904, 1.8648}}, {10225, {9.3888, 8.6904, 1.8648}}, {10226, {5.9976, 6.2424, -0.5760}}, {10227, {5.9976, 6.2424, -0.5760}}, {10228, {17.6256, 7.6536, 0.8280}}, {10229, {17.6256, 6.5520, -0.2736}}, {10230, {17.6256, 6.5520, -0.2736}}, {10231, {17.6256, 6.5520, -0.2736}}, {10232, {17.6256, 6.7104, -0.1008}}, {10233, {17.6256, 6.7176, -0.1080}}, {10234, {17.6256, 6.7104, -0.1080}}, {10235, {17.6256, 6.9264, 0.1080}}, {10236, {17.6256, 6.9264, 0.1080}}, {10237, {17.6256, 6.9264, 0.1080}}, {10238, {17.6256, 6.9264, 0.1080}}, {10239, {17.6256, 5.4504, -1.3824}}, {10240, {8.2008, 0.0000, -0.0000}}, {10241, {8.2008, 7.9344, -6.4800}}, {10242, {8.2008, 5.0616, -3.6072}}, {10243, {8.2008, 7.9344, -3.6072}}, {10244, {8.2008, 2.1888, -0.7416}}, {10245, {8.2008, 7.9344, -0.7416}}, {10246, {8.2008, 5.0616, -0.7416}}, {10247, {8.2008, 7.9344, -0.7416}}, {10248, {8.2008, 7.9344, -6.4800}}, {10249, {8.2008, 7.9344, -6.4800}}, {10250, {8.2008, 7.9344, -3.6072}}, {10251, {8.2008, 7.9344, -3.6072}}, {10252, {8.2008, 7.9344, -0.7416}}, {10253, {8.2008, 7.9344, -0.7416}}, {10254, {8.2008, 7.9344, -0.7416}}, {10255, {8.2008, 7.9344, -0.7416}}, {10256, {8.2008, 5.0760, -3.6288}}, {10257, {8.2008, 7.9344, -3.6288}}, {10258, {8.2008, 5.0760, -3.6072}}, {10259, {8.2008, 7.9344, -3.6072}}, {10260, {8.2008, 5.0760, -0.7416}}, {10261, {8.2008, 7.9344, -0.7416}}, {10262, {8.2008, 5.0760, -0.7416}}, {10263, {8.2008, 7.9344, -0.7416}}, {10264, {8.2008, 7.9344, -3.6288}}, {10265, {8.2008, 7.9344, -3.6288}}, {10266, {8.2008, 7.9344, -3.6072}}, {10267, {8.2008, 7.9344, -3.6072}}, {10268, {8.2008, 7.9344, -0.7416}}, {10269, {8.2008, 7.9344, -0.7416}}, {10270, {8.2008, 7.9344, -0.7416}}, {10271, {8.2008, 7.9344, -0.7416}}, {10272, {8.2008, 2.1888, -0.7416}}, {10273, {8.2008, 7.9344, -0.7416}}, {10274, {8.2008, 5.0616, -0.7416}}, {10275, {8.2008, 7.9344, -0.7416}}, {10276, {8.2008, 2.1888, -0.7416}}, {10277, {8.2008, 7.9344, -0.7416}}, {10278, {8.2008, 5.0616, -0.7416}}, {10279, {8.2008, 7.9344, -0.7416}}, {10280, {8.2008, 7.9344, -0.7416}}, {10281, {8.2008, 7.9344, -0.7416}}, {10282, {8.2008, 7.9344, -0.7416}}, {10283, {8.2008, 7.9344, -0.7416}}, {10284, {8.2008, 7.9344, -0.7416}}, {10285, {8.2008, 7.9344, -0.7416}}, {10286, {8.2008, 7.9344, -0.7416}}, {10287, {8.2008, 7.9344, -0.7416}}, {10288, {8.2008, 5.0760, -0.7416}}, {10289, {8.2008, 7.9344, -0.7416}}, {10290, {8.2008, 5.0760, -0.7416}}, {10291, {8.2008, 7.9344, -0.7416}}, {10292, {8.2008, 5.0760, -0.7416}}, {10293, {8.2008, 7.9344, -0.7416}}, {10294, {8.2008, 5.0760, -0.7416}}, {10295, {8.2008, 7.9344, -0.7416}}, {10296, {8.2008, 7.9344, -0.7416}}, {10297, {8.2008, 7.9344, -0.7416}}, {10298, {8.2008, 7.9344, -0.7416}}, {10299, {8.2008, 7.9344, -0.7416}}, {10300, {8.2008, 7.9344, -0.7416}}, {10301, {8.2008, 7.9344, -0.7416}}, {10302, {8.2008, 7.9344, -0.7416}}, {10303, {8.2008, 7.9344, -0.7416}}, {10304, {8.2008, -0.6840, 2.1312}}, {10305, {8.2008, 7.9344, 2.1312}}, {10306, {8.2008, 5.0616, 2.1312}}, {10307, {8.2008, 7.9344, 2.1312}}, {10308, {8.2008, 2.1888, 2.1312}}, {10309, {8.2008, 7.9344, 2.1312}}, {10310, {8.2008, 5.0616, 2.1312}}, {10311, {8.2008, 7.9344, 2.1312}}, {10312, {8.2008, 7.9344, 2.1312}}, {10313, {8.2008, 7.9344, 2.1312}}, {10314, {8.2008, 7.9344, 2.1312}}, {10315, {8.2008, 7.9344, 2.1312}}, {10316, {8.2008, 7.9344, 2.1312}}, {10317, {8.2008, 7.9344, 2.1312}}, {10318, {8.2008, 7.9344, 2.1312}}, {10319, {8.2008, 7.9344, 2.1312}}, {10320, {8.2008, 5.0760, 2.1312}}, {10321, {8.2008, 7.9344, 2.1312}}, {10322, {8.2008, 5.0760, 2.1312}}, {10323, {8.2008, 7.9344, 2.1312}}, {10324, {8.2008, 5.0760, 2.1312}}, {10325, {8.2008, 7.9344, 2.1312}}, {10326, {8.2008, 5.0760, 2.1312}}, {10327, {8.2008, 7.9344, 2.1312}}, {10328, {8.2008, 7.9344, 2.1312}}, {10329, {8.2008, 7.9344, 2.1312}}, {10330, {8.2008, 7.9344, 2.1312}}, {10331, {8.2008, 7.9344, 2.1312}}, {10332, {8.2008, 7.9344, 2.1312}}, {10333, {8.2008, 7.9344, 2.1312}}, {10334, {8.2008, 7.9344, 2.1312}}, {10335, {8.2008, 7.9344, 2.1312}}, {10336, {8.2008, 2.1888, 2.1312}}, {10337, {8.2008, 7.9344, 2.1312}}, {10338, {8.2008, 5.0616, 2.1312}}, {10339, {8.2008, 7.9344, 2.1312}}, {10340, {8.2008, 2.1888, 2.1312}}, {10341, {8.2008, 7.9344, 2.1312}}, {10342, {8.2008, 5.0616, 2.1312}}, {10343, {8.2008, 7.9344, 2.1312}}, {10344, {8.2008, 7.9344, 2.1312}}, {10345, {8.2008, 7.9344, 2.1312}}, {10346, {8.2008, 7.9344, 2.1312}}, {10347, {8.2008, 7.9344, 2.1312}}, {10348, {8.2008, 7.9344, 2.1312}}, {10349, {8.2008, 7.9344, 2.1312}}, {10350, {8.2008, 7.9344, 2.1312}}, {10351, {8.2008, 7.9344, 2.1312}}, {10352, {8.2008, 5.0760, 2.1312}}, {10353, {8.2008, 7.9344, 2.1312}}, {10354, {8.2008, 5.0760, 2.1312}}, {10355, {8.2008, 7.9344, 2.1312}}, {10356, {8.2008, 5.0760, 2.1312}}, {10357, {8.2008, 7.9344, 2.1312}}, {10358, {8.2008, 5.0760, 2.1312}}, {10359, {8.2008, 7.9344, 2.1312}}, {10360, {8.2008, 7.9344, 2.1312}}, {10361, {8.2008, 7.9344, 2.1312}}, {10362, {8.2008, 7.9344, 2.1312}}, {10363, {8.2008, 7.9344, 2.1312}}, {10364, {8.2008, 7.9344, 2.1312}}, {10365, {8.2008, 7.9344, 2.1312}}, {10366, {8.2008, 7.9344, 2.1312}}, {10367, {8.2008, 7.9344, 2.1312}}, {10368, {8.2008, -0.6912, 2.1384}}, {10369, {8.2008, 7.9344, 2.1384}}, {10370, {8.2008, 5.0616, 2.1384}}, {10371, {8.2008, 7.9344, 2.1384}}, {10372, {8.2008, 2.1888, 2.1384}}, {10373, {8.2008, 7.9344, 2.1384}}, {10374, {8.2008, 5.0616, 2.1384}}, {10375, {8.2008, 7.9344, 2.1384}}, {10376, {8.2008, 7.9344, 2.1384}}, {10377, {8.2008, 7.9344, 2.1384}}, {10378, {8.2008, 7.9344, 2.1384}}, {10379, {8.2008, 7.9344, 2.1384}}, {10380, {8.2008, 7.9344, 2.1384}}, {10381, {8.2008, 7.9344, 2.1384}}, {10382, {8.2008, 7.9344, 2.1384}}, {10383, {8.2008, 7.9344, 2.1384}}, {10384, {8.2008, 5.0760, 2.1384}}, {10385, {8.2008, 7.9344, 2.1384}}, {10386, {8.2008, 5.0760, 2.1384}}, {10387, {8.2008, 7.9344, 2.1384}}, {10388, {8.2008, 5.0760, 2.1384}}, {10389, {8.2008, 7.9344, 2.1384}}, {10390, {8.2008, 5.0760, 2.1384}}, {10391, {8.2008, 7.9344, 2.1384}}, {10392, {8.2008, 7.9344, 2.1384}}, {10393, {8.2008, 7.9344, 2.1384}}, {10394, {8.2008, 7.9344, 2.1384}}, {10395, {8.2008, 7.9344, 2.1384}}, {10396, {8.2008, 7.9344, 2.1384}}, {10397, {8.2008, 7.9344, 2.1384}}, {10398, {8.2008, 7.9344, 2.1384}}, {10399, {8.2008, 7.9344, 2.1384}}, {10400, {8.2008, 2.1888, 2.1384}}, {10401, {8.2008, 7.9344, 2.1384}}, {10402, {8.2008, 5.0616, 2.1384}}, {10403, {8.2008, 7.9344, 2.1384}}, {10404, {8.2008, 2.1888, 2.1384}}, {10405, {8.2008, 7.9344, 2.1384}}, {10406, {8.2008, 5.0616, 2.1384}}, {10407, {8.2008, 7.9344, 2.1384}}, {10408, {8.2008, 7.9344, 2.1384}}, {10409, {8.2008, 7.9344, 2.1384}}, {10410, {8.2008, 7.9344, 2.1384}}, {10411, {8.2008, 7.9344, 2.1384}}, {10412, {8.2008, 7.9344, 2.1384}}, {10413, {8.2008, 7.9344, 2.1384}}, {10414, {8.2008, 7.9344, 2.1384}}, {10415, {8.2008, 7.9344, 2.1384}}, {10416, {8.2008, 5.0760, 2.1384}}, {10417, {8.2008, 7.9344, 2.1384}}, {10418, {8.2008, 5.0760, 2.1384}}, {10419, {8.2008, 7.9344, 2.1384}}, {10420, {8.2008, 5.0760, 2.1384}}, {10421, {8.2008, 7.9344, 2.1384}}, {10422, {8.2008, 5.0760, 2.1384}}, {10423, {8.2008, 7.9344, 2.1384}}, {10424, {8.2008, 7.9344, 2.1384}}, {10425, {8.2008, 7.9344, 2.1384}}, {10426, {8.2008, 7.9344, 2.1384}}, {10427, {8.2008, 7.9344, 2.1384}}, {10428, {8.2008, 7.9344, 2.1384}}, {10429, {8.2008, 7.9344, 2.1384}}, {10430, {8.2008, 7.9344, 2.1384}}, {10431, {8.2008, 7.9344, 2.1384}}, {10432, {8.2008, -0.6840, 2.1384}}, {10433, {8.2008, 7.9344, 2.1384}}, {10434, {8.2008, 5.0616, 2.1384}}, {10435, {8.2008, 7.9344, 2.1384}}, {10436, {8.2008, 2.1888, 2.1384}}, {10437, {8.2008, 7.9344, 2.1384}}, {10438, {8.2008, 5.0616, 2.1384}}, {10439, {8.2008, 7.9344, 2.1384}}, {10440, {8.2008, 7.9344, 2.1384}}, {10441, {8.2008, 7.9344, 2.1384}}, {10442, {8.2008, 7.9344, 2.1384}}, {10443, {8.2008, 7.9344, 2.1384}}, {10444, {8.2008, 7.9344, 2.1384}}, {10445, {8.2008, 7.9344, 2.1384}}, {10446, {8.2008, 7.9344, 2.1384}}, {10447, {8.2008, 7.9344, 2.1384}}, {10448, {8.2008, 5.0760, 2.1384}}, {10449, {8.2008, 7.9344, 2.1384}}, {10450, {8.2008, 5.0760, 2.1384}}, {10451, {8.2008, 7.9344, 2.1384}}, {10452, {8.2008, 5.0760, 2.1384}}, {10453, {8.2008, 7.9344, 2.1384}}, {10454, {8.2008, 5.0760, 2.1384}}, {10455, {8.2008, 7.9344, 2.1384}}, {10456, {8.2008, 7.9344, 2.1384}}, {10457, {8.2008, 7.9344, 2.1384}}, {10458, {8.2008, 7.9344, 2.1384}}, {10459, {8.2008, 7.9344, 2.1384}}, {10460, {8.2008, 7.9344, 2.1384}}, {10461, {8.2008, 7.9344, 2.1384}}, {10462, {8.2008, 7.9344, 2.1384}}, {10463, {8.2008, 7.9344, 2.1384}}, {10464, {8.2008, 2.1888, 2.1384}}, {10465, {8.2008, 7.9344, 2.1384}}, {10466, {8.2008, 5.0616, 2.1384}}, {10467, {8.2008, 7.9344, 2.1384}}, {10468, {8.2008, 2.1888, 2.1384}}, {10469, {8.2008, 7.9344, 2.1384}}, {10470, {8.2008, 5.0616, 2.1384}}, {10471, {8.2008, 7.9344, 2.1384}}, {10472, {8.2008, 7.9344, 2.1384}}, {10473, {8.2008, 7.9344, 2.1384}}, {10474, {8.2008, 7.9344, 2.1384}}, {10475, {8.2008, 7.9344, 2.1384}}, {10476, {8.2008, 7.9344, 2.1384}}, {10477, {8.2008, 7.9344, 2.1384}}, {10478, {8.2008, 7.9344, 2.1384}}, {10479, {8.2008, 7.9344, 2.1384}}, {10480, {8.2008, 5.0760, 2.1384}}, {10481, {8.2008, 7.9344, 2.1384}}, {10482, {8.2008, 5.0760, 2.1384}}, {10483, {8.2008, 7.9344, 2.1384}}, {10484, {8.2008, 5.0760, 2.1384}}, {10485, {8.2008, 7.9344, 2.1384}}, {10486, {8.2008, 5.0760, 2.1384}}, {10487, {8.2008, 7.9344, 2.1384}}, {10488, {8.2008, 7.9344, 2.1384}}, {10489, {8.2008, 7.9344, 2.1384}}, {10490, {8.2008, 7.9344, 2.1384}}, {10491, {8.2008, 7.9344, 2.1384}}, {10492, {8.2008, 7.9344, 2.1384}}, {10493, {8.2008, 7.9344, 2.1384}}, {10494, {8.2008, 7.9344, 2.1384}}, {10495, {8.2008, 7.9344, 2.1384}}, {10496, {12.0024, 6.5520, -0.2736}}, {10497, {12.0024, 6.5520, -0.2736}}, {10498, {12.0024, 6.7104, -0.1008}}, {10499, {12.0024, 6.7176, -0.1080}}, {10500, {14.9976, 6.7104, -0.1080}}, {10501, {12.0024, 6.9264, 0.1080}}, {10502, {12.0024, 6.9264, 0.1080}}, {10503, {12.0024, 6.9264, 0.1080}}, {10504, {5.9976, 8.6832, 1.8648}}, {10505, {5.9976, 8.6832, 1.8648}}, {10506, {9.3888, 8.6832, 1.8648}}, {10507, {9.3888, 8.6832, 1.8648}}, {10508, {12.0024, 6.5520, -0.2664}}, {10509, {12.0024, 6.5520, -0.2664}}, {10510, {12.0024, 6.5520, -0.2664}}, {10511, {12.0024, 6.5520, -0.2664}}, {10512, {12.0024, 6.5520, -0.2664}}, {10513, {12.0024, 6.5520, -0.2664}}, {10514, {5.9976, 9.4104, 1.8648}}, {10515, {5.9976, 8.6832, 2.5920}}, {10516, {12.0024, 6.5520, -0.2664}}, {10517, {12.0024, 6.5520, -0.2664}}, {10518, {12.0024, 6.5520, -0.2664}}, {10519, {12.0024, 6.5520, -0.2664}}, {10520, {13.1688, 6.5520, -0.2664}}, {10521, {12.0024, 6.5520, -0.2664}}, {10522, {12.0024, 6.5520, -0.2664}}, {10523, {12.0024, 6.5520, -0.2664}}, {10524, {12.0024, 6.5520, -0.2664}}, {10525, {12.0024, 6.5520, -0.2664}}, {10526, {12.0024, 6.5520, -0.2664}}, {10527, {12.0024, 6.9264, 0.1080}}, {10528, {12.0024, 6.9264, 0.1080}}, {10529, {12.0024, 8.6832, 1.8648}}, {10530, {12.0024, 8.6832, 1.8648}}, {10531, {8.8056, 8.6832, 1.3320}}, {10532, {8.8056, 8.6832, 1.3320}}, {10533, {8.8056, 8.6832, 1.3320}}, {10534, {8.8056, 8.6832, 1.3320}}, {10535, {12.0024, 8.6832, 1.8648}}, {10536, {12.0024, 8.6832, 1.8648}}, {10537, {12.0024, 8.6832, 1.8648}}, {10538, {12.0024, 8.6832, 1.8648}}, {10539, {12.0024, 8.6832, 1.8648}}, {10540, {12.0024, 8.6832, 1.8648}}, {10541, {12.0024, 8.6832, 1.8648}}, {10542, {12.0024, 8.6832, 1.8648}}, {10543, {12.0024, 8.6832, 1.8648}}, {10544, {12.0024, 8.6832, 1.8648}}, {10545, {12.0024, 8.6832, 1.8648}}, {10546, {12.0024, 8.6832, 1.8648}}, {10547, {12.0024, 6.5520, -0.2664}}, {10548, {10.1448, 9.4104, -3.1680}}, {10549, {10.1448, 3.6504, 2.5920}}, {10550, {10.1448, 9.4104, -0.6048}}, {10551, {10.1448, 9.4104, -0.6048}}, {10552, {5.9976, 9.1944, 2.4048}}, {10553, {5.9976, 9.1944, 2.4048}}, {10554, {12.0024, 7.0992, -3.4056}}, {10555, {12.0024, 7.1064, -3.4128}}, {10556, {12.0024, 7.0992, -3.1680}}, {10557, {12.0024, 7.0992, -1.5048}}, {10558, {12.0024, 8.6976, 0.7344}}, {10559, {12.0024, 8.6976, 0.7344}}, {10560, {9.3240, 9.4104, 0.8280}}, {10561, {9.3240, 9.4104, 0.8280}}, {10562, {12.0024, 8.4024, 1.2096}}, {10563, {12.0024, 8.4024, 1.2096}}, {10564, {12.0024, 8.3952, 1.2168}}, {10565, {12.0024, 7.8120, 0.9000}}, {10566, {12.0024, 7.8120, 0.9000}}, {10567, {12.0024, 6.5520, -0.2664}}, {10568, {12.0024, 6.5592, -0.2664}}, {10569, {5.9976, 8.6832, 1.8648}}, {10570, {12.0024, 6.5520, -0.2664}}, {10571, {12.0024, 6.5520, -0.2664}}, {10572, {6.6888, 8.7840, 1.8648}}, {10573, {6.6888, 8.7768, 1.8648}}, {10574, {12.0024, 6.5520, -3.1680}}, {10575, {5.9976, 8.7768, 1.8648}}, {10576, {12.0024, 3.6504, -0.2664}}, {10577, {5.9976, 8.7768, 1.8648}}, {10578, {12.0024, 6.9264, 0.1080}}, {10579, {12.0024, 6.9264, 0.1080}}, {10580, {5.9976, 8.9640, 1.8648}}, {10581, {5.9976, 8.7840, 2.0520}}, {10582, {12.0024, 6.9264, 0.1080}}, {10583, {12.0024, 6.9264, 0.1080}}, {10584, {5.9976, 8.9640, 1.8648}}, {10585, {5.9976, 8.7840, 2.0520}}, {10586, {12.0024, 6.9264, 0.1080}}, {10587, {12.0024, 6.9264, 0.1080}}, {10588, {5.9976, 8.7768, 2.0664}}, {10589, {5.9976, 8.9784, 1.8648}}, {10590, {12.0024, 6.9264, 0.1080}}, {10591, {12.0024, 6.9264, 0.1080}}, {10592, {5.9976, 8.7768, 2.0664}}, {10593, {5.9976, 8.9784, 1.8648}}, {10594, {12.0024, 7.9560, 1.1376}}, {10595, {9.5040, 8.7336, 1.9080}}, {10596, {12.0024, 7.9560, 1.1376}}, {10597, {9.5040, 8.7336, 1.9080}}, {10598, {12.0024, 8.2512, -1.4688}}, {10599, {12.0024, 5.3496, 1.4328}}, {10600, {12.0024, 8.2512, -1.4688}}, {10601, {12.0024, 5.3496, 1.4328}}, {10602, {12.0024, 8.2512, -1.4688}}, {10603, {12.0024, 5.3496, 1.4328}}, {10604, {12.0024, 8.2512, -1.4688}}, {10605, {12.0024, 5.3496, 1.4328}}, {10606, {9.5040, 8.7336, 1.9080}}, {10607, {9.5040, 8.7336, 1.9080}}, {10608, {12.0024, 4.8168, -2.0016}}, {10609, {12.0024, 6.6960, -0.2736}}, {10610, {12.0024, 6.5520, -0.2736}}, {10611, {12.0024, 6.5520, -0.2664}}, {10612, {12.0024, 6.5520, -0.2664}}, {10613, {12.0024, 6.5520, 1.7208}}, {10614, {9.3240, 8.7408, 2.0304}}, {10615, {12.0024, 6.8832, 0.0576}}, {10616, {9.3240, 8.7408, 2.0304}}, {10617, {9.3240, 8.6832, 2.0304}}, {10618, {12.0024, 6.8184, -0.0000}}, {10619, {9.3240, 8.6832, 2.0304}}, {10620, {8.1216, 7.3224, 0.5040}}, {10621, {8.1216, 7.3224, 0.5040}}, {10622, {8.2368, 8.8272, -2.0448}}, {10623, {8.2368, 4.7736, 2.0016}}, {10624, {6.8544, 8.8848, 2.0664}}, {10625, {5.5440, 5.9472, -0.8712}}, {10626, {4.1688, 5.4432, 0.4824}}, {10627, {5.7600, 8.8704, 2.0520}}, {10628, {5.7600, 8.8704, 2.0520}}, {10629, {5.1264, 8.8704, 2.0520}}, {10630, {5.1264, 8.8704, 2.0520}}, {10631, {3.9960, 8.8776, 2.0520}}, {10632, {3.9960, 8.8776, 2.0520}}, {10633, {3.9024, 8.8704, 2.0520}}, {10634, {3.9024, 8.8704, 2.0520}}, {10635, {3.9960, 9.4104, 2.5920}}, {10636, {3.9960, 9.4104, 2.5920}}, {10637, {3.9960, 8.8704, 2.0520}}, {10638, {3.9960, 8.8704, 2.0520}}, {10639, {3.9960, 8.8704, 2.0520}}, {10640, {3.9960, 8.8704, 2.0520}}, {10641, {3.9024, 8.8704, 2.0520}}, {10642, {3.9024, 8.8704, 2.0520}}, {10643, {9.3240, 8.9208, 2.0952}}, {10644, {9.3240, 8.9208, 2.0952}}, {10645, {9.3240, 8.9208, 2.0952}}, {10646, {9.3240, 8.9208, 2.0952}}, {10647, {5.1120, 8.8704, 2.0520}}, {10648, {5.1120, 8.8704, 2.0520}}, {10649, {2.4048, 8.8776, 2.0592}}, {10650, {4.1400, 9.2088, 2.3832}}, {10651, {8.6688, 6.7392, 1.1808}}, {10652, {9.2160, 8.2368, -0.0000}}, {10653, {9.2160, 8.2368, -0.0000}}, {10654, {8.6688, 6.7464, -0.0000}}, {10655, {8.6688, 5.1120, -0.0000}}, {10656, {8.6688, 7.2504, 0.4320}}, {10657, {8.6688, 7.0704, 0.2520}}, {10658, {8.6688, 6.7392, -0.0000}}, {10659, {8.6688, 6.7392, -0.0000}}, {10660, {8.6688, 6.7392, 1.5480}}, {10661, {8.6688, 6.7392, 1.5480}}, {10662, {11.8152, 6.2784, -0.0000}}, {10663, {11.8152, 6.2784, -0.0000}}, {10664, {8.6688, 7.2576, 1.1808}}, {10665, {8.6688, 7.2576, 1.1808}}, {10666, {8.6688, 7.2360, 1.1952}}, {10667, {8.6688, 7.2360, 1.1952}}, {10668, {9.4608, 7.3080, -0.0000}}, {10669, {9.4608, 7.3080, -0.0000}}, {10670, {9.4608, 7.3080, -0.0000}}, {10671, {9.4608, 7.3080, -0.0000}}, {10672, {9.3312, 7.6464, 0.8280}}, {10673, {9.3312, 9.4104, 0.8280}}, {10674, {9.3312, 9.3960, 2.3472}}, {10675, {9.3312, 9.3600, 2.0592}}, {10676, {9.3312, 9.3600, 2.0592}}, {10677, {12.9168, 7.6464, 0.8280}}, {10678, {9.3312, 7.6464, 0.8280}}, {10679, {9.3312, 7.6464, 0.8280}}, {10680, {9.3312, 7.6464, 0.8280}}, {10681, {9.3312, 7.6464, 0.8280}}, {10682, {9.3312, 7.6536, 0.8280}}, {10683, {9.3312, 7.6464, 0.8280}}, {10684, {9.3312, 7.6464, 0.8280}}, {10685, {9.3312, 9.4104, 2.5920}}, {10686, {9.2448, 7.8048, 0.9792}}, {10687, {9.2448, 7.8048, 0.9792}}, {10688, {9.3312, 7.6464, 0.8280}}, {10689, {9.3312, 7.6464, 0.8280}}, {10690, {11.6136, 7.6464, 0.8280}}, {10691, {11.6424, 7.6464, 0.8280}}, {10692, {9.3312, 7.4736, 0.6480}}, {10693, {9.3312, 7.4736, 0.6480}}, {10694, {9.3312, 7.4736, 0.6480}}, {10695, {9.3312, 7.4736, 0.6480}}, {10696, {9.3312, 7.4736, 0.6480}}, {10697, {13.3704, 9.2304, 2.4120}}, {10698, {9.3312, 9.4104, 0.6480}}, {10699, {9.3312, 7.8048, 2.1528}}, {10700, {9.3312, 7.7976, 0.6480}}, {10701, {9.3312, 7.8048, 0.6480}}, {10702, {10.7784, 8.3088, 1.4976}}, {10703, {11.5920, 6.3432, -0.4824}}, {10704, {11.5920, 6.3432, -0.4824}}, {10705, {9.3240, 6.3072, -0.5112}}, {10706, {9.3240, 6.3072, -0.5112}}, {10707, {9.3240, 6.3072, -0.5112}}, {10708, {9.3240, 6.3072, -0.5112}}, {10709, {9.3240, 6.3072, -0.5112}}, {10710, {7.9776, 6.3000, -0.5040}}, {10711, {7.9776, 6.3000, -0.5040}}, {10712, {4.1400, 9.2088, 2.3832}}, {10713, {4.1400, 9.2088, 2.3832}}, {10714, {7.0632, 9.2088, 2.3832}}, {10715, {7.0632, 9.2088, 2.3832}}, {10716, {12.0024, 5.3064, 0.1368}}, {10717, {12.0024, 8.5104, 0.1368}}, {10718, {12.0024, 6.2856, 0.7488}}, {10719, {13.3272, 5.3208, -1.4976}}, {10720, {9.3240, 7.4736, 0.6480}}, {10721, {9.3168, 7.9056, -0.8280}}, {10722, {8.7696, 4.7304, -0.0000}}, {10723, {9.3168, 7.5096, 0.6912}}, {10724, {9.3168, 9.4104, 0.6912}}, {10725, {9.3168, 7.5096, 0.6840}}, {10726, {9.3312, 6.4224, -0.3960}}, {10727, {7.8840, 6.4872, -0.3312}}, {10728, {9.3312, 7.7976, 0.6552}}, {10729, {9.3312, 7.7976, 0.6552}}, {10730, {9.3312, 9.0288, 2.5920}}, {10731, {7.1352, 7.9776, 1.1592}}, {10732, {9.3312, 8.7840, 2.5920}}, {10733, {9.3312, 8.7840, 2.5920}}, {10734, {5.9976, 8.8272, 2.0016}}, {10735, {5.9976, 8.8272, 2.0016}}, {10736, {5.9976, 8.8272, 2.0016}}, {10737, {5.9976, 8.8272, 2.0016}}, {10738, {5.9976, 8.8272, 2.0016}}, {10739, {5.9976, 8.8272, 2.0016}}, {10740, {12.0024, 6.5520, -0.2736}}, {10741, {3.3336, 8.8776, 2.0520}}, {10742, {3.3336, 9.4104, 2.5920}}, {10743, {6.7176, 8.8776, 2.0520}}, {10744, {3.9168, 9.4104, 2.5920}}, {10745, {3.9168, 9.4104, 2.5920}}, {10746, {9.6480, 6.4872, -0.3312}}, {10747, {11.4048, 6.4872, -0.3312}}, {10748, {5.9976, 9.0648, 2.2392}}, {10749, {5.9976, 9.0648, 2.2392}}, {10750, {9.3240, 7.0776, 0.2592}}, {10751, {9.3240, 4.3200, -2.4984}}, {10752, {12.0024, 9.1800, 2.3616}}, {10753, {12.0024, 9.1224, 2.3040}}, {10754, {12.0024, 9.1224, 2.3040}}, {10755, {9.9864, 9.0648, 2.3544}}, {10756, {9.9864, 9.0648, 2.3544}}, {10757, {9.9864, 9.1152, 2.3040}}, {10758, {9.9864, 9.1224, 2.2968}}, {10759, {10.9224, 7.1784, 0.2664}}, {10760, {10.9224, 7.1784, 0.2664}}, {10761, {12.4920, 6.9984, 0.1800}}, {10762, {9.9576, 8.5176, 1.6992}}, {10763, {7.6968, 9.4104, 2.5920}}, {10764, {15.4656, 9.4104, 2.5920}}, {10765, {5.9688, 9.4104, 2.5920}}, {10766, {5.9688, 9.4104, 2.5920}}, {10767, {5.9688, 9.4104, 2.5920}}, {10768, {5.9688, 9.4104, 2.5920}}, {10769, {5.9688, 9.4104, 2.5920}}, {10770, {5.9688, 9.4104, 2.5920}}, {10771, {5.9688, 9.4104, 2.5920}}, {10772, {6.4944, 9.4104, 2.5920}}, {10773, {5.9688, 9.4104, 2.5920}}, {10774, {5.9688, 9.4104, 2.5920}}, {10775, {6.5448, 9.4104, 2.5920}}, {10776, {5.9760, 9.4104, 2.5920}}, {10777, {5.9688, 9.4104, 2.5920}}, {10778, {5.9688, 9.4104, 2.5920}}, {10779, {5.9688, 9.4104, 2.5920}}, {10780, {5.9688, 9.4104, 2.5920}}, {10781, {11.0304, 7.7544, 0.9360}}, {10782, {10.6488, 8.8704, 2.0520}}, {10783, {4.1688, 5.4432, 2.3904}}, {10784, {12.8304, 6.8832, 0.0576}}, {10785, {5.9976, 8.7768, 1.8648}}, {10786, {9.3312, 9.4104, 0.2592}}, {10787, {9.3312, 9.4104, 0.2592}}, {10788, {9.3312, 9.4104, 0.2592}}, {10789, {9.3312, 7.0776, 2.5920}}, {10790, {9.3312, 7.0776, 2.5920}}, {10791, {9.3312, 7.0776, 1.6776}}, {10792, {9.3312, 7.0848, 0.2592}}, {10793, {9.3312, 8.2512, -3.1680}}, {10794, {9.3312, 3.6504, -0.1224}}, {10795, {9.3312, 6.6960, -0.1224}}, {10796, {9.3312, 6.6960, -0.1224}}, {10797, {9.3312, 7.6464, 0.8280}}, {10798, {9.3312, 7.6464, 0.8280}}, {10799, {9.3312, 6.4944, -0.3240}}, {10800, {9.3312, 8.3664, -0.7416}}, {10801, {9.3312, 6.0768, 0.4824}}, {10802, {9.3312, 6.4944, -0.3240}}, {10803, {9.3312, 6.4944, -0.3240}}, {10804, {9.3312, 7.6464, 0.8280}}, {10805, {9.3312, 7.6464, 0.8280}}, {10806, {9.3312, 9.4104, 0.8280}}, {10807, {9.3312, 7.6464, 0.8280}}, {10808, {9.3312, 7.6464, 0.8280}}, {10809, {9.3312, 7.8048, 0.6480}}, {10810, {9.3312, 7.8048, 0.6480}}, {10811, {9.3312, 7.8048, 0.6480}}, {10812, {9.3312, 6.4080, -3.1680}}, {10813, {9.3312, 6.4080, -3.1680}}, {10814, {4.1688, 5.4432, 2.3904}}, {10815, {10.9944, 8.2368, 1.4184}}, {10816, {7.9920, 7.1784, 0.2664}}, {10817, {7.9920, 7.1784, 0.2664}}, {10818, {7.9920, 8.9280, 0.2664}}, {10819, {7.9920, 8.9280, 0.2664}}, {10820, {7.9920, 7.1784, 0.2664}}, {10821, {7.9920, 7.1784, 0.2664}}, {10822, {7.9920, 9.0936, 2.2752}}, {10823, {7.9920, 9.0936, 2.2752}}, {10824, {7.9920, 9.0936, 2.2752}}, {10825, {7.9920, 9.0936, 2.2752}}, {10826, {14.1552, 7.1784, 0.2664}}, {10827, {14.1552, 7.1784, 0.2664}}, {10828, {7.9920, 7.1784, 0.2664}}, {10829, {7.9920, 7.1784, 0.2664}}, {10830, {7.9920, 7.1856, -0.0000}}, {10831, {7.9920, 7.1784, 0.0072}}, {10832, {7.9920, 7.1784, 0.2664}}, {10833, {7.9920, 9.4104, 0.2664}}, {10834, {7.9920, 7.1712, 2.5056}}, {10835, {7.9920, 7.1784, 0.2664}}, {10836, {7.9920, 7.1784, 0.2736}}, {10837, {9.7488, 7.1784, 0.2664}}, {10838, {9.7488, 7.1784, 0.2736}}, {10839, {9.9072, 7.0992, 0.2088}}, {10840, {9.9072, 7.0992, 0.2088}}, {10841, {7.9920, 8.3088, 1.4832}}, {10842, {8.2872, 7.0776, 0.2592}}, {10843, {8.2872, 7.0776, 0.2592}}, {10844, {7.9920, 7.1784, 0.2664}}, {10845, {7.9920, 7.1784, 0.2736}}, {10846, {7.9920, 9.4104, 0.2664}}, {10847, {7.9920, 7.1784, 1.8864}}, {10848, {7.9920, 7.1784, 2.5920}}, {10849, {6.8184, 3.9528, 1.8864}}, {10850, {7.9920, 9.4104, 0.2736}}, {10851, {7.9920, 7.1712, 2.5920}}, {10852, {10.0296, 7.6248, 0.8064}}, {10853, {10.0296, 7.6248, 0.8064}}, {10854, {9.3312, 4.8240, 1.0584}}, {10855, {9.3312, 9.0504, -0.8280}}, {10856, {9.3312, 7.0776, 0.2592}}, {10857, {9.3312, 7.0776, 0.2592}}, {10858, {9.3312, 7.2504, -2.0808}}, {10859, {9.3312, 6.1200, -0.6984}}, {10860, {9.3312, 6.9048, 1.7352}}, {10861, {9.3312, 9.4104, -0.0000}}, {10862, {9.3240, 9.1440, -1.9944}}, {10863, {9.3312, 9.4104, -0.6120}}, {10864, {9.3312, 8.3160, 1.5192}}, {10865, {9.3312, 8.8776, 2.0664}}, {10866, {9.3312, 8.8776, 2.0664}}, {10867, {9.3240, 6.9048, -0.0000}}, {10868, {12.0024, 5.2416, -1.5768}}, {10869, {12.0024, 4.8240, -1.9944}}, {10870, {17.8488, 4.8240, -1.9944}}, {10871, {9.3312, 7.8840, 1.0584}}, {10872, {9.3312, 9.0504, -0.8280}}, {10873, {9.3240, 6.8832, 0.0576}}, {10874, {9.3240, 6.8832, 0.0576}}, {10875, {9.3240, 9.4104, 0.0576}}, {10876, {9.3240, 9.4104, 0.0576}}, {10877, {9.3240, 6.8976, 2.3976}}, {10878, {9.3240, 6.8976, 2.3976}}, {10879, {9.3240, 6.8976, 2.3904}}, {10880, {9.3240, 6.8976, 2.3976}}, {10881, {9.3240, 7.0056, 2.3904}}, {10882, {9.3240, 7.0056, 2.3976}}, {10883, {9.3240, 9.3456, 2.3976}}, {10884, {9.3240, 9.3456, 2.3976}}, {10885, {9.3240, 9.4104, 2.5920}}, {10886, {9.3240, 9.4104, 2.5920}}, {10887, {9.3240, 6.8832, 2.5920}}, {10888, {9.3240, 6.8832, 2.5920}}, {10889, {9.3240, 9.4104, 2.5920}}, {10890, {9.3240, 9.4104, 2.5920}}, {10891, {9.3240, 9.4104, 2.5920}}, {10892, {9.3240, 9.4104, 2.5920}}, {10893, {9.3240, 9.1224, 2.1024}}, {10894, {9.3240, 9.1296, 2.1024}}, {10895, {9.3240, 9.4104, 2.5920}}, {10896, {9.3240, 9.4104, 2.5920}}, {10897, {9.3240, 9.4104, 2.5920}}, {10898, {9.3240, 9.4176, 2.5920}}, {10899, {9.3240, 9.4104, 2.5920}}, {10900, {9.3240, 9.4104, 2.5920}}, {10901, {9.3240, 8.0568, 1.2312}}, {10902, {9.3240, 8.0568, 1.2312}}, {10903, {9.3240, 8.0568, 1.2312}}, {10904, {9.3240, 8.0568, 1.2312}}, {10905, {9.3240, 8.6400, 1.7568}}, {10906, {9.3240, 8.6400, 1.7568}}, {10907, {9.3240, 9.2232, 2.3976}}, {10908, {9.3240, 9.2232, 2.3976}}, {10909, {9.3240, 8.6400, 2.0232}}, {10910, {9.3240, 8.6400, 2.0232}}, {10911, {9.3240, 9.4104, 2.5920}}, {10912, {9.3240, 9.4104, 2.5920}}, {10913, {9.3240, 6.8976, 0.0648}}, {10914, {9.3240, 6.8976, 0.0648}}, {10915, {12.9528, 6.8832, 2.1024}}, {10916, {9.3240, 6.8832, 0.0576}}, {10917, {16.9416, 6.8832, 0.0576}}, {10918, {10.2096, 6.8832, 0.0648}}, {10919, {10.2096, 6.8832, 0.0648}}, {10920, {10.2096, 6.8832, 2.3976}}, {10921, {10.2096, 6.8832, 2.3904}}, {10922, {9.3240, 6.8832, 0.0648}}, {10923, {9.3240, 6.8832, 0.0648}}, {10924, {9.3240, 6.8832, 1.7568}}, {10925, {9.3240, 6.8832, 1.7568}}, {10926, {9.3312, 7.4952, -0.8280}}, {10927, {9.3240, 6.8976, 1.7568}}, {10928, {9.3240, 6.8976, 1.7568}}, {10929, {9.3240, 6.8976, 2.5920}}, {10930, {9.3240, 6.8976, 2.5920}}, {10931, {9.3240, 8.6544, 1.7568}}, {10932, {9.3240, 8.6544, 1.7568}}, {10933, {9.3240, 8.6544, 2.5920}}, {10934, {9.3240, 8.6544, 2.5920}}, {10935, {9.3240, 9.4104, 2.5920}}, {10936, {9.3240, 9.4104, 2.5920}}, {10937, {9.3240, 9.4104, 2.5920}}, {10938, {9.3240, 9.4104, 2.5920}}, {10939, {12.0024, 6.8904, 0.0720}}, {10940, {12.0024, 6.8904, 0.0720}}, {10941, {9.3240, 6.8184, -0.0000}}, {10942, {9.3240, 6.8184, -0.0000}}, {10943, {6.9696, 8.8272, 2.0016}}, {10944, {6.9696, 8.8272, 2.0016}}, {10945, {6.9696, 8.8272, 1.7640}}, {10946, {6.9696, 8.8272, 1.7640}}, {10947, {6.9696, 8.1144, 1.7712}}, {10948, {6.9696, 8.1144, 1.7712}}, {10949, {9.3240, 8.5824, 1.7568}}, {10950, {9.3240, 8.5824, 1.7568}}, {10951, {9.3240, 7.3512, 2.5920}}, {10952, {9.3240, 7.3512, 2.5920}}, {10953, {6.9696, 7.5240, 2.5920}}, {10954, {6.9696, 7.5240, 2.5920}}, {10955, {9.3240, 8.5824, 2.5920}}, {10956, {9.3240, 8.5824, 2.5920}}, {10957, {12.0024, 6.8184, -0.0000}}, {10958, {12.0024, 6.8184, -0.0000}}, {10959, {9.3240, 6.8184, -0.0000}}, {10960, {9.3240, 6.8184, -0.0000}}, {10961, {9.3240, 6.8184, 2.1024}}, {10962, {9.3240, 6.8184, 2.1024}}, {10963, {6.9696, 9.3384, 2.5200}}, {10964, {6.9696, 9.3384, 2.5200}}, {10965, {6.9696, 9.3384, 2.5200}}, {10966, {6.9696, 9.3384, 2.5200}}, {10967, {12.8880, 5.4144, -0.0000}}, {10968, {12.8880, 5.4144, -0.0000}}, {10969, {7.9920, 6.0048, -0.0000}}, {10970, {7.9920, 7.5816, 0.0072}}, {10971, {7.9920, 7.5888, -0.0000}}, {10972, {7.9920, 6.5880, 0.5688}}, {10973, {7.9920, 6.5880, -0.0000}}, {10974, {5.1480, 7.5744, 0.7560}}, {10975, {9.3240, 3.6504, -0.0000}}, {10976, {9.3240, 3.6504, -0.0000}}, {10977, {9.3240, 7.9992, -0.0000}}, {10978, {7.3296, 7.5744, 0.7560}}, {10979, {8.6688, 8.3304, -0.0000}}, {10980, {7.3296, 8.3304, -0.0000}}, {10981, {8.6688, 8.3304, -0.0000}}, {10982, {8.6688, 8.3304, -0.0000}}, {10983, {9.3240, 5.4072, -0.0000}}, {10984, {9.3240, 3.6504, 1.7568}}, {10985, {9.3240, 8.5824, -0.0000}}, {10986, {9.3240, 7.9920, 0.0072}}, {10987, {9.3240, 7.9992, -0.0000}}, {10988, {9.3312, 4.1328, 0.0072}}, {10989, {9.3312, 4.1328, 0.0072}}, {10990, {3.5856, 5.1768, 0.2664}}, {10991, {4.2336, 8.8272, 2.0016}}, {10992, {4.2336, 8.8272, 2.0016}}, {10993, {4.2336, 8.8272, 2.0016}}, {10994, {5.5944, 5.1768, 0.2664}}, {10995, {9.3312, 9.4104, 2.5920}}, {10996, {8.3304, 8.2440, 1.4184}}, {10997, {11.6568, 8.8272, 2.0016}}, {10998, {4.0032, 6.9984, 0.1872}}, {10999, {14.6808, 9.4104, 2.5920}}, {11000, {14.6808, 9.4176, 2.5920}}, {11001, {9.3240, 9.2232, 2.3976}}, {11002, {9.3240, 9.2232, 2.3976}}, {11003, {8.6040, 9.4104, 2.5920}}, {11004, {8.3304, 9.4104, 2.5920}}, {11005, {6.2640, 9.4104, 2.5920}}, {11006, {4.6296, 8.2368, 1.4184}}, {11007, {4.6296, 9.4104, 2.5920}}, {11008, {12.0024, 8.5464, 2.3400}}, {11009, {12.0024, 8.5464, 2.3400}}, {11010, {12.0024, 8.5464, 2.3400}}, {11011, {12.0024, 8.5464, 2.3400}}, {11012, {14.9328, 6.7248, -0.0936}}, {11013, {12.0024, 6.7248, -0.1008}}, {11014, {7.3224, 8.6832, 1.8648}}, {11015, {7.3224, 8.6832, 1.8648}}, {11016, {12.0024, 8.5464, 2.3400}}, {11017, {12.0024, 8.5464, 2.3400}}, {11018, {12.0024, 8.5464, 2.3400}}, {11019, {12.0024, 8.5464, 2.3400}}, {11020, {14.9328, 6.7248, -0.1008}}, {11021, {7.3224, 9.4104, 2.5920}}, {11022, {12.0024, 3.6504, 0.9720}}, {11023, {12.0024, 7.7904, -3.1680}}, {11024, {12.0024, 3.6504, 0.9720}}, {11025, {12.0024, 7.7904, -3.1680}}, {11026, {9.2448, 7.3512, 0.5328}}, {11027, {9.2448, 7.3512, 0.5256}}, {11028, {9.2448, 7.3512, 0.5328}}, {11029, {9.2448, 7.3512, 0.5328}}, {11030, {9.2448, 7.9776, 1.1592}}, {11031, {9.2448, 7.9776, 1.1592}}, {11032, {9.2448, 7.9776, 1.1592}}, {11033, {9.2448, 7.9776, 1.1592}}, {11034, {9.2448, 7.3152, 0.4968}}, {11035, {12.0024, 8.5896, 1.7712}}, {11036, {12.0024, 8.5968, 1.7712}}, {11037, {3.3984, 4.7304, -2.0880}}, {11038, {3.3984, 4.7304, -2.0880}}, {11039, {10.1592, 8.1504, 0.4104}}, {11040, {10.1592, 8.1504, 0.4104}}, {11041, {9.5976, 8.1504, 1.3320}}, {11042, {9.5976, 8.1504, 1.3320}}, {11043, {9.6912, 7.5240, 0.7056}}, {11044, {12.0024, 9.1800, 2.3544}}, {11045, {5.5440, 6.0552, -0.7632}}, {11046, {5.5440, 6.0552, -0.7632}}, {11047, {4.3272, 6.0552, -0.7632}}, {11048, {5.5440, 6.0552, -0.7632}}, {11049, {4.3272, 5.4216, -1.3968}}, {11050, {3.3984, 5.4216, -1.3968}}, {11051, {4.3272, 5.4216, -1.3968}}, {11052, {10.2528, 6.6024, -0.2160}}, {11053, {10.2528, 6.6024, -0.2160}}, {11054, {7.5456, 8.3088, 1.4832}}, {11055, {7.5456, 8.3088, 1.4832}}, {11056, {12.0024, 6.5520, -0.2736}}, {11057, {12.0024, 9.3744, 2.5560}}, {11058, {17.6256, 7.6536, 0.8280}}, {11059, {17.6256, 5.4504, -1.3824}}, {11060, {12.0024, 6.5520, -0.2664}}, {11061, {12.0024, 6.5520, -0.2664}}, {11062, {12.0024, 6.9264, 0.1080}}, {11063, {12.0024, 6.5520, -0.2664}}, {11064, {12.0024, 6.5520, -0.2664}}, {11065, {12.0024, 6.5520, -0.2664}}, {11066, {12.0024, 6.5520, -0.2664}}, {11067, {12.0024, 6.5520, -0.2664}}, {11068, {12.0024, 6.5520, -0.2664}}, {11069, {13.1688, 6.5520, -0.2664}}, {11070, {12.0024, 6.5520, -0.2664}}, {11071, {12.0024, 6.5448, -0.2736}}, {11072, {12.0024, 6.6960, -0.2664}}, {11073, {12.0024, 6.5520, -0.2664}}, {11074, {12.0024, 6.5520, 1.7208}}, {11075, {12.0024, 6.8832, 0.0576}}, {11076, {12.0024, 6.8184, -0.0000}}, {11077, {11.9088, 7.7400, 0.9216}}, {11078, {11.9088, 7.7400, 0.9216}}, {11079, {12.0024, 6.5520, -0.2664}}, {11080, {12.0024, 6.5520, 1.7208}}, {11081, {12.0024, 6.5520, -0.2664}}, {11082, {12.0024, 6.5520, 1.7208}}, {11083, {12.0024, 6.5520, -0.2664}}, {11084, {12.0024, 6.5520, -0.2664}}, {11085, {9.8856, 8.6760, 0.0072}}, {11086, {6.3288, 7.3296, -0.0000}}, {11087, {6.3288, 7.3296, -0.0000}}, {11088, {7.0776, 6.8832, -0.5976}}, {11089, {5.3208, 6.0480, -1.2744}}, {11090, {5.3208, 6.0480, -1.2744}}, {11091, {9.6336, 7.9200, 1.1016}}, {11092, {9.6336, 7.9200, 1.1016}}, {11093, {12.0024, 8.8272, 2.0016}}, {11094, {12.0024, 7.9992, 1.2024}}, {11095, {12.0024, 8.4240, 1.6272}}, {11096, {12.0024, 8.4240, 1.6272}}, {11097, {12.0024, 8.4240, 1.6272}}, {11098, {8.9064, 8.2512, 1.5768}}, {11099, {9.0144, 8.2512, 1.8648}}, {11100, {9.7056, 8.6760, 1.7640}}, {11101, {9.7056, 8.6760, 1.7640}}, {11102, {8.3448, 8.0352, 0.7848}}, {11103, {8.3448, 4.9104, 0.7848}}, {11104, {10.4328, 6.5088, -2.1672}}, {11105, {6.0912, 8.6760, -0.0000}}, {11106, {10.4328, 6.5088, -2.1672}}, {11107, {6.0912, 8.6760, -0.0000}}, {11108, {10.4328, 6.5088, -2.1672}}, {11109, {10.4328, 8.6760, -0.0000}}, {11110, {8.2008, 7.4016, -0.9576}}, {11111, {8.2008, 7.4016, -0.9576}}, {11112, {8.2008, 7.4016, -0.9576}}, {11113, {8.2008, 7.4016, -0.9576}}, {11114, {10.4328, 6.5088, -2.1672}}, {11115, {6.0912, 8.6760, -0.0000}}, {11116, {10.4328, 6.5088, -2.1672}}, {11117, {6.0912, 8.6760, 0.0072}}, {11118, {10.4328, 8.6760, -0.0000}}, {11119, {10.4328, 8.6760, -0.0000}}, {11120, {10.4328, 6.5088, -2.1672}}, {11121, {6.0912, 8.6760, -0.0000}}, {11122, {10.4328, 6.5088, -2.1672}}, {11123, {6.0912, 8.6760, -0.0000}}, {11126, {9.5616, 8.6760, -0.0000}}, {11127, {9.5616, 8.6760, -0.0000}}, {11128, {9.5616, 8.6760, -0.0000}}, {11129, {9.5616, 8.6760, -0.0000}}, {11130, {10.4328, 6.5088, -2.1672}}, {11131, {6.0912, 8.6760, 0.0072}}, {11132, {10.4328, 6.5088, -2.1672}}, {11133, {6.0912, 8.6760, 0.0072}}, {11134, {10.4328, 8.6760, -0.0000}}, {11135, {10.4328, 8.6760, -0.0000}}, {11136, {10.4328, 8.6760, -0.0000}}, {11137, {10.4328, 8.6760, -0.0000}}, {11138, {10.4328, 8.6760, -0.0000}}, {11139, {10.4328, 8.6760, -0.0000}}, {11140, {10.4328, 8.6760, -0.0000}}, {11141, {10.4328, 8.6760, -0.0000}}, {11142, {10.4328, 8.6760, -0.0000}}, {11143, {10.4256, 8.6760, -0.0000}}, {11144, {10.4400, 8.6760, -0.0000}}, {11145, {10.6848, 8.6760, -0.2448}}, {11146, {10.4400, 8.6760, -0.0000}}, {11147, {10.6848, 8.4312, -0.0000}}, {11148, {10.4328, 8.6760, -0.0000}}, {11149, {10.4328, 8.6760, -0.0000}}, {11150, {10.4328, 8.6760, -0.0000}}, {11151, {10.4328, 8.6760, -0.0000}}, {11152, {11.5128, 8.6760, -2.1672}}, {11153, {11.5128, 8.6760, -2.1672}}, {11154, {10.4328, 8.6760, -2.1672}}, {11155, {10.4256, 8.6760, -2.1672}}, {11156, {12.3264, 7.9200, 0.6192}}, {11157, {12.0024, 6.7248, -0.1008}}, {11160, {9.2664, 8.6760, -0.0000}}, {11161, {10.4328, 8.6760, -1.1592}}, {11162, {9.2664, 8.6760, -0.0000}}, {11163, {10.4328, 7.5168, -0.0000}}, {11164, {9.2664, 8.6760, -0.0000}}, {11165, {10.4328, 8.6760, -1.1592}}, {11166, {9.2664, 8.6760, -0.0000}}, {11167, {10.4328, 7.5168, -0.0000}}, {11168, {10.4328, 8.6760, -2.1672}}, {11169, {10.4328, 8.6760, -2.1672}}, {11170, {10.4328, 6.5088, -0.0000}}, {11171, {10.4328, 6.5088, -0.0000}}, {11172, {8.2584, 8.6760, -0.0000}}, {11173, {8.2584, 8.6760, -0.0000}}, {11174, {8.2584, 8.6760, -0.0000}}, {11175, {8.2584, 8.6760, -0.0000}}, {11176, {10.4328, 7.5240, -1.9656}}, {11177, {10.4328, 7.5240, -1.9656}}, {11178, {10.4328, 6.7104, -1.1520}}, {11179, {10.4328, 6.7104, -1.1520}}, {11180, {7.3152, 8.6760, -0.0000}}, {11181, {7.3152, 8.6760, -0.0000}}, {11182, {7.3152, 8.6688, 0.0072}}, {11183, {7.3152, 8.6688, 0.0072}}, {11184, {10.4328, 9.4104, 1.1448}}, {11185, {10.4328, 9.4104, 1.1448}}, {11186, {10.4328, 7.9632, 2.5920}}, {11187, {10.4328, 7.9632, 2.5920}}, {11188, {12.3120, 7.7472, 0.9288}}, {11189, {12.3120, 7.7472, 0.9288}}, {11190, {12.3120, 7.7472, 0.9288}}, {11191, {12.3120, 7.7472, 0.9288}}, {11192, {9.1728, 8.6760, -0.0000}}, {11193, {12.6792, 8.6760, -0.0000}}, {11197, {10.6848, 8.6760, -0.0000}}, {11198, {10.6848, 8.6760, -0.0000}}, {11199, {10.6848, 8.6760, -0.0000}}, {11200, {10.6848, 7.4016, -1.2672}}, {11201, {10.6848, 8.6760, -0.0000}}, {11202, {10.6848, 7.8480, -0.0000}}, {11203, {10.6848, 8.3448, -0.3240}}, {11204, {10.6848, 8.6760, -0.0000}}, {11205, {9.2664, 8.6760, -2.1672}}, {11206, {9.2664, 6.5088, -0.0000}}, {11207, {8.2584, 8.0928, -0.5760}}, {11208, {8.2584, 8.0928, -0.5760}}, {11210, {10.6848, 8.6760, -4.3344}}, {11211, {10.6848, 4.3416, -0.0000}}, {11212, {10.4328, 8.6760, -0.0000}}, {11213, {7.9920, 7.5240, -1.2816}}, {11214, {10.4328, 8.6760, -0.0000}}, {11215, {8.2944, 7.6104, -1.0584}}, {11216, {10.6632, 8.6760, -0.0000}}, {11217, {10.6848, 9.0936, 0.4176}}, {11244, {10.5120, 6.0120, -1.3752}}, {11245, {5.5872, 8.4672, 1.0872}}, {11246, {10.5120, 6.0120, -1.3752}}, {11247, {5.5872, 8.4672, 1.0872}}, {11776, {4.5360, 9.1728, -5.9472}}, {11777, {4.5360, 9.1728, -5.9472}}, {11778, {3.6216, 9.1728, -5.4576}}, {11779, {3.6216, 9.1728, -5.4576}}, {11780, {4.3632, 9.1728, -5.4576}}, {11781, {4.3632, 9.1728, -5.4576}}, {11782, {7.0992, 9.1728, -5.9472}}, {11783, {7.0992, 9.1728, -5.9472}}, {11784, {4.9320, 9.1728, -5.2416}}, {11785, {4.5936, 9.1728, -5.2416}}, {11786, {4.5936, 9.1728, -5.2416}}, {11787, {4.7664, 9.1728, -5.7168}}, {11788, {4.6080, 9.1152, -5.8104}}, {11789, {4.6080, 9.1152, -5.8104}}, {11790, {8.1576, 9.4104, 2.5920}}, {11791, {0.0000, -1.3104, 1.9656}}, {11792, {0.0000, -1.3104, 2.5920}}, {11793, {0.0000, -1.3104, 2.5920}}, {11794, {3.5568, 1.4832, 2.4192}}, {11795, {6.9480, 9.1368, 2.3184}}, {11796, {8.4384, 7.1280, -0.0000}}, {11797, {8.4456, 7.1712, -0.0000}}, {11798, {6.7464, 6.3216, 0.0072}}, {11799, {4.5792, 5.4504, -0.8496}}, {11800, {5.3280, 6.1200, 2.3400}}, {11801, {7.8048, 8.4312, 1.6560}}, {11802, {5.0256, 6.1920, -3.1680}}, {11803, {6.1992, 6.4800, -2.2248}}, {11804, {4.6080, 0.9144, 2.3904}}, {11805, {4.6080, 0.9144, 2.3904}}, {11806, {6.2064, 6.1920, -2.2248}}, {11807, {6.2064, 4.1976, -0.2304}}, {11808, {3.9456, 9.4032, 1.3608}}, {11809, {3.9384, 9.4032, 1.3608}}, {11810, {3.3480, 9.4104, -4.0248}}, {11811, {3.3408, 9.4104, -4.0248}}, {11812, {3.3480, 4.0248, 1.3608}}, {11813, {3.3408, 4.0248, 1.3608}}, {11814, {7.7688, 7.1064, -0.9360}}, {11815, {7.7688, 7.1064, -0.9360}}, {11816, {6.3360, 8.8704, 2.0520}}, {11817, {6.3360, 8.8704, 2.0520}}, {11818, {5.9976, 5.0184, -0.0000}}, {11819, {5.9976, 5.0184, -0.0000}}, {11820, {6.9408, 5.0184, -0.0000}}, {11821, {5.9904, 5.0184, -0.0000}}, {11822, {5.3280, 8.4600, -0.0000}}, {11823, {2.9592, 9.2664, -4.8888}}, {11824, {4.3272, 5.3352, -1.4832}}, {11825, {3.0024, 3.3768, -2.1024}}, {11826, {3.0024, 3.5856, -0.0000}}, {11827, {3.0024, 3.1464, -1.8720}}, {11828, {3.0024, 3.1464, 0.4464}}, {11829, {3.1968, 7.3368, -0.0000}}, {11830, {4.1472, 8.4312, 2.4192}}, {11831, {4.1544, 8.4312, 2.4192}}, {11832, {5.7528, 8.4240, 2.4264}}, {11833, {5.6520, 7.9704, -0.8928}}, {11834, {24.0048, 3.6504, -3.1680}}, {11835, {36.0000, 3.6504, -3.1680}}, {11836, {3.8664, 2.5056, 0.0936}}, {11837, {3.1896, 9.3168, 2.4984}}, {11838, {5.0040, 9.2952, 2.4480}}, {11839, {9.8064, 9.4032, 2.5992}}, {11840, {3.9960, 4.2480, -2.0016}}, {11841, {3.1392, 1.1952, 2.1816}}, {11842, {5.6520, 1.1952, 2.1816}}, {11843, {11.9952, 6.1344, -3.1608}}, {11844, {2.9664, 9.0216, 1.1376}}, {12296, {4.6584, 9.4104, 2.5920}}, {12297, {4.6584, 9.4104, 2.5920}}, {12298, {6.4728, 9.4104, 2.5920}}, {12299, {6.4728, 9.4104, 2.5920}}, {12300, {3.9960, 8.8704, 2.0520}}, {12301, {3.9960, 8.8776, 2.0520}}, {12302, {5.0400, 8.8704, 2.0520}}, {12303, {5.0400, 8.8704, 2.0520}}, {12304, {4.6080, 8.8704, 2.0520}}, {12305, {4.6080, 8.8704, 2.0520}}, {12308, {4.2048, 8.8776, 2.0520}}, {12309, {4.2048, 8.8776, 2.0520}}, {12310, {5.5728, 8.8704, 2.0520}}, {12311, {5.5728, 8.8704, 2.0520}}, {12312, {4.4424, 8.8776, 2.0520}}, {12313, {4.4424, 8.8776, 2.0520}}, {12314, {3.9960, 8.8704, 2.0520}}, {12315, {3.9960, 8.8704, 2.0520}}, {12316, {9.3240, 4.7376, -2.0808}}, {12317, {5.0976, 9.0144, -4.2984}}, {12318, {5.0976, 9.0144, -4.2984}}, {12319, {5.0976, 2.1528, 2.5632}}, {12336, {12.0024, 4.4928, -2.3760}}, {12349, {12.0024, 8.3592, 1.5408}}, {12398, {11.2464, 8.2008, 0.3240}}, {12951, {12.0024, 8.9424, 2.1240}}, {12953, {12.0024, 8.9424, 2.1240}}, {19904, {12.0024, 8.8272, 2.0088}}, {19905, {12.0024, 8.8272, 2.0088}}, {19906, {12.0024, 8.8272, 2.0088}}, {19907, {12.0024, 8.8272, 2.0088}}, {19908, {12.0024, 8.8272, 2.0088}}, {19909, {12.0024, 8.8272, 2.0088}}, {19910, {12.0024, 8.8272, 2.0088}}, {19911, {12.0024, 8.8272, 2.0088}}, {19912, {12.0024, 8.8272, 2.0088}}, {19913, {12.0024, 8.8272, 2.0088}}, {19914, {12.0024, 8.8272, 2.0088}}, {19915, {12.0024, 8.8272, 2.0088}}, {19916, {12.0024, 8.8272, 2.0088}}, {19917, {12.0024, 8.8272, 2.0088}}, {19918, {12.0024, 8.8272, 2.0088}}, {19919, {12.0024, 8.8272, 2.0088}}, {19920, {12.0024, 8.8272, 2.0088}}, {19921, {12.0024, 8.8272, 2.0088}}, {19922, {12.0024, 8.8272, 2.0088}}, {19923, {12.0024, 8.8272, 2.0088}}, {19924, {12.0024, 8.8272, 2.0088}}, {19925, {12.0024, 8.8272, 2.0088}}, {19926, {12.0024, 8.8272, 2.0088}}, {19927, {12.0024, 8.8272, 2.0088}}, {19928, {12.0024, 8.8272, 2.0088}}, {19929, {12.0024, 8.8272, 2.0088}}, {19930, {12.0024, 8.8272, 2.0088}}, {19931, {12.0024, 8.8272, 2.0088}}, {19932, {12.0024, 8.8272, 2.0088}}, {19933, {12.0024, 8.8272, 2.0088}}, {19934, {12.0024, 8.8272, 2.0088}}, {19935, {12.0024, 8.8272, 2.0088}}, {19936, {12.0024, 8.8272, 2.0088}}, {19937, {12.0024, 8.8272, 2.0088}}, {19938, {12.0024, 8.8272, 2.0088}}, {19939, {12.0024, 8.8272, 2.0088}}, {19940, {12.0024, 8.8272, 2.0088}}, {19941, {12.0024, 8.8272, 2.0088}}, {19942, {12.0024, 8.8272, 2.0088}}, {19943, {12.0024, 8.8272, 2.0088}}, {19944, {12.0024, 8.8272, 2.0088}}, {19945, {12.0024, 8.8272, 2.0088}}, {19946, {12.0024, 8.8272, 2.0088}}, {19947, {12.0024, 8.8272, 2.0088}}, {19948, {12.0024, 8.8272, 2.0088}}, {19949, {12.0024, 8.8272, 2.0088}}, {19950, {12.0024, 8.8272, 2.0088}}, {19951, {12.0024, 8.8272, 2.0088}}, {19952, {12.0024, 8.8272, 2.0088}}, {19953, {12.0024, 8.8272, 2.0088}}, {19954, {12.0024, 8.8272, 2.0088}}, {19955, {12.0024, 8.8272, 2.0088}}, {19956, {12.0024, 8.8272, 2.0088}}, {19957, {12.0024, 8.8272, 2.0088}}, {19958, {12.0024, 8.8272, 2.0088}}, {19959, {12.0024, 8.8272, 2.0088}}, {19960, {12.0024, 8.8272, 2.0088}}, {19961, {12.0024, 8.8272, 2.0088}}, {19962, {12.0024, 8.8272, 2.0088}}, {19963, {12.0024, 8.8272, 2.0088}}, {19964, {12.0024, 8.8272, 2.0088}}, {19965, {12.0024, 8.8272, 2.0088}}, {19966, {12.0024, 8.8272, 2.0088}}, {19967, {12.0024, 8.8272, 2.0088}}, {20013, {10.4904, 8.6112, 1.7928}} }; vdiffr/src/algo-it.h0000644000176200001440000000153014057630265014035 0ustar liggesusers#pragma once template InputIterator find_if_it(InputIterator it, InputIterator end, Predicate pred) { while (it != end && !pred(it)) ++it; return it; } template OutputIterator remove_copy_if_it(InputIterator it, InputIterator end, OutputIterator result, Predicate pred) { while (it != end) { if (!pred(it)) { *result = *it; ++result; } ++it; } return result; } template ForwardIterator remove_if_it(ForwardIterator it, ForwardIterator end, Predicate pred) { it = find_if_it(it, end, pred); ForwardIterator next = it; return it == end ? it : remove_copy_if_it(++next, end, it, pred); } vdiffr/src/Makevars.win0000644000176200001440000000044714705672254014632 0ustar liggesusersCXX_STD = CXX11 VERSION = 2.7.4 RWINLIB = ../windows/harfbuzz-${VERSION} PKG_CPPFLAGS = -I${RWINLIB}/include PKG_LIBS = -L${RWINLIB}/lib${R_ARCH}${CRT} -lpng -lz all: clean winlibs winlibs: "${R_HOME}/bin${R_ARCH_BIN}/Rscript.exe" "../tools/winlibs.R" ${VERSION} clean: rm -f $(OBJECTS) vdiffr/src/SvgStream.h0000644000176200001440000001241514174735241014420 0ustar liggesusers#pragma once #include #include #include #include #include #include #include #include #include #include "utils.h" namespace svglite { namespace internal { template void write_double(T& stream, double data) { std::streamsize prec = stream.precision(); uint8_t newprec = std::fabs(data) >= 1 || data == 0. ? prec : std::ceil(-std::log10(std::fabs(data))) + 1; stream << std::setprecision(newprec) << data << std::setprecision(prec); } }} // namespace svglite::internal class SvgStream { std::unordered_set clip_ids; bool clipping = false; public: bool has_clip_id(std::string id) { return clip_ids.find(id) != clip_ids.end(); } void add_clip_id(std::string id) { clipping = true; clip_ids.insert(id); } void clear_clip_ids() { clipping = false; clip_ids.clear(); } bool is_clipping() {return clipping;} virtual ~SvgStream() {}; virtual void write(int data) = 0; virtual void write(double data) = 0; virtual void write(const char* data) = 0; virtual void write(const std::string& data) = 0; virtual void write(char data) = 0; virtual bool is_file_stream() = 0; void put(char data) { write(data); } virtual void flush() = 0; virtual void finish(bool close) = 0; }; template SvgStream& operator<<(SvgStream& object, const T& data) { object.write(data); return object; } template <> inline SvgStream& operator<<(SvgStream& object, const double& data) { // Make sure negative zeros are converted to positive zero for // reproducibility of SVGs object.write(dbl_format(data)); return object; } class SvgStreamFile : public SvgStream { std::ofstream stream_; std::string file = ""; bool always_valid = false; public: SvgStreamFile(const std::string& path, bool _always_valid = false) : always_valid(_always_valid) { std::string svgz_ext = path.size() > 5 ? path.substr(path.size() - 5) : ""; file = R_ExpandFileName(path.c_str()); stream_.open(file.c_str()); if (stream_.fail()) cpp11::stop("cannot open stream %s", path.c_str()); stream_ << std::fixed << std::setprecision(2); } SvgStreamFile(const std::string& path, int pageno, bool _always_valid = false) : always_valid(_always_valid) { std::string svgz_ext = path.size() > 5 ? path.substr(path.size() - 5) : ""; char buf[PATH_MAX+1]; snprintf(buf, PATH_MAX, path.c_str(), pageno); buf[PATH_MAX] = '\0'; file = R_ExpandFileName(buf); stream_.open(file.c_str()); if (stream_.fail()) cpp11::stop("cannot open stream %s", buf); stream_ << std::fixed << std::setprecision(2); } void write(int data) { stream_ << data; } void write(double data) { svglite::internal::write_double(stream_, data); } void write(const char* data) { stream_ << data; } void write(char data) { stream_ << data; } void write(const std::string& data) { stream_ << data; } bool is_file_stream() {return true; } // Adding a final newline here creates problems on Windows when // seeking back to original position. So we only write the newline // in finish() void flush() { if (!always_valid) { return; } stream_ << "\n"; #ifdef _WIN32 stream_.seekp(-12, std::ios_base::cur); #else stream_.seekp(-11, std::ios_base::cur); #endif } void finish(bool close) { if (is_clipping()) { stream_ << "\n"; } stream_ << "\n"; stream_.flush(); clear_clip_ids(); } ~SvgStreamFile() { stream_.close(); } }; class SvgStreamString : public SvgStream { std::stringstream stream_; cpp11::environment env_; public: SvgStreamString(cpp11::environment env): env_(env) { stream_ << std::fixed << std::setprecision(2); env_["is_closed"] = false; } void write(int data) { stream_ << data; } void write(double data) { svglite::internal::write_double(stream_, data); } void write(const char* data) { stream_ << data; } void write(char data) { stream_ << data; } void write(const std::string& data) { stream_ << data; } bool is_file_stream() {return false; } void flush() { } void finish(bool close) { // When device is closed, stream_ will be destroyed, so we can no longer // get the svg string from stream_. In this case, we save the final string // to the environment env, so that R can read from env$svg_string even // after device is closed. env_["is_closed"] = close; stream_.flush(); std::string svgstr = stream_.str(); // If the current svg is empty, we also make the string empty // Otherwise append "" to make it a valid SVG if(!svgstr.empty()) { if (is_clipping()) { svgstr.append("\n"); } svgstr.append(""); } if (env_.exists("svg_string")) { cpp11::writable::strings str(env_["svg_string"]); str.push_back(svgstr.c_str()); env_["svg_string"] = str; } else { env_["svg_string"] = svgstr; } // clear the stream stream_.str(std::string()); stream_.clear(); clear_clip_ids(); } std::stringstream* string_src() { return &stream_; } }; vdiffr/src/vdiffr_types.h0000644000176200001440000000002314057630265015201 0ustar liggesusers#include vdiffr/src/compare.cpp0000644000176200001440000000234214213645275014465 0ustar liggesusers#include #include #include #include #include #include "algo-it.h" int compare_throw() { Rf_error("vdiffr error: unable to read svg files"); return 0; } struct is_cr { template bool operator()(InputIterator it) { return *it == 0x0D && *(it + 1) == 0x0A; } }; [[cpp11::register]] bool compare_files(std::string expected, std::string test) { std::ifstream file1(expected.c_str(), std::ifstream::ate | std::ifstream::binary); std::ifstream file2(test.c_str(), std::ifstream::ate | std::ifstream::binary); if (!file1 || !file2) compare_throw(); std::streamsize size1 = file1.tellg(); std::streamsize size2 = file2.tellg(); file1.seekg(0, std::ios::beg); file2.seekg(0, std::ios::beg); std::vector buffer1(size1); std::vector buffer2(size2); if (!file1.read(buffer1.data(), size1) || !file2.read(buffer2.data(), size2)) compare_throw(); // Remove carriage returns from SVGs generated on Windows buffer1.erase(remove_if_it(buffer1.begin(), buffer1.end() - 1, is_cr()), buffer1.end()); buffer2.erase(remove_if_it(buffer2.begin(), buffer2.end() - 1, is_cr()), buffer2.end()); return buffer1 == buffer2; } vdiffr/src/Makevars.ucrt0000644000176200001440000000002514705672254015002 0ustar liggesusersPKG_LIBS = -lpng -lz vdiffr/src/utils.h0000644000176200001440000000714314174735241013647 0ustar liggesusers#pragma once #include #include #include #include inline static double dbl_format(double x) { if (std::abs(x) < std::numeric_limits::epsilon()) return 0.00; else return x; } inline bool iequals(const std::string& a, const std::string& b) { unsigned int sz = a.size(); if (b.size() != sz) { return false; } for (unsigned int i = 0; i < sz; ++i) { if (tolower(a[i]) != tolower(b[i])) { return false; } } return true; } /* Basic UTF-8 manipulation routines by Jeff Bezanson placed in the public domain Fall 2005 This code is designed to provide the utilities you need to manipulate UTF-8 as an internal string encoding. These functions do not perform the error checking normally needed when handling UTF-8 data, so if you happen to be from the Unicode Consortium you will want to flay me alive. I do this because error checking can be performed at the boundaries (I/O), with these routines reserved for higher performance on data known to be valid. Source: https://www.cprogramming.com/tutorial/utf8.c Modified 2019 by Thomas Lin Pedersen to work with const char* */ static const uint32_t offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, 0x03C82080UL, 0xFA082080UL, 0x82082080UL }; static const char trailingBytesForUTF8[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 }; /* conversions without error checking only works for valid UTF-8, i.e. no 5- or 6-byte sequences srcsz = source size in bytes, or -1 if 0-terminated sz = dest size in # of wide characters returns # characters converted dest will always be L'\0'-terminated, even if there isn't enough room for all the characters. if sz = srcsz+1 (i.e. 4*srcsz+4 bytes), there will always be enough space. */ static int u8_toucs(uint32_t *dest, int sz, const char *src, int srcsz) { uint32_t ch; const char *src_end = src + srcsz; int nb; int i=0; while (i < sz-1) { nb = trailingBytesForUTF8[(unsigned char)*src]; if (srcsz == -1) { if (*src == 0) goto done_toucs; } else { if (src + nb >= src_end) goto done_toucs; } ch = 0; switch (nb) { /* these fall through deliberately */ case 5: ch += (unsigned char)*src++; ch <<= 6; case 4: ch += (unsigned char)*src++; ch <<= 6; case 3: ch += (unsigned char)*src++; ch <<= 6; case 2: ch += (unsigned char)*src++; ch <<= 6; case 1: ch += (unsigned char)*src++; ch <<= 6; case 0: ch += (unsigned char)*src++; } ch -= offsetsFromUTF8[nb]; dest[i++] = ch; } done_toucs: dest[i] = 0; return i; } /* End of Basic UTF-8 manipulation routines by Jeff Bezanson */ class UTF_UCS { std::vector buffer; public: UTF_UCS() { // Allocate space in buffer buffer.resize(1024); } ~UTF_UCS() { } uint32_t * convert(const char * string, int &n_conv) { int n_bytes = strlen(string) + 1; unsigned int max_size = n_bytes * 4; if (buffer.size() < max_size) { buffer.resize(max_size); } n_conv = u8_toucs(buffer.data(), max_size, string, -1); return buffer.data(); } }; vdiffr/src/cpp11.cpp0000644000176200001440000000571214705673354013774 0ustar liggesusers// Generated by cpp11: do not edit by hand // clang-format off #include "vdiffr_types.h" #include "cpp11/declarations.hpp" #include // compare.cpp bool compare_files(std::string expected, std::string test); extern "C" SEXP _vdiffr_compare_files(SEXP expected, SEXP test) { BEGIN_CPP11 return cpp11::as_sexp(compare_files(cpp11::as_cpp>(expected), cpp11::as_cpp>(test))); END_CPP11 } // devSVG.cpp bool svglite_(std::string file, std::string bg, double width, double height, double pointsize, bool standalone, bool always_valid); extern "C" SEXP _vdiffr_svglite_(SEXP file, SEXP bg, SEXP width, SEXP height, SEXP pointsize, SEXP standalone, SEXP always_valid) { BEGIN_CPP11 return cpp11::as_sexp(svglite_(cpp11::as_cpp>(file), cpp11::as_cpp>(bg), cpp11::as_cpp>(width), cpp11::as_cpp>(height), cpp11::as_cpp>(pointsize), cpp11::as_cpp>(standalone), cpp11::as_cpp>(always_valid))); END_CPP11 } // devSVG.cpp cpp11::external_pointer svgstring_(cpp11::environment env, std::string bg, double width, double height, double pointsize, bool standalone); extern "C" SEXP _vdiffr_svgstring_(SEXP env, SEXP bg, SEXP width, SEXP height, SEXP pointsize, SEXP standalone) { BEGIN_CPP11 return cpp11::as_sexp(svgstring_(cpp11::as_cpp>(env), cpp11::as_cpp>(bg), cpp11::as_cpp>(width), cpp11::as_cpp>(height), cpp11::as_cpp>(pointsize), cpp11::as_cpp>(standalone))); END_CPP11 } // devSVG.cpp std::string get_svg_content(cpp11::external_pointer p); extern "C" SEXP _vdiffr_get_svg_content(SEXP p) { BEGIN_CPP11 return cpp11::as_sexp(get_svg_content(cpp11::as_cpp>>(p))); END_CPP11 } // engine_version.cpp void set_engine_version(cpp11::strings version); extern "C" SEXP _vdiffr_set_engine_version(SEXP version) { BEGIN_CPP11 set_engine_version(cpp11::as_cpp>(version)); return R_NilValue; END_CPP11 } extern "C" { static const R_CallMethodDef CallEntries[] = { {"_vdiffr_compare_files", (DL_FUNC) &_vdiffr_compare_files, 2}, {"_vdiffr_get_svg_content", (DL_FUNC) &_vdiffr_get_svg_content, 1}, {"_vdiffr_set_engine_version", (DL_FUNC) &_vdiffr_set_engine_version, 1}, {"_vdiffr_svglite_", (DL_FUNC) &_vdiffr_svglite_, 7}, {"_vdiffr_svgstring_", (DL_FUNC) &_vdiffr_svgstring_, 6}, {NULL, NULL, 0} }; } extern "C" attribute_visible void R_init_vdiffr(DllInfo* dll){ R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); R_forceSymbols(dll, TRUE); } vdiffr/src/Makevars0000644000176200001440000000004614477263731014033 0ustar liggesusersCXX_STD = CXX11 PKG_LIBS = -lpng -lz vdiffr/src/engine_version.cpp0000644000176200001440000000043314057630265016047 0ustar liggesusers#include "engine_version.h" #include std::string ENGINE_VERSION = ""; std::string get_engine_version() { return ENGINE_VERSION; } [[cpp11::register]] void set_engine_version(cpp11::strings version) { ENGINE_VERSION = cpp11::as_cpp(version); } vdiffr/src/tinyformat.h0000644000176200001440000013640614057630265014710 0ustar liggesusers// tinyformat.h // Copyright (C) 2011, Chris Foster [chris42f (at) gmail (d0t) com] // // Boost Software License - Version 1.0 // // Permission is hereby granted, free of charge, to any person or organization // obtaining a copy of the software and accompanying documentation covered by // this license (the "Software") to use, reproduce, display, distribute, // execute, and transmit the Software, and to prepare derivative works of the // Software, and to permit third-parties to whom the Software is furnished to // do so, all subject to the following: // // The copyright notices in the Software and this entire statement, including // the above license grant, this restriction and the following disclaimer, // must be included in all copies of the Software, in whole or in part, and // all derivative works of the Software, unless such copies or derivative // works are solely in the form of machine-executable object code generated by // a source language processor. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. //------------------------------------------------------------------------------ // Tinyformat: A minimal type safe printf replacement // // tinyformat.h is a type safe printf replacement library in a single C++ // header file. Design goals include: // // * Type safety and extensibility for user defined types. // * C99 printf() compatibility, to the extent possible using std::ostream // * POSIX extension for positional arguments // * Simplicity and minimalism. A single header file to include and distribute // with your projects. // * Augment rather than replace the standard stream formatting mechanism // * C++98 support, with optional C++11 niceties // // // Main interface example usage // ---------------------------- // // To print a date to std::cout for American usage: // // std::string weekday = "Wednesday"; // const char* month = "July"; // size_t day = 27; // long hour = 14; // int min = 44; // // tfm::printf("%s, %s %d, %.2d:%.2d\n", weekday, month, day, hour, min); // // POSIX extension for positional arguments is available. // The ability to rearrange formatting arguments is an important feature // for localization because the word order may vary in different languages. // // Previous example for German usage. Arguments are reordered: // // tfm::printf("%1$s, %3$d. %2$s, %4$d:%5$.2d\n", weekday, month, day, hour, min); // // The strange types here emphasize the type safety of the interface; it is // possible to print a std::string using the "%s" conversion, and a // size_t using the "%d" conversion. A similar result could be achieved // using either of the tfm::format() functions. One prints on a user provided // stream: // // tfm::format(std::cerr, "%s, %s %d, %.2d:%.2d\n", // weekday, month, day, hour, min); // // The other returns a std::string: // // std::string date = tfm::format("%s, %s %d, %.2d:%.2d\n", // weekday, month, day, hour, min); // std::cout << date; // // These are the three primary interface functions. There is also a // convenience function printfln() which appends a newline to the usual result // of printf() for super simple logging. // // // User defined format functions // ----------------------------- // // Simulating variadic templates in C++98 is pretty painful since it requires // writing out the same function for each desired number of arguments. To make // this bearable tinyformat comes with a set of macros which are used // internally to generate the API, but which may also be used in user code. // // The three macros TINYFORMAT_ARGTYPES(n), TINYFORMAT_VARARGS(n) and // TINYFORMAT_PASSARGS(n) will generate a list of n argument types, // type/name pairs and argument names respectively when called with an integer // n between 1 and 16. We can use these to define a macro which generates the // desired user defined function with n arguments. To generate all 16 user // defined function bodies, use the macro TINYFORMAT_FOREACH_ARGNUM. For an // example, see the implementation of printf() at the end of the source file. // // Sometimes it's useful to be able to pass a list of format arguments through // to a non-template function. The FormatList class is provided as a way to do // this by storing the argument list in a type-opaque way. Continuing the // example from above, we construct a FormatList using makeFormatList(): // // FormatListRef formatList = tfm::makeFormatList(weekday, month, day, hour, min); // // The format list can now be passed into any non-template function and used // via a call to the vformat() function: // // tfm::vformat(std::cout, "%s, %s %d, %.2d:%.2d\n", formatList); // // // Additional API information // -------------------------- // // Error handling: Define TINYFORMAT_ERROR to customize the error handling for // format strings which are unsupported or have the wrong number of format // specifiers (calls assert() by default). // // User defined types: Uses operator<< for user defined types by default. // Overload formatValue() for more control. #ifndef TINYFORMAT_H_INCLUDED #define TINYFORMAT_H_INCLUDED namespace tinyformat {} //------------------------------------------------------------------------------ // Config section. Customize to your liking! // Namespace alias to encourage brevity namespace tfm = tinyformat; // Error handling; calls assert() by default. // #define TINYFORMAT_ERROR(reasonString) your_error_handler(reasonString) // Define for C++11 variadic templates which make the code shorter & more // general. If you don't define this, C++11 support is autodetected below. // #define TINYFORMAT_USE_VARIADIC_TEMPLATES //------------------------------------------------------------------------------ // Implementation details. #include #include #include #ifndef TINYFORMAT_ASSERT # include # define TINYFORMAT_ASSERT(cond) assert(cond) #endif #ifndef TINYFORMAT_ERROR # include # define TINYFORMAT_ERROR(reason) assert(0 && reason) #endif #if !defined(TINYFORMAT_USE_VARIADIC_TEMPLATES) && !defined(TINYFORMAT_NO_VARIADIC_TEMPLATES) # ifdef __GXX_EXPERIMENTAL_CXX0X__ # define TINYFORMAT_USE_VARIADIC_TEMPLATES # endif #endif #if defined(__GLIBCXX__) && __GLIBCXX__ < 20080201 // std::showpos is broken on old libstdc++ as provided with macOS. See // http://gcc.gnu.org/ml/libstdc++/2007-11/msg00075.html # define TINYFORMAT_OLD_LIBSTDCPLUSPLUS_WORKAROUND #endif #ifdef __APPLE__ // Workaround macOS linker warning: Xcode uses different default symbol // visibilities for static libs vs executables (see issue #25) # define TINYFORMAT_HIDDEN __attribute__((visibility("hidden"))) #else # define TINYFORMAT_HIDDEN #endif namespace tinyformat { //------------------------------------------------------------------------------ namespace detail { // Test whether type T1 is convertible to type T2 template struct is_convertible { private: // two types of different size struct fail { char dummy[2]; }; struct succeed { char dummy; }; // Try to convert a T1 to a T2 by plugging into tryConvert static fail tryConvert(...); static succeed tryConvert(const T2&); static const T1& makeT1(); public: # ifdef _MSC_VER // Disable spurious loss of precision warnings in tryConvert(makeT1()) # pragma warning(push) # pragma warning(disable:4244) # pragma warning(disable:4267) # endif // Standard trick: the (...) version of tryConvert will be chosen from // the overload set only if the version taking a T2 doesn't match. // Then we compare the sizes of the return types to check which // function matched. Very neat, in a disgusting kind of way :) static const bool value = sizeof(tryConvert(makeT1())) == sizeof(succeed); # ifdef _MSC_VER # pragma warning(pop) # endif }; // Detect when a type is not a wchar_t string template struct is_wchar { typedef int tinyformat_wchar_is_not_supported; }; template<> struct is_wchar {}; template<> struct is_wchar {}; template struct is_wchar {}; template struct is_wchar {}; // Format the value by casting to type fmtT. This default implementation // should never be called. template::value> struct formatValueAsType { static void invoke(std::ostream& /*out*/, const T& /*value*/) { TINYFORMAT_ASSERT(0); } }; // Specialized version for types that can actually be converted to fmtT, as // indicated by the "convertible" template parameter. template struct formatValueAsType { static void invoke(std::ostream& out, const T& value) { out << static_cast(value); } }; #ifdef TINYFORMAT_OLD_LIBSTDCPLUSPLUS_WORKAROUND template::value> struct formatZeroIntegerWorkaround { static bool invoke(std::ostream& /**/, const T& /**/) { return false; } }; template struct formatZeroIntegerWorkaround { static bool invoke(std::ostream& out, const T& value) { if (static_cast(value) == 0 && out.flags() & std::ios::showpos) { out << "+0"; return true; } return false; } }; #endif // TINYFORMAT_OLD_LIBSTDCPLUSPLUS_WORKAROUND // Convert an arbitrary type to integer. The version with convertible=false // throws an error. template::value> struct convertToInt { static int invoke(const T& /*value*/) { TINYFORMAT_ERROR("tinyformat: Cannot convert from argument type to " "integer for use as variable width or precision"); return 0; } }; // Specialization for convertToInt when conversion is possible template struct convertToInt { static int invoke(const T& value) { return static_cast(value); } }; // Format at most ntrunc characters to the given stream. template inline void formatTruncated(std::ostream& out, const T& value, int ntrunc) { std::ostringstream tmp; tmp << value; std::string result = tmp.str(); out.write(result.c_str(), (std::min)(ntrunc, static_cast(result.size()))); } #define TINYFORMAT_DEFINE_FORMAT_TRUNCATED_CSTR(type) \ inline void formatTruncated(std::ostream& out, type* value, int ntrunc) \ { \ std::streamsize len = 0; \ while (len < ntrunc && value[len] != 0) \ ++len; \ out.write(value, len); \ } // Overload for const char* and char*. Could overload for signed & unsigned // char too, but these are technically unneeded for printf compatibility. TINYFORMAT_DEFINE_FORMAT_TRUNCATED_CSTR(const char) TINYFORMAT_DEFINE_FORMAT_TRUNCATED_CSTR(char) #undef TINYFORMAT_DEFINE_FORMAT_TRUNCATED_CSTR } // namespace detail //------------------------------------------------------------------------------ // Variable formatting functions. May be overridden for user-defined types if // desired. /// Format a value into a stream, delegating to operator<< by default. /// /// Users may override this for their own types. When this function is called, /// the stream flags will have been modified according to the format string. /// The format specification is provided in the range [fmtBegin, fmtEnd). For /// truncating conversions, ntrunc is set to the desired maximum number of /// characters, for example "%.7s" calls formatValue with ntrunc = 7. /// /// By default, formatValue() uses the usual stream insertion operator /// operator<< to format the type T, with special cases for the %c and %p /// conversions. template inline void formatValue(std::ostream& out, const char* /*fmtBegin*/, const char* fmtEnd, int ntrunc, const T& value) { #ifndef TINYFORMAT_ALLOW_WCHAR_STRINGS // Since we don't support printing of wchar_t using "%ls", make it fail at // compile time in preference to printing as a void* at runtime. typedef typename detail::is_wchar::tinyformat_wchar_is_not_supported DummyType; (void) DummyType(); // avoid unused type warning with gcc-4.8 #endif // The mess here is to support the %c and %p conversions: if these // conversions are active we try to convert the type to a char or const // void* respectively and format that instead of the value itself. For the // %p conversion it's important to avoid dereferencing the pointer, which // could otherwise lead to a crash when printing a dangling (const char*). const bool canConvertToChar = detail::is_convertible::value; const bool canConvertToVoidPtr = detail::is_convertible::value; if (canConvertToChar && *(fmtEnd-1) == 'c') detail::formatValueAsType::invoke(out, value); else if (canConvertToVoidPtr && *(fmtEnd-1) == 'p') detail::formatValueAsType::invoke(out, value); #ifdef TINYFORMAT_OLD_LIBSTDCPLUSPLUS_WORKAROUND else if (detail::formatZeroIntegerWorkaround::invoke(out, value)) /**/; #endif else if (ntrunc >= 0) { // Take care not to overread C strings in truncating conversions like // "%.4s" where at most 4 characters may be read. detail::formatTruncated(out, value, ntrunc); } else out << value; } // Overloaded version for char types to support printing as an integer #define TINYFORMAT_DEFINE_FORMATVALUE_CHAR(charType) \ inline void formatValue(std::ostream& out, const char* /*fmtBegin*/, \ const char* fmtEnd, int /**/, charType value) \ { \ switch (*(fmtEnd-1)) { \ case 'u': case 'd': case 'i': case 'o': case 'X': case 'x': \ out << static_cast(value); break; \ default: \ out << value; break; \ } \ } // per 3.9.1: char, signed char and unsigned char are all distinct types TINYFORMAT_DEFINE_FORMATVALUE_CHAR(char) TINYFORMAT_DEFINE_FORMATVALUE_CHAR(signed char) TINYFORMAT_DEFINE_FORMATVALUE_CHAR(unsigned char) #undef TINYFORMAT_DEFINE_FORMATVALUE_CHAR //------------------------------------------------------------------------------ // Tools for emulating variadic templates in C++98. The basic idea here is // stolen from the boost preprocessor metaprogramming library and cut down to // be just general enough for what we need. #define TINYFORMAT_ARGTYPES(n) TINYFORMAT_ARGTYPES_ ## n #define TINYFORMAT_VARARGS(n) TINYFORMAT_VARARGS_ ## n #define TINYFORMAT_PASSARGS(n) TINYFORMAT_PASSARGS_ ## n #define TINYFORMAT_PASSARGS_TAIL(n) TINYFORMAT_PASSARGS_TAIL_ ## n // To keep it as transparent as possible, the macros below have been generated // using python via the excellent cog code generation script. This avoids // the need for a bunch of complex (but more general) preprocessor tricks as // used in boost.preprocessor. // // To rerun the code generation in place, use `cog -r tinyformat.h` // (see http://nedbatchelder.com/code/cog). Alternatively you can just create // extra versions by hand. /*[[[cog maxParams = 16 def makeCommaSepLists(lineTemplate, elemTemplate, startInd=1): for j in range(startInd,maxParams+1): list = ', '.join([elemTemplate % {'i':i} for i in range(startInd,j+1)]) cog.outl(lineTemplate % {'j':j, 'list':list}) makeCommaSepLists('#define TINYFORMAT_ARGTYPES_%(j)d %(list)s', 'class T%(i)d') cog.outl() makeCommaSepLists('#define TINYFORMAT_VARARGS_%(j)d %(list)s', 'const T%(i)d& v%(i)d') cog.outl() makeCommaSepLists('#define TINYFORMAT_PASSARGS_%(j)d %(list)s', 'v%(i)d') cog.outl() cog.outl('#define TINYFORMAT_PASSARGS_TAIL_1') makeCommaSepLists('#define TINYFORMAT_PASSARGS_TAIL_%(j)d , %(list)s', 'v%(i)d', startInd = 2) cog.outl() cog.outl('#define TINYFORMAT_FOREACH_ARGNUM(m) \\\n ' + ' '.join(['m(%d)' % (j,) for j in range(1,maxParams+1)])) ]]]*/ #define TINYFORMAT_ARGTYPES_1 class T1 #define TINYFORMAT_ARGTYPES_2 class T1, class T2 #define TINYFORMAT_ARGTYPES_3 class T1, class T2, class T3 #define TINYFORMAT_ARGTYPES_4 class T1, class T2, class T3, class T4 #define TINYFORMAT_ARGTYPES_5 class T1, class T2, class T3, class T4, class T5 #define TINYFORMAT_ARGTYPES_6 class T1, class T2, class T3, class T4, class T5, class T6 #define TINYFORMAT_ARGTYPES_7 class T1, class T2, class T3, class T4, class T5, class T6, class T7 #define TINYFORMAT_ARGTYPES_8 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8 #define TINYFORMAT_ARGTYPES_9 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9 #define TINYFORMAT_ARGTYPES_10 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10 #define TINYFORMAT_ARGTYPES_11 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11 #define TINYFORMAT_ARGTYPES_12 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12 #define TINYFORMAT_ARGTYPES_13 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13 #define TINYFORMAT_ARGTYPES_14 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14 #define TINYFORMAT_ARGTYPES_15 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class T15 #define TINYFORMAT_ARGTYPES_16 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class T15, class T16 #define TINYFORMAT_VARARGS_1 const T1& v1 #define TINYFORMAT_VARARGS_2 const T1& v1, const T2& v2 #define TINYFORMAT_VARARGS_3 const T1& v1, const T2& v2, const T3& v3 #define TINYFORMAT_VARARGS_4 const T1& v1, const T2& v2, const T3& v3, const T4& v4 #define TINYFORMAT_VARARGS_5 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5 #define TINYFORMAT_VARARGS_6 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6 #define TINYFORMAT_VARARGS_7 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7 #define TINYFORMAT_VARARGS_8 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8 #define TINYFORMAT_VARARGS_9 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9 #define TINYFORMAT_VARARGS_10 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10 #define TINYFORMAT_VARARGS_11 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11 #define TINYFORMAT_VARARGS_12 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11, const T12& v12 #define TINYFORMAT_VARARGS_13 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11, const T12& v12, const T13& v13 #define TINYFORMAT_VARARGS_14 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11, const T12& v12, const T13& v13, const T14& v14 #define TINYFORMAT_VARARGS_15 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11, const T12& v12, const T13& v13, const T14& v14, const T15& v15 #define TINYFORMAT_VARARGS_16 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11, const T12& v12, const T13& v13, const T14& v14, const T15& v15, const T16& v16 #define TINYFORMAT_PASSARGS_1 v1 #define TINYFORMAT_PASSARGS_2 v1, v2 #define TINYFORMAT_PASSARGS_3 v1, v2, v3 #define TINYFORMAT_PASSARGS_4 v1, v2, v3, v4 #define TINYFORMAT_PASSARGS_5 v1, v2, v3, v4, v5 #define TINYFORMAT_PASSARGS_6 v1, v2, v3, v4, v5, v6 #define TINYFORMAT_PASSARGS_7 v1, v2, v3, v4, v5, v6, v7 #define TINYFORMAT_PASSARGS_8 v1, v2, v3, v4, v5, v6, v7, v8 #define TINYFORMAT_PASSARGS_9 v1, v2, v3, v4, v5, v6, v7, v8, v9 #define TINYFORMAT_PASSARGS_10 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 #define TINYFORMAT_PASSARGS_11 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11 #define TINYFORMAT_PASSARGS_12 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12 #define TINYFORMAT_PASSARGS_13 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13 #define TINYFORMAT_PASSARGS_14 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14 #define TINYFORMAT_PASSARGS_15 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 #define TINYFORMAT_PASSARGS_16 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16 #define TINYFORMAT_PASSARGS_TAIL_1 #define TINYFORMAT_PASSARGS_TAIL_2 , v2 #define TINYFORMAT_PASSARGS_TAIL_3 , v2, v3 #define TINYFORMAT_PASSARGS_TAIL_4 , v2, v3, v4 #define TINYFORMAT_PASSARGS_TAIL_5 , v2, v3, v4, v5 #define TINYFORMAT_PASSARGS_TAIL_6 , v2, v3, v4, v5, v6 #define TINYFORMAT_PASSARGS_TAIL_7 , v2, v3, v4, v5, v6, v7 #define TINYFORMAT_PASSARGS_TAIL_8 , v2, v3, v4, v5, v6, v7, v8 #define TINYFORMAT_PASSARGS_TAIL_9 , v2, v3, v4, v5, v6, v7, v8, v9 #define TINYFORMAT_PASSARGS_TAIL_10 , v2, v3, v4, v5, v6, v7, v8, v9, v10 #define TINYFORMAT_PASSARGS_TAIL_11 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11 #define TINYFORMAT_PASSARGS_TAIL_12 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12 #define TINYFORMAT_PASSARGS_TAIL_13 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13 #define TINYFORMAT_PASSARGS_TAIL_14 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14 #define TINYFORMAT_PASSARGS_TAIL_15 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 #define TINYFORMAT_PASSARGS_TAIL_16 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16 #define TINYFORMAT_FOREACH_ARGNUM(m) \ m(1) m(2) m(3) m(4) m(5) m(6) m(7) m(8) m(9) m(10) m(11) m(12) m(13) m(14) m(15) m(16) //[[[end]]] namespace detail { // Type-opaque holder for an argument to format(), with associated actions on // the type held as explicit function pointers. This allows FormatArg's for // each argument to be allocated as a homogeneous array inside FormatList // whereas a naive implementation based on inheritance does not. class FormatArg { public: FormatArg() : m_value(NULL), m_formatImpl(NULL), m_toIntImpl(NULL) { } template FormatArg(const T& value) // C-style cast here allows us to also remove volatile; we put it // back in the *Impl functions before dereferencing to avoid UB. : m_value((const void*)(&value)), m_formatImpl(&formatImpl), m_toIntImpl(&toIntImpl) { } void format(std::ostream& out, const char* fmtBegin, const char* fmtEnd, int ntrunc) const { TINYFORMAT_ASSERT(m_value); TINYFORMAT_ASSERT(m_formatImpl); m_formatImpl(out, fmtBegin, fmtEnd, ntrunc, m_value); } int toInt() const { TINYFORMAT_ASSERT(m_value); TINYFORMAT_ASSERT(m_toIntImpl); return m_toIntImpl(m_value); } private: template TINYFORMAT_HIDDEN static void formatImpl(std::ostream& out, const char* fmtBegin, const char* fmtEnd, int ntrunc, const void* value) { formatValue(out, fmtBegin, fmtEnd, ntrunc, *static_cast(value)); } template TINYFORMAT_HIDDEN static int toIntImpl(const void* value) { return convertToInt::invoke(*static_cast(value)); } const void* m_value; void (*m_formatImpl)(std::ostream& out, const char* fmtBegin, const char* fmtEnd, int ntrunc, const void* value); int (*m_toIntImpl)(const void* value); }; // Parse and return an integer from the string c, as atoi() // On return, c is set to one past the end of the integer. inline int parseIntAndAdvance(const char*& c) { int i = 0; for (;*c >= '0' && *c <= '9'; ++c) i = 10*i + (*c - '0'); return i; } // Parse width or precision `n` from format string pointer `c`, and advance it // to the next character. If an indirection is requested with `*`, the argument // is read from `args[argIndex]` and `argIndex` is incremented (or read // from `args[n]` in positional mode). Returns true if one or more // characters were read. inline bool parseWidthOrPrecision(int& n, const char*& c, bool positionalMode, const detail::FormatArg* args, int& argIndex, int numArgs) { if (*c >= '0' && *c <= '9') { n = parseIntAndAdvance(c); } else if (*c == '*') { ++c; n = 0; if (positionalMode) { int pos = parseIntAndAdvance(c) - 1; if (*c != '$') TINYFORMAT_ERROR("tinyformat: Non-positional argument used after a positional one"); if (pos >= 0 && pos < numArgs) n = args[pos].toInt(); else TINYFORMAT_ERROR("tinyformat: Positional argument out of range"); ++c; } else { if (argIndex < numArgs) n = args[argIndex++].toInt(); else TINYFORMAT_ERROR("tinyformat: Not enough arguments to read variable width or precision"); } } else { return false; } return true; } // Print literal part of format string and return next format spec position. // // Skips over any occurrences of '%%', printing a literal '%' to the output. // The position of the first % character of the next nontrivial format spec is // returned, or the end of string. inline const char* printFormatStringLiteral(std::ostream& out, const char* fmt) { const char* c = fmt; for (;; ++c) { if (*c == '\0') { out.write(fmt, c - fmt); return c; } else if (*c == '%') { out.write(fmt, c - fmt); if (*(c+1) != '%') return c; // for "%%", tack trailing % onto next literal section. fmt = ++c; } } } // Parse a format string and set the stream state accordingly. // // The format mini-language recognized here is meant to be the one from C99, // with the form "%[flags][width][.precision][length]type" with POSIX // positional arguments extension. // // POSIX positional arguments extension: // Conversions can be applied to the nth argument after the format in // the argument list, rather than to the next unused argument. In this case, // the conversion specifier character % (see below) is replaced by the sequence // "%n$", where n is a decimal integer in the range [1,{NL_ARGMAX}], // giving the position of the argument in the argument list. This feature // provides for the definition of format strings that select arguments // in an order appropriate to specific languages. // // The format can contain either numbered argument conversion specifications // (that is, "%n$" and "*m$"), or unnumbered argument conversion specifications // (that is, % and * ), but not both. The only exception to this is that %% // can be mixed with the "%n$" form. The results of mixing numbered and // unnumbered argument specifications in a format string are undefined. // When numbered argument specifications are used, specifying the Nth argument // requires that all the leading arguments, from the first to the (N-1)th, // are specified in the format string. // // In format strings containing the "%n$" form of conversion specification, // numbered arguments in the argument list can be referenced from the format // string as many times as required. // // Formatting options which can't be natively represented using the ostream // state are returned in spacePadPositive (for space padded positive numbers) // and ntrunc (for truncating conversions). argIndex is incremented if // necessary to pull out variable width and precision. The function returns a // pointer to the character after the end of the current format spec. inline const char* streamStateFromFormat(std::ostream& out, bool& positionalMode, bool& spacePadPositive, int& ntrunc, const char* fmtStart, const detail::FormatArg* args, int& argIndex, int numArgs) { TINYFORMAT_ASSERT(*fmtStart == '%'); // Reset stream state to defaults. out.width(0); out.precision(6); out.fill(' '); // Reset most flags; ignore irrelevant unitbuf & skipws. out.unsetf(std::ios::adjustfield | std::ios::basefield | std::ios::floatfield | std::ios::showbase | std::ios::boolalpha | std::ios::showpoint | std::ios::showpos | std::ios::uppercase); bool precisionSet = false; bool widthSet = false; int widthExtra = 0; const char* c = fmtStart + 1; // 1) Parse an argument index (if followed by '$') or a width possibly // preceded with '0' flag. if (*c >= '0' && *c <= '9') { const char tmpc = *c; int value = parseIntAndAdvance(c); if (*c == '$') { // value is an argument index if (value > 0 && value <= numArgs) argIndex = value - 1; else TINYFORMAT_ERROR("tinyformat: Positional argument out of range"); ++c; positionalMode = true; } else if (positionalMode) { TINYFORMAT_ERROR("tinyformat: Non-positional argument used after a positional one"); } else { if (tmpc == '0') { // Use internal padding so that numeric values are // formatted correctly, eg -00010 rather than 000-10 out.fill('0'); out.setf(std::ios::internal, std::ios::adjustfield); } if (value != 0) { // Nonzero value means that we parsed width. widthSet = true; out.width(value); } } } else if (positionalMode) { TINYFORMAT_ERROR("tinyformat: Non-positional argument used after a positional one"); } // 2) Parse flags and width if we did not do it in previous step. if (!widthSet) { // Parse flags for (;; ++c) { switch (*c) { case '#': out.setf(std::ios::showpoint | std::ios::showbase); continue; case '0': // overridden by left alignment ('-' flag) if (!(out.flags() & std::ios::left)) { // Use internal padding so that numeric values are // formatted correctly, eg -00010 rather than 000-10 out.fill('0'); out.setf(std::ios::internal, std::ios::adjustfield); } continue; case '-': out.fill(' '); out.setf(std::ios::left, std::ios::adjustfield); continue; case ' ': // overridden by show positive sign, '+' flag. if (!(out.flags() & std::ios::showpos)) spacePadPositive = true; continue; case '+': out.setf(std::ios::showpos); spacePadPositive = false; widthExtra = 1; continue; default: break; } break; } // Parse width int width = 0; widthSet = parseWidthOrPrecision(width, c, positionalMode, args, argIndex, numArgs); if (widthSet) { if (width < 0) { // negative widths correspond to '-' flag set out.fill(' '); out.setf(std::ios::left, std::ios::adjustfield); width = -width; } out.width(width); } } // 3) Parse precision if (*c == '.') { ++c; int precision = 0; parseWidthOrPrecision(precision, c, positionalMode, args, argIndex, numArgs); // Presence of `.` indicates precision set, unless the inferred value // was negative in which case the default is used. precisionSet = precision >= 0; if (precisionSet) out.precision(precision); } // 4) Ignore any C99 length modifier while (*c == 'l' || *c == 'h' || *c == 'L' || *c == 'j' || *c == 'z' || *c == 't') { ++c; } // 5) We're up to the conversion specifier character. // Set stream flags based on conversion specifier (thanks to the // boost::format class for forging the way here). bool intConversion = false; switch (*c) { case 'u': case 'd': case 'i': out.setf(std::ios::dec, std::ios::basefield); intConversion = true; break; case 'o': out.setf(std::ios::oct, std::ios::basefield); intConversion = true; break; case 'X': out.setf(std::ios::uppercase); // Falls through case 'x': case 'p': out.setf(std::ios::hex, std::ios::basefield); intConversion = true; break; case 'E': out.setf(std::ios::uppercase); // Falls through case 'e': out.setf(std::ios::scientific, std::ios::floatfield); out.setf(std::ios::dec, std::ios::basefield); break; case 'F': out.setf(std::ios::uppercase); // Falls through case 'f': out.setf(std::ios::fixed, std::ios::floatfield); break; case 'A': out.setf(std::ios::uppercase); // Falls through case 'a': # ifdef _MSC_VER // Workaround https://developercommunity.visualstudio.com/content/problem/520472/hexfloat-stream-output-does-not-ignore-precision-a.html // by always setting maximum precision on MSVC to avoid precision // loss for doubles. out.precision(13); # endif out.setf(std::ios::fixed | std::ios::scientific, std::ios::floatfield); break; case 'G': out.setf(std::ios::uppercase); // Falls through case 'g': out.setf(std::ios::dec, std::ios::basefield); // As in boost::format, let stream decide float format. out.flags(out.flags() & ~std::ios::floatfield); break; case 'c': // Handled as special case inside formatValue() break; case 's': if (precisionSet) ntrunc = static_cast(out.precision()); // Make %s print Booleans as "true" and "false" out.setf(std::ios::boolalpha); break; case 'n': // Not supported - will cause problems! TINYFORMAT_ERROR("tinyformat: %n conversion spec not supported"); break; case '\0': TINYFORMAT_ERROR("tinyformat: Conversion spec incorrectly " "terminated by end of string"); return c; default: break; } if (intConversion && precisionSet && !widthSet) { // "precision" for integers gives the minimum number of digits (to be // padded with zeros on the left). This isn't really supported by the // iostreams, but we can approximately simulate it with the width if // the width isn't otherwise used. out.width(out.precision() + widthExtra); out.setf(std::ios::internal, std::ios::adjustfield); out.fill('0'); } return c+1; } //------------------------------------------------------------------------------ inline void formatImpl(std::ostream& out, const char* fmt, const detail::FormatArg* args, int numArgs) { // Saved stream state std::streamsize origWidth = out.width(); std::streamsize origPrecision = out.precision(); std::ios::fmtflags origFlags = out.flags(); char origFill = out.fill(); // "Positional mode" means all format specs should be of the form "%n$..." // with `n` an integer. We detect this in `streamStateFromFormat`. bool positionalMode = false; int argIndex = 0; while (true) { fmt = printFormatStringLiteral(out, fmt); if (*fmt == '\0') { if (!positionalMode && argIndex < numArgs) { TINYFORMAT_ERROR("tinyformat: Not enough conversion specifiers in format string"); } break; } bool spacePadPositive = false; int ntrunc = -1; const char* fmtEnd = streamStateFromFormat(out, positionalMode, spacePadPositive, ntrunc, fmt, args, argIndex, numArgs); // NB: argIndex may be incremented by reading variable width/precision // in `streamStateFromFormat`, so do the bounds check here. if (argIndex >= numArgs) { TINYFORMAT_ERROR("tinyformat: Too many conversion specifiers in format string"); return; } const FormatArg& arg = args[argIndex]; // Format the arg into the stream. if (!spacePadPositive) { arg.format(out, fmt, fmtEnd, ntrunc); } else { // The following is a special case with no direct correspondence // between stream formatting and the printf() behaviour. Simulate // it crudely by formatting into a temporary string stream and // munging the resulting string. std::ostringstream tmpStream; tmpStream.copyfmt(out); tmpStream.setf(std::ios::showpos); arg.format(tmpStream, fmt, fmtEnd, ntrunc); std::string result = tmpStream.str(); // allocates... yuck. for (size_t i = 0, iend = result.size(); i < iend; ++i) { if (result[i] == '+') result[i] = ' '; } out << result; } if (!positionalMode) ++argIndex; fmt = fmtEnd; } // Restore stream state out.width(origWidth); out.precision(origPrecision); out.flags(origFlags); out.fill(origFill); } } // namespace detail /// List of template arguments format(), held in a type-opaque way. /// /// A const reference to FormatList (typedef'd as FormatListRef) may be /// conveniently used to pass arguments to non-template functions: All type /// information has been stripped from the arguments, leaving just enough of a /// common interface to perform formatting as required. class FormatList { public: FormatList(detail::FormatArg* args, int N) : m_args(args), m_N(N) { } friend void vformat(std::ostream& out, const char* fmt, const FormatList& list); private: const detail::FormatArg* m_args; int m_N; }; /// Reference to type-opaque format list for passing to vformat() typedef const FormatList& FormatListRef; namespace detail { // Format list subclass with fixed storage to avoid dynamic allocation template class FormatListN : public FormatList { public: #ifdef TINYFORMAT_USE_VARIADIC_TEMPLATES template FormatListN(const Args&... args) : FormatList(&m_formatterStore[0], N), m_formatterStore { FormatArg(args)... } { static_assert(sizeof...(args) == N, "Number of args must be N"); } #else // C++98 version void init(int) {} # define TINYFORMAT_MAKE_FORMATLIST_CONSTRUCTOR(n) \ \ template \ FormatListN(TINYFORMAT_VARARGS(n)) \ : FormatList(&m_formatterStore[0], n) \ { TINYFORMAT_ASSERT(n == N); init(0, TINYFORMAT_PASSARGS(n)); } \ \ template \ void init(int i, TINYFORMAT_VARARGS(n)) \ { \ m_formatterStore[i] = FormatArg(v1); \ init(i+1 TINYFORMAT_PASSARGS_TAIL(n)); \ } TINYFORMAT_FOREACH_ARGNUM(TINYFORMAT_MAKE_FORMATLIST_CONSTRUCTOR) # undef TINYFORMAT_MAKE_FORMATLIST_CONSTRUCTOR #endif FormatListN(const FormatListN& other) : FormatList(&m_formatterStore[0], N) { std::copy(&other.m_formatterStore[0], &other.m_formatterStore[N], &m_formatterStore[0]); } private: FormatArg m_formatterStore[N]; }; // Special 0-arg version - MSVC says zero-sized C array in struct is nonstandard template<> class FormatListN<0> : public FormatList { public: FormatListN() : FormatList(0, 0) {} }; } // namespace detail //------------------------------------------------------------------------------ // Primary API functions #ifdef TINYFORMAT_USE_VARIADIC_TEMPLATES /// Make type-agnostic format list from list of template arguments. /// /// The exact return type of this function is an implementation detail and /// shouldn't be relied upon. Instead it should be stored as a FormatListRef: /// /// FormatListRef formatList = makeFormatList( /*...*/ ); template detail::FormatListN makeFormatList(const Args&... args) { return detail::FormatListN(args...); } #else // C++98 version inline detail::FormatListN<0> makeFormatList() { return detail::FormatListN<0>(); } #define TINYFORMAT_MAKE_MAKEFORMATLIST(n) \ template \ detail::FormatListN makeFormatList(TINYFORMAT_VARARGS(n)) \ { \ return detail::FormatListN(TINYFORMAT_PASSARGS(n)); \ } TINYFORMAT_FOREACH_ARGNUM(TINYFORMAT_MAKE_MAKEFORMATLIST) #undef TINYFORMAT_MAKE_MAKEFORMATLIST #endif /// Format list of arguments to the stream according to the given format string. /// /// The name vformat() is chosen for the semantic similarity to vprintf(): the /// list of format arguments is held in a single function argument. inline void vformat(std::ostream& out, const char* fmt, FormatListRef list) { detail::formatImpl(out, fmt, list.m_args, list.m_N); } #ifdef TINYFORMAT_USE_VARIADIC_TEMPLATES /// Format list of arguments to the stream according to given format string. template void format(std::ostream& out, const char* fmt, const Args&... args) { vformat(out, fmt, makeFormatList(args...)); } /// Format list of arguments according to the given format string and return /// the result as a string. template std::string format(const char* fmt, const Args&... args) { std::ostringstream oss; format(oss, fmt, args...); return oss.str(); } /// Format list of arguments to std::cout, according to the given format string template void printf(const char* fmt, const Args&... args) { format(std::cout, fmt, args...); } template void printfln(const char* fmt, const Args&... args) { format(std::cout, fmt, args...); std::cout << '\n'; } #else // C++98 version inline void format(std::ostream& out, const char* fmt) { vformat(out, fmt, makeFormatList()); } inline std::string format(const char* fmt) { std::ostringstream oss; format(oss, fmt); return oss.str(); } inline void printf(const char* fmt) { format(std::cout, fmt); } inline void printfln(const char* fmt) { format(std::cout, fmt); std::cout << '\n'; } #define TINYFORMAT_MAKE_FORMAT_FUNCS(n) \ \ template \ void format(std::ostream& out, const char* fmt, TINYFORMAT_VARARGS(n)) \ { \ vformat(out, fmt, makeFormatList(TINYFORMAT_PASSARGS(n))); \ } \ \ template \ std::string format(const char* fmt, TINYFORMAT_VARARGS(n)) \ { \ std::ostringstream oss; \ format(oss, fmt, TINYFORMAT_PASSARGS(n)); \ return oss.str(); \ } \ \ template \ void printf(const char* fmt, TINYFORMAT_VARARGS(n)) \ { \ format(std::cout, fmt, TINYFORMAT_PASSARGS(n)); \ } \ \ template \ void printfln(const char* fmt, TINYFORMAT_VARARGS(n)) \ { \ format(std::cout, fmt, TINYFORMAT_PASSARGS(n)); \ std::cout << '\n'; \ } TINYFORMAT_FOREACH_ARGNUM(TINYFORMAT_MAKE_FORMAT_FUNCS) #undef TINYFORMAT_MAKE_FORMAT_FUNCS #endif } // namespace tinyformat #endif // TINYFORMAT_H_INCLUDED vdiffr/src/engine_version.h0000644000176200001440000000010314057630265015506 0ustar liggesusers#pragma once #include std::string get_engine_version(); vdiffr/NAMESPACE0000644000176200001440000000053614213665776012776 0ustar liggesusers# Generated by roxygen2: do not edit by hand S3method(print_plot,"function") S3method(print_plot,default) S3method(print_plot,ggplot) S3method(print_plot,grob) S3method(print_plot,recordedplot) export(expect_doppelganger) export(write_svg) import(rlang) importFrom(glue,glue) importFrom(lifecycle,deprecated) useDynLib(vdiffr, .registration = TRUE) vdiffr/LICENSE0000644000176200001440000000005414705672254012552 0ustar liggesusersYEAR: 2024 COPYRIGHT HOLDER: vdiffr authors vdiffr/NEWS.md0000644000176200001440000003214614707722644012653 0ustar liggesusers# vdiffr 1.0.8 * Added support for snapshot variants (#125). # vdiffr 1.0.7 * Revert back to C++11 to work around a GCC issue (#137). # vdiffr 1.0.6 * The SVG device in vdiffr now has a different name so it can be distinguished from the svglite device (#135). # vdiffr 1.0.5 * Fix for CRAN checks. # vdiffr 1.0.4 * Compatibility with UCRT build of Windows using Rtools42. # vdiffr 1.0.3 * Compatibility with UCRT build of Windows (@jeroen). # vdiffr 1.0.2 * testthat no longer auto-deletes snapshot files that were not generated because of an unexpected error or a `skip()` (r-lib/testthat#1393). # vdiffr 1.0.0 This release includes two major changes: 1. The internal SVG engine has been updated. It is now lighter, more robust, with fewer dependencies. It also generates more correct SVG. The main user visible change is that points look smaller than with older snapshots. Because of this update you will have to regenerate all existing snapshots with the new engine. 2. The snapshot management system now uses testthat (see https://testthat.r-lib.org/articles/snapshotting.html). Most of the R and javascript code has been removed from vdiffr as a consequence. vdiffr now serves as a reproducible SVG generation engine for testthat snapshots. ## Migration of existing snapshots There are two steps to update your snapshots to vdiffr 1.0. 1. This step is optional. Install the github-only 0.4.0 version of vdiffr with `remotes::install_github("r-lib/vdiffr@v0.4.0")`. This release only contains the new SVG engine. Review the snapshot changes as usual with `vdiffr::manage_cases()`. 2. Install vdiffr 1.0.0 from CRAN, delete the `tests/figs` directory, run `devtools::test()`, and then `testthat::snapshot_review()`. ## Other changes * `expect_doppelganger()` now supports grid objects such as `gtable` and `grob` (#36). # vdiffr 0.4.0 This is a github-only release that is meant to help you migrate from vdiffr 0.3.x to vdiffr 1.0.0. The 1.0 release of vdiffr includes two major changes. It switches to testthat 3e for snapshot management and it uses an updated SVG engine for the generation of snapshots. The github-only 0.4.0 release only includes the new SVG engine to make it easy to compare cases with `manage_cases()`. This intermediate step in the migration of snapshots is optional. You can also choose to update directly with the 1.0.0 release but you won't be able to compare the new snapshots to your old ones. Note that smaller points are expected in the new snapshots because of a bugfix. - Following an update to the graphics engine of R 4.1.0 that causes spurious failures due to subtle changes in graphics generation, vdiffr snapshots are now skipped on old versions of R. The plots are still generated on all versions so any errors during plot drawing will be detected by testthat. - The SVG generation engine of vdiffr has been updated (@thomasp85). Font sizes are now precomputed for the first 50000 unicode points. This allows deterministic computation of text box extents without the freetype and harfbuzz dependencies. Note: The main visible change of this update is that points now look smaller. Points generated with the previous SVG engine were too large. - vdiffr is now licensed as MIT (#95). # vdiffr 0.3.3 - Compatibility with r-devel (@pmur002). - Compatibility with testthat 3. # vdiffr 0.3.2 - Fixed CRAN checks on r-devel. - Keyboard short cuts for common interactions: Right/Left arrows = Next/Previous case Down/Up arrows = Next/Previous type ENTER = Validate active case shift + ENTER = Validate active group ESC = Quit app - Failure diffs are now logged in `vdiffr.Rout.fail` when the `CI` environment variable is set. This makes it easier to investigate remote failures on Travis etc (#79). # vdiffr 0.3.1 This release makes vdiffr compatible with ggplot2 3.2.0. It also features two contributions from the Tidyverse developer day in Austin: - You can now select the validated cases in the Shiny app (#38, @nathancday). - The testthat context is now shown on the Shiny app (#14, @paleolimbot). Finally, it fixes warnings in non-UTF-8 MBCS locale (#59, @yutannihilation). # vdiffr 0.3.0 This release of vdiffr features a major overhaul of the internals to make the package more robust. ## Cross-platform reliability vdiffr now works reliably across platforms: * svglite is now embedded in vdiffr to protect against updates of the SVG generation engine. * It also embeds harfbuzz to compute font extents and text boxes metrics. This makes SVG generation of text boxes consisent across platforms. While this makes vdiffr much more robust, it also means you will have to regenerate all your testcases with the new version of vdiffr. You can expect very few future releases that will require updating figures, hopefully once every few years. Now that vdiffr has a stable engine, the next release will focus on improving the Shiny UI. ## Regression testing versus Unit testing Another important change is that figure mismatches are no longer reported as failures, except when the tests are run locally, on Travis, Appveyor, or any environment where the `Sys.getenv("CI")` or `Sys.getenv("NOT_CRAN")` variables are set. Because vdiffr is more of a monitoring than a unit testing tool, it shouldn't cause R CMD check failures on the CRAN machines. Despite our efforts to make vdiffr robust and reliable across platforms, checking the appearance of a figure is still inherently fragile. It is similar to testing for errors by matching exact error messages: these messages are susceptible to change at any time. Similarly, the appearance of plots depends on a lot of upstream code, such as the way margins and spacing are computed. vdiffr uses a special ggplot2 theme that should change very rarely, but there are just too many upstream factors that could cause breakages. For this reason, figure mismatches are not necessarily representative of actual failures. Visual testing is not an alternative to writing unit tests for the internal data transformations performed during the creation of your figure. It is more of a monitoring tool that allows you to quickly check how the appearance of your figures changes over time, and to manually assess whether changes reflect actual problems in your package. If you need to override the default vdiffr behaviour on CRAN (not recommended) or Travis (for example to run the tests in a particular builds but not others), set the `VDIFFR_RUN_TESTS` environment variable to "true" or "false". ## Features * vdiffr now advises user to run `manage_cases()` when a figure was not validated yet (#25). * Fixed a bug in the Shiny app that prevented SVGs from being displayed in Firefox (@KZARCA, #29). * `manage_cases()` gains an `options` argument that is passed to `shiny::shinyApp()` (@KZARCA). * The Shiny app now has a quit button (@ilarischeinin). * New `VDIFFR_LOG_PATH` environment variable. When set, vdiffr pushes diffs of failed SVG comparisons to that file. * `expect_doppelganger()` now takes a `writer` argument. This makes it easy to use vdiffr with a different SVG engine. See `?write_svg` for an example function. Packages implementing a different SVG engine should wrap around `expect_doppelganger()` to pass their custom writer. * `write_svg()` is now an exported function. It provides a template (function arguments and return value) for SVG writer functions. * `manage_cases()` no longer checks for orphaned cases when a filter is supplied. (Orphaned cases are figures dangling in the `figs` folder even though their original `expect_doppelganger()` has been removed from the tests.) ## Life cycle * The `verbose` argument of `expect_doppelganger()` is soft-deprecated. Please use the vdiffr failure log instead. It is created automatically when run under R CMD check in `tests/vdiffr.Rout.fail`, and should be displayed on Travis. You can also set the `VDIFFR_LOG_PATH` environment variable with `Sys.setenv()` to unconditionally (also interactively) log failures in the file pointed by the variable. * `add_dependency()` is soft-deprecated without replacement. * The `user_fonts` argument of `expect_doppelganger()` is defunct because it complicated the UI for no clear benefit. The fonts used to generate the SVGs are now hardcoded to Liberation and Symbola. # vdiffr 0.2.3 * Maintenance release to fix CRAN errors. Thanks to Gregory R. Warnes (@gwarnes-mdsol) and Hiroaki Yutani (@yutannihilation) for helping out with this! I'm working on embedding svglite in vdiffr and compiling statically to FreeType and Harfbuzz to make SVG generation deterministic across platforms. Until then vdiffr will remain a bit unstable (but should silently fail if dependencies have diverged). * Use `last_collection_error()` to print a testthat error that occurred while collecting the test cases. # vdiffr 0.2.2 * Skip tests if the system version of Cairo (actually the one gdtools was compiled with) doesn't match the version of Cairo used to generate the testcases. Cairo has an influence on the computation of text metrics which can cause spurious test failures. We plan to fix these issues once and for all by embedding gdtools, svglite, Cairo and FreeType in the vdiffr package. # vdiffr 0.2.1 This release fixes some CRAN failures. * Test cases of the mock package were updated to FreeType 2.8.0. * The unit test log file from the mock package is now preserved. # vdiffr 0.2.0 This release makes it easier to debug failures on remote systems. It also makes vdiffr more robust to failures caused by incompatible installations: instead of failing, the tests are skipped. This prevents spurious failures on CRAN. ## Troubleshooting on remotes * `expect_doppelganger()` gains a `verbose` argument to print the SVG files for failed cases while testing. This is useful to debug failures on remotes. * When tests are run by `R CMD check`, failures are now recorded in a log file called `vdiffr.fail`. This file will show up in the Travis log and can be retrieved from artifacts on Appveyor. It includes the SVG files for failed cases, which is useful to debug failures on remotes. ## Handling of incompatible systems The tests are now skipped if the FreeType version used to build the comparison SVGs does not match the version installed on the system where the tests are run. This is necessary because changes in new version of FreeType might affect the computation of text extents, which then causes svglite to produce slightly different SVGs. The minor version is not taken into account so FreeType 2.7.1 is deemed compatible with 2.7.2 but not with 2.8.0. In practice, this means that package contributors should only validate visual cases if their FreeType version matches the one of the package maintainer. Also, the maintainer must update the version recorded in the package repository (in the file `./tests/figs/deps.txt`) when FreeType has been updated on their system. Running `vdiffr::validate_cases()` updates the dependency file even if there are no visual case to update. In the future, we may provide a version of vdiffr statically compiled with a specific version of FreeType to prevent these issues. ## Other changes * The minimal R version required by vdiffr is now R 3.1.0. # vdiffr 0.1.1 * `expect_doppelganger()` no longer throws an error when FreeType is too old. Instead, the test is skipped. This ensures that R CMD check passes on those platforms (e.g., CRAN's Solaris test server). * Depends on gdtools 0.1.2 or later as this version fixes a crash on Linux platforms. * `widget_toggle()`, `widget_slide()` and `widget_diff()` now take plots as arguments. This makes it easy to embed a vdiffr widget in R Markdown documents. The underscored versions take HTML sources as argument (paths to SVG files or inline SVGs). # vdiffr 0.1.0 * Generated SVGs are now reproducible across platforms thanks to recent versions of svglite, gdtools, and the new package fontquiver. vdiffr now requires versions of FreeType greater than 2.6.1. * The figures folder is hardcoded to `tests/figs/`. * The figures are now stored in subfolders according to the current testthat context. `expect_doppelganger()` accepts the `path` argument to bypass this behaviour (set it to `""` to store the figures in `tests/figs/`). * The `title` argument of `expect_doppelganger()` now serves as `ggtitle()` in ggplot2 figures (unless a title is already set). It is also standardised and used as filename to store the figure (spaces and non-alphanumeric characters are converted to dashes). * Add support for handling orphaned cases: you can now remove figures left over from deleted tests with `delete_orphaned_cases()` or from the Shiny app. * New `filter` argument to `collect_cases()` and `manage_cases()`. This lets you filter the test files from which to collect the cases, which is useful to speed up the collection for large codebases with a lot of unit tests. * Fix invalid generation of SVG files (#3) * Give a warning when multiple doppelgangers have the same name (#4). * Remove CR line endings before comparing svg files for compatibility with Windows # vdiffr 0.0.0.9000 Initial release vdiffr/inst/0000755000176200001440000000000014057630265012517 5ustar liggesusersvdiffr/inst/create_glyph_dims.R0000644000176200001440000000471714057630265016335 0ustar liggesusers# This code creates "src/glyph_dims.h" which inlines the glyph dimensions of # Liberation and Symbola for all unicode points up until 50000. # # Changes in the entries of "src/glyph_dims.h" will result in potential failures # of visual tests since it will change string dimension calculations. Only # update it for very good reasons! # Create vector of unicode characters char_num <- seq_len(50000) res <- 1e4 chars <- eval( parse(text = paste0( 'c("', paste(sprintf("\\U%04X", char_num), collapse = '","'), '")') ) ) # Get font files from fontquiver (old vdiffr dependency) liberation <- fontquiver::font("Liberation", 'Sans', 'Regular')$ttf symbola <- fontquiver::font("Symbola", 'Symbols', 'Regular')$ttf # Extract glyph dimensions from Liberation liberation_glyphs <- systemfonts::glyph_info(chars, res = res, path = liberation) liberation_glyphs$num <- char_num liberation_glyphs <- liberation_glyphs[!duplicated(liberation_glyphs$index), ] liberation_glyphs <- data.frame( char = liberation_glyphs$num, width = liberation_glyphs$x_advance * 72 / res, ascent = vapply(liberation_glyphs$bbox, `[`, numeric(1), 4) * 72 / res, descent = -vapply(liberation_glyphs$bbox, `[`, numeric(1), 3) * 72 / res ) # Extract glyph dimensions from Symbola symbola_glyphs <- systemfonts::glyph_info(chars, res = res, path = symbola) symbola_glyphs$num <- char_num symbola_glyphs <- symbola_glyphs[!duplicated(symbola_glyphs$index), ] symbola_glyphs <- data.frame( char = symbola_glyphs$num, width = symbola_glyphs$x_advance * 72 / res, ascent = vapply(symbola_glyphs$bbox, `[`, numeric(1), 4) * 72 / res, descent = -vapply(symbola_glyphs$bbox, `[`, numeric(1), 3) * 72 / res ) # Write "src/glyph_dims.h" def <- c( "// Generated by inst/create_glyph_dims.R — Do not edit by hand", "#pragma once", "#include ", "struct Dim {", " double width;", " double ascent;", " double descent;", "};", "const std::unordered_map LIBERATION_DIM = {", paste(sprintf( " {%i, {%.4f, %.4f, %.4f}}", liberation_glyphs$char, liberation_glyphs$width, liberation_glyphs$ascent, liberation_glyphs$descent ), collapse = ",\n"), "};", "const std::unordered_map SYMBOLA_DIM = {", paste(sprintf( " {%i, {%.4f, %.4f, %.4f}}", symbola_glyphs$char, symbola_glyphs$width, symbola_glyphs$ascent, symbola_glyphs$descent ), collapse = ",\n"), "};" ) writeLines(def, "src/glyph_dims.h") vdiffr/tools/0000755000176200001440000000000014705672254012706 5ustar liggesusersvdiffr/tools/winlibs.R0000644000176200001440000000057014705672254014502 0ustar liggesusersVERSION <- commandArgs(TRUE) if(!file.exists(sprintf("../windows/harfbuzz-%s/include/png.h", VERSION))){ if(getRversion() < "3.3.0") setInternet2() download.file(sprintf("https://github.com/rwinlib/harfbuzz/archive/v%s.zip", VERSION), "lib.zip", quiet = TRUE) dir.create("../windows", showWarnings = FALSE) unzip("lib.zip", exdir = "../windows") unlink("lib.zip") } vdiffr/README.md0000644000176200001440000001045714705725542013033 0ustar liggesusers# vdiffr [![CRAN status](https://www.r-pkg.org/badges/version/vdiffr)](https://cran.r-project.org/package=vdiffr) [![R-CMD-check](https://github.com/r-lib/vdiffr/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/r-lib/vdiffr/actions/workflows/R-CMD-check.yaml) [![Codecov test coverage](https://codecov.io/gh/r-lib/vdiffr/graph/badge.svg)](https://app.codecov.io/gh/r-lib/vdiffr) vdiffr is a testthat extension for monitoring the appearance of R plots. It generates reproducible SVG files and registers them as [testthat snapshots](https://testthat.r-lib.org/articles/snapshotting.html). ## How to use vdiffr 1) Add graphical expectations by including `expect_doppelganger()` in your test files. 1) Run `devtools::test()`. 1) If `test()` detected new snapshots or changes to existing snapshots, run `testthat::snapshot_review()` to review them. There may be many reasons for a snapshot to fail. Upstream changes (e.g. to the R graphics engine or to ggplot2) may cause subtle differences in your plots that are not actual failures. For this reason, snapshots do not cause failures on CRAN by default. You will only see failures locally or on CI platforms such as Github Actions. ### Adding expectations vdiffr integrates with testthat through the `expect_doppelganger()` expectation. It takes as arguments: - A title. This title is used in two ways. First, the title is standardised (it is converted to lowercase and any character that is not alphanumeric or a space is turned into a dash) and used as filename for storing the figure. Secondly, with ggplot2 figures the title is automatically added to the plot with `ggtitle()` (only if no ggtitle has been set). - A figure. This can be a ggplot object, a recorded plot, a function to be called, or more generally any object with a `print` method. The snapshots are recorded in subfolders of the `_snaps/` directory. ```{r} disp_hist_base <- function() hist(mtcars$disp) disp_hist_ggplot <- ggplot(mtcars, aes(disp)) + geom_histogram() vdiffr::expect_doppelganger("Base graphics histogram", disp_hist_base) vdiffr::expect_doppelganger("ggplot2 histogram", disp_hist_ggplot) ``` Note that in addition to automatic ggtitles, ggplot2 figures are assigned the minimalistic theme `theme_test()` (unless they already have been assigned a theme). ### Debugging It is sometimes difficult to understand the cause of a doppelganger failure. A frequent cause of failure is undeterministic generation of plots. Potential culprits are: * Some of the plot components depend on random variation. Try setting a seed, for instance with [`withr::local_seed()`](https://withr.r-lib.org/reference/with_seed.html). * The plot depends on some system library. For instance sf plots depend on libraries like GEOS and GDAL. It might not be possible to test these plots with vdiffr (which can still be used for manual inspection, add a [testthat::skip()] before the `expect_doppelganger()` call in that case). To help you understand the causes of a failure, vdiffr automatically logs the SVG diff of all failures when run under R CMD check. The log is located in `tests/vdiffr.Rout.fail` and should be displayed in your CI logs. You can also set the `VDIFFR_LOG_PATH` environment variable with `Sys.setenv()` to unconditionally (also interactively) log failures in the file pointed by the variable. ### Skipping all vdiffr checks on some platforms See ggplot2's approach which wraps `expect_doppelganger()` with a version that that calls `testthat::skip()` on the relevant platforms (as determined by environment variables): https://github.com/tidyverse/ggplot2/blob/ddd207e926cc1c1847dc661d9a099b8ec19c4010/tests/testthat/helper-vdiffr.R#L1-L15. ## Building vdiffr _This section is only relevant for building vdiffr from scratch, as opposed to installing from a pre-built package on CRAN._ Building vdiffr requires the system dependency libpng. As vdiffr doesn't have any build-time configuration, your R configuration must point to libpng's `include` and `lib` folders. For instance on macOS, install libpng with: ```sh brew install libpng ``` And make sure your `~/.R/Makevars` knows about Homebrew's `include` and `lib` folders where libpng should now be installed. On arm64 hardware, this would be: ```mk CPPFLAGS += -I/opt/homebrew/include LDFLAGS += -L/opt/homebrew/lib ``` vdiffr/man/0000755000176200001440000000000014707670764012327 5ustar liggesusersvdiffr/man/vdiffr-package.Rd0000644000176200001440000000255614705672254015471 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/vdiffr-package.R \docType{package} \name{vdiffr-package} \alias{vdiffr} \alias{vdiffr-package} \title{vdiffr: Visual Regression Testing and Graphical Diffing} \description{ An extension to the 'testthat' package that makes it easy to add graphical unit tests. It provides a Shiny application to manage the test cases. } \seealso{ Useful links: \itemize{ \item \url{https://vdiffr.r-lib.org/} \item \url{https://github.com/r-lib/vdiffr} \item Report bugs at \url{https://github.com/r-lib/vdiffr/issues} } } \author{ \strong{Maintainer}: Lionel Henry \email{lionel@posit.co} Authors: \itemize{ \item Thomas Lin Pedersen \email{thomas.pedersen@posit.co} (\href{https://orcid.org/0000-0002-5147-4711}{ORCID}) \item T Jake Luciani \email{jake@apache.org} (svglite) \item Matthieu Decorde \email{matthieu.decorde@ens-lyon.fr} (svglite) \item Vaudor Lise \email{lise.vaudor@ens-lyon.fr} (svglite) } Other contributors: \itemize{ \item Posit Software, PBC [copyright holder, funder] \item Tony Plate (svglite: Early line dashing code) [contributor] \item David Gohel (svglite: Line dashing code and raster code) [contributor] \item Yixuan Qiu (svglite: Improved styles; polypath implementation) [contributor] \item Håkon Malmedal (svglite: Opacity code) [contributor] } } \keyword{internal} vdiffr/man/expect_doppelganger.Rd0000644000176200001440000001100614707670764016633 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/expect-doppelganger.R \name{expect_doppelganger} \alias{expect_doppelganger} \title{Does a figure look like its expected output?} \usage{ expect_doppelganger( title, fig, path = deprecated(), ..., writer = write_svg, cran = FALSE, variant = NULL ) } \arguments{ \item{title}{A brief description of what is being tested in the figure. For instance: "Points and lines overlap". If a ggplot2 figure doesn't have a title already, \code{title} is applied to the figure with \code{ggtitle()}. The title is also used as file name for storing SVG (in a sanitzed form, with special characters converted to \code{"-"}).} \item{fig}{A figure to test. This can be a ggplot object, a recordedplot, or more generally any object with a \code{print} method. If you need to test a plot with non-printable objects (e.g. base plots), \code{fig} can be a function that generates and prints the plot, e.g. \code{fig = function() plot(1:3)}.} \item{path, ...}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}}.} \item{writer}{A function that takes the plot, a target SVG file, and an optional plot title. It should transform the plot to SVG in a deterministic way and write it to the target file. See \code{\link[=write_svg]{write_svg()}} (the default) for an example.} \item{cran}{If \code{FALSE} (the default), mismatched snapshots only cause a failure when you run tests locally or in your CI (Github Actions or any platform that sets the \code{CI} environment variable). If \code{TRUE}, failures may also occur on CRAN machines. Failures are disabled on CRAN by default because testing the appearance of a figure is inherently fragile. Changes in the R graphics engine or in ggplot2 may cause subtle differences in the aspect of a plot, such as a slightly smaller or larger margin. These changes will cause spurious failures because you need to update your snapshots to reflect the upstream changes. It would be distracting for both you and the CRAN maintainers if such changes systematically caused failures on CRAN. This is why snapshot expectations do not fail on CRAN by default and should be treated as a monitoring tool that allows you to quickly check how the appearance of your figures changes over time, and to manually assess whether changes reflect actual problems in your package. Internally, this argument is passed to \code{\link[testthat:expect_snapshot_file]{testthat::expect_snapshot_file()}}.} \item{variant}{If not-\code{NULL}, results will be saved in \verb{_snaps/{variant}/{test}/{name}.{ext}}. This allows you to create different snapshots for different scenarios, like different operating systems or different R versions.} } \description{ \code{expect_doppelganger()} is a testthat expectation for graphical plots. It generates SVG snapshots that you can review graphically with \code{\link[testthat:snapshot_accept]{testthat::snapshot_review()}}. You will find more information about snapshotting in the \href{https://testthat.r-lib.org/articles/snapshotting.html}{testthat snapshots vignette}. Note that \code{expect_doppelgagner()} requires R version 4.1.0. If run on an earlier version of R, it emits a \code{testthat::skip()} so that you can still run other checks on old versions of R. } \section{Debugging}{ It is sometimes difficult to understand the cause of a failure. This usually indicates that the plot is not created deterministically. Potential culprits are: \itemize{ \item Some of the plot components depend on random variation. Try setting a seed. \item The plot depends on some system library. For instance sf plots depend on libraries like GEOS and GDAL. It might not be possible to test these plots with vdiffr. } To help you understand the causes of a failure, vdiffr automatically logs the SVG diff of all failures when run under R CMD check. The log is located in \code{tests/vdiffr.Rout.fail} and should be displayed on Travis. You can also set the \code{VDIFFR_LOG_PATH} environment variable with \code{Sys.setenv()} to unconditionally (also interactively) log failures in the file pointed by the variable. } \examples{ if (FALSE) { # Not run library("ggplot2") test_that("plots have known output", { disp_hist_base <- function() hist(mtcars$disp) expect_doppelganger("disp-histogram-base", disp_hist_base) disp_hist_ggplot <- ggplot(mtcars, aes(disp)) + geom_histogram() expect_doppelganger("disp-histogram-ggplot", disp_hist_ggplot) }) } } vdiffr/man/write_svg.Rd0000644000176200001440000000134114057630265014614 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/svg.R \name{write_svg} \alias{write_svg} \title{Default SVG writer} \usage{ write_svg(plot, file, title = "") } \arguments{ \item{plot}{A plot object to convert to SVG. Can be a ggplot2 object, a \link[grDevices:recordplot]{recorded plot}, or any object with a \link[base:print]{print()} method.} \item{file}{The file to write the SVG to.} \item{title}{An optional title for the test case.} } \description{ This is the default SVG writer for vdiffr test cases. It uses embedded versions of \href{https://svglite.r-lib.org}{svglite}, \href{https://harfbuzz.github.io/}{harfbuzz}, and the Liberation and Symbola fonts in order to create deterministic SVGs. } vdiffr/man/figures/0000755000176200001440000000000014057630265013761 5ustar liggesusersvdiffr/man/figures/lifecycle-questioning.svg0000644000176200001440000000171414057630265021007 0ustar liggesuserslifecyclelifecyclequestioningquestioning vdiffr/man/figures/lifecycle-stable.svg0000644000176200001440000000167414057630265017721 0ustar liggesuserslifecyclelifecyclestablestable vdiffr/man/figures/lifecycle-experimental.svg0000644000176200001440000000171614057630265021141 0ustar liggesuserslifecyclelifecycleexperimentalexperimental vdiffr/man/figures/lifecycle-deprecated.svg0000644000176200001440000000171214057630265020540 0ustar liggesuserslifecyclelifecycledeprecateddeprecated vdiffr/man/figures/lifecycle-superseded.svg0000644000176200001440000000171314057630265020604 0ustar liggesusers lifecyclelifecyclesupersededsuperseded vdiffr/man/figures/lifecycle-archived.svg0000644000176200001440000000170714057630265020231 0ustar liggesusers lifecyclelifecyclearchivedarchived vdiffr/man/figures/lifecycle-defunct.svg0000644000176200001440000000170414057630265020071 0ustar liggesuserslifecyclelifecycledefunctdefunct vdiffr/man/figures/lifecycle-maturing.svg0000644000176200001440000000170614057630265020271 0ustar liggesuserslifecyclelifecyclematuringmaturing vdiffr/DESCRIPTION0000644000176200001440000000454214710644552013255 0ustar liggesusersPackage: vdiffr Title: Visual Regression Testing and Graphical Diffing Version: 1.0.8 Authors@R: c( person("Lionel", "Henry", , "lionel@posit.co", role = c("cre", "aut")), person("Thomas Lin", "Pedersen", , "thomas.pedersen@posit.co", role = "aut", comment = c(ORCID = "0000-0002-5147-4711")), person("Posit Software, PBC", role = c("cph", "fnd")), person("T Jake", "Luciani", , "jake@apache.org", role = "aut", comment = "svglite"), person("Matthieu", "Decorde", , "matthieu.decorde@ens-lyon.fr", role = "aut", comment = "svglite"), person("Vaudor", "Lise", , "lise.vaudor@ens-lyon.fr", role = "aut", comment = "svglite"), person("Tony", "Plate", role = "ctb", comment = "svglite: Early line dashing code"), person("David", "Gohel", role = "ctb", comment = "svglite: Line dashing code and raster code"), person("Yixuan", "Qiu", role = "ctb", comment = "svglite: Improved styles; polypath implementation"), person("Håkon", "Malmedal", role = "ctb", comment = "svglite: Opacity code") ) Description: An extension to the 'testthat' package that makes it easy to add graphical unit tests. It provides a Shiny application to manage the test cases. License: MIT + file LICENSE URL: https://vdiffr.r-lib.org/, https://github.com/r-lib/vdiffr BugReports: https://github.com/r-lib/vdiffr/issues Depends: R (>= 4.0) Imports: diffobj, glue, grDevices, htmltools, lifecycle, rlang, testthat (>= 3.0.3), xml2 (>= 1.0.0) Suggests: covr, decor, ggplot2 (>= 3.2.0), roxygen2, withr LinkingTo: cpp11 ByteCompile: true Config/Needs/website: tidyverse/tidytemplate Encoding: UTF-8 RoxygenNote: 7.3.2 SystemRequirements: libpng NeedsCompilation: yes Packaged: 2024-10-28 14:55:03 UTC; lionel Author: Lionel Henry [cre, aut], Thomas Lin Pedersen [aut] (), Posit Software, PBC [cph, fnd], T Jake Luciani [aut] (svglite), Matthieu Decorde [aut] (svglite), Vaudor Lise [aut] (svglite), Tony Plate [ctb] (svglite: Early line dashing code), David Gohel [ctb] (svglite: Line dashing code and raster code), Yixuan Qiu [ctb] (svglite: Improved styles; polypath implementation), Håkon Malmedal [ctb] (svglite: Opacity code) Maintainer: Lionel Henry Repository: CRAN Date/Publication: 2024-10-31 09:10:02 UTC