From 561a818c07e33a635354141cbacc1bee78f4d95b Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Tue, 23 Jan 2024 08:09:00 -0500 Subject: [PATCH 01/27] update vl-convert, update vega parsing logic to handle gradients in rect mark --- Cargo.lock | 14 +- sg2d-vega-test-data/Cargo.toml | 2 +- .../gradients/heatmap_with_colorbar.png | Bin 0 -> 52881 bytes .../gradients/heatmap_with_colorbar.sg.json | 3120 +++++++++++++++++ .../image/large_images.sg.json | 4 + .../vega-scenegraphs/image/logos.sg.json | 4 + .../image/logos_sized_aspect_false.sg.json | 4 + ..._sized_aspect_false_align_baseline.sg.json | 4 + ...s_sized_aspect_true_align_baseline.sg.json | 4 + .../image/many_images.sg.json | 4 + .../image/smooth_false.sg.json | 4 + .../image/smooth_true.sg.json | 4 + .../rule/wide_rule_axes.sg.json | 2 + .../text/bar_axis_labels.sg.json | 3 + .../text/letter_scatter.sg.json | 4 + .../gradients/heatmap_with_colorbar.vg.json | 98 + sg2d-vega/src/marks/rect.rs | 23 +- sg2d-vega/src/marks/values.rs | 83 + sg2d-wgpu/Cargo.toml | 3 +- sg2d-wgpu/src/marks/rect.rs | 27 +- sg2d-wgpu/tests/test_image_baselines.rs | 190 +- sg2d/src/marks/rect.rs | 14 +- sg2d/src/marks/value.rs | 34 + 23 files changed, 3523 insertions(+), 126 deletions(-) create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.sg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/heatmap_with_colorbar.vg.json diff --git a/Cargo.lock b/Cargo.lock index 6a05688..1afb205 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -597,6 +597,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +[[package]] +name = "colorgrad" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a5f405d474b9d05e0a093d3120e77e9bf26461b57a84b40aa2a221ac5617fb6" +dependencies = [ + "csscolorparser", +] + [[package]] name = "com-rs" version = "0.2.1" @@ -5288,6 +5297,7 @@ dependencies = [ "bytemuck", "cfg-if", "cgmath", + "colorgrad", "dssim", "env_logger", "etagere", @@ -6811,9 +6821,9 @@ dependencies = [ [[package]] name = "vl-convert-rs" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76abc570ecfb0b27ffb6a3157dfd4512ebd88d3e292c6cec36c1b112f1fc9256" +checksum = "0dc3c1e77e3a5836c9b0c39ac6c55cf6b7ff9f50f238527d900649dce3d7c2d7" dependencies = [ "deno_core", "deno_emit", diff --git a/sg2d-vega-test-data/Cargo.toml b/sg2d-vega-test-data/Cargo.toml index 6770e77..d28d152 100644 --- a/sg2d-vega-test-data/Cargo.toml +++ b/sg2d-vega-test-data/Cargo.toml @@ -7,5 +7,5 @@ edition = "2021" [dependencies] serde_json = {workspace = true} -vl-convert-rs = "1.2.1" +vl-convert-rs = "1.2.2" pollster = "0.3" \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.png new file mode 100644 index 0000000000000000000000000000000000000000..f3f7236f678f3ed873cc9477a8ebfd3da25044de GIT binary patch literal 52881 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 QfdAI730j@E@~`{<4^5kN8UO$Q literal 0 HcmV?d00001 diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.sg.json new file mode 100644 index 0000000..528c582 --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.sg.json @@ -0,0 +1,3120 @@ +{ + "width": 461, + "height": 166, + "origin": [ + 5, + 5 + ], + "scenegraph": { + "clip": false, + "interactive": true, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": true, + "items": [ + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 31; Month: Dec; Max of temp_max: 12.8", + "x": 390, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(203, 235, 181)", + "description": "Day: 1; Month: Jan; Max of temp_max: 10.6", + "x": 0, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(192, 230, 181)", + "description": "Day: 2; Month: Jan; Max of temp_max: 11.7", + "x": 13, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(186, 228, 181)", + "description": "Day: 3; Month: Jan; Max of temp_max: 12.2", + "x": 26, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(186, 228, 181)", + "description": "Day: 4; Month: Jan; Max of temp_max: 12.2", + "x": 39, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(186, 228, 181)", + "description": "Day: 5; Month: Jan; Max of temp_max: 12.2", + "x": 52, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(209, 237, 180)", + "description": "Day: 6; Month: Jan; Max of temp_max: 10", + "x": 65, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(192, 230, 181)", + "description": "Day: 7; Month: Jan; Max of temp_max: 11.7", + "x": 78, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(209, 237, 180)", + "description": "Day: 8; Month: Jan; Max of temp_max: 10", + "x": 91, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 9; Month: Jan; Max of temp_max: 12.8", + "x": 104, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(156, 216, 184)", + "description": "Day: 10; Month: Jan; Max of temp_max: 14.4", + "x": 117, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(198, 233, 181)", + "description": "Day: 11; Month: Jan; Max of temp_max: 11.1", + "x": 130, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(203, 235, 181)", + "description": "Day: 12; Month: Jan; Max of temp_max: 10.6", + "x": 143, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(198, 233, 181)", + "description": "Day: 13; Month: Jan; Max of temp_max: 11.1", + "x": 156, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(198, 233, 181)", + "description": "Day: 14; Month: Jan; Max of temp_max: 11.1", + "x": 169, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(192, 230, 181)", + "description": "Day: 15; Month: Jan; Max of temp_max: 11.7", + "x": 182, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(171, 222, 183)", + "description": "Day: 16; Month: Jan; Max of temp_max: 13.3", + "x": 195, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(163, 219, 184)", + "description": "Day: 17; Month: Jan; Max of temp_max: 13.9", + "x": 208, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(209, 237, 180)", + "description": "Day: 18; Month: Jan; Max of temp_max: 10", + "x": 221, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(209, 237, 180)", + "description": "Day: 19; Month: Jan; Max of temp_max: 10", + "x": 234, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(209, 237, 180)", + "description": "Day: 20; Month: Jan; Max of temp_max: 10", + "x": 247, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(215, 240, 180)", + "description": "Day: 21; Month: Jan; Max of temp_max: 9.4", + "x": 260, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(186, 228, 181)", + "description": "Day: 22; Month: Jan; Max of temp_max: 12.2", + "x": 273, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(156, 216, 184)", + "description": "Day: 23; Month: Jan; Max of temp_max: 14.4", + "x": 286, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(115, 201, 189)", + "description": "Day: 24; Month: Jan; Max of temp_max: 17.2", + "x": 299, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(131, 207, 187)", + "description": "Day: 25; Month: Jan; Max of temp_max: 16.1", + "x": 312, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(198, 233, 181)", + "description": "Day: 26; Month: Jan; Max of temp_max: 11.1", + "x": 325, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(186, 228, 181)", + "description": "Day: 27; Month: Jan; Max of temp_max: 12.2", + "x": 338, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(186, 228, 181)", + "description": "Day: 28; Month: Jan; Max of temp_max: 12.2", + "x": 351, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(220, 241, 180)", + "description": "Day: 29; Month: Jan; Max of temp_max: 8.9", + "x": 364, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(215, 240, 180)", + "description": "Day: 30; Month: Jan; Max of temp_max: 9.4", + "x": 377, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(192, 230, 181)", + "description": "Day: 31; Month: Jan; Max of temp_max: 11.7", + "x": 390, + "width": 13, + "y": 0, + "height": 13 + }, + { + "fill": "rgb(198, 233, 181)", + "description": "Day: 1; Month: Feb; Max of temp_max: 11.1", + "x": 0, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(156, 216, 184)", + "description": "Day: 2; Month: Feb; Max of temp_max: 14.4", + "x": 13, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(139, 209, 186)", + "description": "Day: 3; Month: Feb; Max of temp_max: 15.6", + "x": 26, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(163, 219, 184)", + "description": "Day: 4; Month: Feb; Max of temp_max: 13.9", + "x": 39, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(131, 207, 187)", + "description": "Day: 5; Month: Feb; Max of temp_max: 16.1", + "x": 52, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(139, 209, 186)", + "description": "Day: 6; Month: Feb; Max of temp_max: 15.6", + "x": 65, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(147, 213, 185)", + "description": "Day: 7; Month: Feb; Max of temp_max: 15", + "x": 78, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(171, 222, 183)", + "description": "Day: 8; Month: Feb; Max of temp_max: 13.3", + "x": 91, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 9; Month: Feb; Max of temp_max: 12.8", + "x": 104, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 10; Month: Feb; Max of temp_max: 12.8", + "x": 117, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(122, 204, 188)", + "description": "Day: 11; Month: Feb; Max of temp_max: 16.7", + "x": 130, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(139, 209, 186)", + "description": "Day: 12; Month: Feb; Max of temp_max: 15.6", + "x": 143, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(156, 216, 184)", + "description": "Day: 13; Month: Feb; Max of temp_max: 14.4", + "x": 156, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(171, 222, 183)", + "description": "Day: 14; Month: Feb; Max of temp_max: 13.3", + "x": 169, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(147, 213, 185)", + "description": "Day: 15; Month: Feb; Max of temp_max: 15", + "x": 182, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(131, 207, 187)", + "description": "Day: 16; Month: Feb; Max of temp_max: 16.1", + "x": 195, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(186, 228, 181)", + "description": "Day: 17; Month: Feb; Max of temp_max: 12.2", + "x": 208, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(203, 235, 181)", + "description": "Day: 18; Month: Feb; Max of temp_max: 10.6", + "x": 221, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(198, 233, 181)", + "description": "Day: 19; Month: Feb; Max of temp_max: 11.1", + "x": 234, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(186, 228, 181)", + "description": "Day: 20; Month: Feb; Max of temp_max: 12.2", + "x": 247, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(192, 230, 181)", + "description": "Day: 21; Month: Feb; Max of temp_max: 11.7", + "x": 260, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 22; Month: Feb; Max of temp_max: 12.8", + "x": 273, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(198, 233, 181)", + "description": "Day: 23; Month: Feb; Max of temp_max: 11.1", + "x": 286, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(186, 228, 181)", + "description": "Day: 24; Month: Feb; Max of temp_max: 12.2", + "x": 299, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(163, 219, 184)", + "description": "Day: 25; Month: Feb; Max of temp_max: 13.9", + "x": 312, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 26; Month: Feb; Max of temp_max: 12.8", + "x": 325, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(156, 216, 184)", + "description": "Day: 27; Month: Feb; Max of temp_max: 14.4", + "x": 338, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(147, 213, 185)", + "description": "Day: 28; Month: Feb; Max of temp_max: 15", + "x": 351, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(239, 249, 189)", + "description": "Day: 29; Month: Feb; Max of temp_max: 6.1", + "x": 364, + "width": 13, + "y": 13, + "height": 13 + }, + { + "fill": "rgb(163, 219, 184)", + "description": "Day: 1; Month: Mar; Max of temp_max: 13.9", + "x": 0, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(156, 216, 184)", + "description": "Day: 2; Month: Mar; Max of temp_max: 14.4", + "x": 13, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(163, 219, 184)", + "description": "Day: 3; Month: Mar; Max of temp_max: 13.9", + "x": 26, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(139, 209, 186)", + "description": "Day: 4; Month: Mar; Max of temp_max: 15.6", + "x": 39, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(147, 213, 185)", + "description": "Day: 5; Month: Mar; Max of temp_max: 15", + "x": 52, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(122, 204, 188)", + "description": "Day: 6; Month: Mar; Max of temp_max: 16.7", + "x": 65, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(115, 201, 189)", + "description": "Day: 7; Month: Mar; Max of temp_max: 17.2", + "x": 78, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(147, 213, 185)", + "description": "Day: 8; Month: Mar; Max of temp_max: 15", + "x": 91, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(171, 222, 183)", + "description": "Day: 9; Month: Mar; Max of temp_max: 13.3", + "x": 104, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(156, 216, 184)", + "description": "Day: 10; Month: Mar; Max of temp_max: 14.4", + "x": 117, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(106, 198, 190)", + "description": "Day: 11; Month: Mar; Max of temp_max: 17.8", + "x": 130, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(115, 201, 189)", + "description": "Day: 12; Month: Mar; Max of temp_max: 17.2", + "x": 143, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(156, 216, 184)", + "description": "Day: 13; Month: Mar; Max of temp_max: 14.4", + "x": 156, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(122, 204, 188)", + "description": "Day: 14; Month: Mar; Max of temp_max: 16.7", + "x": 169, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(163, 219, 184)", + "description": "Day: 15; Month: Mar; Max of temp_max: 13.9", + "x": 182, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(171, 222, 183)", + "description": "Day: 16; Month: Mar; Max of temp_max: 13.3", + "x": 195, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(139, 209, 186)", + "description": "Day: 17; Month: Mar; Max of temp_max: 15.6", + "x": 208, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(139, 209, 186)", + "description": "Day: 18; Month: Mar; Max of temp_max: 15.6", + "x": 221, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(163, 219, 184)", + "description": "Day: 19; Month: Mar; Max of temp_max: 13.9", + "x": 234, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(171, 222, 183)", + "description": "Day: 20; Month: Mar; Max of temp_max: 13.3", + "x": 247, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(192, 230, 181)", + "description": "Day: 21; Month: Mar; Max of temp_max: 11.7", + "x": 260, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 22; Month: Mar; Max of temp_max: 12.8", + "x": 273, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(93, 191, 191)", + "description": "Day: 23; Month: Mar; Max of temp_max: 18.9", + "x": 286, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(122, 204, 188)", + "description": "Day: 24; Month: Mar; Max of temp_max: 16.7", + "x": 299, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(72, 181, 194)", + "description": "Day: 25; Month: Mar; Max of temp_max: 20.6", + "x": 312, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(100, 195, 191)", + "description": "Day: 26; Month: Mar; Max of temp_max: 18.3", + "x": 325, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(131, 207, 187)", + "description": "Day: 27; Month: Mar; Max of temp_max: 16.1", + "x": 338, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(100, 195, 191)", + "description": "Day: 28; Month: Mar; Max of temp_max: 18.3", + "x": 351, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(79, 185, 193)", + "description": "Day: 29; Month: Mar; Max of temp_max: 20", + "x": 364, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(72, 181, 194)", + "description": "Day: 30; Month: Mar; Max of temp_max: 20.6", + "x": 377, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(115, 201, 189)", + "description": "Day: 31; Month: Mar; Max of temp_max: 17.2", + "x": 390, + "width": 13, + "y": 26, + "height": 13 + }, + { + "fill": "rgb(122, 204, 188)", + "description": "Day: 1; Month: Apr; Max of temp_max: 16.7", + "x": 0, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(122, 204, 188)", + "description": "Day: 2; Month: Apr; Max of temp_max: 16.7", + "x": 13, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(156, 216, 184)", + "description": "Day: 3; Month: Apr; Max of temp_max: 14.4", + "x": 26, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(122, 204, 188)", + "description": "Day: 4; Month: Apr; Max of temp_max: 16.7", + "x": 39, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(163, 219, 184)", + "description": "Day: 5; Month: Apr; Max of temp_max: 13.9", + "x": 52, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(67, 178, 194)", + "description": "Day: 6; Month: Apr; Max of temp_max: 21.1", + "x": 65, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(67, 178, 194)", + "description": "Day: 7; Month: Apr; Max of temp_max: 21.1", + "x": 78, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(79, 185, 193)", + "description": "Day: 8; Month: Apr; Max of temp_max: 20", + "x": 91, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(106, 198, 190)", + "description": "Day: 9; Month: Apr; Max of temp_max: 17.8", + "x": 104, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(115, 201, 189)", + "description": "Day: 10; Month: Apr; Max of temp_max: 17.2", + "x": 117, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(131, 207, 187)", + "description": "Day: 11; Month: Apr; Max of temp_max: 16.1", + "x": 130, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(72, 181, 194)", + "description": "Day: 12; Month: Apr; Max of temp_max: 20.6", + "x": 143, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(79, 185, 193)", + "description": "Day: 13; Month: Apr; Max of temp_max: 20", + "x": 156, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(131, 207, 187)", + "description": "Day: 14; Month: Apr; Max of temp_max: 16.1", + "x": 169, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(106, 198, 190)", + "description": "Day: 15; Month: Apr; Max of temp_max: 17.8", + "x": 182, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(93, 191, 191)", + "description": "Day: 16; Month: Apr; Max of temp_max: 18.9", + "x": 195, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(93, 191, 191)", + "description": "Day: 17; Month: Apr; Max of temp_max: 18.9", + "x": 208, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(67, 178, 194)", + "description": "Day: 18; Month: Apr; Max of temp_max: 21.1", + "x": 221, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(52, 165, 193)", + "description": "Day: 19; Month: Apr; Max of temp_max: 22.8", + "x": 234, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(79, 185, 193)", + "description": "Day: 20; Month: Apr; Max of temp_max: 20", + "x": 247, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(48, 162, 192)", + "description": "Day: 21; Month: Apr; Max of temp_max: 23.3", + "x": 260, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(62, 174, 193)", + "description": "Day: 22; Month: Apr; Max of temp_max: 21.7", + "x": 273, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(67, 178, 194)", + "description": "Day: 23; Month: Apr; Max of temp_max: 21.1", + "x": 286, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(62, 174, 193)", + "description": "Day: 24; Month: Apr; Max of temp_max: 21.7", + "x": 299, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(72, 181, 194)", + "description": "Day: 25; Month: Apr; Max of temp_max: 20.6", + "x": 312, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(40, 147, 189)", + "description": "Day: 26; Month: Apr; Max of temp_max: 25", + "x": 325, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(131, 207, 187)", + "description": "Day: 27; Month: Apr; Max of temp_max: 16.1", + "x": 338, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(40, 147, 189)", + "description": "Day: 28; Month: Apr; Max of temp_max: 25", + "x": 351, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(33, 119, 179)", + "description": "Day: 29; Month: Apr; Max of temp_max: 27.8", + "x": 364, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(33, 102, 171)", + "description": "Day: 30; Month: Apr; Max of temp_max: 29.4", + "x": 377, + "width": 13, + "y": 39, + "height": 13 + }, + { + "fill": "rgb(72, 181, 194)", + "description": "Day: 1; Month: May; Max of temp_max: 20.6", + "x": 0, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(62, 174, 193)", + "description": "Day: 2; Month: May; Max of temp_max: 21.7", + "x": 13, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(40, 147, 189)", + "description": "Day: 3; Month: May; Max of temp_max: 25", + "x": 26, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(33, 107, 174)", + "description": "Day: 4; Month: May; Max of temp_max: 28.9", + "x": 39, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(34, 90, 166)", + "description": "Day: 5; Month: May; Max of temp_max: 30.6", + "x": 52, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(44, 157, 192)", + "description": "Day: 6; Month: May; Max of temp_max: 23.9", + "x": 65, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(44, 157, 192)", + "description": "Day: 7; Month: May; Max of temp_max: 23.9", + "x": 78, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(33, 130, 184)", + "description": "Day: 8; Month: May; Max of temp_max: 26.7", + "x": 91, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(35, 136, 186)", + "description": "Day: 9; Month: May; Max of temp_max: 26.1", + "x": 104, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(33, 125, 182)", + "description": "Day: 10; Month: May; Max of temp_max: 27.2", + "x": 117, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(42, 152, 190)", + "description": "Day: 11; Month: May; Max of temp_max: 24.4", + "x": 130, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(33, 130, 184)", + "description": "Day: 12; Month: May; Max of temp_max: 26.7", + "x": 143, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(33, 119, 179)", + "description": "Day: 13; Month: May; Max of temp_max: 27.8", + "x": 156, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(33, 130, 184)", + "description": "Day: 14; Month: May; Max of temp_max: 26.7", + "x": 169, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(62, 174, 193)", + "description": "Day: 15; Month: May; Max of temp_max: 21.7", + "x": 182, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(79, 185, 193)", + "description": "Day: 16; Month: May; Max of temp_max: 20", + "x": 195, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(37, 141, 187)", + "description": "Day: 17; Month: May; Max of temp_max: 25.6", + "x": 208, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(62, 174, 193)", + "description": "Day: 18; Month: May; Max of temp_max: 21.7", + "x": 221, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(48, 162, 192)", + "description": "Day: 19; Month: May; Max of temp_max: 23.3", + "x": 234, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(37, 141, 187)", + "description": "Day: 20; Month: May; Max of temp_max: 25.6", + "x": 247, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(42, 152, 190)", + "description": "Day: 21; Month: May; Max of temp_max: 24.4", + "x": 260, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(79, 185, 193)", + "description": "Day: 22; Month: May; Max of temp_max: 20", + "x": 273, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(100, 195, 191)", + "description": "Day: 23; Month: May; Max of temp_max: 18.3", + "x": 286, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(58, 170, 193)", + "description": "Day: 24; Month: May; Max of temp_max: 22.2", + "x": 299, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(58, 170, 193)", + "description": "Day: 25; Month: May; Max of temp_max: 22.2", + "x": 312, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(42, 152, 190)", + "description": "Day: 26; Month: May; Max of temp_max: 24.4", + "x": 325, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(33, 119, 179)", + "description": "Day: 27; Month: May; Max of temp_max: 27.8", + "x": 338, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(35, 136, 186)", + "description": "Day: 28; Month: May; Max of temp_max: 26.1", + "x": 351, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(52, 165, 193)", + "description": "Day: 29; Month: May; Max of temp_max: 22.8", + "x": 364, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(40, 147, 189)", + "description": "Day: 30; Month: May; Max of temp_max: 25", + "x": 377, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(52, 165, 193)", + "description": "Day: 31; Month: May; Max of temp_max: 22.8", + "x": 390, + "width": 13, + "y": 52, + "height": 13 + }, + { + "fill": "rgb(48, 162, 192)", + "description": "Day: 1; Month: Jun; Max of temp_max: 23.3", + "x": 0, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(58, 170, 193)", + "description": "Day: 2; Month: Jun; Max of temp_max: 22.2", + "x": 13, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(35, 136, 186)", + "description": "Day: 3; Month: Jun; Max of temp_max: 26.1", + "x": 26, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(33, 130, 184)", + "description": "Day: 4; Month: Jun; Max of temp_max: 26.7", + "x": 39, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(33, 102, 171)", + "description": "Day: 5; Month: Jun; Max of temp_max: 29.4", + "x": 52, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(34, 86, 163)", + "description": "Day: 6; Month: Jun; Max of temp_max: 31.1", + "x": 65, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(34, 90, 166)", + "description": "Day: 7; Month: Jun; Max of temp_max: 30.6", + "x": 78, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(33, 107, 174)", + "description": "Day: 8; Month: Jun; Max of temp_max: 28.9", + "x": 91, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(37, 141, 187)", + "description": "Day: 9; Month: Jun; Max of temp_max: 25.6", + "x": 104, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(42, 152, 190)", + "description": "Day: 10; Month: Jun; Max of temp_max: 24.4", + "x": 117, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(62, 174, 193)", + "description": "Day: 11; Month: Jun; Max of temp_max: 21.7", + "x": 130, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(44, 157, 192)", + "description": "Day: 12; Month: Jun; Max of temp_max: 23.9", + "x": 143, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(33, 119, 179)", + "description": "Day: 13; Month: Jun; Max of temp_max: 27.8", + "x": 156, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(33, 96, 169)", + "description": "Day: 14; Month: Jun; Max of temp_max: 30", + "x": 169, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(44, 157, 192)", + "description": "Day: 15; Month: Jun; Max of temp_max: 23.9", + "x": 182, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(37, 141, 187)", + "description": "Day: 16; Month: Jun; Max of temp_max: 25.6", + "x": 195, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(42, 152, 190)", + "description": "Day: 17; Month: Jun; Max of temp_max: 24.4", + "x": 208, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(37, 141, 187)", + "description": "Day: 18; Month: Jun; Max of temp_max: 25.6", + "x": 221, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(40, 147, 189)", + "description": "Day: 19; Month: Jun; Max of temp_max: 25", + "x": 234, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(37, 141, 187)", + "description": "Day: 20; Month: Jun; Max of temp_max: 25.6", + "x": 247, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(37, 141, 187)", + "description": "Day: 21; Month: Jun; Max of temp_max: 25.6", + "x": 260, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(35, 136, 186)", + "description": "Day: 22; Month: Jun; Max of temp_max: 26.1", + "x": 273, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(37, 141, 187)", + "description": "Day: 23; Month: Jun; Max of temp_max: 25.6", + "x": 286, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(34, 90, 166)", + "description": "Day: 24; Month: Jun; Max of temp_max: 30.6", + "x": 299, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(34, 80, 161)", + "description": "Day: 25; Month: Jun; Max of temp_max: 31.7", + "x": 312, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(33, 66, 151)", + "description": "Day: 26; Month: Jun; Max of temp_max: 33.3", + "x": 325, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(34, 90, 166)", + "description": "Day: 27; Month: Jun; Max of temp_max: 30.6", + "x": 338, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(33, 96, 169)", + "description": "Day: 28; Month: Jun; Max of temp_max: 30", + "x": 351, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(32, 62, 146)", + "description": "Day: 29; Month: Jun; Max of temp_max: 33.9", + "x": 364, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(31, 58, 142)", + "description": "Day: 30; Month: Jun; Max of temp_max: 34.4", + "x": 377, + "width": 13, + "y": 65, + "height": 13 + }, + { + "fill": "rgb(32, 62, 146)", + "description": "Day: 1; Month: Jul; Max of temp_max: 33.9", + "x": 0, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(33, 66, 151)", + "description": "Day: 2; Month: Jul; Max of temp_max: 33.3", + "x": 13, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(33, 66, 151)", + "description": "Day: 3; Month: Jul; Max of temp_max: 33.3", + "x": 26, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(35, 70, 155)", + "description": "Day: 4; Month: Jul; Max of temp_max: 32.8", + "x": 39, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(33, 102, 171)", + "description": "Day: 5; Month: Jul; Max of temp_max: 29.4", + "x": 52, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(33, 125, 182)", + "description": "Day: 6; Month: Jul; Max of temp_max: 27.2", + "x": 65, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(33, 96, 169)", + "description": "Day: 7; Month: Jul; Max of temp_max: 30", + "x": 78, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(33, 96, 169)", + "description": "Day: 8; Month: Jul; Max of temp_max: 30", + "x": 91, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(33, 107, 174)", + "description": "Day: 9; Month: Jul; Max of temp_max: 28.9", + "x": 104, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(34, 86, 163)", + "description": "Day: 10; Month: Jul; Max of temp_max: 31.1", + "x": 117, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(35, 75, 158)", + "description": "Day: 11; Month: Jul; Max of temp_max: 32.2", + "x": 130, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(33, 102, 171)", + "description": "Day: 12; Month: Jul; Max of temp_max: 29.4", + "x": 143, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(33, 119, 179)", + "description": "Day: 13; Month: Jul; Max of temp_max: 27.8", + "x": 156, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(34, 86, 163)", + "description": "Day: 14; Month: Jul; Max of temp_max: 31.1", + "x": 169, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(34, 86, 163)", + "description": "Day: 15; Month: Jul; Max of temp_max: 31.1", + "x": 182, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(33, 119, 179)", + "description": "Day: 16; Month: Jul; Max of temp_max: 27.8", + "x": 195, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(33, 66, 151)", + "description": "Day: 17; Month: Jul; Max of temp_max: 33.3", + "x": 208, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(29, 53, 138)", + "description": "Day: 18; Month: Jul; Max of temp_max: 35", + "x": 221, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(33, 130, 184)", + "description": "Day: 19; Month: Jul; Max of temp_max: 26.7", + "x": 234, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(44, 157, 192)", + "description": "Day: 20; Month: Jul; Max of temp_max: 23.9", + "x": 247, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(35, 136, 186)", + "description": "Day: 21; Month: Jul; Max of temp_max: 26.1", + "x": 260, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(34, 86, 163)", + "description": "Day: 22; Month: Jul; Max of temp_max: 31.1", + "x": 273, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(34, 86, 163)", + "description": "Day: 23; Month: Jul; Max of temp_max: 31.1", + "x": 286, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(34, 86, 163)", + "description": "Day: 24; Month: Jul; Max of temp_max: 31.1", + "x": 299, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(34, 86, 163)", + "description": "Day: 25; Month: Jul; Max of temp_max: 31.1", + "x": 312, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(33, 114, 177)", + "description": "Day: 26; Month: Jul; Max of temp_max: 28.3", + "x": 325, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(34, 90, 166)", + "description": "Day: 27; Month: Jul; Max of temp_max: 30.6", + "x": 338, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(35, 75, 158)", + "description": "Day: 28; Month: Jul; Max of temp_max: 32.2", + "x": 351, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(31, 58, 142)", + "description": "Day: 29; Month: Jul; Max of temp_max: 34.4", + "x": 364, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(31, 58, 142)", + "description": "Day: 30; Month: Jul; Max of temp_max: 34.4", + "x": 377, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(33, 66, 151)", + "description": "Day: 31; Month: Jul; Max of temp_max: 33.3", + "x": 390, + "width": 13, + "y": 78, + "height": 13 + }, + { + "fill": "rgb(34, 90, 166)", + "description": "Day: 1; Month: Aug; Max of temp_max: 30.6", + "x": 0, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(34, 80, 161)", + "description": "Day: 2; Month: Aug; Max of temp_max: 31.7", + "x": 13, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(32, 62, 146)", + "description": "Day: 3; Month: Aug; Max of temp_max: 33.9", + "x": 26, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(32, 62, 146)", + "description": "Day: 4; Month: Aug; Max of temp_max: 33.9", + "x": 39, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(34, 90, 166)", + "description": "Day: 5; Month: Aug; Max of temp_max: 30.6", + "x": 52, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(34, 86, 163)", + "description": "Day: 6; Month: Aug; Max of temp_max: 31.1", + "x": 65, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(33, 114, 177)", + "description": "Day: 7; Month: Aug; Max of temp_max: 28.3", + "x": 78, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(33, 114, 177)", + "description": "Day: 8; Month: Aug; Max of temp_max: 28.3", + "x": 91, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(34, 90, 166)", + "description": "Day: 9; Month: Aug; Max of temp_max: 30.6", + "x": 104, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(28, 49, 133)", + "description": "Day: 10; Month: Aug; Max of temp_max: 35.6", + "x": 117, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(34, 90, 166)", + "description": "Day: 11; Month: Aug; Max of temp_max: 30.6", + "x": 130, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(34, 90, 166)", + "description": "Day: 12; Month: Aug; Max of temp_max: 30.6", + "x": 143, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(33, 107, 174)", + "description": "Day: 13; Month: Aug; Max of temp_max: 28.9", + "x": 156, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(34, 86, 163)", + "description": "Day: 14; Month: Aug; Max of temp_max: 31.1", + "x": 169, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(31, 58, 142)", + "description": "Day: 15; Month: Aug; Max of temp_max: 34.4", + "x": 182, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(35, 70, 155)", + "description": "Day: 16; Month: Aug; Max of temp_max: 32.8", + "x": 195, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(33, 96, 169)", + "description": "Day: 17; Month: Aug; Max of temp_max: 30", + "x": 208, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(34, 80, 161)", + "description": "Day: 18; Month: Aug; Max of temp_max: 31.7", + "x": 221, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(37, 141, 187)", + "description": "Day: 19; Month: Aug; Max of temp_max: 25.6", + "x": 234, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(33, 119, 179)", + "description": "Day: 20; Month: Aug; Max of temp_max: 27.8", + "x": 247, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(33, 107, 174)", + "description": "Day: 21; Month: Aug; Max of temp_max: 28.9", + "x": 260, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(33, 119, 179)", + "description": "Day: 22; Month: Aug; Max of temp_max: 27.8", + "x": 273, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(40, 147, 189)", + "description": "Day: 23; Month: Aug; Max of temp_max: 25", + "x": 286, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(33, 107, 174)", + "description": "Day: 24; Month: Aug; Max of temp_max: 28.9", + "x": 299, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(34, 86, 163)", + "description": "Day: 25; Month: Aug; Max of temp_max: 31.1", + "x": 312, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(33, 102, 171)", + "description": "Day: 26; Month: Aug; Max of temp_max: 29.4", + "x": 325, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(33, 130, 184)", + "description": "Day: 27; Month: Aug; Max of temp_max: 26.7", + "x": 338, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(44, 157, 192)", + "description": "Day: 28; Month: Aug; Max of temp_max: 23.9", + "x": 351, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(35, 136, 186)", + "description": "Day: 29; Month: Aug; Max of temp_max: 26.1", + "x": 364, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(33, 119, 179)", + "description": "Day: 30; Month: Aug; Max of temp_max: 27.8", + "x": 377, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(33, 119, 179)", + "description": "Day: 31; Month: Aug; Max of temp_max: 27.8", + "x": 390, + "width": 13, + "y": 91, + "height": 13 + }, + { + "fill": "rgb(33, 119, 179)", + "description": "Day: 1; Month: Sep; Max of temp_max: 27.8", + "x": 0, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(40, 147, 189)", + "description": "Day: 2; Month: Sep; Max of temp_max: 25", + "x": 13, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(42, 152, 190)", + "description": "Day: 3; Month: Sep; Max of temp_max: 24.4", + "x": 26, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(33, 119, 179)", + "description": "Day: 4; Month: Sep; Max of temp_max: 27.8", + "x": 39, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(35, 75, 158)", + "description": "Day: 5; Month: Sep; Max of temp_max: 32.2", + "x": 52, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(35, 75, 158)", + "description": "Day: 6; Month: Sep; Max of temp_max: 32.2", + "x": 65, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(33, 130, 184)", + "description": "Day: 7; Month: Sep; Max of temp_max: 26.7", + "x": 78, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(35, 136, 186)", + "description": "Day: 8; Month: Sep; Max of temp_max: 26.1", + "x": 91, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(33, 130, 184)", + "description": "Day: 9; Month: Sep; Max of temp_max: 26.7", + "x": 104, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(32, 62, 146)", + "description": "Day: 10; Month: Sep; Max of temp_max: 33.9", + "x": 117, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(33, 130, 184)", + "description": "Day: 11; Month: Sep; Max of temp_max: 26.7", + "x": 130, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(33, 114, 177)", + "description": "Day: 12; Month: Sep; Max of temp_max: 28.3", + "x": 143, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(33, 96, 169)", + "description": "Day: 13; Month: Sep; Max of temp_max: 30", + "x": 156, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(34, 90, 166)", + "description": "Day: 14; Month: Sep; Max of temp_max: 30.6", + "x": 169, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(42, 152, 190)", + "description": "Day: 15; Month: Sep; Max of temp_max: 24.4", + "x": 182, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(33, 119, 179)", + "description": "Day: 16; Month: Sep; Max of temp_max: 27.8", + "x": 195, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(33, 119, 179)", + "description": "Day: 17; Month: Sep; Max of temp_max: 27.8", + "x": 208, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(37, 141, 187)", + "description": "Day: 18; Month: Sep; Max of temp_max: 25.6", + "x": 221, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(42, 152, 190)", + "description": "Day: 19; Month: Sep; Max of temp_max: 24.4", + "x": 234, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(35, 136, 186)", + "description": "Day: 20; Month: Sep; Max of temp_max: 26.1", + "x": 247, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(58, 170, 193)", + "description": "Day: 21; Month: Sep; Max of temp_max: 22.2", + "x": 260, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(72, 181, 194)", + "description": "Day: 22; Month: Sep; Max of temp_max: 20.6", + "x": 273, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(58, 170, 193)", + "description": "Day: 23; Month: Sep; Max of temp_max: 22.2", + "x": 286, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(62, 174, 193)", + "description": "Day: 24; Month: Sep; Max of temp_max: 21.7", + "x": 299, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(79, 185, 193)", + "description": "Day: 25; Month: Sep; Max of temp_max: 20", + "x": 312, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(52, 165, 193)", + "description": "Day: 26; Month: Sep; Max of temp_max: 22.8", + "x": 325, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(40, 147, 189)", + "description": "Day: 27; Month: Sep; Max of temp_max: 25", + "x": 338, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(62, 174, 193)", + "description": "Day: 28; Month: Sep; Max of temp_max: 21.7", + "x": 351, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(67, 178, 194)", + "description": "Day: 29; Month: Sep; Max of temp_max: 21.1", + "x": 364, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(48, 162, 192)", + "description": "Day: 30; Month: Sep; Max of temp_max: 23.3", + "x": 377, + "width": 13, + "y": 104, + "height": 13 + }, + { + "fill": "rgb(87, 188, 192)", + "description": "Day: 1; Month: Oct; Max of temp_max: 19.4", + "x": 0, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(58, 170, 193)", + "description": "Day: 2; Month: Oct; Max of temp_max: 22.2", + "x": 13, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(52, 165, 193)", + "description": "Day: 3; Month: Oct; Max of temp_max: 22.8", + "x": 26, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(44, 157, 192)", + "description": "Day: 4; Month: Oct; Max of temp_max: 23.9", + "x": 39, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(37, 141, 187)", + "description": "Day: 5; Month: Oct; Max of temp_max: 25.6", + "x": 52, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(44, 157, 192)", + "description": "Day: 6; Month: Oct; Max of temp_max: 23.9", + "x": 65, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(67, 178, 194)", + "description": "Day: 7; Month: Oct; Max of temp_max: 21.1", + "x": 78, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(87, 188, 192)", + "description": "Day: 8; Month: Oct; Max of temp_max: 19.4", + "x": 91, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(67, 178, 194)", + "description": "Day: 9; Month: Oct; Max of temp_max: 21.1", + "x": 104, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(100, 195, 191)", + "description": "Day: 10; Month: Oct; Max of temp_max: 18.3", + "x": 117, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(100, 195, 191)", + "description": "Day: 11; Month: Oct; Max of temp_max: 18.3", + "x": 130, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(67, 178, 194)", + "description": "Day: 12; Month: Oct; Max of temp_max: 21.1", + "x": 143, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(106, 198, 190)", + "description": "Day: 13; Month: Oct; Max of temp_max: 17.8", + "x": 156, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(67, 178, 194)", + "description": "Day: 14; Month: Oct; Max of temp_max: 21.1", + "x": 169, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(72, 181, 194)", + "description": "Day: 15; Month: Oct; Max of temp_max: 20.6", + "x": 182, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(87, 188, 192)", + "description": "Day: 16; Month: Oct; Max of temp_max: 19.4", + "x": 195, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(87, 188, 192)", + "description": "Day: 17; Month: Oct; Max of temp_max: 19.4", + "x": 208, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(58, 170, 193)", + "description": "Day: 18; Month: Oct; Max of temp_max: 22.2", + "x": 221, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(106, 198, 190)", + "description": "Day: 19; Month: Oct; Max of temp_max: 17.8", + "x": 234, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(131, 207, 187)", + "description": "Day: 20; Month: Oct; Max of temp_max: 16.1", + "x": 247, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(131, 207, 187)", + "description": "Day: 21; Month: Oct; Max of temp_max: 16.1", + "x": 260, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(156, 216, 184)", + "description": "Day: 22; Month: Oct; Max of temp_max: 14.4", + "x": 273, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(147, 213, 185)", + "description": "Day: 23; Month: Oct; Max of temp_max: 15", + "x": 286, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(87, 188, 192)", + "description": "Day: 24; Month: Oct; Max of temp_max: 19.4", + "x": 299, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 25; Month: Oct; Max of temp_max: 12.8", + "x": 312, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(131, 207, 187)", + "description": "Day: 26; Month: Oct; Max of temp_max: 16.1", + "x": 325, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(147, 213, 185)", + "description": "Day: 27; Month: Oct; Max of temp_max: 15", + "x": 338, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(122, 204, 188)", + "description": "Day: 28; Month: Oct; Max of temp_max: 16.7", + "x": 351, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(115, 201, 189)", + "description": "Day: 29; Month: Oct; Max of temp_max: 17.2", + "x": 364, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(139, 209, 186)", + "description": "Day: 30; Month: Oct; Max of temp_max: 15.6", + "x": 377, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(106, 198, 190)", + "description": "Day: 31; Month: Oct; Max of temp_max: 17.8", + "x": 390, + "width": 13, + "y": 117, + "height": 13 + }, + { + "fill": "rgb(147, 213, 185)", + "description": "Day: 1; Month: Nov; Max of temp_max: 15", + "x": 0, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(139, 209, 186)", + "description": "Day: 2; Month: Nov; Max of temp_max: 15.6", + "x": 13, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(106, 198, 190)", + "description": "Day: 3; Month: Nov; Max of temp_max: 17.8", + "x": 26, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(147, 213, 185)", + "description": "Day: 4; Month: Nov; Max of temp_max: 15", + "x": 39, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(122, 204, 188)", + "description": "Day: 5; Month: Nov; Max of temp_max: 16.7", + "x": 52, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(156, 216, 184)", + "description": "Day: 6; Month: Nov; Max of temp_max: 14.4", + "x": 65, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(171, 222, 183)", + "description": "Day: 7; Month: Nov; Max of temp_max: 13.3", + "x": 78, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(171, 222, 183)", + "description": "Day: 8; Month: Nov; Max of temp_max: 13.3", + "x": 91, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(198, 233, 181)", + "description": "Day: 9; Month: Nov; Max of temp_max: 11.1", + "x": 104, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(131, 207, 187)", + "description": "Day: 10; Month: Nov; Max of temp_max: 16.1", + "x": 117, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(139, 209, 186)", + "description": "Day: 11; Month: Nov; Max of temp_max: 15.6", + "x": 130, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(163, 219, 184)", + "description": "Day: 12; Month: Nov; Max of temp_max: 13.9", + "x": 143, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(198, 233, 181)", + "description": "Day: 13; Month: Nov; Max of temp_max: 11.1", + "x": 156, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(203, 235, 181)", + "description": "Day: 14; Month: Nov; Max of temp_max: 10.6", + "x": 169, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(209, 237, 180)", + "description": "Day: 15; Month: Nov; Max of temp_max: 10", + "x": 182, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(171, 222, 183)", + "description": "Day: 16; Month: Nov; Max of temp_max: 13.3", + "x": 195, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 17; Month: Nov; Max of temp_max: 12.8", + "x": 208, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(171, 222, 183)", + "description": "Day: 18; Month: Nov; Max of temp_max: 13.3", + "x": 221, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(198, 233, 181)", + "description": "Day: 19; Month: Nov; Max of temp_max: 11.1", + "x": 234, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(198, 233, 181)", + "description": "Day: 20; Month: Nov; Max of temp_max: 11.1", + "x": 247, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(209, 237, 180)", + "description": "Day: 21; Month: Nov; Max of temp_max: 10", + "x": 260, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 22; Month: Nov; Max of temp_max: 12.8", + "x": 273, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(192, 230, 181)", + "description": "Day: 23; Month: Nov; Max of temp_max: 11.7", + "x": 286, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(163, 219, 184)", + "description": "Day: 24; Month: Nov; Max of temp_max: 13.9", + "x": 299, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(147, 213, 185)", + "description": "Day: 25; Month: Nov; Max of temp_max: 15", + "x": 312, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(156, 216, 184)", + "description": "Day: 26; Month: Nov; Max of temp_max: 14.4", + "x": 325, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 27; Month: Nov; Max of temp_max: 12.8", + "x": 338, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 28; Month: Nov; Max of temp_max: 12.8", + "x": 351, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(147, 213, 185)", + "description": "Day: 29; Month: Nov; Max of temp_max: 15", + "x": 364, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(171, 222, 183)", + "description": "Day: 30; Month: Nov; Max of temp_max: 13.3", + "x": 377, + "width": 13, + "y": 130, + "height": 13 + }, + { + "fill": "rgb(203, 235, 181)", + "description": "Day: 1; Month: Dec; Max of temp_max: 10.6", + "x": 0, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(139, 209, 186)", + "description": "Day: 2; Month: Dec; Max of temp_max: 15.6", + "x": 13, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(192, 230, 181)", + "description": "Day: 3; Month: Dec; Max of temp_max: 11.7", + "x": 26, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 4; Month: Dec; Max of temp_max: 12.8", + "x": 39, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 5; Month: Dec; Max of temp_max: 12.8", + "x": 52, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(156, 216, 184)", + "description": "Day: 6; Month: Dec; Max of temp_max: 14.4", + "x": 65, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(139, 209, 186)", + "description": "Day: 7; Month: Dec; Max of temp_max: 15.6", + "x": 78, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(131, 207, 187)", + "description": "Day: 8; Month: Dec; Max of temp_max: 16.1", + "x": 91, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(93, 191, 191)", + "description": "Day: 9; Month: Dec; Max of temp_max: 18.9", + "x": 104, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(156, 216, 184)", + "description": "Day: 10; Month: Dec; Max of temp_max: 14.4", + "x": 117, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(198, 233, 181)", + "description": "Day: 11; Month: Dec; Max of temp_max: 11.1", + "x": 130, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(209, 237, 180)", + "description": "Day: 12; Month: Dec; Max of temp_max: 10", + "x": 143, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 13; Month: Dec; Max of temp_max: 12.8", + "x": 156, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(186, 228, 181)", + "description": "Day: 14; Month: Dec; Max of temp_max: 12.2", + "x": 169, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(209, 237, 180)", + "description": "Day: 15; Month: Dec; Max of temp_max: 10", + "x": 182, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(220, 241, 180)", + "description": "Day: 16; Month: Dec; Max of temp_max: 8.9", + "x": 195, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(215, 240, 180)", + "description": "Day: 17; Month: Dec; Max of temp_max: 9.4", + "x": 208, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(198, 233, 181)", + "description": "Day: 18; Month: Dec; Max of temp_max: 11.1", + "x": 221, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 19; Month: Dec; Max of temp_max: 12.8", + "x": 234, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(178, 225, 182)", + "description": "Day: 20; Month: Dec; Max of temp_max: 12.8", + "x": 247, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(203, 235, 181)", + "description": "Day: 21; Month: Dec; Max of temp_max: 10.6", + "x": 260, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(186, 228, 181)", + "description": "Day: 22; Month: Dec; Max of temp_max: 12.2", + "x": 273, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(224, 243, 182)", + "description": "Day: 23; Month: Dec; Max of temp_max: 8.3", + "x": 286, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(227, 244, 184)", + "description": "Day: 24; Month: Dec; Max of temp_max: 7.8", + "x": 299, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(235, 247, 187)", + "description": "Day: 25; Month: Dec; Max of temp_max: 6.7", + "x": 312, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(215, 240, 180)", + "description": "Day: 26; Month: Dec; Max of temp_max: 9.4", + "x": 325, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(215, 240, 180)", + "description": "Day: 27; Month: Dec; Max of temp_max: 9.4", + "x": 338, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(232, 246, 186)", + "description": "Day: 28; Month: Dec; Max of temp_max: 7.2", + "x": 351, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(220, 241, 180)", + "description": "Day: 29; Month: Dec; Max of temp_max: 8.9", + "x": 364, + "width": 13, + "y": 143, + "height": 13 + }, + { + "fill": "rgb(224, 243, 182)", + "description": "Day: 30; Month: Dec; Max of temp_max: 8.3", + "x": 377, + "width": 13, + "y": 143, + "height": 13 + } + ], + "marktype": "rect", + "name": "marks", + "role": "mark", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "x": 0, + "y": 0, + "width": 16, + "height": 156, + "stroke": "#ddd", + "strokeWidth": 0, + "fill": { + "x1": 0, + "y1": 1, + "x2": 0, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "rgb(239, 249, 189)" + }, + { + "offset": 0.06440677966101696, + "color": "rgb(226, 244, 183)" + }, + { + "offset": 0.1322033898305085, + "color": "rgb(209, 237, 180)" + }, + { + "offset": 0.2, + "color": "rgb(189, 229, 181)" + }, + { + "offset": 0.2677966101694915, + "color": "rgb(161, 218, 184)" + }, + { + "offset": 0.3355932203389831, + "color": "rgb(133, 207, 187)" + }, + { + "offset": 0.4033898305084746, + "color": "rgb(104, 196, 190)" + }, + { + "offset": 0.4711864406779661, + "color": "rgb(79, 185, 193)" + }, + { + "offset": 0.5389830508474577, + "color": "rgb(59, 171, 193)" + }, + { + "offset": 0.6067796610169491, + "color": "rgb(43, 156, 191)" + }, + { + "offset": 0.6745762711864406, + "color": "rgb(36, 137, 186)" + }, + { + "offset": 0.7423728813559322, + "color": "rgb(33, 117, 178)" + }, + { + "offset": 0.8101694915254237, + "color": "rgb(33, 96, 169)" + }, + { + "offset": 0.8779661016949152, + "color": "rgb(35, 77, 159)" + }, + { + "offset": 0.9457627118644067, + "color": "rgb(32, 61, 145)" + }, + { + "offset": 1, + "color": "rgb(28, 49, 133)" + } + ] + } + } + ], + "marktype": "rect", + "role": "legend-gradient", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "fill": "#000", + "font": "sans-serif", + "fontSize": 10, + "opacity": 1, + "align": "left", + "baseline": "bottom", + "y": 156, + "x": 18, + "text": "6" + }, + { + "fill": "#000", + "font": "sans-serif", + "fontSize": 10, + "opacity": 1, + "align": "left", + "baseline": "top", + "y": 0, + "x": 18, + "text": "36" + } + ], + "marktype": "text", + "role": "legend-label", + "zindex": 0 + } + ], + "x": 0, + "y": 0 + } + ], + "marktype": "group", + "role": "legend-entry", + "zindex": 0 + } + ], + "orient": "right", + "x": 421, + "y": 0, + "width": 30, + "height": 156 + } + ], + "marktype": "group", + "role": "legend", + "zindex": 0 + } + ], + "fill": "transparent", + "x": 0, + "y": 0, + "width": 403, + "height": 156, + "stroke": "transparent" + } + ], + "marktype": "group", + "name": "root", + "role": "frame", + "zindex": 0 + } +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/image/large_images.sg.json b/sg2d-vega-test-data/vega-scenegraphs/image/large_images.sg.json index 0570fd6..7331519 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/image/large_images.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/image/large_images.sg.json @@ -76,6 +76,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 200.5 } @@ -150,6 +151,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } @@ -241,6 +243,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 200.5 } @@ -331,6 +334,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } diff --git a/sg2d-vega-test-data/vega-scenegraphs/image/logos.sg.json b/sg2d-vega-test-data/vega-scenegraphs/image/logos.sg.json index 3d9cedb..bba04db 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/image/logos.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/image/logos.sg.json @@ -76,6 +76,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 200.5 } @@ -150,6 +151,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } @@ -241,6 +243,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 200.5 } @@ -331,6 +334,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } diff --git a/sg2d-vega-test-data/vega-scenegraphs/image/logos_sized_aspect_false.sg.json b/sg2d-vega-test-data/vega-scenegraphs/image/logos_sized_aspect_false.sg.json index 823a842..c4b5915 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/image/logos_sized_aspect_false.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/image/logos_sized_aspect_false.sg.json @@ -76,6 +76,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 200.5 } @@ -150,6 +151,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } @@ -241,6 +243,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 200.5 } @@ -331,6 +334,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } diff --git a/sg2d-vega-test-data/vega-scenegraphs/image/logos_sized_aspect_false_align_baseline.sg.json b/sg2d-vega-test-data/vega-scenegraphs/image/logos_sized_aspect_false_align_baseline.sg.json index 00e07e7..cb5cbb3 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/image/logos_sized_aspect_false_align_baseline.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/image/logos_sized_aspect_false_align_baseline.sg.json @@ -76,6 +76,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 200.5 } @@ -150,6 +151,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } @@ -241,6 +243,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 200.5 } @@ -331,6 +334,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } diff --git a/sg2d-vega-test-data/vega-scenegraphs/image/logos_sized_aspect_true_align_baseline.sg.json b/sg2d-vega-test-data/vega-scenegraphs/image/logos_sized_aspect_true_align_baseline.sg.json index e94a711..39f0cca 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/image/logos_sized_aspect_true_align_baseline.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/image/logos_sized_aspect_true_align_baseline.sg.json @@ -76,6 +76,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 200.5 } @@ -150,6 +151,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } @@ -241,6 +243,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 200.5 } @@ -331,6 +334,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } diff --git a/sg2d-vega-test-data/vega-scenegraphs/image/many_images.sg.json b/sg2d-vega-test-data/vega-scenegraphs/image/many_images.sg.json index 3b5b398..38fcc0e 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/image/many_images.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/image/many_images.sg.json @@ -84,6 +84,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 200.5 } @@ -166,6 +167,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } @@ -265,6 +267,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 200.5 } @@ -363,6 +366,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } diff --git a/sg2d-vega-test-data/vega-scenegraphs/image/smooth_false.sg.json b/sg2d-vega-test-data/vega-scenegraphs/image/smooth_false.sg.json index 9c3379c..e17000f 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/image/smooth_false.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/image/smooth_false.sg.json @@ -156,6 +156,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 600.5 } @@ -310,6 +311,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } @@ -481,6 +483,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 600.5 } @@ -651,6 +654,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } diff --git a/sg2d-vega-test-data/vega-scenegraphs/image/smooth_true.sg.json b/sg2d-vega-test-data/vega-scenegraphs/image/smooth_true.sg.json index d3f1f67..88b9ce4 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/image/smooth_true.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/image/smooth_true.sg.json @@ -156,6 +156,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 600.5 } @@ -310,6 +311,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } @@ -481,6 +483,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 600.5 } @@ -651,6 +654,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } diff --git a/sg2d-vega-test-data/vega-scenegraphs/rule/wide_rule_axes.sg.json b/sg2d-vega-test-data/vega-scenegraphs/rule/wide_rule_axes.sg.json index 1a4cb33..ddac868 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/rule/wide_rule_axes.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/rule/wide_rule_axes.sg.json @@ -133,6 +133,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 200.5 } @@ -223,6 +224,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } diff --git a/sg2d-vega-test-data/vega-scenegraphs/text/bar_axis_labels.sg.json b/sg2d-vega-test-data/vega-scenegraphs/text/bar_axis_labels.sg.json index 49985da..d68adbd 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/text/bar_axis_labels.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/text/bar_axis_labels.sg.json @@ -92,6 +92,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 60.5 } @@ -334,6 +335,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 60.5 } @@ -512,6 +514,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } diff --git a/sg2d-vega-test-data/vega-scenegraphs/text/letter_scatter.sg.json b/sg2d-vega-test-data/vega-scenegraphs/text/letter_scatter.sg.json index 6c91bfb..f67d243 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/text/letter_scatter.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/text/letter_scatter.sg.json @@ -132,6 +132,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 400.5 } @@ -246,6 +247,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } @@ -593,6 +595,7 @@ } ], "orient": "bottom", + "offset": 0, "x": 0.5, "y": 400.5 } @@ -897,6 +900,7 @@ } ], "orient": "left", + "offset": 0, "x": 0.5, "y": 0.5 } diff --git a/sg2d-vega-test-data/vega-specs/gradients/heatmap_with_colorbar.vg.json b/sg2d-vega-test-data/vega-specs/gradients/heatmap_with_colorbar.vg.json new file mode 100644 index 0000000..2e3c820 --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/gradients/heatmap_with_colorbar.vg.json @@ -0,0 +1,98 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "background": "white", + "padding": 5, + "style": "cell", + "encode": {"update": {"stroke": {"value": "transparent"}}}, + "data": [ + { + "name": "source_0", + "url": "data/seattle-weather.csv", + "format": { + "type": "csv", + "parse": {"date": "date", "temp_max": "number"}, + "delimiter": "," + }, + "transform": [ + { + "field": "date", + "type": "timeunit", + "units": ["date"], + "as": ["date_date", "date_date_end"] + }, + { + "field": "date", + "type": "timeunit", + "units": ["month"], + "as": ["month_date", "month_date_end"] + }, + { + "type": "aggregate", + "groupby": ["date_date", "month_date"], + "ops": ["max"], + "fields": ["temp_max"], + "as": ["max_temp_max"] + }, + { + "type": "filter", + "expr": "isValid(datum[\"max_temp_max\"]) && isFinite(+datum[\"max_temp_max\"])" + } + ] + } + ], + "signals": [ + {"name": "x_step", "value": 13}, + {"name": "width", "update": "bandspace(domain('x').length, 0, 0) * x_step"}, + {"name": "y_step", "value": 13}, + {"name": "height", "update": "bandspace(domain('y').length, 0, 0) * y_step"} + ], + "marks": [ + { + "name": "marks", + "type": "rect", + "style": ["rect"], + "from": {"data": "source_0"}, + "encode": { + "update": { + "fill": {"scale": "color", "field": "max_temp_max"}, + "description": { + "signal": "\"Day: \" + (timeFormat(datum[\"date_date\"], '%e')) + \"; Month: \" + (timeFormat(datum[\"month_date\"], timeUnitSpecifier([\"month\"], {\"year-month\":\"%b %Y \",\"year-month-date\":\"%b %d, %Y \"}))) + \"; Max of temp_max: \" + (format(datum[\"max_temp_max\"], \"\"))" + }, + "x": {"scale": "x", "field": "date_date"}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, + "y": {"scale": "y", "field": "month_date"}, + "height": {"signal": "max(0.25, bandwidth('y'))"} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "band", + "domain": {"data": "source_0", "field": "date_date", "sort": true}, + "range": {"step": {"signal": "x_step"}}, + "paddingInner": 0, + "paddingOuter": 0 + }, + { + "name": "y", + "type": "band", + "domain": {"data": "source_0", "field": "month_date", "sort": true}, + "range": {"step": {"signal": "y_step"}}, + "paddingInner": 0, + "paddingOuter": 0 + }, + { + "name": "color", + "type": "linear", + "domain": {"data": "source_0", "field": "max_temp_max"}, + "range": "heatmap", + "interpolate": "hcl", + "zero": false + } + ], + "legends": [ + {"fill": "color", "gradientLength": {"signal": "clamp(height, 64, 200)"}} + ] +} \ No newline at end of file diff --git a/sg2d-vega/src/marks/rect.rs b/sg2d-vega/src/marks/rect.rs index d90a883..65f5115 100644 --- a/sg2d-vega/src/marks/rect.rs +++ b/sg2d-vega/src/marks/rect.rs @@ -1,9 +1,10 @@ use crate::error::VegaSceneGraphError; use crate::marks::mark::{VegaMarkContainer, VegaMarkItem}; +use crate::marks::values::CssColorOrGradient; use serde::{Deserialize, Serialize}; use sg2d::marks::mark::SceneMark; use sg2d::marks::rect::RectMark; -use sg2d::marks::value::EncodingValue; +use sg2d::marks::value::{ColorOrGradient, EncodingValue}; #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -14,8 +15,8 @@ pub struct VegaRectItem { pub height: Option, pub x2: Option, pub y2: Option, - pub fill: Option, - pub stroke: Option, + pub fill: Option, + pub stroke: Option, pub stroke_width: Option, pub corner_radius: Option, pub opacity: Option, @@ -42,8 +43,8 @@ impl VegaMarkContainer { let mut y = Vec::::new(); let mut width = Vec::::new(); let mut height = Vec::::new(); - let mut fill = Vec::<[f32; 4]>::new(); - let mut stroke = Vec::<[f32; 4]>::new(); + let mut fill = Vec::::new(); + let mut stroke = Vec::::new(); let mut stroke_width = Vec::::new(); let mut corner_radius = Vec::::new(); let mut zindex = Vec::::new(); @@ -59,16 +60,12 @@ impl VegaMarkContainer { height.push(v); } if let Some(v) = &item.fill { - let c = csscolorparser::parse(v)?; - let opacity = - c.a as f32 * item.fill_opacity.unwrap_or(1.0) * item.opacity.unwrap_or(1.0); - fill.push([c.r as f32, c.g as f32, c.b as f32, opacity]) + let opacity = item.fill_opacity.unwrap_or(1.0) * item.opacity.unwrap_or(1.0); + fill.push(v.to_color_or_grad(opacity)?); } if let Some(v) = &item.stroke { - let c = csscolorparser::parse(v)?; - let opacity = - c.a as f32 * item.stroke_opacity.unwrap_or(1.0) * item.opacity.unwrap_or(1.0); - stroke.push([c.r as f32, c.g as f32, c.b as f32, opacity]) + let opacity = item.stroke_opacity.unwrap_or(1.0) * item.opacity.unwrap_or(1.0); + stroke.push(v.to_color_or_grad(opacity)?); } if let Some(v) = item.stroke_width { stroke_width.push(v); diff --git a/sg2d-vega/src/marks/values.rs b/sg2d-vega/src/marks/values.rs index dfb6ed5..50ee045 100644 --- a/sg2d-vega/src/marks/values.rs +++ b/sg2d-vega/src/marks/values.rs @@ -1,5 +1,6 @@ use crate::error::VegaSceneGraphError; use serde::{Deserialize, Serialize}; +use sg2d::marks::value::{ColorOrGradient, GradientStop, LinearGradient, RadialGradient}; use std::borrow::Cow; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] @@ -28,3 +29,85 @@ impl StrokeDashSpec { } } } + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(untagged)] +pub enum CssColorOrGradient { + Color(String), + Gradient(CssGradient), +} + +impl CssColorOrGradient { + pub fn to_color_or_grad(&self, opacity: f32) -> Result { + match self { + CssColorOrGradient::Color(c) => { + let c = csscolorparser::parse(c)?; + Ok(ColorOrGradient::Color([ + c.r as f32, + c.g as f32, + c.b as f32, + c.a as f32 * opacity, + ])) + } + CssColorOrGradient::Gradient(grad) => Ok(match grad.gradient { + VegaGradientType::Linear => ColorOrGradient::LinearGradient(LinearGradient { + x0: grad.x1.unwrap_or(0.0), + y0: grad.y1.unwrap_or(0.0), + x1: grad.x2.unwrap_or(1.0), + y1: grad.y2.unwrap_or(0.0), + stops: grad + .stops + .iter() + .map(|s| s.to_grad_stop(opacity)) + .collect::, VegaSceneGraphError>>()?, + }), + VegaGradientType::Radial => ColorOrGradient::RadialGradient(RadialGradient { + x0: grad.x1.unwrap_or(0.5), + y0: grad.y1.unwrap_or(0.5), + x1: grad.x2.unwrap_or(0.5), + y1: grad.y2.unwrap_or(0.5), + r0: grad.r1.unwrap_or(0.0), + r1: grad.r2.unwrap_or(0.5), + stops: vec![], + }), + }), + } + } +} + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct CssGradient { + #[serde(default)] + gradient: VegaGradientType, + x1: Option, + y1: Option, + x2: Option, + y2: Option, + r1: Option, + r2: Option, + stops: Vec, +} + +#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "lowercase")] +pub enum VegaGradientType { + #[default] + Linear, + Radial, +} + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct CssGradientStop { + offset: f32, + color: String, +} + +impl CssGradientStop { + pub fn to_grad_stop(&self, opacity: f32) -> Result { + let c = csscolorparser::parse(&self.color)?; + Ok(GradientStop { + offset: self.offset, + color: [c.r as f32, c.g as f32, c.b as f32, c.a as f32 * opacity], + }) + } +} diff --git a/sg2d-wgpu/Cargo.toml b/sg2d-wgpu/Cargo.toml index 746d2c5..d39bf43 100644 --- a/sg2d-wgpu/Cargo.toml +++ b/sg2d-wgpu/Cargo.toml @@ -31,4 +31,5 @@ lyon = { workspace = true } sg2d-vega = { path = "../sg2d-vega" } serde_json = { version = "1.0.111" } dssim = "3.2.4" -rstest = "0.18.2" \ No newline at end of file +rstest = "0.18.2" +colorgrad = "0.6.2" diff --git a/sg2d-wgpu/src/marks/rect.rs b/sg2d-wgpu/src/marks/rect.rs index 8401e18..e55d9f1 100644 --- a/sg2d-wgpu/src/marks/rect.rs +++ b/sg2d-wgpu/src/marks/rect.rs @@ -1,6 +1,7 @@ use crate::marks::instanced_mark::InstancedMarkShader; use itertools::izip; use sg2d::marks::rect::RectMark; +use sg2d::marks::value::ColorOrGradient; use wgpu::VertexBufferLayout; #[repr(C)] @@ -58,14 +59,24 @@ impl RectInstance { mark.corner_radius_iter(), ) .map( - |(x, y, width, height, fill, stroke, stroke_width, corner_radius)| RectInstance { - position: [*x, *y], - width: *width, - height: *height, - fill: *fill, - stroke: *stroke, - stroke_width: *stroke_width, - corner_radius: *corner_radius, + |(x, y, width, height, fill, stroke, stroke_width, corner_radius)| { + let fill = match fill { + ColorOrGradient::Color(c) => c, + _ => todo!("Gradient fill not implemented"), + }; + let stroke = match stroke { + ColorOrGradient::Color(c) => c, + _ => todo!("Gradient stroke not implemented"), + }; + RectInstance { + position: [*x, *y], + width: *width, + height: *height, + fill: *fill, + stroke: *stroke, + stroke_width: *stroke_width, + corner_radius: *corner_radius, + } }, ) } diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index 52d0821..2f611bb 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -12,101 +12,103 @@ mod test_image_baselines { category, spec_name, tolerance, - case("rect", "stacked_bar", 0.001), - case("rect", "stacked_bar_stroke", 0.001), - case("rect", "stacked_bar_rounded", 0.001), - case("rect", "stacked_bar_rounded_stroke", 0.001), - case("rect", "stacked_bar_rounded_stroke_opacity", 0.009), - case("rect", "heatmap", 0.006), - case("symbol", "binned_scatter_diamonds", 0.001), - case("symbol", "binned_scatter_square", 0.001), - case("symbol", "binned_scatter_triangle-down", 0.001), - case("symbol", "binned_scatter_triangle-up", 0.001), - case("symbol", "binned_scatter_triangle-left", 0.001), - case("symbol", "binned_scatter_triangle-right", 0.001), - case("symbol", "binned_scatter_triangle", 0.001), - case("symbol", "binned_scatter_wedge", 0.001), - case("symbol", "binned_scatter_arrow", 0.001), - case("symbol", "binned_scatter_cross", 0.001), - case("symbol", "binned_scatter_circle", 0.001), - case("symbol", "binned_scatter_path", 0.001), - case("symbol", "binned_scatter_path_star", 0.001), - case("symbol", "binned_scatter_cross_stroke", 0.001), - case("symbol", "binned_scatter_circle_stroke", 0.001), - case("symbol", "binned_scatter_circle_stroke_no_fill", 0.001), - case("symbol", "binned_scatter_path_star_stroke_no_fill", 0.001), - case("symbol", "scatter_transparent_stroke", 0.001), - case("symbol", "scatter_transparent_stroke_star", 0.006), - case("symbol", "wind_vector", 0.0015), - case("symbol", "wedge_angle", 0.001), - case("symbol", "wedge_stroke_angle", 0.001), - case("symbol", "zindex_circles", 0.001), - case("symbol", "mixed_symbols", 0.001), - case("rule", "wide_rule_axes", 0.0001), - case("rule", "wide_transparent_caps", 0.0001), - case("rule", "dashed_rules", 0.0001), - case("text", "bar_axis_labels", 0.01), - case("text", "text_rotation", 0.015), - case("text", "letter_scatter", 0.012), - case("arc", "single_arc_no_inner", 0.0005), - case("arc", "single_arc_with_inner_radius", 0.0005), - case("arc", "single_arc_with_inner_radius_wrap", 0.0005), - case("arc", "single_arc_with_inner_radius_wrap_stroke", 0.0005), - case("arc", "arcs_with_variable_outer_radius", 0.0005), - case("arc", "arcs_with_variable_outer_radius_stroke", 0.0005), - case("arc", "arc_with_stroke", 0.0005), - case("path", "single_path_no_stroke", 0.0005), - case("path", "multi_path_no_stroke", 0.0005), + // case("rect", "stacked_bar", 0.001), + // case("rect", "stacked_bar_stroke", 0.001), + // case("rect", "stacked_bar_rounded", 0.001), + // case("rect", "stacked_bar_rounded_stroke", 0.001), + // case("rect", "stacked_bar_rounded_stroke_opacity", 0.009), + // case("rect", "heatmap", 0.006), + // case("symbol", "binned_scatter_diamonds", 0.001), + // case("symbol", "binned_scatter_square", 0.001), + // case("symbol", "binned_scatter_triangle-down", 0.001), + // case("symbol", "binned_scatter_triangle-up", 0.001), + // case("symbol", "binned_scatter_triangle-left", 0.001), + // case("symbol", "binned_scatter_triangle-right", 0.001), + // case("symbol", "binned_scatter_triangle", 0.001), + // case("symbol", "binned_scatter_wedge", 0.001), + // case("symbol", "binned_scatter_arrow", 0.001), + // case("symbol", "binned_scatter_cross", 0.001), + // case("symbol", "binned_scatter_circle", 0.001), + // case("symbol", "binned_scatter_path", 0.001), + // case("symbol", "binned_scatter_path_star", 0.001), + // case("symbol", "binned_scatter_cross_stroke", 0.001), + // case("symbol", "binned_scatter_circle_stroke", 0.001), + // case("symbol", "binned_scatter_circle_stroke_no_fill", 0.001), + // case("symbol", "binned_scatter_path_star_stroke_no_fill", 0.001), + // case("symbol", "scatter_transparent_stroke", 0.001), + // case("symbol", "scatter_transparent_stroke_star", 0.006), + // case("symbol", "wind_vector", 0.0015), + // case("symbol", "wedge_angle", 0.001), + // case("symbol", "wedge_stroke_angle", 0.001), + // case("symbol", "zindex_circles", 0.001), + // case("symbol", "mixed_symbols", 0.001), + // case("rule", "wide_rule_axes", 0.0001), + // case("rule", "wide_transparent_caps", 0.0001), + // case("rule", "dashed_rules", 0.0001), + // case("text", "bar_axis_labels", 0.01), + // case("text", "text_rotation", 0.015), + // case("text", "letter_scatter", 0.012), + // case("arc", "single_arc_no_inner", 0.0005), + // case("arc", "single_arc_with_inner_radius", 0.0005), + // case("arc", "single_arc_with_inner_radius_wrap", 0.0005), + // case("arc", "single_arc_with_inner_radius_wrap_stroke", 0.0005), + // case("arc", "arcs_with_variable_outer_radius", 0.0005), + // case("arc", "arcs_with_variable_outer_radius_stroke", 0.0005), + // case("arc", "arc_with_stroke", 0.0005), + // case("path", "single_path_no_stroke", 0.0005), + // case("path", "multi_path_no_stroke", 0.0005), + // + // // vl-convert/resvg messes up the path_with_stroke examples because it scales the path + // // width. The Vega editor renderers don't do this. + // case("path", "single_path_with_stroke", 0.8), + // case("path", "single_path_with_stroke_no_fill", 0.8), + // case("path", "multi_path_with_stroke", 0.8), + // case("path", "multi_path_with_stroke_no_fill", 0.8), + // + // // us-counties is a bit off due to how anti-aliasing results in light border between + // // adjacent shapes. The wgpu implementation doesn't have this border + // case("shape", "us-counties", 0.003), + // case("shape", "us-map", 0.0006), + // case("shape", "world-natural-earth-projection", 0.0006), + // case("shape", "london_tubes", 0.0002), + // + // case("line", "simple_line_round_cap", 0.0001), + // case("line", "simple_line_butt_cap_miter_join", 0.0001), + // // lyon seems to omit closing square cap, need to investigate + // case("line", "simple_line_square_cap_bevel_join", 0.002), + // case("line", "connected_scatter", 0.0008), + // case("line", "lines_with_open_symbols", 0.0004), + // case("line", "stocks", 0.0005), + // case("line", "stocks-legend", 0.003), + // case("line", "simple_dashed", 0.0005), + // case("line", "stocks_dashed", 0.001), + // case("line", "line_dashed_round_undefined", 0.0005), + // + // // lyon's square end cap doesn't seem to work + // case("line", "line_dashed_square_undefined", 0.007), + // case("line", "line_dashed_butt_undefined", 0.0005), + // + // case("area", "100_percent_stacked_area", 0.005), + // case("area", "simple_unemployment", 0.0005), + // case("area", "simple_unemployment_stroke", 0.0005), + // case("area", "stacked_area", 0.005), + // case("area", "streamgraph_area", 0.005), + // case("area", "with_undefined", 0.0005), + // case("area", "with_undefined_horizontal", 0.0005), + // + // case("trail", "trail_stocks", 0.0005), + // case("trail", "trail_stocks_opacity", 0.0005), + // + // case("image", "logos", 0.001), + // case("image", "logos_sized_aspect_false", 0.001), + // case("image", "logos_sized_aspect_false_align_baseline", 0.001), + // case("image", "logos_sized_aspect_true_align_baseline", 0.001), + // case("image", "smooth_false", 0.03), // vl-convert/resvg doesn't support smooth=false + // case("image", "smooth_true", 0.001), + // case("image", "many_images", 0.001), + // case("image", "large_images", 0.001), - // vl-convert/resvg messes up the path_with_stroke examples because it scales the path - // width. The Vega editor renderers don't do this. - case("path", "single_path_with_stroke", 0.8), - case("path", "single_path_with_stroke_no_fill", 0.8), - case("path", "multi_path_with_stroke", 0.8), - case("path", "multi_path_with_stroke_no_fill", 0.8), - - // us-counties is a bit off due to how anti-aliasing results in light border between - // adjacent shapes. The wgpu implementation doesn't have this border - case("shape", "us-counties", 0.003), - case("shape", "us-map", 0.0006), - case("shape", "world-natural-earth-projection", 0.0006), - case("shape", "london_tubes", 0.0002), - - case("line", "simple_line_round_cap", 0.0001), - case("line", "simple_line_butt_cap_miter_join", 0.0001), - // lyon seems to omit closing square cap, need to investigate - case("line", "simple_line_square_cap_bevel_join", 0.002), - case("line", "connected_scatter", 0.0008), - case("line", "lines_with_open_symbols", 0.0004), - case("line", "stocks", 0.0005), - case("line", "stocks-legend", 0.003), - case("line", "simple_dashed", 0.0005), - case("line", "stocks_dashed", 0.001), - case("line", "line_dashed_round_undefined", 0.0005), - - // lyon's square end cap doesn't seem to work - case("line", "line_dashed_square_undefined", 0.007), - case("line", "line_dashed_butt_undefined", 0.0005), - - case("area", "100_percent_stacked_area", 0.005), - case("area", "simple_unemployment", 0.0005), - case("area", "simple_unemployment_stroke", 0.0005), - case("area", "stacked_area", 0.005), - case("area", "streamgraph_area", 0.005), - case("area", "with_undefined", 0.0005), - case("area", "with_undefined_horizontal", 0.0005), - - case("trail", "trail_stocks", 0.0005), - case("trail", "trail_stocks_opacity", 0.0005), - - case("image", "logos", 0.001), - case("image", "logos_sized_aspect_false", 0.001), - case("image", "logos_sized_aspect_false_align_baseline", 0.001), - case("image", "logos_sized_aspect_true_align_baseline", 0.001), - case("image", "smooth_false", 0.03), // vl-convert/resvg doesn't support smooth=false - case("image", "smooth_true", 0.001), - case("image", "many_images", 0.001), - case("image", "large_images", 0.001), + case("gradients", "heatmap_with_colorbar", 0.001), )] fn test_image_baseline(category: &str, spec_name: &str, tolerance: f64) { let specs_dir = format!( diff --git a/sg2d/src/marks/rect.rs b/sg2d/src/marks/rect.rs index 341f4e2..b1615a9 100644 --- a/sg2d/src/marks/rect.rs +++ b/sg2d/src/marks/rect.rs @@ -1,4 +1,4 @@ -use crate::marks::value::EncodingValue; +use crate::marks::value::{ColorOrGradient, EncodingValue}; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] @@ -11,8 +11,8 @@ pub struct RectMark { pub y: EncodingValue, pub width: EncodingValue, pub height: EncodingValue, - pub fill: EncodingValue<[f32; 4]>, - pub stroke: EncodingValue<[f32; 4]>, + pub fill: EncodingValue, + pub stroke: EncodingValue, pub stroke_width: EncodingValue, pub corner_radius: EncodingValue, pub indices: Option>, @@ -36,11 +36,11 @@ impl RectMark { .as_iter(self.len as usize, self.indices.as_ref()) } - pub fn fill_iter(&self) -> Box + '_> { + pub fn fill_iter(&self) -> Box + '_> { self.fill.as_iter(self.len as usize, self.indices.as_ref()) } - pub fn stroke_iter(&self) -> Box + '_> { + pub fn stroke_iter(&self) -> Box + '_> { self.stroke .as_iter(self.len as usize, self.indices.as_ref()) } @@ -67,10 +67,10 @@ impl Default for RectMark { width: EncodingValue::Scalar { value: 0.0 }, height: EncodingValue::Scalar { value: 0.0 }, fill: EncodingValue::Scalar { - value: [0.0, 0.0, 0.0, 0.0], + value: ColorOrGradient::Color([0.0, 0.0, 0.0, 0.0]), }, stroke: EncodingValue::Scalar { - value: [0.0, 0.0, 0.0, 0.0], + value: ColorOrGradient::Color([0.0, 0.0, 0.0, 0.0]), }, stroke_width: EncodingValue::Scalar { value: 0.0 }, corner_radius: EncodingValue::Scalar { value: 0.0 }, diff --git a/sg2d/src/marks/value.rs b/sg2d/src/marks/value.rs index 7673329..67aa07d 100644 --- a/sg2d/src/marks/value.rs +++ b/sg2d/src/marks/value.rs @@ -58,3 +58,37 @@ pub enum ImageBaseline { Middle, Bottom, } + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(untagged)] +pub enum ColorOrGradient { + Color([f32; 4]), + LinearGradient(LinearGradient), + RadialGradient(RadialGradient), +} + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct LinearGradient { + pub x0: f32, + pub y0: f32, + pub x1: f32, + pub y1: f32, + pub stops: Vec, +} + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct RadialGradient { + pub x0: f32, + pub y0: f32, + pub x1: f32, + pub y1: f32, + pub r0: f32, + pub r1: f32, + pub stops: Vec, +} + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct GradientStop { + pub offset: f32, + pub color: [f32; 4], +} From 92596e9a1cabd2ce8a1b90b36d14d50dea405e5d Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Tue, 23 Jan 2024 08:47:43 -0500 Subject: [PATCH 02/27] Add TextureInstancedMarkRenderer --- sg2d-wgpu/src/canvas.rs | 20 ++ sg2d-wgpu/src/marks/image.rs | 4 +- sg2d-wgpu/src/marks/mod.rs | 1 + sg2d-wgpu/src/marks/texture_instanced_mark.rs | 302 ++++++++++++++++++ sg2d-wgpu/src/marks/texture_mark.rs | 6 +- 5 files changed, 329 insertions(+), 4 deletions(-) create mode 100644 sg2d-wgpu/src/marks/texture_instanced_mark.rs diff --git a/sg2d-wgpu/src/canvas.rs b/sg2d-wgpu/src/canvas.rs index ba6bfe5..06b4822 100644 --- a/sg2d-wgpu/src/canvas.rs +++ b/sg2d-wgpu/src/canvas.rs @@ -22,6 +22,7 @@ use crate::marks::rect::{RectInstance, RectShader}; use crate::marks::rule::{RuleInstance, RuleShader}; use crate::marks::symbol::{SymbolInstance, SymbolShader}; use crate::marks::text::{TextInstance, TextMarkRenderer}; +use crate::marks::texture_instanced_mark::TextureInstancedMarkRenderer; use crate::marks::texture_mark::TextureMarkRenderer; use sg2d::marks::arc::ArcMark; use sg2d::marks::area::AreaMark; @@ -46,6 +47,7 @@ pub enum MarkRenderer { Basic(BasicMarkRenderer), Instanced(InstancedMarkRenderer), Texture(TextureMarkRenderer), + TextureInstanced(TextureInstancedMarkRenderer), Text(TextMarkRenderer), } @@ -509,6 +511,13 @@ impl WindowCanvas { renderer.render(&self.device, &view, None) } } + MarkRenderer::TextureInstanced(renderer) => { + if self.sample_count > 1 { + renderer.render(&self.device, &self.multisampled_framebuffer, Some(&view)) + } else { + renderer.render(&self.device, &view, None) + } + } MarkRenderer::Text(renderer) => { if self.sample_count > 1 { renderer.render( @@ -723,6 +732,17 @@ impl PngCanvas { renderer.render(&self.device, &self.texture_view, None) } } + MarkRenderer::TextureInstanced(renderer) => { + if self.sample_count > 1 { + renderer.render( + &self.device, + &self.multisampled_framebuffer, + Some(&self.texture_view), + ) + } else { + renderer.render(&self.device, &self.texture_view, None) + } + } MarkRenderer::Text(mark) => { if self.sample_count > 1 { mark.render( diff --git a/sg2d-wgpu/src/marks/image.rs b/sg2d-wgpu/src/marks/image.rs index 2d98d6a..c40fc8a 100644 --- a/sg2d-wgpu/src/marks/image.rs +++ b/sg2d-wgpu/src/marks/image.rs @@ -83,7 +83,7 @@ impl ImageShader { // Current allocator is full // Add previous batch batches.push(TextureMarkBatch { - indices: start_index..indices.len() as u32, + indices_range: start_index..indices.len() as u32, image: image::DynamicImage::ImageRgba8(texture_image), }); @@ -210,7 +210,7 @@ impl ImageShader { indices.push(offset + 3); } batches.push(TextureMarkBatch { - indices: start_index..indices.len() as u32, + indices_range: start_index..indices.len() as u32, image: image::DynamicImage::ImageRgba8(texture_image), }); diff --git a/sg2d-wgpu/src/marks/mod.rs b/sg2d-wgpu/src/marks/mod.rs index 326c031..0e6dd2a 100644 --- a/sg2d-wgpu/src/marks/mod.rs +++ b/sg2d-wgpu/src/marks/mod.rs @@ -7,4 +7,5 @@ pub mod rect; pub mod rule; pub mod symbol; pub mod text; +pub mod texture_instanced_mark; pub mod texture_mark; diff --git a/sg2d-wgpu/src/marks/texture_instanced_mark.rs b/sg2d-wgpu/src/marks/texture_instanced_mark.rs new file mode 100644 index 0000000..0ffeb2b --- /dev/null +++ b/sg2d-wgpu/src/marks/texture_instanced_mark.rs @@ -0,0 +1,302 @@ +use crate::canvas::CanvasUniform; +use std::ops::Range; +use wgpu::util::DeviceExt; +use wgpu::{CommandBuffer, Device, Extent3d, ImageDataLayout, TextureFormat, TextureView}; + +#[derive(Clone)] +pub struct InstancedTextureMarkBatch { + pub instances_range: Range, + pub image: image::DynamicImage, +} + +pub trait TextureInstancedMarkShader { + type Instance: bytemuck::Pod + bytemuck::Zeroable; + type Vertex: bytemuck::Pod + bytemuck::Zeroable; + + fn verts(&self) -> &[Self::Vertex]; + fn indices(&self) -> &[u16]; + fn batches(&self) -> &[InstancedTextureMarkBatch]; + fn texture_size(&self) -> Extent3d; + + fn shader(&self) -> &str; + fn vertex_entry_point(&self) -> &str; + fn fragment_entry_point(&self) -> &str; + fn instance_desc(&self) -> wgpu::VertexBufferLayout<'static>; + fn vertex_desc(&self) -> wgpu::VertexBufferLayout<'static>; + + fn mag_filter(&self) -> wgpu::FilterMode { + wgpu::FilterMode::Linear + } + fn min_filter(&self) -> wgpu::FilterMode { + wgpu::FilterMode::Nearest + } + fn mipmap_filter(&self) -> wgpu::FilterMode { + wgpu::FilterMode::Nearest + } +} + +pub struct TextureInstancedMarkRenderer { + pub render_pipeline: wgpu::RenderPipeline, + pub vertex_buffer: wgpu::Buffer, + pub index_buffer: wgpu::Buffer, + pub num_indices: u32, + pub instance_buffer: wgpu::Buffer, + pub batches: Vec, + pub uniform_bind_group: wgpu::BindGroup, + pub texture: wgpu::Texture, + pub texture_size: wgpu::Extent3d, + pub texture_bind_group: wgpu::BindGroup, +} + +impl TextureInstancedMarkRenderer { + pub fn new( + device: &Device, + uniform: CanvasUniform, + texture_format: TextureFormat, + sample_count: u32, + mark_shader: Box>, + instances: &[I], + ) -> Self + where + I: bytemuck::Pod + bytemuck::Zeroable, + V: bytemuck::Pod + bytemuck::Zeroable, + { + // Uniforms + let uniform_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { + label: Some("Uniform Buffer"), + contents: bytemuck::cast_slice(&[uniform]), + usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, + }); + + let uniform_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { + entries: &[wgpu::BindGroupLayoutEntry { + binding: 0, + visibility: wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Buffer { + ty: wgpu::BufferBindingType::Uniform, + has_dynamic_offset: false, + min_binding_size: None, + }, + count: None, + }], + label: Some("chart_uniform_layout"), + }); + + let uniform_bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { + layout: &uniform_layout, + entries: &[wgpu::BindGroupEntry { + binding: 0, + resource: uniform_buffer.as_entire_binding(), + }], + label: Some("uniform_bind_group"), + }); + + // Create Texture + let texture = device.create_texture(&wgpu::TextureDescriptor { + size: mark_shader.texture_size(), + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: wgpu::TextureFormat::Rgba8Unorm, + usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + label: Some("diffuse_texture"), + view_formats: &[], + }); + let texture_view = texture.create_view(&wgpu::TextureViewDescriptor::default()); + + // Create sampler + let sampler = device.create_sampler(&wgpu::SamplerDescriptor { + address_mode_u: wgpu::AddressMode::ClampToEdge, + address_mode_v: wgpu::AddressMode::ClampToEdge, + address_mode_w: wgpu::AddressMode::ClampToEdge, + mag_filter: mark_shader.mag_filter(), + min_filter: mark_shader.min_filter(), + mipmap_filter: mark_shader.mipmap_filter(), + ..Default::default() + }); + + // Create texture/sampler bind grous + let texture_bind_group_layout = + device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { + entries: &[ + wgpu::BindGroupLayoutEntry { + binding: 0, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Texture { + multisampled: false, + view_dimension: wgpu::TextureViewDimension::D2, + sample_type: wgpu::TextureSampleType::Float { filterable: true }, + }, + count: None, + }, + wgpu::BindGroupLayoutEntry { + binding: 1, + visibility: wgpu::ShaderStages::FRAGMENT, + // This should match the filterable field of the + // corresponding Texture entry above. + ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering), + count: None, + }, + ], + label: Some("texture_bind_group_layout"), + }); + + let texture_bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { + layout: &texture_bind_group_layout, + entries: &[ + wgpu::BindGroupEntry { + binding: 0, + resource: wgpu::BindingResource::TextureView(&texture_view), + }, + wgpu::BindGroupEntry { + binding: 1, + resource: wgpu::BindingResource::Sampler(&sampler), + }, + ], + label: Some("texture_bind_group"), + }); + + // Shaders + let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor { + label: Some("Shader"), + source: wgpu::ShaderSource::Wgsl(mark_shader.shader().into()), + }); + + let render_pipeline_layout = + device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { + label: Some("Render Pipeline Layout"), + bind_group_layouts: &[&uniform_layout], + push_constant_ranges: &[], + }); + + let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { + label: Some("Render Pipeline"), + layout: Some(&render_pipeline_layout), + vertex: wgpu::VertexState { + module: &shader, + entry_point: mark_shader.vertex_entry_point(), + buffers: &[mark_shader.vertex_desc(), mark_shader.instance_desc()], + }, + fragment: Some(wgpu::FragmentState { + module: &shader, + entry_point: mark_shader.fragment_entry_point(), + targets: &[Some(wgpu::ColorTargetState { + format: texture_format, + blend: Some(wgpu::BlendState::ALPHA_BLENDING), + write_mask: wgpu::ColorWrites::ALL, + })], + }), + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, + front_face: wgpu::FrontFace::Ccw, + cull_mode: Some(wgpu::Face::Back), + polygon_mode: wgpu::PolygonMode::Fill, + unclipped_depth: false, + conservative: false, + }, + depth_stencil: None, + multisample: wgpu::MultisampleState { + count: sample_count, + mask: !0, + alpha_to_coverage_enabled: false, + }, + multiview: None, + }); + + let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { + label: Some("Vertex Buffer"), + contents: bytemuck::cast_slice(mark_shader.verts()), + usage: wgpu::BufferUsages::VERTEX, + }); + + let index_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { + label: Some("Index Buffer"), + contents: bytemuck::cast_slice(mark_shader.indices()), + usage: wgpu::BufferUsages::INDEX, + }); + let num_indices = mark_shader.indices().len() as u32; + + let instance_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { + label: Some("Instance Buffer"), + contents: bytemuck::cast_slice(instances), + usage: wgpu::BufferUsages::VERTEX, + }); + + Self { + render_pipeline, + vertex_buffer, + index_buffer, + batches: Vec::from(mark_shader.batches()), + num_indices, + instance_buffer, + uniform_bind_group, + texture, + texture_size: mark_shader.texture_size(), + texture_bind_group, + } + } + + pub fn render( + &self, + device: &Device, + texture_view: &TextureView, + resolve_target: Option<&TextureView>, + ) -> CommandBuffer { + let mut mark_encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor { + label: Some("Mark Render Encoder"), + }); + + for batch in self.batches.iter() { + let temp_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { + label: Some("Temp Buffer"), + contents: batch.image.to_rgba8().as_raw(), + usage: wgpu::BufferUsages::COPY_SRC, + }); + mark_encoder.copy_buffer_to_texture( + wgpu::ImageCopyBuffer { + buffer: &temp_buffer, + layout: ImageDataLayout { + offset: 0, + bytes_per_row: Some(4 * self.texture_size.width), + rows_per_image: Some(self.texture_size.height), + }, + }, + wgpu::ImageCopyTexture { + texture: &self.texture, + mip_level: 0, + origin: wgpu::Origin3d::ZERO, + aspect: wgpu::TextureAspect::All, + }, + self.texture_size, + ); + + { + let mut render_pass = mark_encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: Some("Mark Render Pass"), + color_attachments: &[Some(wgpu::RenderPassColorAttachment { + view: texture_view, + resolve_target, + ops: wgpu::Operations { + load: wgpu::LoadOp::Load, + store: wgpu::StoreOp::Store, + }, + })], + depth_stencil_attachment: None, + occlusion_query_set: None, + timestamp_writes: None, + }); + + render_pass.set_pipeline(&self.render_pipeline); + render_pass.set_bind_group(0, &self.uniform_bind_group, &[]); + render_pass.set_vertex_buffer(0, self.vertex_buffer.slice(..)); + render_pass.set_vertex_buffer(1, self.instance_buffer.slice(..)); + render_pass + .set_index_buffer(self.index_buffer.slice(..), wgpu::IndexFormat::Uint16); + render_pass.draw_indexed(0..self.num_indices, 0, batch.instances_range.clone()); + } + } + + mark_encoder.finish() + } +} diff --git a/sg2d-wgpu/src/marks/texture_mark.rs b/sg2d-wgpu/src/marks/texture_mark.rs index 25f0fda..2cf0005 100644 --- a/sg2d-wgpu/src/marks/texture_mark.rs +++ b/sg2d-wgpu/src/marks/texture_mark.rs @@ -5,7 +5,7 @@ use wgpu::{CommandBuffer, Device, Extent3d, ImageDataLayout, TextureFormat, Text #[derive(Clone)] pub struct TextureMarkBatch { - pub indices: Range, + pub indices_range: Range, pub image: image::DynamicImage, } @@ -96,6 +96,7 @@ impl TextureMarkRenderer { }); let texture_view = texture.create_view(&wgpu::TextureViewDescriptor::default()); + // Create sampler let sampler = device.create_sampler(&wgpu::SamplerDescriptor { address_mode_u: wgpu::AddressMode::ClampToEdge, address_mode_v: wgpu::AddressMode::ClampToEdge, @@ -106,6 +107,7 @@ impl TextureMarkRenderer { ..Default::default() }); + // Create texture/sampler bind grous let texture_bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { entries: &[ @@ -274,7 +276,7 @@ impl TextureMarkRenderer { render_pass.set_vertex_buffer(0, self.vertex_buffer.slice(..)); render_pass .set_index_buffer(self.index_buffer.slice(..), wgpu::IndexFormat::Uint16); - render_pass.draw_indexed(batch.indices.clone(), 0, 0..1); + render_pass.draw_indexed(batch.indices_range.clone(), 0, 0..1); } } From ece2e4400ccfef4d9eee05214c0b55fccac46e1a Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 24 Jan 2024 07:55:56 -0500 Subject: [PATCH 03/27] Specialize uniforms per shader type --- sg2d-wgpu/src/canvas.rs | 174 ++++++------------ sg2d-wgpu/src/marks/arc.rs | 34 +++- sg2d-wgpu/src/marks/basic_mark.rs | 11 +- sg2d-wgpu/src/marks/image.rs | 31 +++- sg2d-wgpu/src/marks/instanced_mark.rs | 11 +- sg2d-wgpu/src/marks/path.rs | 49 ++++- sg2d-wgpu/src/marks/rect.rs | 34 +++- sg2d-wgpu/src/marks/rule.rs | 34 +++- sg2d-wgpu/src/marks/symbol.rs | 27 +++ sg2d-wgpu/src/marks/text.rs | 30 +-- sg2d-wgpu/src/marks/texture_instanced_mark.rs | 11 +- sg2d-wgpu/src/marks/texture_mark.rs | 12 +- sg2d-wgpu/tests/test_image_baselines.rs | 9 +- 13 files changed, 287 insertions(+), 180 deletions(-) diff --git a/sg2d-wgpu/src/canvas.rs b/sg2d-wgpu/src/canvas.rs index 06b4822..e2b66b6 100644 --- a/sg2d-wgpu/src/canvas.rs +++ b/sg2d-wgpu/src/canvas.rs @@ -8,7 +8,7 @@ use wgpu::{ TextureDimension, TextureFormat, TextureFormatFeatureFlags, TextureUsages, TextureView, TextureViewDescriptor, }; -use winit::dpi::{PhysicalSize, Size}; +use winit::dpi::Size; use winit::event::WindowEvent; use winit::window::Window; @@ -35,14 +35,6 @@ use sg2d::{ marks::symbol::SymbolMark, marks::text::TextMark, scene_graph::SceneGraph, }; -#[repr(C)] -#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] -pub struct CanvasUniform { - pub size: [f32; 2], - pub scale: f32, - _pad: [f32; 1], // Pad to 16 bytes -} - pub enum MarkRenderer { Basic(BasicMarkRenderer), Instanced(InstancedMarkRenderer), @@ -51,15 +43,35 @@ pub enum MarkRenderer { Text(TextMarkRenderer), } +#[derive(Debug, Copy, Clone)] +pub struct CanvasDimensions { + pub size: [f32; 2], + pub scale: f32, +} + +impl CanvasDimensions { + pub fn to_physical_width(&self) -> u32 { + (self.size[0] * self.scale) as u32 + } + + pub fn to_physical_height(&self) -> u32 { + (self.size[1] * self.scale) as u32 + } + + pub fn to_physical_size(&self) -> winit::dpi::PhysicalSize { + winit::dpi::PhysicalSize { + width: self.to_physical_width(), + height: self.to_physical_height(), + } + } +} + pub trait Canvas { fn add_mark_renderer(&mut self, mark_renderer: MarkRenderer); fn clear_mark_renderer(&mut self); fn device(&self) -> &Device; fn queue(&self) -> &Queue; - fn uniform(&self) -> &CanvasUniform; - fn scale(&self) -> f32; - - fn set_uniform(&mut self, uniform: CanvasUniform); + fn dimensions(&self) -> CanvasDimensions; fn texture_format(&self) -> TextureFormat; @@ -69,10 +81,9 @@ pub trait Canvas { let instances = ArcInstance::iter_from_spec(mark).collect::>(); self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( self.device(), - *self.uniform(), self.texture_format(), self.sample_count(), - Box::new(ArcShader::new()), + Box::new(ArcShader::new(self.dimensions())), instances.as_slice(), ))); Ok(()) @@ -81,10 +92,9 @@ pub trait Canvas { fn add_path_mark(&mut self, mark: &PathMark) -> Result<(), Sg2dWgpuError> { self.add_mark_renderer(MarkRenderer::Basic(BasicMarkRenderer::new( self.device(), - *self.uniform(), self.texture_format(), self.sample_count(), - Box::new(PathShader::from_path_mark(mark)?), + Box::new(PathShader::from_path_mark(mark, self.dimensions())?), ))); Ok(()) } @@ -92,10 +102,9 @@ pub trait Canvas { fn add_line_mark(&mut self, mark: &LineMark) -> Result<(), Sg2dWgpuError> { self.add_mark_renderer(MarkRenderer::Basic(BasicMarkRenderer::new( self.device(), - *self.uniform(), self.texture_format(), self.sample_count(), - Box::new(PathShader::from_line_mark(mark)?), + Box::new(PathShader::from_line_mark(mark, self.dimensions())?), ))); Ok(()) } @@ -103,10 +112,9 @@ pub trait Canvas { fn add_trail_mark(&mut self, mark: &TrailMark) -> Result<(), Sg2dWgpuError> { self.add_mark_renderer(MarkRenderer::Basic(BasicMarkRenderer::new( self.device(), - *self.uniform(), self.texture_format(), self.sample_count(), - Box::new(PathShader::from_trail_mark(mark)?), + Box::new(PathShader::from_trail_mark(mark, self.dimensions())?), ))); Ok(()) } @@ -114,10 +122,9 @@ pub trait Canvas { fn add_area_mark(&mut self, mark: &AreaMark) -> Result<(), Sg2dWgpuError> { self.add_mark_renderer(MarkRenderer::Basic(BasicMarkRenderer::new( self.device(), - *self.uniform(), self.texture_format(), self.sample_count(), - Box::new(PathShader::from_area_mark(mark)?), + Box::new(PathShader::from_area_mark(mark, self.dimensions())?), ))); Ok(()) } @@ -126,11 +133,11 @@ pub trait Canvas { let instances = SymbolInstance::iter_from_spec(mark).collect::>(); self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( self.device(), - *self.uniform(), self.texture_format(), self.sample_count(), Box::new(SymbolShader::try_new( mark.shapes.clone(), + self.dimensions(), true, mark.stroke_width.is_some(), )?), @@ -143,10 +150,9 @@ pub trait Canvas { let instances = RectInstance::iter_from_spec(mark).collect::>(); self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( self.device(), - *self.uniform(), self.texture_format(), self.sample_count(), - Box::new(RectShader::new()), + Box::new(RectShader::new(self.dimensions())), instances.as_slice(), ))); Ok(()) @@ -156,10 +162,9 @@ pub trait Canvas { let instances = RuleInstance::iter_from_spec(mark).collect::>(); self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( self.device(), - *self.uniform(), self.texture_format(), self.sample_count(), - Box::new(RuleShader::new()), + Box::new(RuleShader::new(self.dimensions())), instances.as_slice(), ))); Ok(()) @@ -170,8 +175,8 @@ pub trait Canvas { self.add_mark_renderer(MarkRenderer::Text(TextMarkRenderer::new( self.device(), self.queue(), - *self.uniform(), self.texture_format(), + self.dimensions(), self.sample_count(), instances, ))); @@ -181,10 +186,9 @@ pub trait Canvas { fn add_image_mark(&mut self, mark: &ImageMark) -> Result<(), Sg2dWgpuError> { self.add_mark_renderer(MarkRenderer::Texture(TextureMarkRenderer::new( self.device(), - *self.uniform(), self.texture_format(), self.sample_count(), - Box::new(ImageShader::from_image_mark(mark)?), + Box::new(ImageShader::from_image_mark(mark, self.dimensions())?), ))); Ok(()) } @@ -231,13 +235,6 @@ pub trait Canvas { } fn set_scene(&mut self, scene_graph: &SceneGraph) -> Result<(), Sg2dWgpuError> { - // Set uniforms - self.set_uniform(CanvasUniform { - size: [scene_graph.width, scene_graph.height], - scale: self.scale(), - _pad: [0.0], - }); - // Clear existing marks self.clear_mark_renderer(); @@ -374,26 +371,13 @@ pub struct WindowCanvas { multisampled_framebuffer: TextureView, sample_count: u32, config: SurfaceConfiguration, - size: winit::dpi::PhysicalSize, - scale: f32, + dimensions: CanvasDimensions, marks: Vec, - uniform: CanvasUniform, } impl WindowCanvas { - pub async fn new( - window: Window, - width: f32, - height: f32, - scale: f32, - ) -> Result { - window.set_inner_size(Size::Physical(PhysicalSize::new( - (width * scale) as u32, - (height * scale) as u32, - ))); - - let size = window.inner_size(); - + pub async fn new(window: Window, dimensions: CanvasDimensions) -> Result { + window.set_inner_size(Size::Physical(dimensions.to_physical_size())); let instance = make_wgpu_instance(); let surface = unsafe { instance.create_surface(&window) }?; let adapter = make_wgpu_adapter(&instance, Some(&surface)).await?; @@ -412,8 +396,8 @@ impl WindowCanvas { let config = SurfaceConfiguration { usage: TextureUsages::RENDER_ATTACHMENT, format: surface_format, - width: size.width, - height: size.height, + width: dimensions.to_physical_width(), + height: dimensions.to_physical_height(), present_mode: surface_caps.present_modes[0], alpha_mode: surface_caps.alpha_modes[0], view_formats: vec![], @@ -430,12 +414,6 @@ impl WindowCanvas { sample_count, ); - let uniform = CanvasUniform { - size: [size.width as f32, size.height as f32], - scale, - _pad: [0.0], - }; - Ok(Self { surface, device, @@ -443,16 +421,14 @@ impl WindowCanvas { multisampled_framebuffer, sample_count, config, - size, - scale, + dimensions, window, - uniform, marks: Vec::new(), }) } pub fn get_size(&self) -> winit::dpi::PhysicalSize { - self.size + self.dimensions.to_physical_size() } pub fn window(&self) -> &Window { @@ -559,16 +535,8 @@ impl Canvas for WindowCanvas { &self.queue } - fn uniform(&self) -> &CanvasUniform { - &self.uniform - } - - fn scale(&self) -> f32 { - self.scale - } - - fn set_uniform(&mut self, uniform: CanvasUniform) { - self.uniform = uniform; + fn dimensions(&self) -> CanvasDimensions { + self.dimensions } fn texture_format(&self) -> TextureFormat { @@ -586,35 +554,27 @@ pub struct PngCanvas { multisampled_framebuffer: TextureView, sample_count: u32, marks: Vec, - uniform: CanvasUniform, - pub width: f32, - pub height: f32, - pub scale: f32, + pub dimensions: CanvasDimensions, pub texture_view: TextureView, pub output_buffer: Buffer, pub texture: Texture, pub texture_size: Extent3d, pub padded_width: u32, pub padded_height: u32, - pub physical_width: f32, - pub physical_height: f32, } impl PngCanvas { - pub async fn new(width: f32, height: f32, scale: f32) -> Result { + pub async fn new(dimensions: CanvasDimensions) -> Result { let instance = make_wgpu_instance(); let adapter = make_wgpu_adapter(&instance, None).await?; let (device, queue) = request_wgpu_device(&adapter).await?; let texture_format = TextureFormat::Rgba8Unorm; let format_flags = adapter.get_texture_format_features(texture_format).flags; let sample_count = get_supported_sample_count(format_flags); - - let physical_width = width * scale; - let physical_height = height * scale; let texture_desc = TextureDescriptor { size: Extent3d { - width: physical_width as u32, - height: physical_height as u32, + width: dimensions.to_physical_width(), + height: dimensions.to_physical_height(), depth_or_array_layers: 1, }, mip_level_count: 1, @@ -634,8 +594,9 @@ impl PngCanvas { // Width and height must be padded to multiple of 256 for copying image buffer // from/to GPU texture - let padded_width = (256.0 * (physical_width / 256.0).ceil()) as u32; - let padded_height = (256.0 * (physical_height / 256.0).ceil()) as u32; + let padded_width = (256.0 * (dimensions.to_physical_width() as f32 / 256.0).ceil()) as u32; + let padded_height = + (256.0 * (dimensions.to_physical_height() as f32 / 256.0).ceil()) as u32; let output_buffer_size = (u32_size * padded_width * padded_height) as BufferAddress; let output_buffer_desc = BufferDescriptor { @@ -648,16 +609,10 @@ impl PngCanvas { }; let output_buffer = device.create_buffer(&output_buffer_desc); - let uniform = CanvasUniform { - size: [width, height], - scale, - _pad: [0.0], - }; - let multisampled_framebuffer = create_multisampled_framebuffer( &device, - physical_width as u32, - physical_height as u32, + dimensions.to_physical_width(), + dimensions.to_physical_height(), texture_format, sample_count, ); @@ -667,12 +622,7 @@ impl PngCanvas { queue, multisampled_framebuffer, sample_count, - width, - height, - scale, - physical_width, - physical_height, - uniform, + dimensions, texture, texture_view, output_buffer, @@ -815,8 +765,8 @@ impl PngCanvas { &img_buf, 0, 0, - self.physical_width as u32, - self.physical_height as u32, + self.dimensions.to_physical_width(), + self.dimensions.to_physical_height(), ); cropped_img.to_image() }; @@ -843,16 +793,8 @@ impl Canvas for PngCanvas { &self.queue } - fn uniform(&self) -> &CanvasUniform { - &self.uniform - } - - fn scale(&self) -> f32 { - self.scale - } - - fn set_uniform(&mut self, uniform: CanvasUniform) { - self.uniform = uniform; + fn dimensions(&self) -> CanvasDimensions { + self.dimensions } fn texture_format(&self) -> TextureFormat { diff --git a/sg2d-wgpu/src/marks/arc.rs b/sg2d-wgpu/src/marks/arc.rs index 84a9db2..156a8b0 100644 --- a/sg2d-wgpu/src/marks/arc.rs +++ b/sg2d-wgpu/src/marks/arc.rs @@ -1,3 +1,4 @@ +use crate::canvas::CanvasDimensions; use crate::marks::instanced_mark::InstancedMarkShader; use itertools::izip; use sg2d::marks::arc::ArcMark; @@ -5,6 +6,24 @@ use std::f32::consts::TAU; use std::mem; use wgpu::VertexBufferLayout; +#[repr(C)] +#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] +pub struct ArcUniform { + pub size: [f32; 2], + pub scale: f32, + _pad: [f32; 1], // Pad to 16 bytes +} + +impl ArcUniform { + pub fn new(dimensions: CanvasDimensions) -> Self { + Self { + size: dimensions.size, + scale: dimensions.scale, + _pad: [0.0], + } + } +} + #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] pub struct ArcVertex { @@ -121,19 +140,14 @@ impl ArcInstance { pub struct ArcShader { verts: Vec, indices: Vec, + uniform: ArcUniform, shader: String, vertex_entry_point: String, fragment_entry_point: String, } -impl Default for ArcShader { - fn default() -> Self { - Self::new() - } -} - impl ArcShader { - pub fn new() -> Self { + pub fn new(dimensions: CanvasDimensions) -> Self { Self { verts: vec![ ArcVertex { @@ -150,6 +164,7 @@ impl ArcShader { }, ], indices: vec![0, 1, 2, 0, 2, 3], + uniform: ArcUniform::new(dimensions), shader: include_str!("arc.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -160,6 +175,7 @@ impl ArcShader { impl InstancedMarkShader for ArcShader { type Instance = ArcInstance; type Vertex = ArcVertex; + type Uniform = ArcUniform; fn verts(&self) -> &[Self::Vertex] { self.verts.as_slice() @@ -169,6 +185,10 @@ impl InstancedMarkShader for ArcShader { self.indices.as_slice() } + fn uniform(&self) -> Self::Uniform { + self.uniform + } + fn shader(&self) -> &str { self.shader.as_str() } diff --git a/sg2d-wgpu/src/marks/basic_mark.rs b/sg2d-wgpu/src/marks/basic_mark.rs index c49520e..d8d7788 100644 --- a/sg2d-wgpu/src/marks/basic_mark.rs +++ b/sg2d-wgpu/src/marks/basic_mark.rs @@ -1,12 +1,13 @@ -use crate::canvas::CanvasUniform; use wgpu::util::DeviceExt; use wgpu::{CommandBuffer, Device, TextureFormat, TextureView}; pub trait BasicMarkShader { type Vertex: bytemuck::Pod + bytemuck::Zeroable; + type Uniform: bytemuck::Pod + bytemuck::Zeroable; fn verts(&self) -> &[Self::Vertex]; fn indices(&self) -> &[u16]; + fn uniform(&self) -> Self::Uniform; fn shader(&self) -> &str; fn vertex_entry_point(&self) -> &str; fn fragment_entry_point(&self) -> &str; @@ -22,20 +23,20 @@ pub struct BasicMarkRenderer { } impl BasicMarkRenderer { - pub fn new( + pub fn new( device: &Device, - uniform: CanvasUniform, texture_format: TextureFormat, sample_count: u32, - mark_shader: Box>, + mark_shader: Box>, ) -> Self where V: bytemuck::Pod + bytemuck::Zeroable, + U: bytemuck::Pod + bytemuck::Zeroable, { // Uniforms let uniform_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { label: Some("Uniform Buffer"), - contents: bytemuck::cast_slice(&[uniform]), + contents: bytemuck::cast_slice(&[mark_shader.uniform()]), usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, }); diff --git a/sg2d-wgpu/src/marks/image.rs b/sg2d-wgpu/src/marks/image.rs index c40fc8a..30f1da4 100644 --- a/sg2d-wgpu/src/marks/image.rs +++ b/sg2d-wgpu/src/marks/image.rs @@ -1,3 +1,4 @@ +use crate::canvas::CanvasDimensions; use crate::error::Sg2dWgpuError; use crate::marks::texture_mark::{TextureMarkBatch, TextureMarkShader}; use etagere::Size; @@ -6,6 +7,24 @@ use sg2d::marks::image::ImageMark; use sg2d::marks::value::{ImageAlign, ImageBaseline}; use wgpu::{Extent3d, FilterMode, VertexBufferLayout}; +#[repr(C)] +#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] +pub struct ImageUniform { + pub size: [f32; 2], + pub scale: f32, + _pad: [f32; 1], // Pad to 16 bytes +} + +impl ImageUniform { + pub fn new(dimensions: CanvasDimensions) -> Self { + Self { + size: dimensions.size, + scale: dimensions.scale, + _pad: [0.0], + } + } +} + #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] pub struct ImageVertex { @@ -31,6 +50,7 @@ impl ImageVertex { pub struct ImageShader { verts: Vec, indices: Vec, + uniform: ImageUniform, shader: String, vertex_entry_point: String, fragment_entry_point: String, @@ -40,7 +60,10 @@ pub struct ImageShader { } impl ImageShader { - pub fn from_image_mark(mark: &ImageMark) -> Result { + pub fn from_image_mark( + mark: &ImageMark, + dimensions: CanvasDimensions, + ) -> Result { let mut verts: Vec = Vec::new(); let mut indices: Vec = Vec::new(); let mut batches: Vec = Vec::new(); @@ -217,6 +240,7 @@ impl ImageShader { Ok(Self { verts, indices, + uniform: ImageUniform::new(dimensions), batches, texture_size, shader: include_str!("image.wgsl").to_string(), @@ -233,6 +257,7 @@ impl ImageShader { impl TextureMarkShader for ImageShader { type Vertex = ImageVertex; + type Uniform = ImageUniform; fn verts(&self) -> &[Self::Vertex] { self.verts.as_slice() @@ -242,6 +267,10 @@ impl TextureMarkShader for ImageShader { self.indices.as_slice() } + fn uniform(&self) -> Self::Uniform { + self.uniform + } + fn shader(&self) -> &str { self.shader.as_str() } diff --git a/sg2d-wgpu/src/marks/instanced_mark.rs b/sg2d-wgpu/src/marks/instanced_mark.rs index 19c06b4..9efca1c 100644 --- a/sg2d-wgpu/src/marks/instanced_mark.rs +++ b/sg2d-wgpu/src/marks/instanced_mark.rs @@ -1,13 +1,14 @@ -use crate::canvas::CanvasUniform; use wgpu::util::DeviceExt; use wgpu::{CommandBuffer, Device, TextureFormat, TextureView}; pub trait InstancedMarkShader { type Instance: bytemuck::Pod + bytemuck::Zeroable; type Vertex: bytemuck::Pod + bytemuck::Zeroable; + type Uniform: bytemuck::Pod + bytemuck::Zeroable; fn verts(&self) -> &[Self::Vertex]; fn indices(&self) -> &[u16]; + fn uniform(&self) -> Self::Uniform; fn shader(&self) -> &str; fn vertex_entry_point(&self) -> &str; fn fragment_entry_point(&self) -> &str; @@ -26,22 +27,22 @@ pub struct InstancedMarkRenderer { } impl InstancedMarkRenderer { - pub fn new( + pub fn new( device: &Device, - uniform: CanvasUniform, texture_format: TextureFormat, sample_count: u32, - mark_shader: Box>, + mark_shader: Box>, instances: &[I], ) -> Self where I: bytemuck::Pod + bytemuck::Zeroable, V: bytemuck::Pod + bytemuck::Zeroable, + U: bytemuck::Pod + bytemuck::Zeroable, { // Uniforms let uniform_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { label: Some("Uniform Buffer"), - contents: bytemuck::cast_slice(&[uniform]), + contents: bytemuck::cast_slice(&[mark_shader.uniform()]), usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, }); diff --git a/sg2d-wgpu/src/marks/path.rs b/sg2d-wgpu/src/marks/path.rs index c393a86..bb06811 100644 --- a/sg2d-wgpu/src/marks/path.rs +++ b/sg2d-wgpu/src/marks/path.rs @@ -1,3 +1,4 @@ +use crate::canvas::CanvasDimensions; use crate::error::Sg2dWgpuError; use crate::marks::basic_mark::BasicMarkShader; use itertools::izip; @@ -16,6 +17,24 @@ use sg2d::marks::trail::TrailMark; use sg2d::marks::value::{StrokeCap, StrokeJoin}; use wgpu::VertexBufferLayout; +#[repr(C)] +#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] +pub struct PathUniform { + pub size: [f32; 2], + pub scale: f32, + _pad: [f32; 1], // Pad to 16 bytes +} + +impl PathUniform { + pub fn new(dimensions: CanvasDimensions) -> Self { + Self { + size: dimensions.size, + scale: dimensions.scale, + _pad: [0.0], + } + } +} + #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] pub struct PathVertex { @@ -41,13 +60,17 @@ impl PathVertex { pub struct PathShader { verts: Vec, indices: Vec, + uniform: PathUniform, shader: String, vertex_entry_point: String, fragment_entry_point: String, } impl PathShader { - pub fn from_path_mark(mark: &PathMark) -> Result { + pub fn from_path_mark( + mark: &PathMark, + dimensions: CanvasDimensions, + ) -> Result { let mut verts: Vec = Vec::new(); let mut indices: Vec = Vec::new(); @@ -104,13 +127,17 @@ impl PathShader { Ok(Self { verts, indices, + uniform: PathUniform::new(dimensions), shader: include_str!("path.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), }) } - pub fn from_area_mark(mark: &AreaMark) -> Result { + pub fn from_area_mark( + mark: &AreaMark, + dimensions: CanvasDimensions, + ) -> Result { let mut path_builder = lyon::path::Path::builder().with_svg(); let mut tail: Vec<(f32, f32)> = Vec::new(); @@ -208,13 +235,17 @@ impl PathShader { Ok(Self { verts: buffers.vertices, indices: buffers.indices, + uniform: PathUniform::new(dimensions), shader: include_str!("path.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), }) } - pub fn from_line_mark(mark: &LineMark) -> Result { + pub fn from_line_mark( + mark: &LineMark, + dimensions: CanvasDimensions, + ) -> Result { let mut defined_paths: Vec = Vec::new(); // Build path for each defined line segment @@ -333,13 +364,17 @@ impl PathShader { Ok(Self { verts, indices, + uniform: PathUniform::new(dimensions), shader: include_str!("path.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), }) } - pub fn from_trail_mark(mark: &TrailMark) -> Result { + pub fn from_trail_mark( + mark: &TrailMark, + dimensions: CanvasDimensions, + ) -> Result { let size_idx: AttributeIndex = 0; let mut path_builder = lyon::path::Path::builder_with_attributes(1); let mut path_len = 0; @@ -395,6 +430,7 @@ impl PathShader { Ok(Self { verts: buffers.vertices, indices: buffers.indices, + uniform: PathUniform::new(dimensions), shader: include_str!("path.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -404,6 +440,7 @@ impl PathShader { impl BasicMarkShader for PathShader { type Vertex = PathVertex; + type Uniform = PathUniform; fn verts(&self) -> &[Self::Vertex] { self.verts.as_slice() @@ -413,6 +450,10 @@ impl BasicMarkShader for PathShader { self.indices.as_slice() } + fn uniform(&self) -> Self::Uniform { + self.uniform + } + fn shader(&self) -> &str { self.shader.as_str() } diff --git a/sg2d-wgpu/src/marks/rect.rs b/sg2d-wgpu/src/marks/rect.rs index e55d9f1..c274e93 100644 --- a/sg2d-wgpu/src/marks/rect.rs +++ b/sg2d-wgpu/src/marks/rect.rs @@ -1,9 +1,28 @@ +use crate::canvas::CanvasDimensions; use crate::marks::instanced_mark::InstancedMarkShader; use itertools::izip; use sg2d::marks::rect::RectMark; use sg2d::marks::value::ColorOrGradient; use wgpu::VertexBufferLayout; +#[repr(C)] +#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] +pub struct RectUniform { + pub size: [f32; 2], + pub scale: f32, + _pad: [f32; 1], // Pad to 16 bytes +} + +impl RectUniform { + pub fn new(dimensions: CanvasDimensions) -> Self { + Self { + size: dimensions.size, + scale: dimensions.scale, + _pad: [0.0], + } + } +} + #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] pub struct RectVertex { @@ -85,19 +104,14 @@ impl RectInstance { pub struct RectShader { verts: Vec, indices: Vec, + uniform: RectUniform, shader: String, vertex_entry_point: String, fragment_entry_point: String, } -impl Default for RectShader { - fn default() -> Self { - Self::new() - } -} - impl RectShader { - pub fn new() -> Self { + pub fn new(dimensions: CanvasDimensions) -> Self { Self { verts: vec![ RectVertex { @@ -114,6 +128,7 @@ impl RectShader { }, ], indices: vec![0, 1, 2, 0, 2, 3], + uniform: RectUniform::new(dimensions), shader: include_str!("rect.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -124,6 +139,7 @@ impl RectShader { impl InstancedMarkShader for RectShader { type Instance = RectInstance; type Vertex = RectVertex; + type Uniform = RectUniform; fn verts(&self) -> &[Self::Vertex] { self.verts.as_slice() @@ -133,6 +149,10 @@ impl InstancedMarkShader for RectShader { self.indices.as_slice() } + fn uniform(&self) -> Self::Uniform { + self.uniform + } + fn shader(&self) -> &str { self.shader.as_str() } diff --git a/sg2d-wgpu/src/marks/rule.rs b/sg2d-wgpu/src/marks/rule.rs index 0677823..014ad2f 100644 --- a/sg2d-wgpu/src/marks/rule.rs +++ b/sg2d-wgpu/src/marks/rule.rs @@ -1,9 +1,28 @@ +use crate::canvas::CanvasDimensions; use crate::marks::instanced_mark::InstancedMarkShader; use itertools::izip; use sg2d::marks::rule::RuleMark; use sg2d::marks::value::StrokeCap; use wgpu::VertexBufferLayout; +#[repr(C)] +#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] +pub struct RuleUniform { + pub size: [f32; 2], + pub scale: f32, + _pad: [f32; 1], // Pad to 16 bytes +} + +impl RuleUniform { + pub fn new(dimensions: CanvasDimensions) -> Self { + Self { + size: dimensions.size, + scale: dimensions.scale, + _pad: [0.0], + } + } +} + #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] pub struct RuleVertex { @@ -166,19 +185,14 @@ impl RuleInstance { pub struct RuleShader { verts: Vec, indices: Vec, + uniform: RuleUniform, shader: String, vertex_entry_point: String, fragment_entry_point: String, } -impl Default for RuleShader { - fn default() -> Self { - Self::new() - } -} - impl RuleShader { - pub fn new() -> Self { + pub fn new(dimensions: CanvasDimensions) -> Self { Self { verts: vec![ RuleVertex { @@ -195,6 +209,7 @@ impl RuleShader { }, ], indices: vec![0, 1, 2, 0, 2, 3], + uniform: RuleUniform::new(dimensions), shader: include_str!("rule.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -205,6 +220,7 @@ impl RuleShader { impl InstancedMarkShader for RuleShader { type Instance = RuleInstance; type Vertex = RuleVertex; + type Uniform = RuleUniform; fn verts(&self) -> &[Self::Vertex] { self.verts.as_slice() @@ -214,6 +230,10 @@ impl InstancedMarkShader for RuleShader { self.indices.as_slice() } + fn uniform(&self) -> Self::Uniform { + self.uniform + } + fn shader(&self) -> &str { self.shader.as_str() } diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index fd863f8..8a81570 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -1,3 +1,4 @@ +use crate::canvas::CanvasDimensions; use crate::error::Sg2dWgpuError; use crate::marks::instanced_mark::InstancedMarkShader; use itertools::izip; @@ -13,6 +14,24 @@ const FILL_KIND: u32 = 0; const STROKE_KIND: u32 = 1; const CIRCLE_KIND: u32 = 2; +#[repr(C)] +#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] +pub struct SymbolUniform { + pub size: [f32; 2], + pub scale: f32, + _pad: [f32; 1], // Pad to 16 bytes +} + +impl SymbolUniform { + pub fn new(dimensions: CanvasDimensions) -> Self { + Self { + size: dimensions.size, + scale: dimensions.scale, + _pad: [0.0], + } + } +} + #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] pub struct SymbolVertex { @@ -92,6 +111,7 @@ impl SymbolInstance { pub struct SymbolShader { verts: Vec, indices: Vec, + uniform: SymbolUniform, shader: String, vertex_entry_point: String, fragment_entry_point: String, @@ -100,6 +120,7 @@ pub struct SymbolShader { impl SymbolShader { pub fn try_new( shapes: Vec, + dimensions: CanvasDimensions, has_fill: bool, has_stroke: bool, ) -> Result { @@ -173,6 +194,7 @@ impl SymbolShader { Ok(Self { verts, indices, + uniform: SymbolUniform::new(dimensions), shader: include_str!("symbol.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -183,6 +205,7 @@ impl SymbolShader { impl InstancedMarkShader for SymbolShader { type Instance = SymbolInstance; type Vertex = SymbolVertex; + type Uniform = SymbolUniform; fn verts(&self) -> &[Self::Vertex] { self.verts.as_slice() @@ -192,6 +215,10 @@ impl InstancedMarkShader for SymbolShader { self.indices.as_slice() } + fn uniform(&self) -> Self::Uniform { + self.uniform + } + fn shader(&self) -> &str { self.shader.as_str() } diff --git a/sg2d-wgpu/src/marks/text.rs b/sg2d-wgpu/src/marks/text.rs index 0679cad..0c919a0 100644 --- a/sg2d-wgpu/src/marks/text.rs +++ b/sg2d-wgpu/src/marks/text.rs @@ -1,4 +1,4 @@ -use crate::canvas::CanvasUniform; +use crate::canvas::CanvasDimensions; use glyphon::{ Attrs, Buffer, Color, Family, FontSystem, Metrics, Resolution, Shaping, SwashCache, TextArea, TextAtlas, TextBounds, TextRenderer, Weight, @@ -90,15 +90,15 @@ pub struct TextMarkRenderer { pub atlas: TextAtlas, pub text_renderer: TextRenderer, pub instances: Vec, - pub uniform: CanvasUniform, + pub dimensions: CanvasDimensions, } impl TextMarkRenderer { pub fn new( device: &Device, queue: &Queue, - uniform: CanvasUniform, texture_format: TextureFormat, + dimensions: CanvasDimensions, sample_count: u32, instances: Vec, ) -> Self { @@ -121,7 +121,7 @@ impl TextMarkRenderer { cache, atlas, text_renderer, - uniform, + dimensions, instances, } } @@ -144,8 +144,8 @@ impl TextMarkRenderer { let mut buffer = Buffer::new( &mut self.font_system, Metrics::new( - instance.font_size * self.uniform.scale * font_size_scale, - instance.font_size * self.uniform.scale * font_size_scale, + instance.font_size * self.dimensions.scale * font_size_scale, + instance.font_size * self.dimensions.scale * font_size_scale, ), ); let family = match instance.font.to_lowercase().as_str() { @@ -170,8 +170,8 @@ impl TextMarkRenderer { ); buffer.set_size( &mut self.font_system, - self.uniform.size[0] * self.uniform.scale, - self.uniform.size[1] * self.uniform.scale, + self.dimensions.size[0] * self.dimensions.scale, + self.dimensions.size[1] * self.dimensions.scale, ); buffer.shape_until_scroll(&mut self.font_system); @@ -184,8 +184,8 @@ impl TextMarkRenderer { .zip(&self.instances) .map(|(buffer, instance)| { let (width, line_y, height) = measure(buffer); - let scaled_x = instance.position[0] * self.uniform.scale; - let scaled_y = instance.position[1] * self.uniform.scale; + let scaled_x = instance.position[0] * self.dimensions.scale; + let scaled_y = instance.position[1] * self.dimensions.scale; let left = match instance.align { TextAlignSpec::Left => scaled_x, TextAlignSpec::Center => scaled_x - width / 2.0, @@ -202,7 +202,7 @@ impl TextMarkRenderer { }; // Add half pixel for top baseline for better match with resvg - top += 0.5 * self.uniform.scale; + top += 0.5 * self.dimensions.scale; TextArea { buffer, @@ -212,8 +212,8 @@ impl TextMarkRenderer { bounds: TextBounds { left: 0, top: 0, - right: (self.uniform.size[0] * self.uniform.scale) as i32, - bottom: (self.uniform.size[1] * self.uniform.scale) as i32, + right: (self.dimensions.size[0] * self.dimensions.scale) as i32, + bottom: (self.dimensions.size[1] * self.dimensions.scale) as i32, }, default_color: Color::rgba( (instance.color[0] * 255.0) as u8, @@ -234,8 +234,8 @@ impl TextMarkRenderer { &mut self.font_system, &mut self.atlas, Resolution { - width: (self.uniform.size[0] * self.uniform.scale) as u32, - height: (self.uniform.size[1] * self.uniform.scale) as u32, + width: self.dimensions.to_physical_width(), + height: self.dimensions.to_physical_height(), }, areas, &mut self.cache, diff --git a/sg2d-wgpu/src/marks/texture_instanced_mark.rs b/sg2d-wgpu/src/marks/texture_instanced_mark.rs index 0ffeb2b..046375c 100644 --- a/sg2d-wgpu/src/marks/texture_instanced_mark.rs +++ b/sg2d-wgpu/src/marks/texture_instanced_mark.rs @@ -1,4 +1,3 @@ -use crate::canvas::CanvasUniform; use std::ops::Range; use wgpu::util::DeviceExt; use wgpu::{CommandBuffer, Device, Extent3d, ImageDataLayout, TextureFormat, TextureView}; @@ -12,9 +11,11 @@ pub struct InstancedTextureMarkBatch { pub trait TextureInstancedMarkShader { type Instance: bytemuck::Pod + bytemuck::Zeroable; type Vertex: bytemuck::Pod + bytemuck::Zeroable; + type Uniform: bytemuck::Pod + bytemuck::Zeroable; fn verts(&self) -> &[Self::Vertex]; fn indices(&self) -> &[u16]; + fn uniform(&self) -> Self::Uniform; fn batches(&self) -> &[InstancedTextureMarkBatch]; fn texture_size(&self) -> Extent3d; @@ -49,22 +50,22 @@ pub struct TextureInstancedMarkRenderer { } impl TextureInstancedMarkRenderer { - pub fn new( + pub fn new( device: &Device, - uniform: CanvasUniform, texture_format: TextureFormat, sample_count: u32, - mark_shader: Box>, + mark_shader: Box>, instances: &[I], ) -> Self where I: bytemuck::Pod + bytemuck::Zeroable, V: bytemuck::Pod + bytemuck::Zeroable, + U: bytemuck::Pod + bytemuck::Zeroable, { // Uniforms let uniform_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { label: Some("Uniform Buffer"), - contents: bytemuck::cast_slice(&[uniform]), + contents: bytemuck::cast_slice(&[mark_shader.uniform()]), usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, }); diff --git a/sg2d-wgpu/src/marks/texture_mark.rs b/sg2d-wgpu/src/marks/texture_mark.rs index 2cf0005..bb0f965 100644 --- a/sg2d-wgpu/src/marks/texture_mark.rs +++ b/sg2d-wgpu/src/marks/texture_mark.rs @@ -1,4 +1,3 @@ -use crate::canvas::CanvasUniform; use std::ops::Range; use wgpu::util::DeviceExt; use wgpu::{CommandBuffer, Device, Extent3d, ImageDataLayout, TextureFormat, TextureView}; @@ -11,8 +10,11 @@ pub struct TextureMarkBatch { pub trait TextureMarkShader { type Vertex: bytemuck::Pod + bytemuck::Zeroable; + type Uniform: bytemuck::Pod + bytemuck::Zeroable; + fn verts(&self) -> &[Self::Vertex]; fn indices(&self) -> &[u16]; + fn uniform(&self) -> Self::Uniform; fn batches(&self) -> &[TextureMarkBatch]; fn texture_size(&self) -> Extent3d; fn shader(&self) -> &str; @@ -43,20 +45,20 @@ pub struct TextureMarkRenderer { } impl TextureMarkRenderer { - pub fn new( + pub fn new( device: &Device, - uniform: CanvasUniform, texture_format: TextureFormat, sample_count: u32, - mark_shader: Box>, + mark_shader: Box>, ) -> Self where V: bytemuck::Pod + bytemuck::Zeroable, + U: bytemuck::Pod + bytemuck::Zeroable, { // Uniforms let uniform_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { label: Some("Uniform Buffer"), - contents: bytemuck::cast_slice(&[uniform]), + contents: bytemuck::cast_slice(&[mark_shader.uniform()]), usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, }); diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index 2f611bb..fe589ae 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -4,7 +4,7 @@ mod test_image_baselines { use rstest::rstest; use sg2d::scene_graph::SceneGraph; use sg2d_vega::scene_graph::VegaSceneGraph; - use sg2d_wgpu::canvas::{Canvas, PngCanvas}; + use sg2d_wgpu::canvas::{Canvas, CanvasDimensions, PngCanvas}; use std::fs; use std::path::Path; @@ -136,8 +136,11 @@ mod test_image_baselines { .to_scene_graph() .expect("Failed to parse scene graph"); - let mut png_canvas = - pollster::block_on(PngCanvas::new(scene_graph.width, scene_graph.height, 2.0)).unwrap(); + let mut png_canvas = pollster::block_on(PngCanvas::new(CanvasDimensions { + size: [scene_graph.width, scene_graph.height], + scale: 2.0, + })) + .unwrap(); png_canvas.set_scene(&scene_graph).unwrap(); let img = pollster::block_on(png_canvas.render()).expect("Failed to render PNG image"); let result_path = format!("{output_dir}/{category}-{spec_name}.png"); From aede18b9074dff0a19ddaa760fe27e6147bbc8c0 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 24 Jan 2024 08:32:44 -0500 Subject: [PATCH 04/27] Move instance construction into instance shaders --- sg2d-wgpu/src/canvas.rs | 32 ++++++++------------------- sg2d-wgpu/src/marks/arc.rs | 9 +++++++- sg2d-wgpu/src/marks/instanced_mark.rs | 3 ++- sg2d-wgpu/src/marks/rect.rs | 9 +++++++- sg2d-wgpu/src/marks/rule.rs | 9 +++++++- sg2d-wgpu/src/marks/symbol.rs | 25 ++++++++++++--------- sg2d-wgpu/src/marks/text.rs | 3 ++- 7 files changed, 52 insertions(+), 38 deletions(-) diff --git a/sg2d-wgpu/src/canvas.rs b/sg2d-wgpu/src/canvas.rs index e2b66b6..1759ca1 100644 --- a/sg2d-wgpu/src/canvas.rs +++ b/sg2d-wgpu/src/canvas.rs @@ -13,15 +13,15 @@ use winit::event::WindowEvent; use winit::window::Window; use crate::error::Sg2dWgpuError; -use crate::marks::arc::{ArcInstance, ArcShader}; +use crate::marks::arc::ArcShader; use crate::marks::basic_mark::BasicMarkRenderer; use crate::marks::image::ImageShader; use crate::marks::instanced_mark::InstancedMarkRenderer; use crate::marks::path::PathShader; -use crate::marks::rect::{RectInstance, RectShader}; -use crate::marks::rule::{RuleInstance, RuleShader}; +use crate::marks::rect::RectShader; +use crate::marks::rule::RuleShader; use crate::marks::symbol::{SymbolInstance, SymbolShader}; -use crate::marks::text::{TextInstance, TextMarkRenderer}; +use crate::marks::text::TextMarkRenderer; use crate::marks::texture_instanced_mark::TextureInstancedMarkRenderer; use crate::marks::texture_mark::TextureMarkRenderer; use sg2d::marks::arc::ArcMark; @@ -78,13 +78,11 @@ pub trait Canvas { fn sample_count(&self) -> u32; fn add_arc_mark(&mut self, mark: &ArcMark) -> Result<(), Sg2dWgpuError> { - let instances = ArcInstance::iter_from_spec(mark).collect::>(); self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), - Box::new(ArcShader::new(self.dimensions())), - instances.as_slice(), + Box::new(ArcShader::from_arc_mark(mark, self.dimensions())), ))); Ok(()) } @@ -130,55 +128,43 @@ pub trait Canvas { } fn add_symbol_mark(&mut self, mark: &SymbolMark) -> Result<(), Sg2dWgpuError> { - let instances = SymbolInstance::iter_from_spec(mark).collect::>(); self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), - Box::new(SymbolShader::try_new( - mark.shapes.clone(), - self.dimensions(), - true, - mark.stroke_width.is_some(), - )?), - instances.as_slice(), + Box::new(SymbolShader::from_symbol_mark(mark, self.dimensions())?), ))); Ok(()) } fn add_rect_mark(&mut self, mark: &RectMark) -> Result<(), Sg2dWgpuError> { - let instances = RectInstance::iter_from_spec(mark).collect::>(); self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), - Box::new(RectShader::new(self.dimensions())), - instances.as_slice(), + Box::new(RectShader::from_rect_mark(mark, self.dimensions())), ))); Ok(()) } fn add_rule_mark(&mut self, mark: &RuleMark) -> Result<(), Sg2dWgpuError> { - let instances = RuleInstance::iter_from_spec(mark).collect::>(); self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), - Box::new(RuleShader::new(self.dimensions())), - instances.as_slice(), + Box::new(RuleShader::from_rule_mark(mark, self.dimensions())), ))); Ok(()) } fn add_text_mark(&mut self, mark: &TextMark) -> Result<(), Sg2dWgpuError> { - let instances = TextInstance::iter_from_spec(mark).collect::>(); self.add_mark_renderer(MarkRenderer::Text(TextMarkRenderer::new( self.device(), self.queue(), self.texture_format(), self.dimensions(), self.sample_count(), - instances, + mark, ))); Ok(()) } diff --git a/sg2d-wgpu/src/marks/arc.rs b/sg2d-wgpu/src/marks/arc.rs index 156a8b0..414f150 100644 --- a/sg2d-wgpu/src/marks/arc.rs +++ b/sg2d-wgpu/src/marks/arc.rs @@ -140,6 +140,7 @@ impl ArcInstance { pub struct ArcShader { verts: Vec, indices: Vec, + instances: Vec, uniform: ArcUniform, shader: String, vertex_entry_point: String, @@ -147,7 +148,8 @@ pub struct ArcShader { } impl ArcShader { - pub fn new(dimensions: CanvasDimensions) -> Self { + pub fn from_arc_mark(mark: &ArcMark, dimensions: CanvasDimensions) -> Self { + let instances = ArcInstance::iter_from_spec(mark).collect::>(); Self { verts: vec![ ArcVertex { @@ -164,6 +166,7 @@ impl ArcShader { }, ], indices: vec![0, 1, 2, 0, 2, 3], + instances, uniform: ArcUniform::new(dimensions), shader: include_str!("arc.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), @@ -185,6 +188,10 @@ impl InstancedMarkShader for ArcShader { self.indices.as_slice() } + fn instances(&self) -> &[Self::Instance] { + self.instances.as_slice() + } + fn uniform(&self) -> Self::Uniform { self.uniform } diff --git a/sg2d-wgpu/src/marks/instanced_mark.rs b/sg2d-wgpu/src/marks/instanced_mark.rs index 9efca1c..946deea 100644 --- a/sg2d-wgpu/src/marks/instanced_mark.rs +++ b/sg2d-wgpu/src/marks/instanced_mark.rs @@ -8,6 +8,7 @@ pub trait InstancedMarkShader { fn verts(&self) -> &[Self::Vertex]; fn indices(&self) -> &[u16]; + fn instances(&self) -> &[Self::Instance]; fn uniform(&self) -> Self::Uniform; fn shader(&self) -> &str; fn vertex_entry_point(&self) -> &str; @@ -32,7 +33,6 @@ impl InstancedMarkRenderer { texture_format: TextureFormat, sample_count: u32, mark_shader: Box>, - instances: &[I], ) -> Self where I: bytemuck::Pod + bytemuck::Zeroable, @@ -130,6 +130,7 @@ impl InstancedMarkRenderer { }); let num_indices = mark_shader.indices().len() as u32; + let instances = mark_shader.instances(); let instance_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { label: Some("Instance Buffer"), contents: bytemuck::cast_slice(instances), diff --git a/sg2d-wgpu/src/marks/rect.rs b/sg2d-wgpu/src/marks/rect.rs index c274e93..f5e710d 100644 --- a/sg2d-wgpu/src/marks/rect.rs +++ b/sg2d-wgpu/src/marks/rect.rs @@ -104,6 +104,7 @@ impl RectInstance { pub struct RectShader { verts: Vec, indices: Vec, + instances: Vec, uniform: RectUniform, shader: String, vertex_entry_point: String, @@ -111,7 +112,8 @@ pub struct RectShader { } impl RectShader { - pub fn new(dimensions: CanvasDimensions) -> Self { + pub fn from_rect_mark(mark: &RectMark, dimensions: CanvasDimensions) -> Self { + let instances = RectInstance::iter_from_spec(mark).collect::>(); Self { verts: vec![ RectVertex { @@ -128,6 +130,7 @@ impl RectShader { }, ], indices: vec![0, 1, 2, 0, 2, 3], + instances, uniform: RectUniform::new(dimensions), shader: include_str!("rect.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), @@ -149,6 +152,10 @@ impl InstancedMarkShader for RectShader { self.indices.as_slice() } + fn instances(&self) -> &[Self::Instance] { + self.instances.as_slice() + } + fn uniform(&self) -> Self::Uniform { self.uniform } diff --git a/sg2d-wgpu/src/marks/rule.rs b/sg2d-wgpu/src/marks/rule.rs index 014ad2f..ba0ad0f 100644 --- a/sg2d-wgpu/src/marks/rule.rs +++ b/sg2d-wgpu/src/marks/rule.rs @@ -185,6 +185,7 @@ impl RuleInstance { pub struct RuleShader { verts: Vec, indices: Vec, + instances: Vec, uniform: RuleUniform, shader: String, vertex_entry_point: String, @@ -192,7 +193,8 @@ pub struct RuleShader { } impl RuleShader { - pub fn new(dimensions: CanvasDimensions) -> Self { + pub fn from_rule_mark(mark: &RuleMark, dimensions: CanvasDimensions) -> Self { + let instances = RuleInstance::iter_from_spec(mark).collect::>(); Self { verts: vec![ RuleVertex { @@ -209,6 +211,7 @@ impl RuleShader { }, ], indices: vec![0, 1, 2, 0, 2, 3], + instances, uniform: RuleUniform::new(dimensions), shader: include_str!("rule.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), @@ -230,6 +233,10 @@ impl InstancedMarkShader for RuleShader { self.indices.as_slice() } + fn instances(&self) -> &[Self::Instance] { + self.instances.as_slice() + } + fn uniform(&self) -> Self::Uniform { self.uniform } diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index 8a81570..06fecb0 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -111,6 +111,7 @@ impl SymbolInstance { pub struct SymbolShader { verts: Vec, indices: Vec, + instances: Vec, uniform: SymbolUniform, shader: String, vertex_entry_point: String, @@ -118,12 +119,12 @@ pub struct SymbolShader { } impl SymbolShader { - pub fn try_new( - shapes: Vec, + pub fn from_symbol_mark( + mark: &SymbolMark, dimensions: CanvasDimensions, - has_fill: bool, - has_stroke: bool, ) -> Result { + let shapes = &mark.shapes; + let has_stroke = mark.stroke_width.is_some(); let mut verts: Vec = Vec::new(); let mut indices: Vec = Vec::new(); for (shape_index, shape) in shapes.iter().enumerate() { @@ -170,14 +171,12 @@ impl SymbolShader { BuffersBuilder::new(&mut buffers, VertexPositions { shape_index }); // Tesselate fill - if has_fill { - let mut fill_tessellator = FillTessellator::new(); - let fill_options = FillOptions::default().with_tolerance(0.01); - fill_tessellator.tessellate_path(path, &fill_options, &mut builder)?; - } + let mut fill_tessellator = FillTessellator::new(); + let fill_options = FillOptions::default().with_tolerance(0.01); + fill_tessellator.tessellate_path(path, &fill_options, &mut builder)?; // Tesselate stroke - if has_stroke { + if mark.stroke_width.is_some() { let mut stroke_tessellator = StrokeTessellator::new(); let stroke_options = StrokeOptions::default() .with_tolerance(0.01) @@ -191,9 +190,11 @@ impl SymbolShader { } } } + let instances = SymbolInstance::iter_from_spec(mark).collect::>(); Ok(Self { verts, indices, + instances, uniform: SymbolUniform::new(dimensions), shader: include_str!("symbol.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), @@ -215,6 +216,10 @@ impl InstancedMarkShader for SymbolShader { self.indices.as_slice() } + fn instances(&self) -> &[Self::Instance] { + self.instances.as_slice() + } + fn uniform(&self) -> Self::Uniform { self.uniform } diff --git a/sg2d-wgpu/src/marks/text.rs b/sg2d-wgpu/src/marks/text.rs index 0c919a0..294b308 100644 --- a/sg2d-wgpu/src/marks/text.rs +++ b/sg2d-wgpu/src/marks/text.rs @@ -100,8 +100,9 @@ impl TextMarkRenderer { texture_format: TextureFormat, dimensions: CanvasDimensions, sample_count: u32, - instances: Vec, + mark: &TextMark, ) -> Self { + let instances = TextInstance::iter_from_spec(mark).collect::>(); let font_system = FontSystem::new(); let cache = SwashCache::new(); let mut atlas = TextAtlas::new(device, queue, texture_format); From 821c095882c93b5d7c6bad1c34defc1563e87a0e Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 24 Jan 2024 09:22:12 -0500 Subject: [PATCH 05/27] Add WIP gradient rect shader. Wires up the gradient info through to the shader. Next, need to write gradient colorscale to texture and compute x texture coordinate using control points. --- sg2d-vega/src/marks/values.rs | 46 +-- sg2d-wgpu/src/canvas.rs | 25 +- sg2d-wgpu/src/marks/gradient_rect.rs | 273 ++++++++++++++++++ sg2d-wgpu/src/marks/gradient_rect.wgsl | 184 ++++++++++++ sg2d-wgpu/src/marks/mod.rs | 1 + sg2d-wgpu/src/marks/texture_instanced_mark.rs | 4 +- sg2d/src/marks/value.rs | 15 + 7 files changed, 518 insertions(+), 30 deletions(-) create mode 100644 sg2d-wgpu/src/marks/gradient_rect.rs create mode 100644 sg2d-wgpu/src/marks/gradient_rect.wgsl diff --git a/sg2d-vega/src/marks/values.rs b/sg2d-vega/src/marks/values.rs index 50ee045..0ff33c4 100644 --- a/sg2d-vega/src/marks/values.rs +++ b/sg2d-vega/src/marks/values.rs @@ -1,6 +1,6 @@ use crate::error::VegaSceneGraphError; use serde::{Deserialize, Serialize}; -use sg2d::marks::value::{ColorOrGradient, GradientStop, LinearGradient, RadialGradient}; +use sg2d::marks::value::{ColorOrGradient, Gradient, GradientStop, LinearGradient, RadialGradient}; use std::borrow::Cow; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] @@ -50,26 +50,30 @@ impl CssColorOrGradient { ])) } CssColorOrGradient::Gradient(grad) => Ok(match grad.gradient { - VegaGradientType::Linear => ColorOrGradient::LinearGradient(LinearGradient { - x0: grad.x1.unwrap_or(0.0), - y0: grad.y1.unwrap_or(0.0), - x1: grad.x2.unwrap_or(1.0), - y1: grad.y2.unwrap_or(0.0), - stops: grad - .stops - .iter() - .map(|s| s.to_grad_stop(opacity)) - .collect::, VegaSceneGraphError>>()?, - }), - VegaGradientType::Radial => ColorOrGradient::RadialGradient(RadialGradient { - x0: grad.x1.unwrap_or(0.5), - y0: grad.y1.unwrap_or(0.5), - x1: grad.x2.unwrap_or(0.5), - y1: grad.y2.unwrap_or(0.5), - r0: grad.r1.unwrap_or(0.0), - r1: grad.r2.unwrap_or(0.5), - stops: vec![], - }), + VegaGradientType::Linear => { + ColorOrGradient::Gradient(Gradient::LinearGradient(LinearGradient { + x0: grad.x1.unwrap_or(0.0), + y0: grad.y1.unwrap_or(0.0), + x1: grad.x2.unwrap_or(1.0), + y1: grad.y2.unwrap_or(0.0), + stops: grad + .stops + .iter() + .map(|s| s.to_grad_stop(opacity)) + .collect::, VegaSceneGraphError>>()?, + })) + } + VegaGradientType::Radial => { + ColorOrGradient::Gradient(Gradient::RadialGradient(RadialGradient { + x0: grad.x1.unwrap_or(0.5), + y0: grad.y1.unwrap_or(0.5), + x1: grad.x2.unwrap_or(0.5), + y1: grad.y2.unwrap_or(0.5), + r0: grad.r1.unwrap_or(0.0), + r1: grad.r2.unwrap_or(0.5), + stops: vec![], + })) + } }), } } diff --git a/sg2d-wgpu/src/canvas.rs b/sg2d-wgpu/src/canvas.rs index 1759ca1..926f49f 100644 --- a/sg2d-wgpu/src/canvas.rs +++ b/sg2d-wgpu/src/canvas.rs @@ -15,12 +15,13 @@ use winit::window::Window; use crate::error::Sg2dWgpuError; use crate::marks::arc::ArcShader; use crate::marks::basic_mark::BasicMarkRenderer; +use crate::marks::gradient_rect::GradientRectShader; use crate::marks::image::ImageShader; use crate::marks::instanced_mark::InstancedMarkRenderer; use crate::marks::path::PathShader; use crate::marks::rect::RectShader; use crate::marks::rule::RuleShader; -use crate::marks::symbol::{SymbolInstance, SymbolShader}; +use crate::marks::symbol::SymbolShader; use crate::marks::text::TextMarkRenderer; use crate::marks::texture_instanced_mark::TextureInstancedMarkRenderer; use crate::marks::texture_mark::TextureMarkRenderer; @@ -138,12 +139,22 @@ pub trait Canvas { } fn add_rect_mark(&mut self, mark: &RectMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( - self.device(), - self.texture_format(), - self.sample_count(), - Box::new(RectShader::from_rect_mark(mark, self.dimensions())), - ))); + // self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( + // self.device(), + // self.texture_format(), + // self.sample_count(), + // Box::new(RectShader::from_rect_mark(mark, self.dimensions())), + // ))); + + // Use gradient version + self.add_mark_renderer(MarkRenderer::TextureInstanced( + TextureInstancedMarkRenderer::new( + self.device(), + self.texture_format(), + self.sample_count(), + Box::new(GradientRectShader::from_rect_mark(mark, self.dimensions())), + ), + )); Ok(()) } diff --git a/sg2d-wgpu/src/marks/gradient_rect.rs b/sg2d-wgpu/src/marks/gradient_rect.rs new file mode 100644 index 0000000..b5c6640 --- /dev/null +++ b/sg2d-wgpu/src/marks/gradient_rect.rs @@ -0,0 +1,273 @@ +use crate::canvas::CanvasDimensions; +use crate::marks::texture_instanced_mark::{InstancedTextureMarkBatch, TextureInstancedMarkShader}; +use itertools::izip; +use sg2d::marks::rect::RectMark; +use sg2d::marks::value::{ColorOrGradient, Gradient, GradientStop}; +use wgpu::{Extent3d, VertexBufferLayout}; + +const GRADIENT_NONE: f32 = 0.0; +const GRADIENT_LINEAR: f32 = 1.0; +const GRADIENT_RADIAL: f32 = 2.0; + +#[repr(C)] +#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] +pub struct GradientRectUniform { + pub size: [f32; 2], + pub scale: f32, + pub gradient_type: f32, + pub x0: f32, + pub y0: f32, + pub x1: f32, + pub y1: f32, + pub r0: f32, + pub r1: f32, + _pad: [f32; 2], // Pad to 16 bytes +} + +impl GradientRectUniform { + pub fn new(dimensions: CanvasDimensions, gradient: Option) -> Self { + match gradient { + None => Self { + size: dimensions.size, + scale: dimensions.scale, + gradient_type: GRADIENT_NONE, + x0: 0.0, + y0: 0.0, + x1: 0.0, + y1: 0.0, + r0: 0.0, + r1: 0.0, + _pad: [0.0, 0.0], + }, + Some(Gradient::LinearGradient(gradient)) => Self { + size: dimensions.size, + scale: dimensions.scale, + gradient_type: GRADIENT_LINEAR, + x0: gradient.x0, + y0: gradient.y0, + x1: gradient.x1, + y1: gradient.y1, + r0: 0.0, + r1: 0.0, + _pad: [0.0, 0.0], + }, + Some(Gradient::RadialGradient(gradient)) => Self { + size: dimensions.size, + scale: dimensions.scale, + gradient_type: GRADIENT_RADIAL, + x0: gradient.x0, + y0: gradient.y0, + x1: gradient.x1, + y1: gradient.y1, + r0: gradient.r0, + r1: gradient.r1, + _pad: [0.0, 0.0], + }, + } + } +} + +#[repr(C)] +#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] +pub struct GradientRectVertex { + pub position: [f32; 2], +} + +const VERTEX_ATTRIBUTES: [wgpu::VertexAttribute; 1] = wgpu::vertex_attr_array![ + 0 => Float32x2, // position +]; + +impl GradientRectVertex { + pub fn desc() -> VertexBufferLayout<'static> { + VertexBufferLayout { + array_stride: std::mem::size_of::() as wgpu::BufferAddress, + step_mode: wgpu::VertexStepMode::Vertex, + attributes: &VERTEX_ATTRIBUTES, + } + } +} + +#[repr(C)] +#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] +pub struct GradientRectInstance { + pub position: [f32; 2], + pub fill: [f32; 4], + pub width: f32, + pub height: f32, + pub stroke: [f32; 4], + pub stroke_width: f32, + pub corner_radius: f32, +} + +const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 7] = wgpu::vertex_attr_array![ + 1 => Float32x2, // position + 2 => Float32x4, // color + 3 => Float32, // width + 4 => Float32, // height + 5 => Float32x4, // stroke + 6 => Float32, // stroke_width + 7 => Float32, // corner_radius +]; + +impl GradientRectInstance { + pub fn from_spec(mark: &RectMark) -> (Vec, Option) { + let mut instances: Vec = Vec::new(); + let mut gradient: Option = None; + let mut stops: Vec> = Vec::new(); + + let mut compute_color = |color_or_gradient: &ColorOrGradient| -> [f32; 4] { + match color_or_gradient { + ColorOrGradient::Color(c) => *c, + ColorOrGradient::Gradient(grad) => { + gradient = Some(grad.clone()); + let s = grad.stops(); + let pos = if let Some(pos) = stops.iter().position(|s| s.as_slice() == s) { + // Already have stops, store index + pos + } else { + // Add stops + let pos = stops.len(); + stops.push(Vec::from(s)); + pos + }; + // Each gradient stops colorscale is written to two rows, starting an texture + // coordinate 0. This results in 128 gradients stored in 256x256 texture. To + // avoid interpolation artifacts, we compute the texture coordinate as the + // position between the two rows + let grad_coord = (pos as f32 / 128.0) + 1.0 / 512.0; + [-grad_coord, 0.0, 0.0, 0.0] + } + } + }; + + for (x, y, width, height, fill, stroke, stroke_width, corner_radius) in izip!( + mark.x_iter(), + mark.y_iter(), + mark.width_iter(), + mark.height_iter(), + mark.fill_iter(), + mark.stroke_iter(), + mark.stroke_width_iter(), + mark.corner_radius_iter(), + ) { + let fill = compute_color(fill); + let stroke = compute_color(stroke); + instances.push(GradientRectInstance { + position: [*x, *y], + width: *width, + height: *height, + fill: fill, + stroke: stroke, + stroke_width: *stroke_width, + corner_radius: *corner_radius, + }) + } + (instances, gradient) + } +} + +pub struct GradientRectShader { + verts: Vec, + indices: Vec, + instances: Vec, + uniform: GradientRectUniform, + batches: Vec, + texture_size: Extent3d, + shader: String, + vertex_entry_point: String, + fragment_entry_point: String, +} + +impl GradientRectShader { + pub fn from_rect_mark(mark: &RectMark, dimensions: CanvasDimensions) -> Self { + let (instances, gradient) = GradientRectInstance::from_spec(mark); + + let batches = vec![InstancedTextureMarkBatch { + instances_range: 0..instances.len() as u32, + image: image::DynamicImage::ImageRgba8(image::RgbaImage::new(256, 256)), + }]; + + Self { + verts: vec![ + GradientRectVertex { + position: [0.0, 0.0], + }, + GradientRectVertex { + position: [1.0, 0.0], + }, + GradientRectVertex { + position: [1.0, 1.0], + }, + GradientRectVertex { + position: [0.0, 1.0], + }, + ], + indices: vec![0, 1, 2, 0, 2, 3], + instances, + batches, + texture_size: Extent3d { + width: 256, + height: 256, + depth_or_array_layers: 1, + }, + uniform: GradientRectUniform::new(dimensions, gradient), + shader: include_str!("gradient_rect.wgsl").to_string(), + vertex_entry_point: "vs_main".to_string(), + fragment_entry_point: "fs_main".to_string(), + } + } +} + +impl TextureInstancedMarkShader for GradientRectShader { + type Instance = GradientRectInstance; + type Vertex = GradientRectVertex; + type Uniform = GradientRectUniform; + + fn verts(&self) -> &[Self::Vertex] { + self.verts.as_slice() + } + + fn indices(&self) -> &[u16] { + self.indices.as_slice() + } + + fn instances(&self) -> &[Self::Instance] { + self.instances.as_slice() + } + + fn uniform(&self) -> Self::Uniform { + self.uniform + } + + fn batches(&self) -> &[InstancedTextureMarkBatch] { + self.batches.as_slice() + } + + fn texture_size(&self) -> Extent3d { + self.texture_size + } + + fn shader(&self) -> &str { + self.shader.as_str() + } + + fn vertex_entry_point(&self) -> &str { + self.vertex_entry_point.as_str() + } + + fn fragment_entry_point(&self) -> &str { + self.fragment_entry_point.as_str() + } + + fn instance_desc(&self) -> wgpu::VertexBufferLayout<'static> { + wgpu::VertexBufferLayout { + array_stride: std::mem::size_of::() as wgpu::BufferAddress, + step_mode: wgpu::VertexStepMode::Instance, + attributes: &INSTANCE_ATTRIBUTES, + } + } + + fn vertex_desc(&self) -> VertexBufferLayout<'static> { + GradientRectVertex::desc() + } +} diff --git a/sg2d-wgpu/src/marks/gradient_rect.wgsl b/sg2d-wgpu/src/marks/gradient_rect.wgsl new file mode 100644 index 0000000..b7ad2e6 --- /dev/null +++ b/sg2d-wgpu/src/marks/gradient_rect.wgsl @@ -0,0 +1,184 @@ +// Vertex shader + +const GRADIENT_NONE = 0.0; +const GRADIENT_LINEAR = 1.0; +const GRADIENT_RADIAL = 2.0; + +struct ChartUniform { + size: vec2, + scale: f32, + gradient_type: f32, + x0: f32, + y0: f32, + x1: f32, + y1: f32, + r0: f32, + r1: f32, + _pad: vec2, // for 16 byte alignment +}; + +@group(0) @binding(0) +var chart_uniforms: ChartUniform; + +struct VertexInput { + @location(0) position: vec2, +}; + +struct InstanceInput { + @location(1) position: vec2, + @location(2) fill: vec4, + @location(3) width: f32, + @location(4) height: f32, + @location(5) stroke: vec4, + @location(6) stroke_width: f32, + @location(7) corner_radius: f32, +}; + +struct VertexOutput { + @builtin(position) clip_position: vec4, + @location(0) fill: vec4, + @location(1) stroke: vec4, + @location(2) stroke_width: f32, + @location(3) corner_radius: f32, + + // Outer points are outside of stroke + @location(4) outer_top_left: vec2, + @location(5) outer_bottom_right: vec2, + + // Inner points are centers of the corner radius + @location(6) inner_top_left: vec2, + @location(7) inner_bottom_right: vec2, +}; + +@vertex +fn vs_main( + model: VertexInput, + instance: InstanceInput, +) -> VertexOutput { + var out: VertexOutput; + // Pass through values + out.fill = instance.fill; + out.stroke = instance.stroke; + out.stroke_width = instance.stroke_width; + + // corner_radius may not be less than half the rect height + let corner_radius = min(instance.corner_radius, instance.height / 2.0); + out.corner_radius = corner_radius; + + // Compute corner points in fragment shader coordinates + let half_stroke = instance.stroke_width / 2.0; + let width_height = vec2(instance.width, instance.height); + out.outer_top_left = (instance.position - half_stroke) * chart_uniforms.scale; + out.outer_bottom_right = (instance.position + width_height + half_stroke) * chart_uniforms.scale; + + // Compute corner radius center points in fragment shader coordinates + out.inner_top_left = (instance.position + corner_radius) * chart_uniforms.scale; + out.inner_bottom_right = (instance.position + width_height - corner_radius) * chart_uniforms.scale; + + // Compute vertex coordinates + let x = 2.0 * (model.position[0] * (instance.width + instance.stroke_width) + instance.position[0] - half_stroke) / chart_uniforms.size[0] - 1.0; + let y = 2.0 * (model.position[1] * (instance.height + instance.stroke_width) + (chart_uniforms.size[1] - instance.position[1] - instance.height - half_stroke)) / chart_uniforms.size[1] - 1.0; + out.clip_position = vec4(x, y, 0.0, 1.0); + return out; +} + +// Fragment shader +@group(1) @binding(0) +var t_diffuse: texture_2d; +@group(1) @binding(1) +var s_diffuse: sampler; + +@fragment +fn fs_main(in: VertexOutput) -> @location(0) vec4 { + let scaled_radius = in.corner_radius * chart_uniforms.scale; + let scaled_stroke_width = in.stroke_width * chart_uniforms.scale; + let frag_xy = vec2(in.clip_position[0], in.clip_position[1]); + + if (scaled_radius > 0.0) { + // has rounded corners + let inner_bottom_left = vec2(in.inner_top_left[0], in.inner_bottom_right[1]); + let inner_top_right = vec2(in.inner_bottom_right[0], in.inner_top_left[1]); + + let in_top_left = in.clip_position[0] < in.inner_top_left[0] && in.clip_position[1] < in.inner_top_left[1]; + let in_top_right = inner_top_right[0] < in.clip_position[0] && in.clip_position[1] < inner_top_right[1]; + let in_bottom_right = in.inner_bottom_right[0] < in.clip_position[0] && in.inner_bottom_right[1] < in.clip_position[1]; + let in_bottom_left = in.clip_position[0] < inner_bottom_left[0] && inner_bottom_left[1] < in.clip_position[1]; + + let buffer = 0.5 * chart_uniforms.scale; + if (scaled_stroke_width > 0.0) { + var dist: f32 = scaled_radius; + if (in_top_left) { + dist = distance(in.inner_top_left, frag_xy); + } else if (in_bottom_right) { + dist = distance(in.inner_bottom_right, frag_xy); + } else if (in_bottom_left) { + dist = distance(inner_bottom_left, frag_xy); + } else if (in_top_right) { + dist = distance(inner_top_right, frag_xy); + } else { + let right_dist = frag_xy[0] - inner_top_right[0]; + let left_dist = in.inner_top_left[0] - frag_xy[0]; + let top_dist = in.inner_top_left[1] - frag_xy[1]; + let bottom_dist = frag_xy[1] - in.inner_bottom_right[1]; + dist = max(max(right_dist, left_dist), max(bottom_dist, top_dist)); + } + + let stroke_radius = scaled_radius + scaled_stroke_width / 2.0; + let alpha_factor = 1.0 - smoothstep(stroke_radius - buffer, stroke_radius + buffer, dist); + + let inner_radius = scaled_radius - scaled_stroke_width / 2.0; + let mix_factor = 1.0 - smoothstep(inner_radius - buffer, inner_radius + buffer, dist); + var mixed_color: vec4 = mix(lookup_color(in.stroke), lookup_color(in.fill), mix_factor); + mixed_color[3] *= alpha_factor; + return mixed_color; + } else { + var dist: f32 = scaled_radius; + if (in_top_left) { + dist = distance(in.inner_top_left, frag_xy); + } else if (in_bottom_right) { + dist = distance(in.inner_bottom_right, frag_xy); + } else if (in_bottom_left) { + dist = distance(inner_bottom_left, frag_xy); + } else if (in_top_right) { + dist = distance(inner_top_right, frag_xy); + } else { + // skip anit-aliasing when not in a corner + return lookup_color(in.fill); + } + + let alpha_factor = 1.0 - smoothstep(scaled_radius - buffer, scaled_radius + buffer, dist); + var color: vec4 = lookup_color(in.fill); + color[3] *= alpha_factor; + return color; + } + } else { + // no rounded corners + if (scaled_stroke_width > 0.0) { + // has stroke + let in_left_stroke = in.clip_position[0] - in.outer_top_left[0] < scaled_stroke_width; + let in_right_stroke = in.outer_bottom_right[0] - in.clip_position[0] < scaled_stroke_width; + let in_top_stroke = in.clip_position[1] - in.outer_top_left[1] < scaled_stroke_width; + let in_bottom_stroke = in.outer_bottom_right[1] - in.clip_position[1] < scaled_stroke_width; + + let in_stroke = in_left_stroke || in_right_stroke || in_bottom_stroke || in_top_stroke; + if (in_stroke) { + return lookup_color(in.stroke); + } else { + return lookup_color(in.fill); + } + } else { + // no stroke + return lookup_color(in.fill); + } + } +} + +fn lookup_color(color: vec4) -> vec4 { + if (color[0] < 0.0) { + let tex_coord_y = -color[0]; + // TODO: compute tex_coord_x and use sampler to determine color + return vec4(1.0, 0.0, 0.0, 1.0); + } else { + return color; + } +} \ No newline at end of file diff --git a/sg2d-wgpu/src/marks/mod.rs b/sg2d-wgpu/src/marks/mod.rs index 0e6dd2a..41ba566 100644 --- a/sg2d-wgpu/src/marks/mod.rs +++ b/sg2d-wgpu/src/marks/mod.rs @@ -1,5 +1,6 @@ pub mod arc; pub mod basic_mark; +pub mod gradient_rect; pub mod image; pub mod instanced_mark; pub mod path; diff --git a/sg2d-wgpu/src/marks/texture_instanced_mark.rs b/sg2d-wgpu/src/marks/texture_instanced_mark.rs index 046375c..b0e76ac 100644 --- a/sg2d-wgpu/src/marks/texture_instanced_mark.rs +++ b/sg2d-wgpu/src/marks/texture_instanced_mark.rs @@ -15,6 +15,7 @@ pub trait TextureInstancedMarkShader { fn verts(&self) -> &[Self::Vertex]; fn indices(&self) -> &[u16]; + fn instances(&self) -> &[Self::Instance]; fn uniform(&self) -> Self::Uniform; fn batches(&self) -> &[InstancedTextureMarkBatch]; fn texture_size(&self) -> Extent3d; @@ -55,7 +56,6 @@ impl TextureInstancedMarkRenderer { texture_format: TextureFormat, sample_count: u32, mark_shader: Box>, - instances: &[I], ) -> Self where I: bytemuck::Pod + bytemuck::Zeroable, @@ -220,7 +220,7 @@ impl TextureInstancedMarkRenderer { let instance_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { label: Some("Instance Buffer"), - contents: bytemuck::cast_slice(instances), + contents: bytemuck::cast_slice(mark_shader.instances()), usage: wgpu::BufferUsages::VERTEX, }); diff --git a/sg2d/src/marks/value.rs b/sg2d/src/marks/value.rs index 67aa07d..6bd3a65 100644 --- a/sg2d/src/marks/value.rs +++ b/sg2d/src/marks/value.rs @@ -63,10 +63,25 @@ pub enum ImageBaseline { #[serde(untagged)] pub enum ColorOrGradient { Color([f32; 4]), + Gradient(Gradient), +} + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(untagged)] +pub enum Gradient { LinearGradient(LinearGradient), RadialGradient(RadialGradient), } +impl Gradient { + pub fn stops(&self) -> &[GradientStop] { + match self { + Gradient::LinearGradient(grad) => grad.stops.as_slice(), + Gradient::RadialGradient(grad) => grad.stops.as_slice(), + } + } +} + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct LinearGradient { pub x0: f32, From ed4993288d834feb4fbdc4d20fcf2b8b944a21b1 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 07:20:30 -0500 Subject: [PATCH 06/27] WIP gradient --- examples/scatter-panning/Cargo.lock | 10 + examples/wgpu-winit/Cargo.lock | 10 + .../default_gradient_bars_rounded_stroke.png | Bin 0 -> 153504 bytes ...fault_gradient_bars_rounded_stroke.sg.json | 393 +++++++++++++++++ .../diagonal_gradient_bars_rounded.png | Bin 0 -> 120048 bytes .../diagonal_gradient_bars_rounded.sg.json | 395 ++++++++++++++++++ .../gradients/heatmap_with_colorbar.png | Bin 52881 -> 52562 bytes .../gradients/heatmap_with_colorbar.sg.json | 8 +- ...fault_gradient_bars_rounded_stroke.vg.json | 188 +++++++++ .../diagonal_gradient_bars_rounded.vg.json | 198 +++++++++ .../gradients/heatmap_with_colorbar.vg.json | 5 +- sg2d-wgpu/Cargo.toml | 3 +- sg2d-wgpu/src/canvas.rs | 1 - sg2d-wgpu/src/marks/gradient_rect.rs | 37 +- sg2d-wgpu/src/marks/gradient_rect.wgsl | 31 +- sg2d-wgpu/src/marks/texture_instanced_mark.rs | 3 +- sg2d-wgpu/tests/test_image_baselines.rs | 2 + sg2d-wgpu/tests/try_colorgrad.rs | 20 + 18 files changed, 1282 insertions(+), 22 deletions(-) create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/default_gradient_bars_rounded_stroke.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/default_gradient_bars_rounded_stroke.sg.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.sg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/default_gradient_bars_rounded_stroke.vg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/diagonal_gradient_bars_rounded.vg.json create mode 100644 sg2d-wgpu/tests/try_colorgrad.rs diff --git a/examples/scatter-panning/Cargo.lock b/examples/scatter-panning/Cargo.lock index 61556e6..a6a5c41 100644 --- a/examples/scatter-panning/Cargo.lock +++ b/examples/scatter-panning/Cargo.lock @@ -308,6 +308,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +[[package]] +name = "colorgrad" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a5f405d474b9d05e0a093d3120e77e9bf26461b57a84b40aa2a221ac5617fb6" +dependencies = [ + "csscolorparser", +] + [[package]] name = "com-rs" version = "0.2.1" @@ -2202,6 +2211,7 @@ dependencies = [ "bytemuck", "cfg-if", "cgmath", + "colorgrad", "env_logger", "etagere", "futures-intrusive", diff --git a/examples/wgpu-winit/Cargo.lock b/examples/wgpu-winit/Cargo.lock index 4f0e969..c38062d 100644 --- a/examples/wgpu-winit/Cargo.lock +++ b/examples/wgpu-winit/Cargo.lock @@ -308,6 +308,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +[[package]] +name = "colorgrad" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a5f405d474b9d05e0a093d3120e77e9bf26461b57a84b40aa2a221ac5617fb6" +dependencies = [ + "csscolorparser", +] + [[package]] name = "com-rs" version = "0.2.1" @@ -2159,6 +2168,7 @@ dependencies = [ "bytemuck", "cfg-if", "cgmath", + "colorgrad", "env_logger", "etagere", "futures-intrusive", diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/default_gradient_bars_rounded_stroke.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/default_gradient_bars_rounded_stroke.png new file mode 100644 index 0000000000000000000000000000000000000000..f878379978e0d6dca74e43e78e2f9574e6777816 GIT binary patch literal 153504 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 literal 0 HcmV?d00001 diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/default_gradient_bars_rounded_stroke.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/default_gradient_bars_rounded_stroke.sg.json new file mode 100644 index 0000000..e0c16b1 --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/default_gradient_bars_rounded_stroke.sg.json @@ -0,0 +1,393 @@ +{ + "width": 317, + "height": 217, + "origin": [ + 11, + 6 + ], + "scenegraph": { + "clip": false, + "interactive": true, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 200, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 160, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 120, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 80, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 40, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 0, + "x2": 300 + } + ], + "marktype": "rule", + "role": "axis-grid", + "zindex": 0 + } + ], + "orient": "left", + "offset": 0, + "x": 0.5, + "y": 0.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0, + "aria": false + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 30 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 90 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 150 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 210 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 270 + } + ], + "marktype": "rule", + "role": "axis-tick", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "x": 0, + "x2": 300, + "y": 0 + } + ], + "marktype": "rule", + "role": "axis-domain", + "zindex": 0 + } + ], + "orient": "bottom", + "offset": 0, + "x": 0.5, + "y": 200.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 200, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 160, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 120, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 80, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 40, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "x": 0, + "x2": -5 + } + ], + "marktype": "rule", + "role": "axis-tick", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "x": 0, + "y": 200, + "y2": 0 + } + ], + "marktype": "rule", + "role": "axis-domain", + "zindex": 0 + } + ], + "orient": "left", + "offset": 0, + "x": 0.5, + "y": 0.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0 + }, + { + "clip": false, + "interactive": true, + "items": [ + { + "fill": "blue", + "cornerRadius": 10, + "stroke": "darkcyan", + "strokeWidth": 4, + "ariaRoleDescription": "bar", + "description": "a: A; b: 28", + "x": 3, + "width": 54, + "y": 144, + "y2": 200, + "height": 56 + }, + { + "fill": { + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "cornerRadius": 10, + "stroke": "darkcyan", + "strokeWidth": 4, + "ariaRoleDescription": "bar", + "description": "a: B; b: 55", + "x": 63, + "width": 54, + "y": 89.99999999999999, + "y2": 200, + "height": 110.00000000000001 + }, + { + "fill": { + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 0.4, + "color": "purple" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "cornerRadius": 10, + "stroke": "darkcyan", + "strokeWidth": 4, + "ariaRoleDescription": "bar", + "description": "a: C; b: 43", + "x": 123, + "width": 54, + "y": 114.00000000000001, + "y2": 200, + "height": 85.99999999999999 + }, + { + "fill": { + "stops": [ + { + "offset": 0, + "color": "rgb(128, 128, 128)" + }, + { + "offset": 0.4, + "color": "rgba(128, 128, 128, 0.3)" + }, + { + "offset": 1, + "color": "deeppink" + } + ] + }, + "cornerRadius": 10, + "stroke": "darkcyan", + "strokeWidth": 4, + "ariaRoleDescription": "bar", + "description": "a: D; b: 91", + "x": 183, + "width": 54, + "y": 17.999999999999993, + "y2": 200, + "height": 182 + }, + { + "fill": "black", + "cornerRadius": 10, + "stroke": "darkcyan", + "strokeWidth": 4, + "ariaRoleDescription": "bar", + "description": "a: E; b: 81", + "x": 243, + "width": 54, + "y": 37.999999999999986, + "y2": 200, + "height": 162 + } + ], + "marktype": "rect", + "name": "marks", + "role": "mark", + "zindex": 0 + } + ], + "fill": "transparent", + "x": 0, + "y": 0, + "width": 300, + "height": 200, + "stroke": "transparent" + } + ], + "marktype": "group", + "name": "root", + "role": "frame", + "zindex": 0 + } +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.png new file mode 100644 index 0000000000000000000000000000000000000000..6b35b52ad5df3c2605d190c8e3ad0e71a87fd8fa GIT binary patch literal 120048 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 RfPZGaH0M`Gf4Ok&{{RI-+;so| literal 0 HcmV?d00001 diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.sg.json new file mode 100644 index 0000000..dc4bd89 --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.sg.json @@ -0,0 +1,395 @@ +{ + "width": 316, + "height": 217, + "origin": [ + 11, + 6 + ], + "scenegraph": { + "clip": false, + "interactive": true, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 200, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 160, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 120, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 80, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 40, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 0, + "x2": 300 + } + ], + "marktype": "rule", + "role": "axis-grid", + "zindex": 0 + } + ], + "orient": "left", + "offset": 0, + "x": 0.5, + "y": 0.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0, + "aria": false + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 30 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 90 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 150 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 210 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 270 + } + ], + "marktype": "rule", + "role": "axis-tick", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "x": 0, + "x2": 300, + "y": 0 + } + ], + "marktype": "rule", + "role": "axis-domain", + "zindex": 0 + } + ], + "orient": "bottom", + "offset": 0, + "x": 0.5, + "y": 200.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 200, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 160, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 120, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 80, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 40, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "x": 0, + "x2": -5 + } + ], + "marktype": "rule", + "role": "axis-tick", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "x": 0, + "y": 200, + "y2": 0 + } + ], + "marktype": "rule", + "role": "axis-domain", + "zindex": 0 + } + ], + "orient": "left", + "offset": 0, + "x": 0.5, + "y": 0.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0 + }, + { + "clip": false, + "interactive": true, + "items": [ + { + "fill": "blue", + "cornerRadius": 10, + "ariaRoleDescription": "bar", + "description": "a: A; b: 28", + "x": 3, + "width": 54, + "y": 144, + "y2": 200, + "height": 56 + }, + { + "fill": { + "x1": 0.2, + "y1": 0.9, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "cornerRadius": 10, + "ariaRoleDescription": "bar", + "description": "a: B; b: 55", + "x": 63, + "width": 54, + "y": 89.99999999999999, + "y2": 200, + "height": 110.00000000000001 + }, + { + "fill": { + "x1": 0.2, + "y1": 0.9, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 0.4, + "color": "purple" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "cornerRadius": 10, + "ariaRoleDescription": "bar", + "description": "a: C; b: 43", + "x": 123, + "width": 54, + "y": 114.00000000000001, + "y2": 200, + "height": 85.99999999999999 + }, + { + "fill": { + "x1": 0.2, + "y1": 0.9, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "rgb(128, 128, 128)" + }, + { + "offset": 0.4, + "color": "rgba(128, 128, 128, 0.3)" + }, + { + "offset": 1, + "color": "deeppink" + } + ] + }, + "cornerRadius": 10, + "ariaRoleDescription": "bar", + "description": "a: D; b: 91", + "x": 183, + "width": 54, + "y": 17.999999999999993, + "y2": 200, + "height": 182 + }, + { + "fill": "black", + "cornerRadius": 10, + "ariaRoleDescription": "bar", + "description": "a: E; b: 81", + "x": 243, + "width": 54, + "y": 37.999999999999986, + "y2": 200, + "height": 162 + } + ], + "marktype": "rect", + "name": "marks", + "role": "mark", + "zindex": 0 + } + ], + "fill": "transparent", + "x": 0, + "y": 0, + "width": 300, + "height": 200, + "stroke": "transparent" + } + ], + "marktype": "group", + "name": "root", + "role": "frame", + "zindex": 0 + } +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.png index f3f7236f678f3ed873cc9477a8ebfd3da25044de..c564e74269c62be1668cdfe1cc7efba27263e2d2 100644 GIT binary patch literal 52562 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 QfdAI730j@E@~`{<4^5kN8UO$Q diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.sg.json index 528c582..720c883 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.sg.json @@ -1,5 +1,5 @@ { - "width": 461, + "width": 462, "height": 166, "origin": [ 5, @@ -3057,9 +3057,9 @@ "items": [ { "fill": "#000", - "font": "sans-serif", "fontSize": 10, "opacity": 1, + "font": "Courier", "align": "left", "baseline": "bottom", "y": 156, @@ -3068,9 +3068,9 @@ }, { "fill": "#000", - "font": "sans-serif", "fontSize": 10, "opacity": 1, + "font": "Courier", "align": "left", "baseline": "top", "y": 0, @@ -3095,7 +3095,7 @@ "orient": "right", "x": 421, "y": 0, - "width": 30, + "width": 31, "height": 156 } ], diff --git a/sg2d-vega-test-data/vega-specs/gradients/default_gradient_bars_rounded_stroke.vg.json b/sg2d-vega-test-data/vega-specs/gradients/default_gradient_bars_rounded_stroke.vg.json new file mode 100644 index 0000000..2f2fe94 --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/gradients/default_gradient_bars_rounded_stroke.vg.json @@ -0,0 +1,188 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "A simple bar chart with embedded data.", + "background": "white", + "padding": 5, + "height": 200, + "style": "cell", + "encode": {"update": {"stroke": {"value": "transparent"}}}, + "data": [ + { + "name": "source_0", + "values": [ + { + "a": "A", + "b": 28, + "fill": "blue" + }, + { + "a": "B", + "b": 55, + "fill": { + "gradient": "linear", + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + } + }, + { + "a": "C", + "b": 43, + "fill": { + "gradient": "linear", + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 0.4, + "color": "purple" + }, + { + "offset": 1, + "color": "crimson" + } + ] + } + }, + { + "a": "D", + "b": 91, + "fill": { + "gradient": "linear", + "stops": [ + { + "offset": 0, + "color": "rgb(128, 128, 128)" + }, + { + "offset": 0.4, + "color": "rgba(128, 128, 128, 0.3)" + }, + { + "offset": 1, + "color": "deeppink" + } + ] + } + }, + { + "a": "E", + "b": 81, + "fill": "black" + } + ] + }, + { + "name": "data_0", + "source": "source_0", + "transform": [ + { + "type": "stack", + "groupby": ["a"], + "field": "b", + "sort": {"field": [], "order": []}, + "as": ["b_start", "b_end"], + "offset": "zero" + }, + { + "type": "filter", + "expr": "isValid(datum[\"b\"]) && isFinite(+datum[\"b\"])" + } + ] + } + ], + "signals": [ + {"name": "x_step", "value": 60}, + { + "name": "width", + "update": "bandspace(domain('x').length, 0.1, 0.05) * x_step" + } + ], + "marks": [ + { + "name": "marks", + "type": "rect", + "style": ["bar"], + "from": {"data": "data_0"}, + "encode": { + "update": { + "fill": { + "field": "fill" + }, + "cornerRadius": {"value": 10}, + "stroke": {"value": "darkcyan"}, + "strokeWidth": {"value": 4}, + "ariaRoleDescription": {"value": "bar"}, + "description": { + "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" + }, + "x": {"scale": "x", "field": "a"}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, + "y": {"scale": "y", "field": "b_end"}, + "y2": {"scale": "y", "field": "b_start"} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "band", + "domain": {"data": "data_0", "field": "a", "sort": true}, + "range": {"step": {"signal": "x_step"}}, + "paddingInner": 0.1, + "paddingOuter": 0.05 + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "data_0", "fields": ["b_start", "b_end"]}, + "range": [{"signal": "height"}, 0], + "nice": true, + "zero": true + } + ], + "axes": [ + { + "scale": "y", + "orient": "left", + "gridScale": "x", + "grid": true, + "tickCount": {"signal": "ceil(height/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "x", + "orient": "bottom", + "grid": false, + "labels": false, + "labelAngle": 0, + "labelBaseline": "top", + "zindex": 0 + }, + { + "scale": "y", + "orient": "left", + "grid": false, + "labels": false, + "labelOverlap": true, + "tickCount": {"signal": "ceil(height/40)"}, + "zindex": 0 + } + ] +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-specs/gradients/diagonal_gradient_bars_rounded.vg.json b/sg2d-vega-test-data/vega-specs/gradients/diagonal_gradient_bars_rounded.vg.json new file mode 100644 index 0000000..451d210 --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/gradients/diagonal_gradient_bars_rounded.vg.json @@ -0,0 +1,198 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "A simple bar chart with embedded data.", + "background": "white", + "padding": 5, + "height": 200, + "style": "cell", + "encode": {"update": {"stroke": {"value": "transparent"}}}, + "data": [ + { + "name": "source_0", + "values": [ + { + "a": "A", + "b": 28, + "fill": "blue" + }, + { + "a": "B", + "b": 55, + "fill": { + "x1": 0.2, + "y1": 0.9, + "x2": 0.7, + "y2": 0.1, + "gradient": "linear", + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + } + }, + { + "a": "C", + "b": 43, + "fill": { + "x1": 0.2, + "y1": 0.9, + "x2": 0.7, + "y2": 0.1, + "gradient": "linear", + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 0.4, + "color": "purple" + }, + { + "offset": 1, + "color": "crimson" + } + ] + } + }, + { + "a": "D", + "b": 91, + "fill": { + "x1": 0.2, + "y1": 0.9, + "x2": 0.7, + "y2": 0.1, + "gradient": "linear", + "stops": [ + { + "offset": 0, + "color": "rgb(128, 128, 128)" + }, + { + "offset": 0.4, + "color": "rgba(128, 128, 128, 0.3)" + }, + { + "offset": 1, + "color": "deeppink" + } + ] + } + }, + { + "a": "E", + "b": 81, + "fill": "black" + } + ] + }, + { + "name": "data_0", + "source": "source_0", + "transform": [ + { + "type": "stack", + "groupby": ["a"], + "field": "b", + "sort": {"field": [], "order": []}, + "as": ["b_start", "b_end"], + "offset": "zero" + }, + { + "type": "filter", + "expr": "isValid(datum[\"b\"]) && isFinite(+datum[\"b\"])" + } + ] + } + ], + "signals": [ + {"name": "x_step", "value": 60}, + { + "name": "width", + "update": "bandspace(domain('x').length, 0.1, 0.05) * x_step" + } + ], + "marks": [ + { + "name": "marks", + "type": "rect", + "style": ["bar"], + "from": {"data": "data_0"}, + "encode": { + "update": { + "fill": { + "field": "fill" + }, + "cornerRadius": {"value": 10}, + "ariaRoleDescription": {"value": "bar"}, + "description": { + "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" + }, + "x": {"scale": "x", "field": "a"}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, + "y": {"scale": "y", "field": "b_end"}, + "y2": {"scale": "y", "field": "b_start"} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "band", + "domain": {"data": "data_0", "field": "a", "sort": true}, + "range": {"step": {"signal": "x_step"}}, + "paddingInner": 0.1, + "paddingOuter": 0.05 + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "data_0", "fields": ["b_start", "b_end"]}, + "range": [{"signal": "height"}, 0], + "nice": true, + "zero": true + } + ], + "axes": [ + { + "scale": "y", + "orient": "left", + "gridScale": "x", + "grid": true, + "tickCount": {"signal": "ceil(height/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "x", + "orient": "bottom", + "grid": false, + "labels": false, + "labelAngle": 0, + "labelBaseline": "top", + "zindex": 0 + }, + { + "scale": "y", + "orient": "left", + "grid": false, + "labels": false, + "labelOverlap": true, + "tickCount": {"signal": "ceil(height/40)"}, + "zindex": 0 + } + ] +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-specs/gradients/heatmap_with_colorbar.vg.json b/sg2d-vega-test-data/vega-specs/gradients/heatmap_with_colorbar.vg.json index 2e3c820..9b04272 100644 --- a/sg2d-vega-test-data/vega-specs/gradients/heatmap_with_colorbar.vg.json +++ b/sg2d-vega-test-data/vega-specs/gradients/heatmap_with_colorbar.vg.json @@ -93,6 +93,9 @@ } ], "legends": [ - {"fill": "color", "gradientLength": {"signal": "clamp(height, 64, 200)"}} + {"fill": "color", + "gradientLength": {"signal": "clamp(height, 64, 200)"}, + "labelFont": "Courier" + } ] } \ No newline at end of file diff --git a/sg2d-wgpu/Cargo.toml b/sg2d-wgpu/Cargo.toml index d39bf43..4876d07 100644 --- a/sg2d-wgpu/Cargo.toml +++ b/sg2d-wgpu/Cargo.toml @@ -22,6 +22,7 @@ itertools = "0.12.0" image = "0.24.7" futures-intrusive = "^0.5" etagere = "0.2.10" +colorgrad = "0.6.2" # glyphon branch that includes text rotation support: https://github.com/jonmmease/glyphon/pull/1 glyphon = { git = "https://github.com/jonmmease/glyphon.git", rev="c468f5dacd4130b27a29b098c4de3f4d5c146209" } @@ -32,4 +33,4 @@ sg2d-vega = { path = "../sg2d-vega" } serde_json = { version = "1.0.111" } dssim = "3.2.4" rstest = "0.18.2" -colorgrad = "0.6.2" + diff --git a/sg2d-wgpu/src/canvas.rs b/sg2d-wgpu/src/canvas.rs index 926f49f..afccb54 100644 --- a/sg2d-wgpu/src/canvas.rs +++ b/sg2d-wgpu/src/canvas.rs @@ -19,7 +19,6 @@ use crate::marks::gradient_rect::GradientRectShader; use crate::marks::image::ImageShader; use crate::marks::instanced_mark::InstancedMarkRenderer; use crate::marks::path::PathShader; -use crate::marks::rect::RectShader; use crate::marks::rule::RuleShader; use crate::marks::symbol::SymbolShader; use crate::marks::text::TextMarkRenderer; diff --git a/sg2d-wgpu/src/marks/gradient_rect.rs b/sg2d-wgpu/src/marks/gradient_rect.rs index b5c6640..18445a0 100644 --- a/sg2d-wgpu/src/marks/gradient_rect.rs +++ b/sg2d-wgpu/src/marks/gradient_rect.rs @@ -1,3 +1,5 @@ +use colorgrad::Color; +use image::Rgba; use crate::canvas::CanvasDimensions; use crate::marks::texture_instanced_mark::{InstancedTextureMarkBatch, TextureInstancedMarkShader}; use itertools::izip; @@ -110,10 +112,13 @@ const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 7] = wgpu::vertex_attr_array! ]; impl GradientRectInstance { - pub fn from_spec(mark: &RectMark) -> (Vec, Option) { + pub fn from_spec(mark: &RectMark) -> (Vec, Option, image::RgbaImage) { let mut instances: Vec = Vec::new(); let mut gradient: Option = None; let mut stops: Vec> = Vec::new(); + let tex_width = 256; + let tex_height= 256; + let mut img = image::RgbaImage::new(tex_width, tex_height); let mut compute_color = |color_or_gradient: &ColorOrGradient| -> [f32; 4] { match color_or_gradient { @@ -121,12 +126,34 @@ impl GradientRectInstance { ColorOrGradient::Gradient(grad) => { gradient = Some(grad.clone()); let s = grad.stops(); - let pos = if let Some(pos) = stops.iter().position(|s| s.as_slice() == s) { + let pos = if let Some(pos) = stops.iter().position(|stop| stop.as_slice() == s) { // Already have stops, store index pos } else { // Add stops let pos = stops.len(); + assert!(pos < (tex_height / 2) as usize, "Exceeded max number of supported gradient colorways"); + + let mut binding = colorgrad::CustomGradient::new(); + + let offsets = s.iter().map(|stop| stop.offset as f64).collect::>(); + let colors = s.iter().map( + |stop| Color::new(stop.color[0] as f64, stop.color[1] as f64, stop.color[2] as f64, stop.color[3] as f64), + ).collect::>(); + + let builder = binding.domain(offsets.as_slice()).colors(colors.as_slice()); + let b = builder.build().unwrap(); + + let row0 = (pos * 2) as u32; + for i in 0..tex_width { + let p = (i as f64) / 255.0; + let c= b.at(p).to_rgba8(); + + // Write color to row0 and row0 + 1 + img.put_pixel(i, row0, Rgba::from(c)); + img.put_pixel(i, row0 + 1, Rgba::from(c)); + } + stops.push(Vec::from(s)); pos }; @@ -162,7 +189,7 @@ impl GradientRectInstance { corner_radius: *corner_radius, }) } - (instances, gradient) + (instances, gradient, img) } } @@ -180,11 +207,11 @@ pub struct GradientRectShader { impl GradientRectShader { pub fn from_rect_mark(mark: &RectMark, dimensions: CanvasDimensions) -> Self { - let (instances, gradient) = GradientRectInstance::from_spec(mark); + let (instances, gradient, img) = GradientRectInstance::from_spec(mark); let batches = vec![InstancedTextureMarkBatch { instances_range: 0..instances.len() as u32, - image: image::DynamicImage::ImageRgba8(image::RgbaImage::new(256, 256)), + image: image::DynamicImage::ImageRgba8(img), }]; Self { diff --git a/sg2d-wgpu/src/marks/gradient_rect.wgsl b/sg2d-wgpu/src/marks/gradient_rect.wgsl index b7ad2e6..d339d58 100644 --- a/sg2d-wgpu/src/marks/gradient_rect.wgsl +++ b/sg2d-wgpu/src/marks/gradient_rect.wgsl @@ -128,7 +128,7 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { let inner_radius = scaled_radius - scaled_stroke_width / 2.0; let mix_factor = 1.0 - smoothstep(inner_radius - buffer, inner_radius + buffer, dist); - var mixed_color: vec4 = mix(lookup_color(in.stroke), lookup_color(in.fill), mix_factor); + var mixed_color: vec4 = mix(lookup_color(in.stroke, in), lookup_color(in.fill, in), mix_factor); mixed_color[3] *= alpha_factor; return mixed_color; } else { @@ -143,11 +143,11 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { dist = distance(inner_top_right, frag_xy); } else { // skip anit-aliasing when not in a corner - return lookup_color(in.fill); + return lookup_color(in.fill, in); } let alpha_factor = 1.0 - smoothstep(scaled_radius - buffer, scaled_radius + buffer, dist); - var color: vec4 = lookup_color(in.fill); + var color: vec4 = lookup_color(in.fill, in); color[3] *= alpha_factor; return color; } @@ -162,22 +162,35 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { let in_stroke = in_left_stroke || in_right_stroke || in_bottom_stroke || in_top_stroke; if (in_stroke) { - return lookup_color(in.stroke); + return lookup_color(in.stroke, in); } else { - return lookup_color(in.fill); + return lookup_color(in.fill, in); } } else { // no stroke - return lookup_color(in.fill); + return lookup_color(in.fill, in); } } } -fn lookup_color(color: vec4) -> vec4 { +fn lookup_color(color: vec4, in: VertexOutput) -> vec4 { if (color[0] < 0.0) { let tex_coord_y = -color[0]; - // TODO: compute tex_coord_x and use sampler to determine color - return vec4(1.0, 0.0, 0.0, 1.0); + + // Convert fragment coordinate into coordinate normalized to rect bounding box + let frag_xy = vec2(in.clip_position[0], in.clip_position[1]); + let width = in.outer_bottom_right[0] - in.outer_top_left[0]; + let height = in.outer_bottom_right[1] - in.outer_top_left[1]; + let width_height = vec2(width, height); + let norm_xy = (frag_xy - in.outer_top_left) / width_height; + + let p0 = vec2(chart_uniforms.x0, chart_uniforms.y0); + let p1 = vec2(chart_uniforms.x1, chart_uniforms.y1); + let control_dist = distance(p0, p1); + let projected_dist = dot(norm_xy - p0, p1 - p0) / control_dist; + let tex_coord_x = projected_dist / control_dist; + + return textureSample(t_diffuse, s_diffuse, vec2(tex_coord_x, tex_coord_y)); } else { return color; } diff --git a/sg2d-wgpu/src/marks/texture_instanced_mark.rs b/sg2d-wgpu/src/marks/texture_instanced_mark.rs index b0e76ac..3912208 100644 --- a/sg2d-wgpu/src/marks/texture_instanced_mark.rs +++ b/sg2d-wgpu/src/marks/texture_instanced_mark.rs @@ -166,7 +166,7 @@ impl TextureInstancedMarkRenderer { let render_pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { label: Some("Render Pipeline Layout"), - bind_group_layouts: &[&uniform_layout], + bind_group_layouts: &[&uniform_layout, &texture_bind_group_layout], push_constant_ranges: &[], }); @@ -290,6 +290,7 @@ impl TextureInstancedMarkRenderer { render_pass.set_pipeline(&self.render_pipeline); render_pass.set_bind_group(0, &self.uniform_bind_group, &[]); + render_pass.set_bind_group(1, &self.texture_bind_group, &[]); render_pass.set_vertex_buffer(0, self.vertex_buffer.slice(..)); render_pass.set_vertex_buffer(1, self.instance_buffer.slice(..)); render_pass diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index fe589ae..576e829 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -109,6 +109,8 @@ mod test_image_baselines { // case("image", "large_images", 0.001), case("gradients", "heatmap_with_colorbar", 0.001), + case("gradients", "diagonal_gradient_bars_rounded", 0.001), + case("gradients", "default_gradient_bars_rounded_stroke", 0.0015), )] fn test_image_baseline(category: &str, spec_name: &str, tolerance: f64) { let specs_dir = format!( diff --git a/sg2d-wgpu/tests/try_colorgrad.rs b/sg2d-wgpu/tests/try_colorgrad.rs new file mode 100644 index 0000000..384247c --- /dev/null +++ b/sg2d-wgpu/tests/try_colorgrad.rs @@ -0,0 +1,20 @@ +use colorgrad::Color; + +#[test] +fn test_try_it() { + let mut binding = colorgrad::CustomGradient::new(); + let builder = binding.domain(&[0.0, 0.1, 1.0]).colors(&[ + Color::new(0.0, 0.0, 0.0, 1.0), + Color::new(0.5, 0.5, 0.5, 1.0), + Color::new(1.0, 1.0, 1.0, 1.0), + ]); + let b = builder.build().unwrap(); + let c = b.at(0.5); + + for i in 0..256 { + let p = (i as f64) / 255.0; + println!("{i} - {p} - {:?}", b.at(p)) + } + + // println!("{c:?}"); +} From 25d529edbf7f74fd1bd75a74ad51cbbdefa00c76 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 09:17:38 -0500 Subject: [PATCH 07/27] Move gradient control points to texture so that they can vary per gradient. --- .../diagonal_gradient_bars_rounded.png | Bin 120048 -> 115143 bytes .../diagonal_gradient_bars_rounded.sg.json | 10 +- .../diagonal_gradient_bars_rounded.vg.json | 10 +- sg2d-wgpu/src/marks/gradient_rect.rs | 178 +++++++++++------- sg2d-wgpu/src/marks/gradient_rect.wgsl | 96 ++++++---- sg2d-wgpu/src/marks/texture_instanced_mark.rs | 30 ++- 6 files changed, 201 insertions(+), 123 deletions(-) diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.png index 6b35b52ad5df3c2605d190c8e3ad0e71a87fd8fa..aeb9fa020d31a6eb069e56c5fe3e66b82cebe3d5 100644 GIT binary patch literal 115143 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 literal 120048 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 RfPZGaH0M`Gf4Ok&{{RI-+;so| diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.sg.json index dc4bd89..917d6a1 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.sg.json @@ -277,8 +277,8 @@ }, { "fill": { - "x1": 0.2, - "y1": 0.9, + "x1": 0.9, + "y1": 0.7, "x2": 0.7, "y2": 0.1, "stops": [ @@ -304,9 +304,9 @@ { "fill": { "x1": 0.2, - "y1": 0.9, - "x2": 0.7, - "y2": 0.1, + "y1": 1, + "x2": 0.9, + "y2": 1, "stops": [ { "offset": 0, diff --git a/sg2d-vega-test-data/vega-specs/gradients/diagonal_gradient_bars_rounded.vg.json b/sg2d-vega-test-data/vega-specs/gradients/diagonal_gradient_bars_rounded.vg.json index 451d210..cce0592 100644 --- a/sg2d-vega-test-data/vega-specs/gradients/diagonal_gradient_bars_rounded.vg.json +++ b/sg2d-vega-test-data/vega-specs/gradients/diagonal_gradient_bars_rounded.vg.json @@ -19,8 +19,8 @@ "a": "B", "b": 55, "fill": { - "x1": 0.2, - "y1": 0.9, + "x1": 0.9, + "y1": 0.7, "x2": 0.7, "y2": 0.1, "gradient": "linear", @@ -41,9 +41,9 @@ "b": 43, "fill": { "x1": 0.2, - "y1": 0.9, - "x2": 0.7, - "y2": 0.1, + "y1": 1, + "x2": 0.9, + "y2": 1, "gradient": "linear", "stops": [ { diff --git a/sg2d-wgpu/src/marks/gradient_rect.rs b/sg2d-wgpu/src/marks/gradient_rect.rs index 18445a0..65b44d4 100644 --- a/sg2d-wgpu/src/marks/gradient_rect.rs +++ b/sg2d-wgpu/src/marks/gradient_rect.rs @@ -1,70 +1,33 @@ -use colorgrad::Color; -use image::Rgba; use crate::canvas::CanvasDimensions; use crate::marks::texture_instanced_mark::{InstancedTextureMarkBatch, TextureInstancedMarkShader}; +use colorgrad::Color; +use image::Rgba; use itertools::izip; use sg2d::marks::rect::RectMark; use sg2d::marks::value::{ColorOrGradient, Gradient, GradientStop}; use wgpu::{Extent3d, VertexBufferLayout}; -const GRADIENT_NONE: f32 = 0.0; const GRADIENT_LINEAR: f32 = 1.0; const GRADIENT_RADIAL: f32 = 2.0; +const COLORWAY_LENGTH: u32 = 250; +const GRADIENT_TEXTURE_WIDTH: u32 = 256; +const GRADIENT_TEXTURE_HEIGHT: u32 = 256; + #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] pub struct GradientRectUniform { pub size: [f32; 2], pub scale: f32, - pub gradient_type: f32, - pub x0: f32, - pub y0: f32, - pub x1: f32, - pub y1: f32, - pub r0: f32, - pub r1: f32, - _pad: [f32; 2], // Pad to 16 bytes + _pad: [f32; 1], // Pad to 16 bytes } impl GradientRectUniform { - pub fn new(dimensions: CanvasDimensions, gradient: Option) -> Self { - match gradient { - None => Self { - size: dimensions.size, - scale: dimensions.scale, - gradient_type: GRADIENT_NONE, - x0: 0.0, - y0: 0.0, - x1: 0.0, - y1: 0.0, - r0: 0.0, - r1: 0.0, - _pad: [0.0, 0.0], - }, - Some(Gradient::LinearGradient(gradient)) => Self { - size: dimensions.size, - scale: dimensions.scale, - gradient_type: GRADIENT_LINEAR, - x0: gradient.x0, - y0: gradient.y0, - x1: gradient.x1, - y1: gradient.y1, - r0: 0.0, - r1: 0.0, - _pad: [0.0, 0.0], - }, - Some(Gradient::RadialGradient(gradient)) => Self { - size: dimensions.size, - scale: dimensions.scale, - gradient_type: GRADIENT_RADIAL, - x0: gradient.x0, - y0: gradient.y0, - x1: gradient.x1, - y1: gradient.y1, - r0: gradient.r0, - r1: gradient.r1, - _pad: [0.0, 0.0], - }, + pub fn new(dimensions: CanvasDimensions) -> Self { + Self { + size: dimensions.size, + scale: dimensions.scale, + _pad: [0.0], } } } @@ -112,56 +75,125 @@ const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 7] = wgpu::vertex_attr_array! ]; impl GradientRectInstance { - pub fn from_spec(mark: &RectMark) -> (Vec, Option, image::RgbaImage) { + pub fn from_spec(mark: &RectMark) -> (Vec, image::RgbaImage) { let mut instances: Vec = Vec::new(); - let mut gradient: Option = None; let mut stops: Vec> = Vec::new(); - let tex_width = 256; - let tex_height= 256; - let mut img = image::RgbaImage::new(tex_width, tex_height); + let mut img = image::RgbaImage::new(GRADIENT_TEXTURE_WIDTH, GRADIENT_TEXTURE_HEIGHT); let mut compute_color = |color_or_gradient: &ColorOrGradient| -> [f32; 4] { match color_or_gradient { ColorOrGradient::Color(c) => *c, ColorOrGradient::Gradient(grad) => { - gradient = Some(grad.clone()); + // gradient = Some(grad.clone()); let s = grad.stops(); - let pos = if let Some(pos) = stops.iter().position(|stop| stop.as_slice() == s) { + let pos = if let Some(pos) = stops.iter().position(|stop| stop.as_slice() == s) + { // Already have stops, store index pos } else { // Add stops let pos = stops.len(); - assert!(pos < (tex_height / 2) as usize, "Exceeded max number of supported gradient colorways"); + assert!( + pos < (GRADIENT_TEXTURE_HEIGHT / 2) as usize, + "Exceeded max number of unique gradients" + ); + let row0 = (pos * 2) as u32; + // Build gradient colorway using colorgrad let mut binding = colorgrad::CustomGradient::new(); - let offsets = s.iter().map(|stop| stop.offset as f64).collect::>(); - let colors = s.iter().map( - |stop| Color::new(stop.color[0] as f64, stop.color[1] as f64, stop.color[2] as f64, stop.color[3] as f64), - ).collect::>(); + let colors = s + .iter() + .map(|stop| { + Color::new( + stop.color[0] as f64, + stop.color[1] as f64, + stop.color[2] as f64, + stop.color[3] as f64, + ) + }) + .collect::>(); let builder = binding.domain(offsets.as_slice()).colors(colors.as_slice()); let b = builder.build().unwrap(); - let row0 = (pos * 2) as u32; - for i in 0..tex_width { - let p = (i as f64) / 255.0; - let c= b.at(p).to_rgba8(); + // Fill leading pixels with start color so that linear interpolation doesn't pick + // up the empty pixels between control pixels and gradient pixels + let start_color = Rgba::from(b.at(0.0).to_rgba8()); + let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; + for i in 0..col_offset { + img.put_pixel(i, row0, start_color); + img.put_pixel(i, row0 + 1, start_color); + } + + // Store 250-bin colorway in pixels 6 through 255 + for i in 0..COLORWAY_LENGTH { + let p = (i as f64) / (COLORWAY_LENGTH as f64 - 1.0); + let c = b.at(p).to_rgba8(); // Write color to row0 and row0 + 1 - img.put_pixel(i, row0, Rgba::from(c)); - img.put_pixel(i, row0 + 1, Rgba::from(c)); + img.put_pixel(i + col_offset, row0, Rgba::from(c)); + img.put_pixel(i + col_offset, row0 + 1, Rgba::from(c)); } + // We encode the gradient control points in the first two or three pixels of the texture + match grad { + Gradient::LinearGradient(grad) => { + // Write gradient type to column 0 + let control_color0 = + Rgba::from([(GRADIENT_LINEAR * 255.0) as u8, 0, 0, 0]); + img.put_pixel(0, row0, control_color0); + img.put_pixel(0, row0 + 1, control_color0); + + // Write x/y control points to column 1 + let control_color1 = Rgba::from([ + (grad.x0 * 255.0) as u8, + (grad.y0 * 255.0) as u8, + (grad.x1 * 255.0) as u8, + (grad.y1 * 255.0) as u8, + ]); + img.put_pixel(1, row0, control_color1); + img.put_pixel(1, row0 + 1, control_color1); + } + Gradient::RadialGradient(grad) => { + // Write gradient type to column 0 + let control_color0 = + Rgba::from([(GRADIENT_RADIAL * 255.0) as u8, 0, 0, 0]); + img.put_pixel(0, row0, control_color0); + img.put_pixel(0, row0 + 1, control_color0); + + // Write x/y control points to column 1 + let control_color1 = Rgba::from([ + (grad.x0 * 255.0) as u8, + (grad.y0 * 255.0) as u8, + (grad.x1 * 255.0) as u8, + (grad.y1 * 255.0) as u8, + ]); + img.put_pixel(1, row0, control_color1); + img.put_pixel(1, row0 + 1, control_color1); + + // Write radius control points to column 2 + let control_color2 = Rgba::from([ + (grad.r0 * 255.0) as u8, + (grad.r1 * 255.0) as u8, + 0, + 0, + ]); + img.put_pixel(2, row0, control_color2); + img.put_pixel(2, row0 + 1, control_color2); + } + }; + stops.push(Vec::from(s)); pos }; - // Each gradient stops colorscale is written to two rows, starting an texture - // coordinate 0. This results in 128 gradients stored in 256x256 texture. To + + // Each gradient colorway is written to two rows, starting at texture + // y-coordinate 0. This results in 128 gradients stored in a 256x256 texture. To // avoid interpolation artifacts, we compute the texture coordinate as the // position between the two rows - let grad_coord = (pos as f32 / 128.0) + 1.0 / 512.0; + let grad_coord = + (pos as f32 / 128.0) + 1.0 / (GRADIENT_TEXTURE_HEIGHT as f32 * 2.0); [-grad_coord, 0.0, 0.0, 0.0] } } @@ -189,7 +221,7 @@ impl GradientRectInstance { corner_radius: *corner_radius, }) } - (instances, gradient, img) + (instances, img) } } @@ -207,7 +239,7 @@ pub struct GradientRectShader { impl GradientRectShader { pub fn from_rect_mark(mark: &RectMark, dimensions: CanvasDimensions) -> Self { - let (instances, gradient, img) = GradientRectInstance::from_spec(mark); + let (instances, img) = GradientRectInstance::from_spec(mark); let batches = vec![InstancedTextureMarkBatch { instances_range: 0..instances.len() as u32, @@ -237,7 +269,7 @@ impl GradientRectShader { height: 256, depth_or_array_layers: 1, }, - uniform: GradientRectUniform::new(dimensions, gradient), + uniform: GradientRectUniform::new(dimensions), shader: include_str!("gradient_rect.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), diff --git a/sg2d-wgpu/src/marks/gradient_rect.wgsl b/sg2d-wgpu/src/marks/gradient_rect.wgsl index d339d58..d604b16 100644 --- a/sg2d-wgpu/src/marks/gradient_rect.wgsl +++ b/sg2d-wgpu/src/marks/gradient_rect.wgsl @@ -1,20 +1,15 @@ // Vertex shader - -const GRADIENT_NONE = 0.0; const GRADIENT_LINEAR = 1.0; const GRADIENT_RADIAL = 2.0; +const COLORWAY_LENGTH = 250.0; +const GRADIENT_TEXTURE_WIDTH = 256.0; +const GRADIENT_TEXTURE_HEIGHT = 256.0; + struct ChartUniform { size: vec2, scale: f32, - gradient_type: f32, - x0: f32, - y0: f32, - x1: f32, - y1: f32, - r0: f32, - r1: f32, - _pad: vec2, // for 16 byte alignment + _pad: f32, // for 16 byte alignment }; @group(0) @binding(0) @@ -83,11 +78,6 @@ fn vs_main( } // Fragment shader -@group(1) @binding(0) -var t_diffuse: texture_2d; -@group(1) @binding(1) -var s_diffuse: sampler; - @fragment fn fs_main(in: VertexOutput) -> @location(0) vec4 { let scaled_radius = in.corner_radius * chart_uniforms.scale; @@ -128,7 +118,11 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { let inner_radius = scaled_radius - scaled_stroke_width / 2.0; let mix_factor = 1.0 - smoothstep(inner_radius - buffer, inner_radius + buffer, dist); - var mixed_color: vec4 = mix(lookup_color(in.stroke, in), lookup_color(in.fill, in), mix_factor); + var mixed_color: vec4 = mix( + lookup_color(in.stroke, in.clip_position, in.outer_top_left, in.outer_bottom_right), + lookup_color(in.fill, in.clip_position, in.outer_top_left, in.outer_bottom_right), + mix_factor + ); mixed_color[3] *= alpha_factor; return mixed_color; } else { @@ -143,11 +137,11 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { dist = distance(inner_top_right, frag_xy); } else { // skip anit-aliasing when not in a corner - return lookup_color(in.fill, in); + return lookup_color(in.fill, in.clip_position, in.outer_top_left, in.outer_bottom_right); } let alpha_factor = 1.0 - smoothstep(scaled_radius - buffer, scaled_radius + buffer, dist); - var color: vec4 = lookup_color(in.fill, in); + var color: vec4 = lookup_color(in.fill, in.clip_position, in.outer_top_left, in.outer_bottom_right); color[3] *= alpha_factor; return color; } @@ -162,35 +156,67 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { let in_stroke = in_left_stroke || in_right_stroke || in_bottom_stroke || in_top_stroke; if (in_stroke) { - return lookup_color(in.stroke, in); + return lookup_color(in.stroke, in.clip_position, in.outer_top_left, in.outer_bottom_right); } else { - return lookup_color(in.fill, in); + return lookup_color(in.fill, in.clip_position, in.outer_top_left, in.outer_bottom_right); } } else { // no stroke - return lookup_color(in.fill, in); + return lookup_color(in.fill, in.clip_position, in.outer_top_left, in.outer_bottom_right); } } } -fn lookup_color(color: vec4, in: VertexOutput) -> vec4 { +// Gradient color +@group(1) @binding(0) +var gradient_texture: texture_2d; +@group(1) @binding(1) +var linear_sampler: sampler; +@group(1) @binding(2) +var nearest_sampler: sampler; + +// Compute final color, potentially computing gradient +fn lookup_color(color: vec4, clip_position: vec4, top_left: vec2, bottom_right: vec2) -> vec4 { if (color[0] < 0.0) { + // If the first color coordinate is negative, this indicates that we need to compute a gradient. + // The negative of this value is the y-coordinate into the gradient texture where the gradient control + // points and gradient colorway are stored. let tex_coord_y = -color[0]; - // Convert fragment coordinate into coordinate normalized to rect bounding box - let frag_xy = vec2(in.clip_position[0], in.clip_position[1]); - let width = in.outer_bottom_right[0] - in.outer_top_left[0]; - let height = in.outer_bottom_right[1] - in.outer_top_left[1]; - let width_height = vec2(width, height); - let norm_xy = (frag_xy - in.outer_top_left) / width_height; - - let p0 = vec2(chart_uniforms.x0, chart_uniforms.y0); - let p1 = vec2(chart_uniforms.x1, chart_uniforms.y1); - let control_dist = distance(p0, p1); - let projected_dist = dot(norm_xy - p0, p1 - p0) / control_dist; - let tex_coord_x = projected_dist / control_dist; + // Extract gradient type from fist pixel using nearest sampler (so that not interpolation is performed) + let control0 = textureSample(gradient_texture, nearest_sampler, vec2(0.0, tex_coord_y)); + let gradient_type = control0[0]; + + // Extract x/y control points from second pixel + let control1 = textureSample(gradient_texture, nearest_sampler, vec2(1.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); + let x0 = control1[0]; + let y0 = control1[1]; + let x1 = control1[2]; + let y1 = control1[3]; + + if (gradient_type == GRADIENT_LINEAR) { + // Convert fragment coordinate into coordinate normalized to rect bounding box + let frag_xy = vec2(clip_position[0], clip_position[1]); + let width_height = vec2(bottom_right[0] - top_left[0], bottom_right[1] - top_left[1]); + let norm_xy = (frag_xy - top_left) / width_height; + + let p0 = vec2(x0, y0); + let p1 = vec2(x1, y1); + let control_dist = distance(p0, p1); + let projected_dist = dot(norm_xy - p0, p1 - p0) / control_dist; + let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; + let tex_coord_x = clamp(projected_dist / control_dist, 0.0, 1.0) * COLORWAY_LENGTH / GRADIENT_TEXTURE_WIDTH + col_offset / GRADIENT_TEXTURE_WIDTH; + + return textureSample(gradient_texture, linear_sampler, vec2(tex_coord_x, tex_coord_y)); + } else { + // Extract additional radius gradient control points from third pixel + let control2 = textureSample(gradient_texture, nearest_sampler, vec2(2.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); + let r0 = control2[0]; + let r1 = control2[1]; - return textureSample(t_diffuse, s_diffuse, vec2(tex_coord_x, tex_coord_y)); + // TODO: compute radial gradinet + return vec4(1.0, 0.0, 0.0, 1.0); + } } else { return color; } diff --git a/sg2d-wgpu/src/marks/texture_instanced_mark.rs b/sg2d-wgpu/src/marks/texture_instanced_mark.rs index 3912208..f9467e1 100644 --- a/sg2d-wgpu/src/marks/texture_instanced_mark.rs +++ b/sg2d-wgpu/src/marks/texture_instanced_mark.rs @@ -106,13 +106,23 @@ impl TextureInstancedMarkRenderer { let texture_view = texture.create_view(&wgpu::TextureViewDescriptor::default()); // Create sampler - let sampler = device.create_sampler(&wgpu::SamplerDescriptor { + let linear_sampler = device.create_sampler(&wgpu::SamplerDescriptor { address_mode_u: wgpu::AddressMode::ClampToEdge, address_mode_v: wgpu::AddressMode::ClampToEdge, address_mode_w: wgpu::AddressMode::ClampToEdge, - mag_filter: mark_shader.mag_filter(), - min_filter: mark_shader.min_filter(), - mipmap_filter: mark_shader.mipmap_filter(), + mag_filter: wgpu::FilterMode::Linear, + min_filter: wgpu::FilterMode::Linear, + mipmap_filter: wgpu::FilterMode::Nearest, + ..Default::default() + }); + + let nearest_sampler = device.create_sampler(&wgpu::SamplerDescriptor { + address_mode_u: wgpu::AddressMode::ClampToEdge, + address_mode_v: wgpu::AddressMode::ClampToEdge, + address_mode_w: wgpu::AddressMode::ClampToEdge, + mag_filter: wgpu::FilterMode::Nearest, + min_filter: wgpu::FilterMode::Nearest, + mipmap_filter: wgpu::FilterMode::Nearest, ..Default::default() }); @@ -138,6 +148,12 @@ impl TextureInstancedMarkRenderer { ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering), count: None, }, + wgpu::BindGroupLayoutEntry { + binding: 2, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering), + count: None, + }, ], label: Some("texture_bind_group_layout"), }); @@ -151,7 +167,11 @@ impl TextureInstancedMarkRenderer { }, wgpu::BindGroupEntry { binding: 1, - resource: wgpu::BindingResource::Sampler(&sampler), + resource: wgpu::BindingResource::Sampler(&linear_sampler), + }, + wgpu::BindGroupEntry { + binding: 2, + resource: wgpu::BindingResource::Sampler(&nearest_sampler), }, ], label: Some("texture_bind_group"), From e9dd16eb637791f2a39163ba3bc1c14430c720a5 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 09:38:57 -0500 Subject: [PATCH 08/27] Store vec of gradients in Rect mark and then store index per encoding item --- sg2d-vega/src/marks/rect.rs | 9 +- sg2d-vega/src/marks/values.rs | 42 ++++-- sg2d-wgpu/src/marks/gradient_rect.rs | 204 +++++++++++++-------------- sg2d/src/marks/rect.rs | 4 +- sg2d/src/marks/value.rs | 2 +- 5 files changed, 135 insertions(+), 126 deletions(-) diff --git a/sg2d-vega/src/marks/rect.rs b/sg2d-vega/src/marks/rect.rs index 65f5115..e699f5d 100644 --- a/sg2d-vega/src/marks/rect.rs +++ b/sg2d-vega/src/marks/rect.rs @@ -4,7 +4,7 @@ use crate::marks::values::CssColorOrGradient; use serde::{Deserialize, Serialize}; use sg2d::marks::mark::SceneMark; use sg2d::marks::rect::RectMark; -use sg2d::marks::value::{ColorOrGradient, EncodingValue}; +use sg2d::marks::value::{ColorOrGradient, EncodingValue, Gradient}; #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -48,6 +48,7 @@ impl VegaMarkContainer { let mut stroke_width = Vec::::new(); let mut corner_radius = Vec::::new(); let mut zindex = Vec::::new(); + let mut gradients = Vec::::new(); // For each item, append explicit values to corresponding vector for item in &self.items { @@ -61,11 +62,11 @@ impl VegaMarkContainer { } if let Some(v) = &item.fill { let opacity = item.fill_opacity.unwrap_or(1.0) * item.opacity.unwrap_or(1.0); - fill.push(v.to_color_or_grad(opacity)?); + fill.push(v.to_color_or_grad(opacity, &mut gradients)?); } if let Some(v) = &item.stroke { let opacity = item.stroke_opacity.unwrap_or(1.0) * item.opacity.unwrap_or(1.0); - stroke.push(v.to_color_or_grad(opacity)?); + stroke.push(v.to_color_or_grad(opacity, &mut gradients)?); } if let Some(v) = item.stroke_width { stroke_width.push(v); @@ -116,6 +117,8 @@ impl VegaMarkContainer { mark.indices = Some(indices); } + mark.gradients = gradients; + Ok(SceneMark::Rect(mark)) } } diff --git a/sg2d-vega/src/marks/values.rs b/sg2d-vega/src/marks/values.rs index 0ff33c4..ec2d90f 100644 --- a/sg2d-vega/src/marks/values.rs +++ b/sg2d-vega/src/marks/values.rs @@ -38,7 +38,11 @@ pub enum CssColorOrGradient { } impl CssColorOrGradient { - pub fn to_color_or_grad(&self, opacity: f32) -> Result { + pub fn to_color_or_grad( + &self, + opacity: f32, + gradients: &mut Vec, + ) -> Result { match self { CssColorOrGradient::Color(c) => { let c = csscolorparser::parse(c)?; @@ -49,9 +53,10 @@ impl CssColorOrGradient { c.a as f32 * opacity, ])) } - CssColorOrGradient::Gradient(grad) => Ok(match grad.gradient { - VegaGradientType::Linear => { - ColorOrGradient::Gradient(Gradient::LinearGradient(LinearGradient { + CssColorOrGradient::Gradient(grad) => { + // Build gradient + let grad = match grad.gradient { + VegaGradientType::Linear => Gradient::LinearGradient(LinearGradient { x0: grad.x1.unwrap_or(0.0), y0: grad.y1.unwrap_or(0.0), x1: grad.x2.unwrap_or(1.0), @@ -61,20 +66,33 @@ impl CssColorOrGradient { .iter() .map(|s| s.to_grad_stop(opacity)) .collect::, VegaSceneGraphError>>()?, - })) - } - VegaGradientType::Radial => { - ColorOrGradient::Gradient(Gradient::RadialGradient(RadialGradient { + }), + VegaGradientType::Radial => Gradient::RadialGradient(RadialGradient { x0: grad.x1.unwrap_or(0.5), y0: grad.y1.unwrap_or(0.5), x1: grad.x2.unwrap_or(0.5), y1: grad.y2.unwrap_or(0.5), r0: grad.r1.unwrap_or(0.0), r1: grad.r2.unwrap_or(0.5), - stops: vec![], - })) - } - }), + stops: grad + .stops + .iter() + .map(|s| s.to_grad_stop(opacity)) + .collect::, VegaSceneGraphError>>()?, + }), + }; + + // Check if we already have it + let pos = match gradients.iter().position(|g| g == &grad) { + Some(pos) => pos, + None => { + let pos = gradients.len(); + gradients.push(grad); + pos + } + }; + Ok(ColorOrGradient::GradientIndex(pos as u32)) + } } } } diff --git a/sg2d-wgpu/src/marks/gradient_rect.rs b/sg2d-wgpu/src/marks/gradient_rect.rs index 65b44d4..e05a6ae 100644 --- a/sg2d-wgpu/src/marks/gradient_rect.rs +++ b/sg2d-wgpu/src/marks/gradient_rect.rs @@ -4,7 +4,7 @@ use colorgrad::Color; use image::Rgba; use itertools::izip; use sg2d::marks::rect::RectMark; -use sg2d::marks::value::{ColorOrGradient, Gradient, GradientStop}; +use sg2d::marks::value::{ColorOrGradient, Gradient}; use wgpu::{Extent3d, VertexBufferLayout}; const GRADIENT_LINEAR: f32 = 1.0; @@ -77,123 +77,109 @@ const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 7] = wgpu::vertex_attr_array! impl GradientRectInstance { pub fn from_spec(mark: &RectMark) -> (Vec, image::RgbaImage) { let mut instances: Vec = Vec::new(); - let mut stops: Vec> = Vec::new(); let mut img = image::RgbaImage::new(GRADIENT_TEXTURE_WIDTH, GRADIENT_TEXTURE_HEIGHT); - let mut compute_color = |color_or_gradient: &ColorOrGradient| -> [f32; 4] { + // Write gradients + assert!( + mark.gradients.len() < (GRADIENT_TEXTURE_HEIGHT / 2) as usize, + "Exceeded max number of unique gradients" + ); + + for (pos, grad) in mark.gradients.iter().enumerate() { + let row0 = (pos * 2) as u32; + + // Build gradient colorway using colorgrad + let s = grad.stops(); + let mut binding = colorgrad::CustomGradient::new(); + let offsets = s.iter().map(|stop| stop.offset as f64).collect::>(); + let colors = s + .iter() + .map(|stop| { + Color::new( + stop.color[0] as f64, + stop.color[1] as f64, + stop.color[2] as f64, + stop.color[3] as f64, + ) + }) + .collect::>(); + + let builder = binding.domain(offsets.as_slice()).colors(colors.as_slice()); + let b = builder.build().unwrap(); + + // Fill leading pixels with start color so that linear interpolation doesn't pick + // up the empty pixels between control pixels and gradient pixels + let start_color = Rgba::from(b.at(0.0).to_rgba8()); + let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; + for i in 0..col_offset { + img.put_pixel(i, row0, start_color); + img.put_pixel(i, row0 + 1, start_color); + } + + // Store 250-bin colorway in pixels 6 through 255 + for i in 0..COLORWAY_LENGTH { + let p = (i as f64) / (COLORWAY_LENGTH as f64 - 1.0); + let c = b.at(p).to_rgba8(); + + // Write color to row0 and row0 + 1 + img.put_pixel(i + col_offset, row0, Rgba::from(c)); + img.put_pixel(i + col_offset, row0 + 1, Rgba::from(c)); + } + + // We encode the gradient control points in the first two or three pixels of the texture + match grad { + Gradient::LinearGradient(grad) => { + // Write gradient type to column 0 + let control_color0 = Rgba::from([(GRADIENT_LINEAR * 255.0) as u8, 0, 0, 0]); + img.put_pixel(0, row0, control_color0); + img.put_pixel(0, row0 + 1, control_color0); + + // Write x/y control points to column 1 + let control_color1 = Rgba::from([ + (grad.x0 * 255.0) as u8, + (grad.y0 * 255.0) as u8, + (grad.x1 * 255.0) as u8, + (grad.y1 * 255.0) as u8, + ]); + img.put_pixel(1, row0, control_color1); + img.put_pixel(1, row0 + 1, control_color1); + } + Gradient::RadialGradient(grad) => { + // Write gradient type to column 0 + let control_color0 = Rgba::from([(GRADIENT_RADIAL * 255.0) as u8, 0, 0, 0]); + img.put_pixel(0, row0, control_color0); + img.put_pixel(0, row0 + 1, control_color0); + + // Write x/y control points to column 1 + let control_color1 = Rgba::from([ + (grad.x0 * 255.0) as u8, + (grad.y0 * 255.0) as u8, + (grad.x1 * 255.0) as u8, + (grad.y1 * 255.0) as u8, + ]); + img.put_pixel(1, row0, control_color1); + img.put_pixel(1, row0 + 1, control_color1); + + // Write radius control points to column 2 + let control_color2 = + Rgba::from([(grad.r0 * 255.0) as u8, (grad.r1 * 255.0) as u8, 0, 0]); + img.put_pixel(2, row0, control_color2); + img.put_pixel(2, row0 + 1, control_color2); + } + }; + } + + // Helper to compute color array + let compute_color = |color_or_gradient: &ColorOrGradient| -> [f32; 4] { match color_or_gradient { ColorOrGradient::Color(c) => *c, - ColorOrGradient::Gradient(grad) => { - // gradient = Some(grad.clone()); - let s = grad.stops(); - let pos = if let Some(pos) = stops.iter().position(|stop| stop.as_slice() == s) - { - // Already have stops, store index - pos - } else { - // Add stops - let pos = stops.len(); - assert!( - pos < (GRADIENT_TEXTURE_HEIGHT / 2) as usize, - "Exceeded max number of unique gradients" - ); - let row0 = (pos * 2) as u32; - - // Build gradient colorway using colorgrad - let mut binding = colorgrad::CustomGradient::new(); - let offsets = s.iter().map(|stop| stop.offset as f64).collect::>(); - let colors = s - .iter() - .map(|stop| { - Color::new( - stop.color[0] as f64, - stop.color[1] as f64, - stop.color[2] as f64, - stop.color[3] as f64, - ) - }) - .collect::>(); - - let builder = binding.domain(offsets.as_slice()).colors(colors.as_slice()); - let b = builder.build().unwrap(); - - // Fill leading pixels with start color so that linear interpolation doesn't pick - // up the empty pixels between control pixels and gradient pixels - let start_color = Rgba::from(b.at(0.0).to_rgba8()); - let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; - for i in 0..col_offset { - img.put_pixel(i, row0, start_color); - img.put_pixel(i, row0 + 1, start_color); - } - - // Store 250-bin colorway in pixels 6 through 255 - for i in 0..COLORWAY_LENGTH { - let p = (i as f64) / (COLORWAY_LENGTH as f64 - 1.0); - let c = b.at(p).to_rgba8(); - - // Write color to row0 and row0 + 1 - img.put_pixel(i + col_offset, row0, Rgba::from(c)); - img.put_pixel(i + col_offset, row0 + 1, Rgba::from(c)); - } - - // We encode the gradient control points in the first two or three pixels of the texture - match grad { - Gradient::LinearGradient(grad) => { - // Write gradient type to column 0 - let control_color0 = - Rgba::from([(GRADIENT_LINEAR * 255.0) as u8, 0, 0, 0]); - img.put_pixel(0, row0, control_color0); - img.put_pixel(0, row0 + 1, control_color0); - - // Write x/y control points to column 1 - let control_color1 = Rgba::from([ - (grad.x0 * 255.0) as u8, - (grad.y0 * 255.0) as u8, - (grad.x1 * 255.0) as u8, - (grad.y1 * 255.0) as u8, - ]); - img.put_pixel(1, row0, control_color1); - img.put_pixel(1, row0 + 1, control_color1); - } - Gradient::RadialGradient(grad) => { - // Write gradient type to column 0 - let control_color0 = - Rgba::from([(GRADIENT_RADIAL * 255.0) as u8, 0, 0, 0]); - img.put_pixel(0, row0, control_color0); - img.put_pixel(0, row0 + 1, control_color0); - - // Write x/y control points to column 1 - let control_color1 = Rgba::from([ - (grad.x0 * 255.0) as u8, - (grad.y0 * 255.0) as u8, - (grad.x1 * 255.0) as u8, - (grad.y1 * 255.0) as u8, - ]); - img.put_pixel(1, row0, control_color1); - img.put_pixel(1, row0 + 1, control_color1); - - // Write radius control points to column 2 - let control_color2 = Rgba::from([ - (grad.r0 * 255.0) as u8, - (grad.r1 * 255.0) as u8, - 0, - 0, - ]); - img.put_pixel(2, row0, control_color2); - img.put_pixel(2, row0 + 1, control_color2); - } - }; - - stops.push(Vec::from(s)); - pos - }; - + ColorOrGradient::GradientIndex(grad_idx) => { // Each gradient colorway is written to two rows, starting at texture // y-coordinate 0. This results in 128 gradients stored in a 256x256 texture. To // avoid interpolation artifacts, we compute the texture coordinate as the // position between the two rows let grad_coord = - (pos as f32 / 128.0) + 1.0 / (GRADIENT_TEXTURE_HEIGHT as f32 * 2.0); + (*grad_idx as f32 / 128.0) + 1.0 / (GRADIENT_TEXTURE_HEIGHT as f32 * 2.0); [-grad_coord, 0.0, 0.0, 0.0] } } diff --git a/sg2d/src/marks/rect.rs b/sg2d/src/marks/rect.rs index b1615a9..6a12924 100644 --- a/sg2d/src/marks/rect.rs +++ b/sg2d/src/marks/rect.rs @@ -1,4 +1,4 @@ -use crate::marks::value::{ColorOrGradient, EncodingValue}; +use crate::marks::value::{ColorOrGradient, EncodingValue, Gradient}; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] @@ -7,6 +7,7 @@ pub struct RectMark { pub name: String, pub clip: bool, pub len: u32, + pub gradients: Vec, pub x: EncodingValue, pub y: EncodingValue, pub width: EncodingValue, @@ -62,6 +63,7 @@ impl Default for RectMark { name: "rule_mark".to_string(), clip: true, len: 1, + gradients: vec![], x: EncodingValue::Scalar { value: 0.0 }, y: EncodingValue::Scalar { value: 0.0 }, width: EncodingValue::Scalar { value: 0.0 }, diff --git a/sg2d/src/marks/value.rs b/sg2d/src/marks/value.rs index 6bd3a65..0878b1a 100644 --- a/sg2d/src/marks/value.rs +++ b/sg2d/src/marks/value.rs @@ -63,7 +63,7 @@ pub enum ImageBaseline { #[serde(untagged)] pub enum ColorOrGradient { Color([f32; 4]), - Gradient(Gradient), + GradientIndex(u32), } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] From 0c5f0c9afaf5dca497fe48baf976de11e651459c Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 09:41:11 -0500 Subject: [PATCH 09/27] re-enable tests --- sg2d-wgpu/tests/test_image_baselines.rs | 190 ++++++++++++------------ 1 file changed, 95 insertions(+), 95 deletions(-) diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index 576e829..f2aa821 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -12,101 +12,101 @@ mod test_image_baselines { category, spec_name, tolerance, - // case("rect", "stacked_bar", 0.001), - // case("rect", "stacked_bar_stroke", 0.001), - // case("rect", "stacked_bar_rounded", 0.001), - // case("rect", "stacked_bar_rounded_stroke", 0.001), - // case("rect", "stacked_bar_rounded_stroke_opacity", 0.009), - // case("rect", "heatmap", 0.006), - // case("symbol", "binned_scatter_diamonds", 0.001), - // case("symbol", "binned_scatter_square", 0.001), - // case("symbol", "binned_scatter_triangle-down", 0.001), - // case("symbol", "binned_scatter_triangle-up", 0.001), - // case("symbol", "binned_scatter_triangle-left", 0.001), - // case("symbol", "binned_scatter_triangle-right", 0.001), - // case("symbol", "binned_scatter_triangle", 0.001), - // case("symbol", "binned_scatter_wedge", 0.001), - // case("symbol", "binned_scatter_arrow", 0.001), - // case("symbol", "binned_scatter_cross", 0.001), - // case("symbol", "binned_scatter_circle", 0.001), - // case("symbol", "binned_scatter_path", 0.001), - // case("symbol", "binned_scatter_path_star", 0.001), - // case("symbol", "binned_scatter_cross_stroke", 0.001), - // case("symbol", "binned_scatter_circle_stroke", 0.001), - // case("symbol", "binned_scatter_circle_stroke_no_fill", 0.001), - // case("symbol", "binned_scatter_path_star_stroke_no_fill", 0.001), - // case("symbol", "scatter_transparent_stroke", 0.001), - // case("symbol", "scatter_transparent_stroke_star", 0.006), - // case("symbol", "wind_vector", 0.0015), - // case("symbol", "wedge_angle", 0.001), - // case("symbol", "wedge_stroke_angle", 0.001), - // case("symbol", "zindex_circles", 0.001), - // case("symbol", "mixed_symbols", 0.001), - // case("rule", "wide_rule_axes", 0.0001), - // case("rule", "wide_transparent_caps", 0.0001), - // case("rule", "dashed_rules", 0.0001), - // case("text", "bar_axis_labels", 0.01), - // case("text", "text_rotation", 0.015), - // case("text", "letter_scatter", 0.012), - // case("arc", "single_arc_no_inner", 0.0005), - // case("arc", "single_arc_with_inner_radius", 0.0005), - // case("arc", "single_arc_with_inner_radius_wrap", 0.0005), - // case("arc", "single_arc_with_inner_radius_wrap_stroke", 0.0005), - // case("arc", "arcs_with_variable_outer_radius", 0.0005), - // case("arc", "arcs_with_variable_outer_radius_stroke", 0.0005), - // case("arc", "arc_with_stroke", 0.0005), - // case("path", "single_path_no_stroke", 0.0005), - // case("path", "multi_path_no_stroke", 0.0005), - // - // // vl-convert/resvg messes up the path_with_stroke examples because it scales the path - // // width. The Vega editor renderers don't do this. - // case("path", "single_path_with_stroke", 0.8), - // case("path", "single_path_with_stroke_no_fill", 0.8), - // case("path", "multi_path_with_stroke", 0.8), - // case("path", "multi_path_with_stroke_no_fill", 0.8), - // - // // us-counties is a bit off due to how anti-aliasing results in light border between - // // adjacent shapes. The wgpu implementation doesn't have this border - // case("shape", "us-counties", 0.003), - // case("shape", "us-map", 0.0006), - // case("shape", "world-natural-earth-projection", 0.0006), - // case("shape", "london_tubes", 0.0002), - // - // case("line", "simple_line_round_cap", 0.0001), - // case("line", "simple_line_butt_cap_miter_join", 0.0001), - // // lyon seems to omit closing square cap, need to investigate - // case("line", "simple_line_square_cap_bevel_join", 0.002), - // case("line", "connected_scatter", 0.0008), - // case("line", "lines_with_open_symbols", 0.0004), - // case("line", "stocks", 0.0005), - // case("line", "stocks-legend", 0.003), - // case("line", "simple_dashed", 0.0005), - // case("line", "stocks_dashed", 0.001), - // case("line", "line_dashed_round_undefined", 0.0005), - // - // // lyon's square end cap doesn't seem to work - // case("line", "line_dashed_square_undefined", 0.007), - // case("line", "line_dashed_butt_undefined", 0.0005), - // - // case("area", "100_percent_stacked_area", 0.005), - // case("area", "simple_unemployment", 0.0005), - // case("area", "simple_unemployment_stroke", 0.0005), - // case("area", "stacked_area", 0.005), - // case("area", "streamgraph_area", 0.005), - // case("area", "with_undefined", 0.0005), - // case("area", "with_undefined_horizontal", 0.0005), - // - // case("trail", "trail_stocks", 0.0005), - // case("trail", "trail_stocks_opacity", 0.0005), - // - // case("image", "logos", 0.001), - // case("image", "logos_sized_aspect_false", 0.001), - // case("image", "logos_sized_aspect_false_align_baseline", 0.001), - // case("image", "logos_sized_aspect_true_align_baseline", 0.001), - // case("image", "smooth_false", 0.03), // vl-convert/resvg doesn't support smooth=false - // case("image", "smooth_true", 0.001), - // case("image", "many_images", 0.001), - // case("image", "large_images", 0.001), + case("rect", "stacked_bar", 0.001), + case("rect", "stacked_bar_stroke", 0.001), + case("rect", "stacked_bar_rounded", 0.001), + case("rect", "stacked_bar_rounded_stroke", 0.001), + case("rect", "stacked_bar_rounded_stroke_opacity", 0.009), + case("rect", "heatmap", 0.006), + case("symbol", "binned_scatter_diamonds", 0.001), + case("symbol", "binned_scatter_square", 0.001), + case("symbol", "binned_scatter_triangle-down", 0.001), + case("symbol", "binned_scatter_triangle-up", 0.001), + case("symbol", "binned_scatter_triangle-left", 0.001), + case("symbol", "binned_scatter_triangle-right", 0.001), + case("symbol", "binned_scatter_triangle", 0.001), + case("symbol", "binned_scatter_wedge", 0.001), + case("symbol", "binned_scatter_arrow", 0.001), + case("symbol", "binned_scatter_cross", 0.001), + case("symbol", "binned_scatter_circle", 0.001), + case("symbol", "binned_scatter_path", 0.001), + case("symbol", "binned_scatter_path_star", 0.001), + case("symbol", "binned_scatter_cross_stroke", 0.001), + case("symbol", "binned_scatter_circle_stroke", 0.001), + case("symbol", "binned_scatter_circle_stroke_no_fill", 0.001), + case("symbol", "binned_scatter_path_star_stroke_no_fill", 0.001), + case("symbol", "scatter_transparent_stroke", 0.001), + case("symbol", "scatter_transparent_stroke_star", 0.006), + case("symbol", "wind_vector", 0.0015), + case("symbol", "wedge_angle", 0.001), + case("symbol", "wedge_stroke_angle", 0.001), + case("symbol", "zindex_circles", 0.001), + case("symbol", "mixed_symbols", 0.001), + case("rule", "wide_rule_axes", 0.0001), + case("rule", "wide_transparent_caps", 0.0001), + case("rule", "dashed_rules", 0.0001), + case("text", "bar_axis_labels", 0.01), + case("text", "text_rotation", 0.015), + case("text", "letter_scatter", 0.012), + case("arc", "single_arc_no_inner", 0.0005), + case("arc", "single_arc_with_inner_radius", 0.0005), + case("arc", "single_arc_with_inner_radius_wrap", 0.0005), + case("arc", "single_arc_with_inner_radius_wrap_stroke", 0.0005), + case("arc", "arcs_with_variable_outer_radius", 0.0005), + case("arc", "arcs_with_variable_outer_radius_stroke", 0.0005), + case("arc", "arc_with_stroke", 0.0005), + case("path", "single_path_no_stroke", 0.0005), + case("path", "multi_path_no_stroke", 0.0005), + + // vl-convert/resvg messes up the path_with_stroke examples because it scales the path + // width. The Vega editor renderers don't do this. + case("path", "single_path_with_stroke", 0.8), + case("path", "single_path_with_stroke_no_fill", 0.8), + case("path", "multi_path_with_stroke", 0.8), + case("path", "multi_path_with_stroke_no_fill", 0.8), + + // us-counties is a bit off due to how anti-aliasing results in light border between + // adjacent shapes. The wgpu implementation doesn't have this border + case("shape", "us-counties", 0.003), + case("shape", "us-map", 0.0006), + case("shape", "world-natural-earth-projection", 0.0006), + case("shape", "london_tubes", 0.0002), + + case("line", "simple_line_round_cap", 0.0001), + case("line", "simple_line_butt_cap_miter_join", 0.0001), + // lyon seems to omit closing square cap, need to investigate + case("line", "simple_line_square_cap_bevel_join", 0.002), + case("line", "connected_scatter", 0.0008), + case("line", "lines_with_open_symbols", 0.0004), + case("line", "stocks", 0.0005), + case("line", "stocks-legend", 0.003), + case("line", "simple_dashed", 0.0005), + case("line", "stocks_dashed", 0.001), + case("line", "line_dashed_round_undefined", 0.0005), + + // lyon's square end cap doesn't seem to work + case("line", "line_dashed_square_undefined", 0.007), + case("line", "line_dashed_butt_undefined", 0.0005), + + case("area", "100_percent_stacked_area", 0.005), + case("area", "simple_unemployment", 0.0005), + case("area", "simple_unemployment_stroke", 0.0005), + case("area", "stacked_area", 0.005), + case("area", "streamgraph_area", 0.005), + case("area", "with_undefined", 0.0005), + case("area", "with_undefined_horizontal", 0.0005), + + case("trail", "trail_stocks", 0.0005), + case("trail", "trail_stocks_opacity", 0.0005), + + case("image", "logos", 0.001), + case("image", "logos_sized_aspect_false", 0.001), + case("image", "logos_sized_aspect_false_align_baseline", 0.001), + case("image", "logos_sized_aspect_true_align_baseline", 0.001), + case("image", "smooth_false", 0.03), // vl-convert/resvg doesn't support smooth=false + case("image", "smooth_true", 0.001), + case("image", "many_images", 0.001), + case("image", "large_images", 0.001), case("gradients", "heatmap_with_colorbar", 0.001), case("gradients", "diagonal_gradient_bars_rounded", 0.001), From 4c9b4fb31a47b8eb2f872c0f41ef695922c56117 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 10:27:09 -0500 Subject: [PATCH 10/27] Add horizontal colorbar baseline Also fix circle symbols with transparent fill --- .../gradients/residuals_colorscale.png | Bin 0 -> 294627 bytes .../gradients/residuals_colorscale.sg.json | 36310 ++++++++++++++++ .../gradients/residuals_colorscale.vg.json | 145 + sg2d-wgpu/src/marks/symbol.wgsl | 17 +- sg2d-wgpu/tests/test_image_baselines.rs | 1 + 5 files changed, 36469 insertions(+), 4 deletions(-) create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/residuals_colorscale.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/residuals_colorscale.sg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/residuals_colorscale.vg.json diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/residuals_colorscale.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/residuals_colorscale.png new file mode 100644 index 0000000000000000000000000000000000000000..3a5f71f66cb3814710e140d4c636105c829991e7 GIT binary patch literal 294627 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

r;zjJ(#{HSqF-TdBgW$UiO#U+gD;>{rW@-C=no zUsePa6Ex0i-M@(VpEPnG_=VsK<(hxN?HncNsb@3AXEWP-oY7U!s0@QS_Ae#oe}ol@ z=$H+0p^|ZkeHEt@68F@v923O`YPK`C=A?W;Zt5r}HRUDa{&gf0gXFq== zMc(7gB}Cyl3#)RlR6gR2ze^LWq?Kcx1Z6|}@)nD8uMYxkIRs=P)K ze_ctu&v3DstW8@$NTHHYQP0U#M#w9jDGDPinM+0T2&$mptU$)N$OH~{a1=mCWZ ztWsGzR!5+bz#bFWyA_3=(B6M*t=Wxevk`M8c`hrYMJ#C%iP+xSkcj$_Awsm3(`e+= zi5H$OB#8Bof`Bp;!;%t}Fe<*nmn?0S7PFJ35dPVnm25g)^JgMl6tc zj1pQOFco_V)H+V4)&Zy~Ig%w#VYOeRNiHhc%j{_mRhlDK;;r-=?b$3IE`cBJ<{Kz? zT_PU23=ykv6Vmv^MdD;kY?8+GtU4ahmys6;ECWx!2HZ*DoWKSZ*dPSpE18k_J^{{3 znh}bq$Q%W3s@RB)Y*fw=61x31Oh}kHLNGQ`G_nzU_nB&yXCC~&H5o|p8t>gh58tlc SV}QVa8{Xgi-jy{T2mT-14SbRS literal 0 HcmV?d00001 diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/residuals_colorscale.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/residuals_colorscale.sg.json new file mode 100644 index 0000000..ce86395 --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/residuals_colorscale.sg.json @@ -0,0 +1,36310 @@ +{ + "width": 321, + "height": 364, + "origin": [ + 11, + 7 + ], + "scenegraph": { + "clip": false, + "interactive": true, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 3, + "y": -300, + "y2": 0 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 38, + "y": -300, + "y2": 0 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 73, + "y": -300, + "y2": 0 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 108, + "y": -300, + "y2": 0 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 143, + "y": -300, + "y2": 0 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 178, + "y": -300, + "y2": 0 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 213, + "y": -300, + "y2": 0 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 247, + "y": -300, + "y2": 0 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 282, + "y": -300, + "y2": 0 + } + ], + "marktype": "rule", + "role": "axis-grid", + "zindex": 0 + } + ], + "orient": "bottom", + "offset": 0, + "x": 0.5, + "y": 300.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0, + "aria": false + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 300, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 263, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 225, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 188, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 150, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 113, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 75, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 38, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 0, + "x2": 300 + } + ], + "marktype": "rule", + "role": "axis-grid", + "zindex": 0 + } + ], + "orient": "left", + "offset": 0, + "x": 0.5, + "y": 0.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0, + "aria": false + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 3 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 38 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 73 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 108 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 143 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 178 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 213 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 247 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 282 + } + ], + "marktype": "rule", + "role": "axis-tick", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "x": 0, + "x2": 300, + "y": 0 + } + ], + "marktype": "rule", + "role": "axis-domain", + "zindex": 0 + } + ], + "orient": "bottom", + "offset": 0, + "x": 0.5, + "y": 300.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 300, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 263, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 225, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 188, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 150, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 113, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 75, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 38, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "x": 0, + "x2": -5 + } + ], + "marktype": "rule", + "role": "axis-tick", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "x": 0, + "y": 300, + "y2": 0 + } + ], + "marktype": "rule", + "role": "axis-domain", + "zindex": 0 + } + ], + "orient": "left", + "offset": 0, + "x": 0.5, + "y": 0.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0 + }, + { + "clip": false, + "interactive": true, + "items": [ + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 12, 1998; Rating Delta: −0.176110363392", + "x": 241.95508744038156, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 07, 1998; Rating Delta: 0.623889636608", + "x": 242.48926868044515, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 28, 1998; Rating Delta: 0.523889636608", + "x": 242.689586645469, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 09, 1998; Rating Delta: −2.87611036339", + "x": 243.0902225755167, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 04, 1999; Rating Delta: 1.42388963661", + "x": 244.77901430842607, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 167, 79)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 09, 1999; Rating Delta: −2.47611036339", + "x": 244.8263116057234, + "y": 205.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 01, 1986; Rating Delta: −0.476110363392", + "x": 200.327106518283, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 07, 1963; Rating Delta: 0.723889636608", + "x": 121.1251987281399, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 11, 1968; Rating Delta: 1.22388963661", + "x": 139.17329093799682, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1962; Rating Delta: 2.12388963661", + "x": 118.39745627980922, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 01, 1987; Rating Delta: 0.523889636608", + "x": 202.64546899841017, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 01, 1970; Rating Delta: −0.176110363392", + "x": 142.85532591414943, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(201, 110, 17)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 05, 1956; Rating Delta: −3.77611036339", + "x": 96.72456279809221, + "y": 254.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(33, 98, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 13, 1957; Rating Delta: 2.62388963661", + "x": 98.53736089030207, + "y": 14.104138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 27, 1995; Rating Delta: 1.82388963661", + "x": 233.38950715421302, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 09, 1972; Rating Delta: 0.723889636608", + "x": 152.80445151033388, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 14, 1979; Rating Delta: −0.676110363392", + "x": 177.51987281399047, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 29, 2007; Rating Delta: 0.0238896366084", + "x": 273.4717806041335, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 02, 1968; Rating Delta: 2.12388963661", + "x": 136.75993640699522, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 15, 1998; Rating Delta: 0.623889636608", + "x": 241.40182829888712, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 30, 1999; Rating Delta: 0.823889636608", + "x": 245.89467408585057, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 25, 1987; Rating Delta: −0.576110363392", + "x": 205.2114467408585, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(227, 141, 42)", + "ariaRoleDescription": "point", + "description": "Release Date: May 06, 1994; Rating Delta: −3.07611036339", + "x": 227.66573926868045, + "y": 227.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 28, 2005; Rating Delta: −0.276110363392", + "x": 267.3763910969793, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1995; Rating Delta: 0.123889636608", + "x": 233.3704292527822, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: May 22, 1981; Rating Delta: 0.723889636608", + "x": 182.52742448330685, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 09, 1994; Rating Delta: 0.823889636608", + "x": 227.1128775834658, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 18, 2006; Rating Delta: 1.12388963661", + "x": 271.04888712241655, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1962; Rating Delta: 0.523889636608", + "x": 118.45468998410175, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 21, 1986; Rating Delta: −0.876110363392", + "x": 199.08744038155803, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 04, 2008; Rating Delta: −1.37611036339", + "x": 277.01073131955485, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 09, 1989; Rating Delta: 1.32388963661", + "x": 211.15381558028616, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 12, 1988; Rating Delta: −1.67611036339", + "x": 205.9650238473768, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 04, 1994; Rating Delta: 0.323889636608", + "x": 226.79809220985692, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 10, 1995; Rating Delta: −0.676110363392", + "x": 232.94117647058823, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 26, 1999; Rating Delta: −0.576110363392", + "x": 244.6931637519873, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: May 17, 1950; Rating Delta: 0.823889636608", + "x": 74.47019077901432, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 28, 1951; Rating Delta: 0.423889636608", + "x": 78.63871224165342, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 25, 1995; Rating Delta: 1.02388963661", + "x": 232.20627980922097, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 24, 1960; Rating Delta: −0.376110363392", + "x": 110.84220985691574, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(227, 141, 42)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 15, 1993; Rating Delta: −3.07611036339", + "x": 223.1255961844197, + "y": 227.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 24, 2003; Rating Delta: 1.12388963661", + "x": 258.0476947535771, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 11, 1973; Rating Delta: 1.32388963661", + "x": 155.4272655007949, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(239, 163, 72)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1986; Rating Delta: −2.57611036339", + "x": 202.07313195548488, + "y": 209.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 17, 1995; Rating Delta: 0.523889636608", + "x": 233.00794912559618, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 20, 1977; Rating Delta: 1.92388963661", + "x": 168.28616852146266, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 08, 2000; Rating Delta: −0.176110363392", + "x": 249.76748807631162, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 02, 1993; Rating Delta: −0.476110363392", + "x": 223.86009538950717, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1959; Rating Delta: 2.12388963661", + "x": 108, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(48, 121, 180)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 15, 1979; Rating Delta: 2.32388963661", + "x": 176.36526232114466, + "y": 25.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 18, 1990; Rating Delta: −0.0761103633916", + "x": 214.42567567567568, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2007; Rating Delta: 0.123889636608", + "x": 275.17965023847376, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 19, 2007; Rating Delta: −1.17611036339", + "x": 274.54014308426076, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 01, 1971; Rating Delta: −0.676110363392", + "x": 146.3370429252782, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 01, 2007; Rating Delta: −1.87611036339", + "x": 273.2046899841017, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 17, 1956; Rating Delta: −0.676110363392", + "x": 96.83903020667726, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 10, 1968; Rating Delta: −0.576110363392", + "x": 138.58147853736088, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1974; Rating Delta: 1.82388963661", + "x": 160.26391096979333, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 01, 1987; Rating Delta: −0.876110363392", + "x": 202.64546899841017, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 04, 1995; Rating Delta: 1.02388963661", + "x": 232.00596184419715, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 01, 1994; Rating Delta: −1.27611036339", + "x": 228.19992050874404, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 16, 1993; Rating Delta: 1.42388963661", + "x": 223.99324324324326, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 04, 2006; Rating Delta: 0.623889636608", + "x": 270.3334658187599, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 03, 1985; Rating Delta: 2.12388963661", + "x": 196.86446740858506, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 1989; Rating Delta: 1.22388963661", + "x": 212.1558028616852, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: May 24, 1990; Rating Delta: 0.823889636608", + "x": 213.9010333863275, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 24, 1969; Rating Delta: 1.92388963661", + "x": 142.19674085850556, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 07, 1995; Rating Delta: 0.323889636608", + "x": 230.870826709062, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 26, 1984; Rating Delta: 0.123889636608", + "x": 194.47972972972974, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 145, 45)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 30, 1991; Rating Delta: −2.97611036339", + "x": 218.31756756756755, + "y": 224.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 20, 1982; Rating Delta: −0.576110363392", + "x": 186.86764705882354, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 18, 1959; Rating Delta: 1.92388963661", + "x": 107.58982511923689, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 15, 1974; Rating Delta: −0.476110363392", + "x": 159.82511923688395, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 27, 1995; Rating Delta: 1.72388963661", + "x": 230.2034976152623, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 13, 1991; Rating Delta: −2.87611036339", + "x": 219.03338632750396, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(227, 141, 42)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 30, 2005; Rating Delta: −3.07611036339", + "x": 267.3954689984102, + "y": 227.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1972; Rating Delta: −1.27611036339", + "x": 153.30047694753577, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 06, 1996; Rating Delta: −1.47611036339", + "x": 235.81200317965022, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 05, 1984; Rating Delta: 1.02388963661", + "x": 194.8616852146264, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: May 20, 1987; Rating Delta: −0.176110363392", + "x": 203.40818759936408, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: May 25, 1994; Rating Delta: −1.27611036339", + "x": 227.84697933227343, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 1979; Rating Delta: −0.676110363392", + "x": 177.58664546899843, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 10, 2008; Rating Delta: −0.176110363392", + "x": 277.06796502384736, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 03, 1988; Rating Delta: 0.923889636608", + "x": 207.03298887122418, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 12, 1991; Rating Delta: 1.52388963661", + "x": 217.8501589825119, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1990; Rating Delta: −1.97611036339", + "x": 216.0095389507154, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 01, 1988; Rating Delta: 0.523889636608", + "x": 206.43243243243242, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1975; Rating Delta: −1.37611036339", + "x": 163.7456279809221, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 20, 2004; Rating Delta: −0.0761103633916", + "x": 261.78696343402225, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 25, 1982; Rating Delta: 2.02388963661", + "x": 186.33346581875995, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 26, 1988; Rating Delta: −0.0761103633916", + "x": 206.0985691573927, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 20, 1980; Rating Delta: 1.62388963661", + "x": 179.32233704292528, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 24, 1981; Rating Delta: 0.823889636608", + "x": 183.12837837837836, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 01, 2005; Rating Delta: 1.02388963661", + "x": 266.52742448330685, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1928; Rating Delta: 0.423889636608", + "x": 0, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1939; Rating Delta: 0.823889636608", + "x": 38.31796502384738, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 04, 1996; Rating Delta: 1.12388963661", + "x": 236.07909379968203, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 01, 1996; Rating Delta: 0.0238896366084", + "x": 234.3052464228935, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 28, 1971; Rating Delta: 0.823889636608", + "x": 147.4527027027027, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 19, 1991; Rating Delta: −0.476110363392", + "x": 217.9169316375199, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 08, 2015; Rating Delta: 0.823889636608", + "x": 300, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: May 13, 1970; Rating Delta: 1.02388963661", + "x": 144.11406995230524, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 23, 1990; Rating Delta: −0.0761103633916", + "x": 213.0429252782194, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 30, 2006; Rating Delta: 1.32388963661", + "x": 269.9996025437202, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 01, 1992; Rating Delta: −0.376110363392", + "x": 221.23648648648648, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 18, 1957; Rating Delta: 2.12388963661", + "x": 100.91255961844197, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 1989; Rating Delta: 0.923889636608", + "x": 212.422893481717, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 09, 1996; Rating Delta: 0.423889636608", + "x": 235.54491255961844, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 22, 1989; Rating Delta: −2.17611036339", + "x": 211.5735294117647, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 21, 1996; Rating Delta: 0.923889636608", + "x": 233.9236883942766, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 12, 1993; Rating Delta: 1.32388963661", + "x": 223.3926868044515, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 02, 1995; Rating Delta: 0.923889636608", + "x": 231.40500794912558, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 09, 1995; Rating Delta: 0.123889636608", + "x": 232.05365659777425, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 13, 1992; Rating Delta: 0.123889636608", + "x": 222.52464228934818, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 09, 1996; Rating Delta: −0.476110363392", + "x": 233.80922098569158, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 30, 1983; Rating Delta: 0.0238896366084", + "x": 190.7404610492846, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: May 24, 1995; Rating Delta: 2.12388963661", + "x": 231.3191573926868, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 01, 2006; Rating Delta: −1.87611036339", + "x": 268.5786963434022, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 18, 1985; Rating Delta: 1.72388963661", + "x": 198.46740858505567, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 01, 1974; Rating Delta: 1.52388963661", + "x": 156.79173290938, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: May 05, 2000; Rating Delta: 0.0238896366084", + "x": 248.5655802861685, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1943; Rating Delta: −0.0761103633916", + "x": 52.25397456279809, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 17, 1989; Rating Delta: 0.423889636608", + "x": 209.50397456279808, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 15, 1977; Rating Delta: 1.02388963661", + "x": 168.8199523052464, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 30, 1988; Rating Delta: 1.02388963661", + "x": 206.4133545310016, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 18, 1992; Rating Delta: 0.623889636608", + "x": 221.11248012718602, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 16, 1995; Rating Delta: −0.876110363392", + "x": 231.5385532591415, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 23, 1989; Rating Delta: 1.32388963661", + "x": 210.70548489666137, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 31, 1992; Rating Delta: −0.976110363392", + "x": 221.5226550079491, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 25, 2008; Rating Delta: 0.723889636608", + "x": 277.2110492845787, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 01, 1970; Rating Delta: −0.576110363392", + "x": 142.85532591414943, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 02, 1999; Rating Delta: 0.123889636608", + "x": 245.62758346581876, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1977; Rating Delta: 0.723889636608", + "x": 170.71860095389508, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: May 10, 2002; Rating Delta: 0.723889636608", + "x": 255.57670906200318, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 25, 1980; Rating Delta: 1.02388963661", + "x": 179.65620031796502, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 15, 1991; Rating Delta: 1.02388963661", + "x": 219.05246422893484, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 03, 1994; Rating Delta: 0.523889636608", + "x": 228.51470588235293, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 16, 1976; Rating Delta: 1.12388963661", + "x": 166.80763116057233, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 28, 1967; Rating Delta: 1.72388963661", + "x": 133.516693163752, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 16, 2004; Rating Delta: −0.276110363392", + "x": 263.18879173290935, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 14, 1984; Rating Delta: 0.0238896366084", + "x": 194.94753577106516, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 23, 2002; Rating Delta: 0.823889636608", + "x": 256.5782988871224, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 16, 1977; Rating Delta: 1.52388963661", + "x": 170.28934817170114, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 14, 1996; Rating Delta: −0.476110363392", + "x": 235.01073131955485, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 16, 2005; Rating Delta: −1.67611036339", + "x": 267.2619236883943, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 09, 1988; Rating Delta: 0.0238896366084", + "x": 208.55007949125596, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 09, 1990; Rating Delta: −1.17611036339", + "x": 215.51351351351352, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 02, 1996; Rating Delta: −1.07611036339", + "x": 235.4781399046105, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 27, 2002; Rating Delta: −0.476110363392", + "x": 256.91216216216213, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 25, 1981; Rating Delta: 1.02388963661", + "x": 183.72933227344993, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 18, 1983; Rating Delta: 1.72388963661", + "x": 191.20826709062004, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 20, 1958; Rating Delta: 1.72388963661", + "x": 103.54491255961844, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 31, 1984; Rating Delta: −1.27611036339", + "x": 193.94554848966615, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: May 13, 1994; Rating Delta: 0.223889636608", + "x": 227.73251192368838, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 09, 1998; Rating Delta: 1.82388963661", + "x": 243.0902225755167, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 12, 1963; Rating Delta: 0.523889636608", + "x": 120.00914149443561, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: May 28, 1993; Rating Delta: −0.0761103633916", + "x": 224.3938791732909, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 21, 2005; Rating Delta: −1.17611036339", + "x": 267.595786963434, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 20, 1994; Rating Delta: 0.223889636608", + "x": 228.38116057233702, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 01, 2002; Rating Delta: −2.87611036339", + "x": 254.9093799682035, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 01, 1995; Rating Delta: 0.423889636608", + "x": 231.68163751987282, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 18, 1985; Rating Delta: 1.42388963661", + "x": 198.46740858505567, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 19, 1994; Rating Delta: 1.62388963661", + "x": 229.2492050874404, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 20, 1998; Rating Delta: 1.72388963661", + "x": 243.4912559618442, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 12, 1981; Rating Delta: −0.376110363392", + "x": 182.7277424483307, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: May 15, 1998; Rating Delta: −0.376110363392", + "x": 241.68799682034978, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 04, 1985; Rating Delta: −1.77611036339", + "x": 197.75158982511923, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 17, 1986; Rating Delta: 0.623889636608", + "x": 201.35731319554847, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 15, 1950; Rating Delta: −1.17611036339", + "x": 73.60254372019078, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 09, 1995; Rating Delta: −1.67611036339", + "x": 231.47178060413356, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: May 14, 1982; Rating Delta: 0.523889636608", + "x": 185.93282988871223, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 29, 1984; Rating Delta: −0.876110363392", + "x": 193.3445945945946, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 20, 1982; Rating Delta: 0.0238896366084", + "x": 186.86764705882354, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 17, 1986; Rating Delta: −1.37611036339", + "x": 198.7535771065183, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 22, 1999; Rating Delta: 1.72388963661", + "x": 244.09220985691576, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1977; Rating Delta: 1.02388963661", + "x": 170.71860095389508, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 17, 2009; Rating Delta: 1.32388963661", + "x": 281.79014308426076, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 01, 1993; Rating Delta: 0.223889636608", + "x": 225.59578696343402, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1971; Rating Delta: −0.476110363392", + "x": 149.80922098569158, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 06, 2001; Rating Delta: 1.12388963661", + "x": 252.63871224165342, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 26, 1986; Rating Delta: 0.223889636608", + "x": 201.15699523052461, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 09, 2001; Rating Delta: 1.02388963661", + "x": 251.5039745627981, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 27, 1998; Rating Delta: 1.52388963661", + "x": 241.22098569157393, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 10, 1982; Rating Delta: 0.223889636608", + "x": 187.65023847376787, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: May 01, 1987; Rating Delta: −0.876110363392", + "x": 203.22694753577105, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 25, 1992; Rating Delta: 1.02388963661", + "x": 222.63910969793324, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: May 12, 1995; Rating Delta: 0.923889636608", + "x": 231.20468998410178, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1977; Rating Delta: −0.476110363392", + "x": 170.71860095389508, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 30, 2006; Rating Delta: 1.32388963661", + "x": 269.9996025437202, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(38, 106, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1941; Rating Delta: 2.52388963661", + "x": 45.29093799682035, + "y": 17.85413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 1995; Rating Delta: 1.82388963661", + "x": 233.0556438791733, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: May 26, 1995; Rating Delta: −0.576110363392", + "x": 231.33823529411765, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 154, 58)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1979; Rating Delta: −2.77611036339", + "x": 177.68203497615264, + "y": 216.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 24, 1970; Rating Delta: 0.823889636608", + "x": 144.51470588235293, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 16, 1996; Rating Delta: −0.176110363392", + "x": 233.8759936406995, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 1995; Rating Delta: −0.976110363392", + "x": 233.34181240063592, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 14, 1998; Rating Delta: 0.523889636608", + "x": 242.5560413354531, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 12, 1996; Rating Delta: 0.323889636608", + "x": 235.27782193958663, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(38, 106, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: May 28, 1969; Rating Delta: 2.52388963661", + "x": 140.7754372019078, + "y": 17.85413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 07, 1974; Rating Delta: 1.82388963661", + "x": 157.7070747217806, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: May 26, 2006; Rating Delta: −0.276110363392", + "x": 269.66573926868045, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 27, 1995; Rating Delta: 0.223889636608", + "x": 232.80723370429254, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 28, 1990; Rating Delta: −0.976110363392", + "x": 215.11248012718602, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 10, 1982; Rating Delta: −1.97611036339", + "x": 185.04610492845788, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 25, 1995; Rating Delta: 0.723889636608", + "x": 232.20627980922097, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 16, 1994; Rating Delta: 0.923889636608", + "x": 229.80286168521462, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 1971; Rating Delta: 0.423889636608", + "x": 149.67567567567568, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 23, 1993; Rating Delta: −0.576110363392", + "x": 224.06001589825118, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 13, 2005; Rating Delta: 0.0238896366084", + "x": 267.5194753577107, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 07, 1997; Rating Delta: −0.676110363392", + "x": 237.28139904610492, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 06, 1996; Rating Delta: −0.876110363392", + "x": 236.68044515103338, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 15, 1990; Rating Delta: −0.376110363392", + "x": 214.11089030206676, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 27, 2004; Rating Delta: −1.87611036339", + "x": 261.85373608903024, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 20, 1979; Rating Delta: 1.12388963661", + "x": 175.2496025437202, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 1991; Rating Delta: 0.323889636608", + "x": 219.11923688394276, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 31, 1992; Rating Delta: −0.276110363392", + "x": 221.5226550079491, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 167, 79)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 15, 1985; Rating Delta: −2.47611036339", + "x": 195.81558028616854, + "y": 205.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 02, 1989; Rating Delta: 1.52388963661", + "x": 210.50516693163752, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 04, 2003; Rating Delta: −0.776110363392", + "x": 258.41971383147853, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 30, 1972; Rating Delta: −1.07611036339", + "x": 151.54491255961844, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 21, 1983; Rating Delta: 1.02388963661", + "x": 190.94077901430842, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 03, 1990; Rating Delta: 0.723889636608", + "x": 214.28259141494433, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: May 19, 1995; Rating Delta: 1.12388963661", + "x": 231.2714626391097, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: May 31, 1996; Rating Delta: −0.0761103633916", + "x": 234.87718600953897, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 15, 1988; Rating Delta: 1.02388963661", + "x": 207.4336248012719, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 02, 1982; Rating Delta: 0.823889636608", + "x": 185.53259141494433, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 23, 2005; Rating Delta: −1.27611036339", + "x": 267.3286963434022, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 07, 1995; Rating Delta: 0.323889636608", + "x": 230.870826709062, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 13, 1995; Rating Delta: 0.123889636608", + "x": 230.06995230524643, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 21, 1977; Rating Delta: −1.57611036339", + "x": 170.04093799682033, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 29, 1995; Rating Delta: 1.32388963661", + "x": 233.4085850556439, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 09, 1990; Rating Delta: 1.72388963661", + "x": 215.51351351351352, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 1988; Rating Delta: 1.42388963661", + "x": 208.95071542130367, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1962; Rating Delta: 0.323889636608", + "x": 118.45468998410175, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 25, 1991; Rating Delta: −0.376110363392", + "x": 218.85174880763114, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 09, 1991; Rating Delta: −1.57611036339", + "x": 218.1172496025437, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 01, 1991; Rating Delta: 0.723889636608", + "x": 216.5818759936407, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 03, 1985; Rating Delta: −1.77611036339", + "x": 196.86446740858506, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 27, 1990; Rating Delta: −0.876110363392", + "x": 214.22535771065182, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: May 14, 2003; Rating Delta: 0.723889636608", + "x": 259.09658187599365, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 01, 1979; Rating Delta: −0.476110363392", + "x": 175.6498410174881, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 01, 1975; Rating Delta: −0.176110363392", + "x": 161.13155802861687, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 16, 1998; Rating Delta: 1.32388963661", + "x": 240.55325914149444, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1978; Rating Delta: 1.92388963661", + "x": 174.20031796502386, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 26, 1981; Rating Delta: 0.523889636608", + "x": 182.86128775834658, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 13, 1989; Rating Delta: 1.22388963661", + "x": 212.35612082670906, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 01, 1980; Rating Delta: 0.823889636608", + "x": 177.69157392686805, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 30, 1989; Rating Delta: 1.62388963661", + "x": 210.7722575516693, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 14, 1984; Rating Delta: 0.223889636608", + "x": 194.94753577106516, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 21, 2003; Rating Delta: −0.476110363392", + "x": 258.5818759936407, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 20, 1997; Rating Delta: 0.323889636608", + "x": 238.54968203497617, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 1965; Rating Delta: 1.72388963661", + "x": 128.8235294117647, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 15, 1983; Rating Delta: 1.32388963661", + "x": 189.1383147853736, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 13, 1987; Rating Delta: 1.62388963661", + "x": 202.75993640699522, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 19, 1993; Rating Delta: 1.32388963661", + "x": 223.45945945945948, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1992; Rating Delta: −0.676110363392", + "x": 222.9825119236884, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 07, 1990; Rating Delta: 1.72388963661", + "x": 215.7806041335453, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 30, 1994; Rating Delta: 1.82388963661", + "x": 229.06796502384736, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1953; Rating Delta: −0.0761103633916", + "x": 87.10015898251193, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 06, 1996; Rating Delta: 0.523889636608", + "x": 236.68044515103338, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 1980; Rating Delta: 2.12388963661", + "x": 180.32392686804454, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 02, 1996; Rating Delta: 0.523889636608", + "x": 235.4781399046105, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 10, 1981; Rating Delta: 0.823889636608", + "x": 182.99483306836248, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 09, 1996; Rating Delta: −0.976110363392", + "x": 235.54491255961844, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1970; Rating Delta: −0.176110363392", + "x": 146.3275039745628, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 21, 1996; Rating Delta: −0.376110363392", + "x": 235.07750397456277, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1976; Rating Delta: 1.12388963661", + "x": 167.2368839427663, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 11, 1982; Rating Delta: 1.62388963661", + "x": 186.19992050874404, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: May 14, 1993; Rating Delta: −1.57611036339", + "x": 224.26033386327504, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 154, 58)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 17, 1977; Rating Delta: −2.77611036339", + "x": 168.83903020667728, + "y": 216.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 23, 1994; Rating Delta: 0.823889636608", + "x": 229.0011923688394, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 1978; Rating Delta: −0.276110363392", + "x": 174.11446740858509, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1956; Rating Delta: 0.323889636608", + "x": 97.55484896661366, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 18, 1987; Rating Delta: 0.523889636608", + "x": 204.56240063593006, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 09, 1976; Rating Delta: 0.523889636608", + "x": 164.6995230524642, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 10, 2004; Rating Delta: −0.876110363392", + "x": 264.59141494435613, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 17, 2006; Rating Delta: 0.423889636608", + "x": 268.99841017488075, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 09, 1971; Rating Delta: 1.62388963661", + "x": 149.0170906200318, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 19, 1996; Rating Delta: 0.823889636608", + "x": 233.60890302066773, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: May 09, 1980; Rating Delta: −0.676110363392", + "x": 178.92170111287757, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 13, 1982; Rating Delta: −0.776110363392", + "x": 186.80087440381556, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: May 13, 1988; Rating Delta: −1.67611036339", + "x": 206.83267090620032, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 172, 86)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 28, 1989; Rating Delta: −2.37611036339", + "x": 211.0393481717011, + "y": 201.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 13, 1993; Rating Delta: −2.17611036339", + "x": 225.12837837837836, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: May 10, 1967; Rating Delta: 1.92388963661", + "x": 133.63076311605724, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 18, 1967; Rating Delta: 1.72388963661", + "x": 132.56279809220985, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 01, 1964; Rating Delta: 0.323889636608", + "x": 121.94594594594595, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 30, 1981; Rating Delta: −0.776110363392", + "x": 182.31756756756755, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 05, 1996; Rating Delta: −0.576110363392", + "x": 234.34340222575517, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 03, 1995; Rating Delta: 0.323889636608", + "x": 232.8744038155803, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 11, 1992; Rating Delta: 1.32388963661", + "x": 222.79173290937996, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 06, 1993; Rating Delta: 1.52388963661", + "x": 225.06160572337043, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 05, 1953; Rating Delta: 1.62388963661", + "x": 85.68799682034977, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: May 01, 1998; Rating Delta: 0.123889636608", + "x": 241.55445151033385, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 13, 1978; Rating Delta: −0.0761103633916", + "x": 171.70111287758345, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 15, 1983; Rating Delta: −0.676110363392", + "x": 189.1383147853736, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 19, 1996; Rating Delta: −1.37611036339", + "x": 235.34459459459458, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 05, 1980; Rating Delta: −0.0761103633916", + "x": 180.9252782193959, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: May 27, 1994; Rating Delta: −1.67611036339", + "x": 227.8660572337043, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 18, 1991; Rating Delta: −0.976110363392", + "x": 216.181240063593, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 10, 1990; Rating Delta: 0.123889636608", + "x": 214.64507154213035, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 29, 2005; Rating Delta: −0.176110363392", + "x": 265.9264705882353, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 01, 1996; Rating Delta: 0.123889636608", + "x": 236.34658187599365, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 145, 45)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 01, 1980; Rating Delta: −2.97611036339", + "x": 177.98728139904608, + "y": 224.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(48, 121, 180)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 06, 1994; Rating Delta: 2.32388963661", + "x": 228.24761526232115, + "y": 25.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 03, 1993; Rating Delta: −0.776110363392", + "x": 225.3286963434022, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 01, 1971; Rating Delta: 1.42388963661", + "x": 146.3370429252782, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 1974; Rating Delta: 0.923889636608", + "x": 160.13036565977745, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 22, 1982; Rating Delta: 1.12388963661", + "x": 187.46860095389508, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 26, 1995; Rating Delta: 0.723889636608", + "x": 231.05206677265502, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 10, 2004; Rating Delta: 0.0238896366084", + "x": 264.59141494435613, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 18, 1982; Rating Delta: −0.676110363392", + "x": 186.26669316375197, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 08, 1996; Rating Delta: 2.02388963661", + "x": 234.07631160572336, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 07, 1995; Rating Delta: −0.676110363392", + "x": 231.73887122416536, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 08, 1964; Rating Delta: 1.22388963661", + "x": 122.88076311605724, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 30, 1993; Rating Delta: −0.776110363392", + "x": 224.70866454689983, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 21, 1972; Rating Delta: 1.22388963661", + "x": 151.45906200317967, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 17, 1984; Rating Delta: −0.276110363392", + "x": 192.07631160572336, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 13, 1982; Rating Delta: 0.923889636608", + "x": 186.80087440381556, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: May 06, 2005; Rating Delta: 0.323889636608", + "x": 265.9932432432432, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 20, 1996; Rating Delta: −0.676110363392", + "x": 235.94554848966615, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 22, 1996; Rating Delta: 0.423889636608", + "x": 234.20985691573927, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 26, 1981; Rating Delta: 0.523889636608", + "x": 182.86128775834658, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 08, 2000; Rating Delta: 0.223889636608", + "x": 249.76748807631162, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 11, 1996; Rating Delta: 0.323889636608", + "x": 236.14586645468998, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 28, 1981; Rating Delta: 1.42388963661", + "x": 183.46224165341815, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 16, 2001; Rating Delta: −0.776110363392", + "x": 251.57074721780603, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 29, 1967; Rating Delta: 0.523889636608", + "x": 135.8537360890302, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 132, 35)", + "ariaRoleDescription": "point", + "description": "Release Date: May 01, 1981; Rating Delta: −3.27611036339", + "x": 182.327106518283, + "y": 235.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(29, 90, 149)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 11, 1974; Rating Delta: 2.72388963661", + "x": 160.07313195548488, + "y": 10.354138627186648 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1990; Rating Delta: 1.32388963661", + "x": 215.9523052464229, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(38, 106, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 19, 1990; Rating Delta: 2.52388963661", + "x": 215.02662957074722, + "y": 17.85413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(19, 75, 133)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 15, 1972; Rating Delta: 2.92388963661", + "x": 150.52464228934818, + "y": 2.8541386271866753 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 10, 2000; Rating Delta: 0.523889636608", + "x": 248.03179650238474, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 08, 1963; Rating Delta: 2.12388963661", + "x": 120.55286168521462, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 21, 2005; Rating Delta: −1.07611036339", + "x": 264.99205087440384, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 13, 1990; Rating Delta: 0.623889636608", + "x": 214.37798092209857, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 08, 1984; Rating Delta: 0.523889636608", + "x": 193.14427662957075, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 22, 1996; Rating Delta: −1.37611036339", + "x": 234.20985691573927, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 17, 1995; Rating Delta: 0.923889636608", + "x": 233.00794912559618, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 04, 1996; Rating Delta: −1.37611036339", + "x": 236.07909379968203, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 14, 1989; Rating Delta: 1.72388963661", + "x": 212.3656597774245, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 04, 1999; Rating Delta: −0.176110363392", + "x": 245.94236883942767, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 23, 1987; Rating Delta: 0.923889636608", + "x": 205.4785373608903, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 08, 1982; Rating Delta: 1.92388963661", + "x": 187.91732909379968, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1946; Rating Delta: 1.12388963661", + "x": 62.709062003179646, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 14, 2007; Rating Delta: 0.723889636608", + "x": 275.07472178060414, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 16, 1996; Rating Delta: 0.423889636608", + "x": 236.19356120826708, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 12, 1986; Rating Delta: −0.876110363392", + "x": 201.8918918918919, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 10, 2008; Rating Delta: 0.123889636608", + "x": 277.9455484896661, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 1964; Rating Delta: 1.62388963661", + "x": 125.34181240063594, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 12, 1993; Rating Delta: 1.92388963661", + "x": 223.3926868044515, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 08, 1984; Rating Delta: 0.723889636608", + "x": 193.14427662957075, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 30, 1999; Rating Delta: 1.22388963661", + "x": 245.02662957074725, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 15, 1990; Rating Delta: −0.176110363392", + "x": 214.11089030206676, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 15, 1965; Rating Delta: 0.0238896366084", + "x": 125.8664546899841, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 10, 1952; Rating Delta: 0.523889636608", + "x": 80.22257551669315, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 02, 1979; Rating Delta: 0.623889636608", + "x": 174.51510333863274, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 20, 1995; Rating Delta: 0.623889636608", + "x": 232.74046104928456, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 08, 1993; Rating Delta: 1.32388963661", + "x": 225.66255961844195, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 16, 1998; Rating Delta: 0.223889636608", + "x": 243.15699523052464, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 23, 1991; Rating Delta: −0.976110363392", + "x": 218.25079491255963, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 07, 1981; Rating Delta: −0.276110363392", + "x": 183.2619236883943, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1929; Rating Delta: 1.62388963661", + "x": 3.481717011128776, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 18, 1981; Rating Delta: −2.17611036339", + "x": 184.5310015898251, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(158, 77, 8)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 18, 2005; Rating Delta: −4.77611036339", + "x": 265.5262321144674, + "y": 291.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 03, 1968; Rating Delta: 0.623889636608", + "x": 137.93282988871223, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 18, 1987; Rating Delta: 0.723889636608", + "x": 204.56240063593006, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 02, 1992; Rating Delta: 0.123889636608", + "x": 222.12360890302068, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 167, 79)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 27, 1995; Rating Delta: −2.47611036339", + "x": 230.2034976152623, + "y": 205.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 07, 1986; Rating Delta: 0.923889636608", + "x": 199.22098569157393, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1951; Rating Delta: 2.02388963661", + "x": 80.12718600953896, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 12, 1981; Rating Delta: 0.223889636608", + "x": 182.7277424483307, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 16, 1969; Rating Delta: −1.87611036339", + "x": 142.7027027027027, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 30, 1981; Rating Delta: −1.37611036339", + "x": 184.0635930047695, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 167, 79)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 22, 1982; Rating Delta: −2.47611036339", + "x": 187.46860095389508, + "y": 205.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 01, 1988; Rating Delta: −0.676110363392", + "x": 208.17766295707474, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 29, 1995; Rating Delta: −1.87611036339", + "x": 232.54014308426073, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 17, 1978; Rating Delta: −0.276110363392", + "x": 173.48449920508745, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 20, 1992; Rating Delta: −0.476110363392", + "x": 222.5914149443561, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 16, 1990; Rating Delta: 0.723889636608", + "x": 215.58028616852144, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: May 16, 1980; Rating Delta: −0.976110363392", + "x": 178.98847376788555, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(237, 158, 65)", + "ariaRoleDescription": "point", + "description": "Release Date: May 26, 2000; Rating Delta: −2.67611036339", + "x": 248.76589825119237, + "y": 212.85413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 09, 1984; Rating Delta: −0.476110363392", + "x": 192.27662957074722, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 08, 1989; Rating Delta: 1.62388963661", + "x": 212.0222575516693, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 30, 2010; Rating Delta: −1.67611036339", + "x": 283.35413354531, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 11, 1991; Rating Delta: −0.0761103633916", + "x": 219.30047694753577, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 23, 1991; Rating Delta: −1.97611036339", + "x": 218.83267090620032, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 16, 1993; Rating Delta: −0.276110363392", + "x": 224.86128775834658, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 10, 1981; Rating Delta: 0.223889636608", + "x": 182.12718600953895, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 01, 1972; Rating Delta: 1.32388963661", + "x": 149.818759936407, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 14, 1994; Rating Delta: 1.72388963661", + "x": 229.20151033386327, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 16, 1996; Rating Delta: 0.623889636608", + "x": 233.8759936406995, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 11, 1994; Rating Delta: 1.12388963661", + "x": 227.13195548489668, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 11, 1964; Rating Delta: 1.32388963661", + "x": 124.0727344992051, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 24, 2008; Rating Delta: −0.176110363392", + "x": 278.079093799682, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 02, 1990; Rating Delta: 1.32388963661", + "x": 213.10969793322735, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 23, 1966; Rating Delta: 0.723889636608", + "x": 129.42448330683624, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 10, 1996; Rating Delta: −0.476110363392", + "x": 235.2587440381558, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 19, 1996; Rating Delta: 0.623889636608", + "x": 234.47655007949126, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 25, 1961; Rating Delta: 1.82388963661", + "x": 114.04729729729729, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: May 29, 1963; Rating Delta: −2.87611036339", + "x": 119.87559618441972, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: May 24, 1991; Rating Delta: −0.976110363392", + "x": 217.3827503974563, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 19, 1980; Rating Delta: 0.223889636608", + "x": 180.77265500794914, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 19, 1998; Rating Delta: −0.676110363392", + "x": 242.0218600953895, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 10, 1953; Rating Delta: −0.876110363392", + "x": 84.57233704292528, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 10, 1966; Rating Delta: 0.123889636608", + "x": 131.6085055643879, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 01, 1986; Rating Delta: −2.17611036339", + "x": 200.62281399046103, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 23, 1977; Rating Delta: 0.223889636608", + "x": 170.6422893481717, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(189, 99, 12)", + "ariaRoleDescription": "point", + "description": "Release Date: May 10, 2002; Rating Delta: −4.07611036339", + "x": 255.57670906200318, + "y": 265.3541386271866 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(43, 113, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1945; Rating Delta: 2.42388963661", + "x": 59.227344992050874, + "y": 21.604138627186675 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 16, 1984; Rating Delta: −1.17611036339", + "x": 192.34340222575514, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 02, 1996; Rating Delta: 0.223889636608", + "x": 235.18243243243242, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 23, 1996; Rating Delta: −2.17611036339", + "x": 235.67845786963434, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 08, 2006; Rating Delta: 1.52388963661", + "x": 270.6673290937997, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 154, 58)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 21, 2006; Rating Delta: −2.77611036339", + "x": 269.3318759936407, + "y": 216.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 14, 1995; Rating Delta: −0.576110363392", + "x": 231.8056438791733, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 20, 1998; Rating Delta: −0.676110363392", + "x": 240.88712241653417, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 06, 1999; Rating Delta: −0.176110363392", + "x": 245.9614467408585, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1966; Rating Delta: 1.82388963661", + "x": 132.39109697933227, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 01, 1997; Rating Delta: 0.923889636608", + "x": 238.95031796502383, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 22, 1994; Rating Delta: −0.576110363392", + "x": 227.53219395866452, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 06, 1986; Rating Delta: −1.27611036339", + "x": 200.08863275039744, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 23, 2004; Rating Delta: −0.176110363392", + "x": 262.387519872814, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 13, 1980; Rating Delta: 0.623889636608", + "x": 179.25556438791733, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 20, 2002; Rating Delta: −1.17611036339", + "x": 256.8453895071542, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 02, 1967; Rating Delta: 1.82388963661", + "x": 134.4320349761526, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 09, 1996; Rating Delta: −0.976110363392", + "x": 235.54491255961844, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 13, 1995; Rating Delta: −1.47611036339", + "x": 232.6736883942766, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 1996; Rating Delta: −1.37611036339", + "x": 236.5468998410175, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: May 08, 1963; Rating Delta: 1.02388963661", + "x": 119.67527821939586, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1994; Rating Delta: −0.476110363392", + "x": 229.8887122416534, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 30, 1995; Rating Delta: −1.37611036339", + "x": 231.67209856915738, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 172, 86)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 03, 1995; Rating Delta: −2.37611036339", + "x": 230.2702702702703, + "y": 201.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 31, 1995; Rating Delta: −0.676110363392", + "x": 230.80445151033388, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 1991; Rating Delta: 1.72388963661", + "x": 219.38632750397457, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 23, 2007; Rating Delta: 0.923889636608", + "x": 272.53696343402225, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 27, 1982; Rating Delta: −0.776110363392", + "x": 186.9344197138315, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 1995; Rating Delta: 0.123889636608", + "x": 233.27503974562796, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 02, 1996; Rating Delta: −0.976110363392", + "x": 233.74244833068363, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 11, 2010; Rating Delta: 1.62388963661", + "x": 283.7547694753577, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 10, 1993; Rating Delta: 1.62388963661", + "x": 224.51788553259144, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1990; Rating Delta: −0.476110363392", + "x": 216.0095389507154, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 20, 1975; Rating Delta: 2.02388963661", + "x": 161.89467408585057, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 16, 1978; Rating Delta: −0.676110363392", + "x": 172.31120826709062, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(205, 115, 21)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 17, 1987; Rating Delta: −3.67611036339", + "x": 203.9614467408585, + "y": 250.35413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 11, 2006; Rating Delta: −0.676110363392", + "x": 270.4002384737679, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 08, 1989; Rating Delta: −0.776110363392", + "x": 211.43998410174882, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 21, 1995; Rating Delta: 0.423889636608", + "x": 231.87241653418124, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 26, 1996; Rating Delta: 0.423889636608", + "x": 235.41136724960256, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 1990; Rating Delta: −0.476110363392", + "x": 215.91414944356123, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 1976; Rating Delta: 1.32388963661", + "x": 167.10333863275042, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 21, 1995; Rating Delta: 1.32388963661", + "x": 231.00437201907792, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1976; Rating Delta: −0.576110363392", + "x": 167.2368839427663, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 27, 2001; Rating Delta: 1.62388963661", + "x": 251.97098569157393, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 25, 1985; Rating Delta: −0.476110363392", + "x": 197.95190779014308, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 23, 2006; Rating Delta: −0.176110363392", + "x": 269.93282988871226, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 16, 1996; Rating Delta: −0.276110363392", + "x": 235.61168521462636, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 20, 1987; Rating Delta: 1.62388963661", + "x": 205.1637519872814, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 18, 1993; Rating Delta: −0.376110363392", + "x": 224.59419713831477, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 27, 1973; Rating Delta: 0.523889636608", + "x": 154.99801271860093, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 01, 2006; Rating Delta: 1.52388963661", + "x": 270.6005564387917, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 05, 2002; Rating Delta: 1.72388963661", + "x": 255.24324324324323, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 25, 1998; Rating Delta: −0.276110363392", + "x": 242.95667726550082, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 18, 1988; Rating Delta: 0.623889636608", + "x": 208.63593004769476, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 04, 1962; Rating Delta: 1.52388963661", + "x": 117.61486486486487, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 31, 1987; Rating Delta: 0.423889636608", + "x": 204.09499205087442, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 11, 1992; Rating Delta: 1.52388963661", + "x": 222.50556438791733, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 23, 1994; Rating Delta: −0.876110363392", + "x": 229.58346581875995, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 06, 1998; Rating Delta: 0.623889636608", + "x": 241.02066772655007, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 12, 1985; Rating Delta: 0.423889636608", + "x": 196.08267090620032, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 08, 1991; Rating Delta: 1.22388963661", + "x": 216.64864864864865, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1979; Rating Delta: 1.52388963661", + "x": 177.68203497615264, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 18, 1986; Rating Delta: −0.676110363392", + "x": 200.20310015898252, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 18, 1986; Rating Delta: −0.176110363392", + "x": 199.6216216216216, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 30, 1972; Rating Delta: 0.423889636608", + "x": 152.12678855325913, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 21, 1985; Rating Delta: −0.476110363392", + "x": 196.75, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 22, 1988; Rating Delta: 0.323889636608", + "x": 206.63235294117646, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 11, 1996; Rating Delta: 0.323889636608", + "x": 236.14586645468998, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 2007; Rating Delta: 2.12388963661", + "x": 274.387519872814, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: May 29, 2002; Rating Delta: 1.22388963661", + "x": 255.75794912559618, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1959; Rating Delta: 1.52388963661", + "x": 108, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 26, 1993; Rating Delta: 0.723889636608", + "x": 223.5262321144674, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 18, 1986; Rating Delta: 1.22388963661", + "x": 200.48926868044515, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: May 22, 1992; Rating Delta: 0.0238896366084", + "x": 220.85492845786965, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 15, 1994; Rating Delta: 1.92388963661", + "x": 228.0472972972973, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 10, 1975; Rating Delta: 1.32388963661", + "x": 161.79928457869633, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 28, 1997; Rating Delta: −0.576110363392", + "x": 237.74880763116056, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 27, 1984; Rating Delta: 1.02388963661", + "x": 192.74403815580285, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: May 22, 1981; Rating Delta: −1.67611036339", + "x": 182.52742448330685, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 25, 1992; Rating Delta: 1.52388963661", + "x": 222.05683624801273, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1955; Rating Delta: −0.376110363392", + "x": 94.06359300476947, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: May 16, 1980; Rating Delta: 0.823889636608", + "x": 178.98847376788555, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 08, 1983; Rating Delta: −1.67611036339", + "x": 189.07154213036566, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: May 28, 1999; Rating Delta: −1.37611036339", + "x": 245.29372019077903, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 23, 1994; Rating Delta: 0.823889636608", + "x": 229.86963434022258, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 01, 1992; Rating Delta: 0.623889636608", + "x": 221.23648648648648, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 05, 1993; Rating Delta: −0.576110363392", + "x": 223.32591414944355, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1944; Rating Delta: 1.92388963661", + "x": 55.74523052464229, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 19, 2010; Rating Delta: 0.623889636608", + "x": 282.68680445151034, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1975; Rating Delta: 0.423889636608", + "x": 163.7456279809221, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 13, 2002; Rating Delta: 0.623889636608", + "x": 256.7786168521463, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 21, 1992; Rating Delta: 0.423889636608", + "x": 222.01868044515103, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 1986; Rating Delta: 0.323889636608", + "x": 201.95866454689983, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 21, 1996; Rating Delta: 1.32388963661", + "x": 235.07750397456277, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 30, 2004; Rating Delta: 1.12388963661", + "x": 261.5866454689984, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 06, 1987; Rating Delta: 1.32388963661", + "x": 202.69316375198727, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: May 15, 1992; Rating Delta: 0.223889636608", + "x": 220.7881558028617, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 20, 1997; Rating Delta: −0.576110363392", + "x": 238.54968203497617, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 04, 1998; Rating Delta: 0.623889636608", + "x": 243.6248012718601, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 12, 1988; Rating Delta: 1.22388963661", + "x": 207.70071542130367, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 14, 1989; Rating Delta: 0.223889636608", + "x": 210.90580286168523, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 18, 2007; Rating Delta: 0.923889636608", + "x": 273.65302066772654, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 27, 1995; Rating Delta: 1.32388963661", + "x": 232.80723370429254, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 06, 1992; Rating Delta: −1.17611036339", + "x": 220.12082670906202, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 15, 1983; Rating Delta: −0.476110363392", + "x": 189.1383147853736, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 1994; Rating Delta: 0.823889636608", + "x": 229.85055643879176, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(48, 121, 180)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 16, 1962; Rating Delta: 2.32388963661", + "x": 118.31160572337043, + "y": 25.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: May 26, 1993; Rating Delta: 1.12388963661", + "x": 224.3748012718601, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: May 07, 1993; Rating Delta: 1.12388963661", + "x": 224.1935612082671, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 07, 1965; Rating Delta: 0.423889636608", + "x": 126.3529411764706, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1969; Rating Delta: 0.123889636608", + "x": 142.84578696343402, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(189, 99, 12)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1930; Rating Delta: −4.07611036339", + "x": 6.963434022257552, + "y": 265.3541386271866 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 18, 1992; Rating Delta: 1.42388963661", + "x": 222.57233704292528, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1979; Rating Delta: −0.0761103633916", + "x": 177.68203497615264, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 26, 1964; Rating Delta: 1.42388963661", + "x": 124.21581875993641, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 23, 1996; Rating Delta: −0.776110363392", + "x": 233.9427662957075, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 13, 1996; Rating Delta: −1.37611036339", + "x": 235.87877583465817, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(48, 121, 180)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 01, 1970; Rating Delta: 2.32388963661", + "x": 142.85532591414943, + "y": 25.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 29, 1994; Rating Delta: 0.323889636608", + "x": 228.46701112877582, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 13, 1996; Rating Delta: 0.0238896366084", + "x": 236.74721780604133, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 03, 1990; Rating Delta: 0.0238896366084", + "x": 214.57829888712243, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1955; Rating Delta: 1.12388963661", + "x": 94.06359300476947, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 01, 1986; Rating Delta: 0.623889636608", + "x": 199.45945945945945, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: May 05, 2000; Rating Delta: 0.923889636608", + "x": 248.5655802861685, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 11, 1996; Rating Delta: 0.623889636608", + "x": 236.14586645468998, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 13, 1992; Rating Delta: 1.02388963661", + "x": 220.18759936406994, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 07, 1992; Rating Delta: −0.576110363392", + "x": 219.8537360890302, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 20, 1998; Rating Delta: 1.12388963661", + "x": 241.15421303656598, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1981; Rating Delta: −1.77611036339", + "x": 184.5977742448331, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 19, 1984; Rating Delta: 2.12388963661", + "x": 194.12678855325913, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 02, 1992; Rating Delta: −0.376110363392", + "x": 222.12360890302068, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 12, 1966; Rating Delta: 1.82388963661", + "x": 132.20985691573927, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(201, 110, 17)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 25, 1982; Rating Delta: −3.77611036339", + "x": 186.33346581875995, + "y": 254.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 15, 1996; Rating Delta: −0.276110363392", + "x": 236.48012718600953, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: May 25, 1969; Rating Delta: 1.72388963661", + "x": 140.74682034976152, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 20, 1988; Rating Delta: 1.22388963661", + "x": 207.48131955484897, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 07, 1989; Rating Delta: 0.623889636608", + "x": 209.97098569157393, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1969; Rating Delta: 0.523889636608", + "x": 142.84578696343402, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 10, 2004; Rating Delta: −1.27611036339", + "x": 263.72297297297297, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 07, 1963; Rating Delta: 1.22388963661", + "x": 121.42130365659777, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 21, 1980; Rating Delta: 0.623889636608", + "x": 178.45468998410175, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 10, 1985; Rating Delta: −0.376110363392", + "x": 196.931240063593, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 03, 1982; Rating Delta: 0.723889636608", + "x": 187.58346581875995, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 1995; Rating Delta: −1.07611036339", + "x": 233.31319554848966, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: May 10, 1975; Rating Delta: 2.12388963661", + "x": 161.5035771065183, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 08, 2002; Rating Delta: −0.476110363392", + "x": 254.97615262321145, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 08, 1962; Rating Delta: 1.62388963661", + "x": 117.94912559618442, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 18, 1981; Rating Delta: 0.0238896366084", + "x": 183.66255961844195, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 05, 1977; Rating Delta: −0.176110363392", + "x": 169.3064387917329, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 28, 1992; Rating Delta: −0.476110363392", + "x": 220.05405405405403, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 29, 1991; Rating Delta: 0.723889636608", + "x": 218.6037360890302, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 29, 1979; Rating Delta: −0.176110363392", + "x": 175.91693163751987, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 1995; Rating Delta: −1.07611036339", + "x": 233.0556438791733, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 03, 1990; Rating Delta: 0.923889636608", + "x": 214.57829888712243, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 20, 1995; Rating Delta: 0.823889636608", + "x": 232.74046104928456, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 16, 2001; Rating Delta: 0.423889636608", + "x": 251.57074721780603, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 19, 1996; Rating Delta: −0.476110363392", + "x": 234.47655007949126, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 24, 1993; Rating Delta: 0.323889636608", + "x": 226.11128775834658, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1938; Rating Delta: 1.92388963661", + "x": 34.8362480127186, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 18, 1995; Rating Delta: −0.876110363392", + "x": 232.13950715421302, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 04, 1994; Rating Delta: −0.0761103633916", + "x": 229.4022257551669, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1960; Rating Delta: 1.12388963661", + "x": 111.4912559618442, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 09, 1988; Rating Delta: −1.47611036339", + "x": 208.8362480127186, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 01, 1962; Rating Delta: 1.82388963661", + "x": 114.98251192368839, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 21, 1996; Rating Delta: 0.623889636608", + "x": 234.78179650238474, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1978; Rating Delta: −1.57611036339", + "x": 174.20031796502386, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 17, 1996; Rating Delta: −0.576110363392", + "x": 235.32551669316376, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 01, 2006; Rating Delta: 0.723889636608", + "x": 270.6005564387917, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 11, 1992; Rating Delta: 1.22388963661", + "x": 222.79173290937996, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 1974; Rating Delta: 0.423889636608", + "x": 160.15898251192368, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 22, 1964; Rating Delta: 1.62388963661", + "x": 124.75953895071541, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 21, 1988; Rating Delta: −0.376110363392", + "x": 208.36844197138313, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 23, 2007; Rating Delta: 0.423889636608", + "x": 272.53696343402225, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 08, 1999; Rating Delta: 0.523889636608", + "x": 246.56240063593003, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 132, 35)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 17, 1982; Rating Delta: −3.27611036339", + "x": 187.13473767885534, + "y": 235.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: May 23, 1984; Rating Delta: 1.22388963661", + "x": 192.991653418124, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: May 24, 1989; Rating Delta: 2.02388963661", + "x": 210.41931637519875, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 154, 58)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 09, 2005; Rating Delta: −2.77611036339", + "x": 268.0635930047695, + "y": 216.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 19, 1988; Rating Delta: −1.07611036339", + "x": 207.76748807631162, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 10, 1981; Rating Delta: 0.0238896366084", + "x": 182.12718600953895, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 15, 1996; Rating Delta: 1.02388963661", + "x": 236.48012718600953, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 21, 1953; Rating Delta: 0.723889636608", + "x": 83.818759936407, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 28, 1991; Rating Delta: 0.323889636608", + "x": 217.71661367249604, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 18, 1994; Rating Delta: −0.176110363392", + "x": 227.1987281399046, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 01, 1968; Rating Delta: 0.323889636608", + "x": 138.4956279809221, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 27, 1998; Rating Delta: −0.576110363392", + "x": 241.22098569157393, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1958; Rating Delta: 1.22388963661", + "x": 104.51828298887122, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 09, 1984; Rating Delta: −0.976110363392", + "x": 194.61367249602543, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 01, 1985; Rating Delta: −1.37611036339", + "x": 198.01907790143085, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 27, 1987; Rating Delta: −0.0761103633916", + "x": 202.62639109697935, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 11, 1989; Rating Delta: −1.57611036339", + "x": 211.172893481717, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 13, 1991; Rating Delta: −1.77611036339", + "x": 218.45111287758348, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 19, 1990; Rating Delta: 0.323889636608", + "x": 215.31279809220987, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1945; Rating Delta: 0.0238896366084", + "x": 59.227344992050874, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 07, 1983; Rating Delta: −0.276110363392", + "x": 190.80723370429254, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1992; Rating Delta: −1.07611036339", + "x": 222.9825119236884, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 15, 1993; Rating Delta: −1.27611036339", + "x": 223.1255961844197, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 11, 1994; Rating Delta: 1.12388963661", + "x": 229.4689984101749, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 28, 1996; Rating Delta: −0.676110363392", + "x": 235.14427662957075, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 20, 1984; Rating Delta: 1.12388963661", + "x": 193.54491255961844, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 15, 2002; Rating Delta: 0.323889636608", + "x": 257.3799682034976, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 1995; Rating Delta: 0.823889636608", + "x": 233.3227344992051, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 22, 1977; Rating Delta: 0.423889636608", + "x": 168.88672496025438, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 01, 1989; Rating Delta: −0.176110363392", + "x": 209.61844197138313, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 01, 2009; Rating Delta: −0.776110363392", + "x": 278.7376788553259, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 10, 1983; Rating Delta: 0.323889636608", + "x": 189.67209856915738, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 167, 79)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 18, 1994; Rating Delta: −2.47611036339", + "x": 226.93163751987282, + "y": 205.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(33, 98, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 19, 1975; Rating Delta: 2.62388963661", + "x": 163.3449920508744, + "y": 14.104138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 04, 1987; Rating Delta: −0.676110363392", + "x": 204.42885532591416, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 18, 1969; Rating Delta: 0.623889636608", + "x": 142.72178060413353, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 25, 1976; Rating Delta: −0.876110363392", + "x": 165.43362480127186, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 145, 45)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 15, 1999; Rating Delta: −2.97611036339", + "x": 246.629173290938, + "y": 224.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 18, 1985; Rating Delta: 0.723889636608", + "x": 198.46740858505567, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 11, 1989; Rating Delta: −1.17611036339", + "x": 209.71383147853737, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 19, 1980; Rating Delta: 0.723889636608", + "x": 180.1903815580286, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 14, 2001; Rating Delta: 0.0238896366084", + "x": 254.17488076311605, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: May 28, 2004; Rating Delta: 0.0238896366084", + "x": 262.7213831478537, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 14, 1995; Rating Delta: 0.623889636608", + "x": 233.26550079491255, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 15, 2005; Rating Delta: 0.223889636608", + "x": 266.66096979332275, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 28, 1954; Rating Delta: 2.12388963661", + "x": 89.09340222575517, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 10, 1995; Rating Delta: 0.123889636608", + "x": 230.60413354531002, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 25, 1983; Rating Delta: 0.723889636608", + "x": 188.93799682034975, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 06, 2010; Rating Delta: −0.176110363392", + "x": 284.2889507154213, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 23, 1984; Rating Delta: 0.0238896366084", + "x": 192.41017488076312, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(201, 110, 17)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 26, 1994; Rating Delta: −3.77611036339", + "x": 228.73410174880763, + "y": 254.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 04, 2009; Rating Delta: 1.02388963661", + "x": 281.9523052464229, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 28, 1985; Rating Delta: 0.823889636608", + "x": 196.81677265500795, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 05, 1992; Rating Delta: 0.623889636608", + "x": 220.98847376788552, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: May 03, 1996; Rating Delta: −1.57611036339", + "x": 234.61009538950717, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 10, 1995; Rating Delta: −0.276110363392", + "x": 231.48131955484897, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1960; Rating Delta: 0.923889636608", + "x": 111.4912559618442, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 29, 1994; Rating Delta: −0.276110363392", + "x": 227.5989666136725, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 03, 1977; Rating Delta: −0.276110363392", + "x": 170.16534181240064, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: May 23, 1973; Rating Delta: 1.02388963661", + "x": 154.6641494435612, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 04, 1982; Rating Delta: 1.12388963661", + "x": 186.1331478537361, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 167, 79)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 10, 1988; Rating Delta: −2.47611036339", + "x": 207.0997615262321, + "y": 205.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 08, 1988; Rating Delta: 0.0238896366084", + "x": 207.3668521462639, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 05, 1996; Rating Delta: 0.0238896366084", + "x": 235.2110492845787, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 1993; Rating Delta: 1.32388963661", + "x": 226.37837837837836, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 07, 1996; Rating Delta: −1.47611036339", + "x": 234.9439586645469, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 10, 1998; Rating Delta: 1.22388963661", + "x": 242.22217806041337, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 11, 1997; Rating Delta: −0.476110363392", + "x": 237.88195548489665, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1947; Rating Delta: 0.823889636608", + "x": 66.19077901430842, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 10, 1992; Rating Delta: 1.42388963661", + "x": 220.45429252782193, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 30, 1995; Rating Delta: 1.22388963661", + "x": 231.67209856915738, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 1986; Rating Delta: 1.92388963661", + "x": 201.95866454689983, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(209, 119, 24)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 01, 2000; Rating Delta: −3.57611036339", + "x": 250.5691573926868, + "y": 246.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 26, 1996; Rating Delta: −0.976110363392", + "x": 235.41136724960256, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 09, 2002; Rating Delta: −1.67611036339", + "x": 256.4447535771065, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 24, 1999; Rating Delta: −0.276110363392", + "x": 247.2972972972973, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: May 10, 1980; Rating Delta: −0.776110363392", + "x": 178.93124006359298, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 13, 1981; Rating Delta: −0.476110363392", + "x": 184.19713831478538, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 23, 1993; Rating Delta: −1.17611036339", + "x": 224.92806041335456, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 19, 1982; Rating Delta: −0.476110363392", + "x": 185.39904610492846, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 132, 35)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 28, 2005; Rating Delta: −3.27611036339", + "x": 265.05882352941177, + "y": 235.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 12, 1980; Rating Delta: −1.37611036339", + "x": 180.99205087440382, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 1990; Rating Delta: −0.276110363392", + "x": 215.62798092209857, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 12, 1987; Rating Delta: 1.52388963661", + "x": 203.62758346581876, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 25, 1987; Rating Delta: 1.82388963661", + "x": 204.629173290938, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 04, 1988; Rating Delta: −0.476110363392", + "x": 206.16534181240064, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(48, 121, 180)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 18, 1994; Rating Delta: 2.32388963661", + "x": 229.53577106518284, + "y": 25.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 15, 1979; Rating Delta: −1.57611036339", + "x": 175.78338632750396, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1991; Rating Delta: 0.123889636608", + "x": 219.43402225755167, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 23, 2005; Rating Delta: −0.576110363392", + "x": 267.3286963434022, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 23, 1990; Rating Delta: 0.423889636608", + "x": 213.3100158982512, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 02, 2007; Rating Delta: 0.323889636608", + "x": 272.06995230524643, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 20, 1981; Rating Delta: 0.123889636608", + "x": 181.9268680445151, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 10, 1986; Rating Delta: 0.0238896366084", + "x": 201.29054054054055, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 05, 1953; Rating Delta: 0.823889636608", + "x": 83.96184419713832, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 21, 1989; Rating Delta: 0.0238896366084", + "x": 210.10453100158983, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 01, 1970; Rating Delta: 1.82388963661", + "x": 142.85532591414943, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 02, 2006; Rating Delta: 0.123889636608", + "x": 269.7325119236884, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(33, 98, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 14, 1994; Rating Delta: 2.62388963661", + "x": 229.20151033386327, + "y": 14.104138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 15, 1969; Rating Delta: 0.223889636608", + "x": 142.11089030206676, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: May 25, 1979; Rating Delta: −1.67611036339", + "x": 175.58306836248013, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: May 12, 1995; Rating Delta: −0.276110363392", + "x": 231.20468998410178, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 19, 1982; Rating Delta: −0.176110363392", + "x": 187.7360890302067, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 10, 1995; Rating Delta: 0.0238896366084", + "x": 230.3370429252782, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 19, 1990; Rating Delta: 0.223889636608", + "x": 215.31279809220987, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 12, 1982; Rating Delta: 1.12388963661", + "x": 185.0651828298887, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 23, 1951; Rating Delta: −0.476110363392", + "x": 77.16057233704292, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 27, 2006; Rating Delta: 1.82388963661", + "x": 268.5310015898251, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 11, 1976; Rating Delta: 0.223889636608", + "x": 164.422893481717, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 08, 1996; Rating Delta: 0.323889636608", + "x": 236.41335453100157, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 12, 1968; Rating Delta: 1.82388963661", + "x": 137.43680445151034, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1939; Rating Delta: 2.12388963661", + "x": 38.31796502384738, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 14, 1991; Rating Delta: 0.423889636608", + "x": 217.5830683624801, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 07, 1995; Rating Delta: 0.523889636608", + "x": 230.870826709062, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 14, 1980; Rating Delta: 2.12388963661", + "x": 180.72496025437204, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 29, 1995; Rating Delta: 1.22388963661", + "x": 233.4085850556439, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 07, 1992; Rating Delta: −0.576110363392", + "x": 221.5894276629571, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 17, 1987; Rating Delta: 1.32388963661", + "x": 203.9614467408585, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 05, 1993; Rating Delta: −2.87611036339", + "x": 225.93004769475357, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 1994; Rating Delta: −1.57611036339", + "x": 229.85055643879176, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 30, 1987; Rating Delta: 1.22388963661", + "x": 202.35930047694754, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 21, 1992; Rating Delta: 0.223889636608", + "x": 219.9872813990461, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 23, 1992; Rating Delta: 2.12388963661", + "x": 222.32392686804454, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(43, 113, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 12, 1981; Rating Delta: 2.42388963661", + "x": 182.7277424483307, + "y": 21.604138627186675 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1947; Rating Delta: 1.52388963661", + "x": 66.19077901430842, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 04, 1981; Rating Delta: 1.12388963661", + "x": 184.39745627980923, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 11, 1999; Rating Delta: 1.42388963661", + "x": 245.4272655007949, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 28, 1985; Rating Delta: −1.87611036339", + "x": 196.81677265500795, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(194, 103, 13)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 06, 2004; Rating Delta: −3.97611036339", + "x": 261.65341812400635, + "y": 261.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 1989; Rating Delta: 1.22388963661", + "x": 212.422893481717, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 21, 1983; Rating Delta: 1.62388963661", + "x": 190.94077901430842, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 26, 1975; Rating Delta: 0.823889636608", + "x": 162.82949125596187, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: May 19, 1989; Rating Delta: −0.476110363392", + "x": 210.37162162162164, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 04, 1994; Rating Delta: 0.0238896366084", + "x": 226.79809220985692, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 185, 107)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 07, 2007; Rating Delta: −2.07611036339", + "x": 273.5480922098569, + "y": 190.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 176, 93)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 1976; Rating Delta: −2.27611036339", + "x": 166.85532591414943, + "y": 197.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 15, 1988; Rating Delta: −1.17611036339", + "x": 205.69793322734498, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 31, 2003; Rating Delta: −0.776110363392", + "x": 258.114467408585, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 03, 1994; Rating Delta: −0.376110363392", + "x": 227.93282988871223, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: May 22, 1985; Rating Delta: −0.476110363392", + "x": 196.46383147853734, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: May 25, 1988; Rating Delta: −1.37611036339", + "x": 206.94713831478535, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 01, 1996; Rating Delta: 0.223889636608", + "x": 236.34658187599365, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 16, 1988; Rating Delta: 1.72388963661", + "x": 208.90302066772657, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 11, 1994; Rating Delta: −0.176110363392", + "x": 228.88672496025438, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1980; Rating Delta: −0.376110363392", + "x": 181.17329093799682, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 16, 1953; Rating Delta: 0.423889636608", + "x": 86.08863275039747, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 07, 1996; Rating Delta: 0.923889636608", + "x": 234.9439586645469, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 05, 1993; Rating Delta: 1.62388963661", + "x": 225.93004769475357, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 04, 1980; Rating Delta: 1.52388963661", + "x": 179.45588235294116, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 02, 1984; Rating Delta: 0.423889636608", + "x": 192.20985691573927, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 11, 2009; Rating Delta: 1.22388963661", + "x": 282.0190779014309, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 172, 86)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 01, 1980; Rating Delta: −2.37611036339", + "x": 179.72297297297297, + "y": 201.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 29, 1995; Rating Delta: 0.223889636608", + "x": 233.4085850556439, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 16, 1985; Rating Delta: 0.823889636608", + "x": 197.28418124006362, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 26, 2008; Rating Delta: −0.376110363392", + "x": 277.8120031796502, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(56, 128, 184)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 13, 2005; Rating Delta: 2.22388963661", + "x": 266.6418918918919, + "y": 29.10413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 21, 1985; Rating Delta: 0.423889636608", + "x": 196.75, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 13, 1987; Rating Delta: 0.123889636608", + "x": 205.09697933227343, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 18, 1999; Rating Delta: −0.276110363392", + "x": 245.49403815580285, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 15, 2002; Rating Delta: 1.02388963661", + "x": 257.3799682034976, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 30, 1994; Rating Delta: −0.0761103633916", + "x": 229.06796502384736, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(43, 113, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 22, 1995; Rating Delta: 2.42388963661", + "x": 232.47337042925278, + "y": 21.604138627186675 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 07, 1998; Rating Delta: −0.376110363392", + "x": 242.48926868044515, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 28, 1996; Rating Delta: 1.62388963661", + "x": 236.0218600953895, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 29, 1996; Rating Delta: −1.07611036339", + "x": 234.27662957074722, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 1995; Rating Delta: −0.276110363392", + "x": 233.27503974562796, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 06, 1985; Rating Delta: −0.0761103633916", + "x": 198.06677265500795, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 12, 1988; Rating Delta: −0.976110363392", + "x": 205.9650238473768, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 09, 1983; Rating Delta: 1.92388963661", + "x": 191.4085850556439, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(33, 98, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 1993; Rating Delta: 2.62388963661", + "x": 226.31160572337043, + "y": 14.104138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 18, 1951; Rating Delta: 1.82388963661", + "x": 79.13473767885532, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 31, 1997; Rating Delta: −1.57611036339", + "x": 237.21462639109697, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 22, 2004; Rating Delta: 0.623889636608", + "x": 264.1236089030207, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 07, 1960; Rating Delta: 1.72388963661", + "x": 110.68004769475358, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 22, 1997; Rating Delta: 0.623889636608", + "x": 239.15063593004768, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 09, 1962; Rating Delta: −0.576110363392", + "x": 115.62162162162163, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 08, 1986; Rating Delta: −0.0761103633916", + "x": 200.689586645469, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 28, 1994; Rating Delta: 0.423889636608", + "x": 229.33505564387917, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 01, 1994; Rating Delta: −0.676110363392", + "x": 228.19992050874404, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 24, 1951; Rating Delta: 0.623889636608", + "x": 79.19197138314784, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 29, 1993; Rating Delta: 1.12388963661", + "x": 226.44515103338634, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(205, 115, 21)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 29, 1986; Rating Delta: −3.67611036339", + "x": 200.88990461049283, + "y": 250.35413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1967; Rating Delta: −0.976110363392", + "x": 135.87281399046105, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 17, 1984; Rating Delta: −1.97611036339", + "x": 193.81200317965022, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 1996; Rating Delta: 1.32388963661", + "x": 236.5468998410175, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(56, 128, 184)", + "ariaRoleDescription": "point", + "description": "Release Date: May 23, 1980; Rating Delta: 2.22388963661", + "x": 179.05524642289348, + "y": 29.10413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 01, 1991; Rating Delta: 0.123889636608", + "x": 216.5818759936407, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(239, 163, 72)", + "ariaRoleDescription": "point", + "description": "Release Date: May 15, 1987; Rating Delta: −2.57611036339", + "x": 203.36049284578698, + "y": 209.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 22, 1995; Rating Delta: −2.17611036339", + "x": 232.47337042925278, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(19, 75, 133)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 23, 1994; Rating Delta: 2.92388963661", + "x": 229.0011923688394, + "y": 2.8541386271866753 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 11, 1985; Rating Delta: −0.376110363392", + "x": 197.8183624801272, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 06, 1996; Rating Delta: 0.0238896366084", + "x": 236.39427662957075, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(43, 113, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 14, 1991; Rating Delta: 2.42388963661", + "x": 216.43879173290935, + "y": 21.604138627186675 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 26, 1996; Rating Delta: −1.07611036339", + "x": 235.1251987281399, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 25, 1996; Rating Delta: −0.976110363392", + "x": 236.27941176470588, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 20, 1996; Rating Delta: 1.72388963661", + "x": 236.52782193958663, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 01, 1991; Rating Delta: 0.623889636608", + "x": 218.04093799682036, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 29, 1959; Rating Delta: 2.02388963661", + "x": 105.3577106518283, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 13, 1995; Rating Delta: −1.67611036339", + "x": 232.6736883942766, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 23, 2004; Rating Delta: 0.823889636608", + "x": 262.387519872814, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 1973; Rating Delta: 1.02388963661", + "x": 156.64864864864865, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 18, 1996; Rating Delta: 1.02388963661", + "x": 236.21263910969793, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 10, 2003; Rating Delta: −0.276110363392", + "x": 257.9141494435612, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 01, 1959; Rating Delta: −0.276110363392", + "x": 104.52782193958666, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 2003; Rating Delta: 0.423889636608", + "x": 260.45111287758345, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(43, 113, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 16, 1995; Rating Delta: 2.42388963661", + "x": 232.1204292527822, + "y": 21.604138627186675 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 10, 1985; Rating Delta: 0.723889636608", + "x": 196.931240063593, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 23, 1986; Rating Delta: 1.22388963661", + "x": 199.66931637519872, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 04, 2005; Rating Delta: −0.376110363392", + "x": 267.72972972972974, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 07, 2006; Rating Delta: 1.72388963661", + "x": 269.1983306836248, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 167, 79)", + "ariaRoleDescription": "point", + "description": "Release Date: May 28, 1993; Rating Delta: −2.47611036339", + "x": 224.3938791732909, + "y": 205.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 1980; Rating Delta: 0.723889636608", + "x": 180.32392686804454, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 26, 1998; Rating Delta: 0.623889636608", + "x": 242.08863275039744, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 13, 1994; Rating Delta: 0.123889636608", + "x": 227.44634340222575, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 17, 2006; Rating Delta: 1.32388963661", + "x": 268.99841017488075, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 25, 1976; Rating Delta: 0.123889636608", + "x": 165.43362480127186, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 11, 1994; Rating Delta: −0.176110363392", + "x": 229.4689984101749, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 01, 2002; Rating Delta: −0.576110363392", + "x": 254.64228934817172, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 11, 1995; Rating Delta: 1.42388963661", + "x": 233.23688394276627, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 10, 1952; Rating Delta: 2.12388963661", + "x": 81.0906200317965, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 07, 2005; Rating Delta: −1.47611036339", + "x": 264.85850556438794, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 01, 1965; Rating Delta: 0.0238896366084", + "x": 126.29570747217805, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 23, 1996; Rating Delta: −0.276110363392", + "x": 235.67845786963434, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1990; Rating Delta: −0.676110363392", + "x": 216.0095389507154, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 24, 1987; Rating Delta: 0.623889636608", + "x": 203.74205087440382, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(205, 115, 21)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 10, 1994; Rating Delta: −3.67611036339", + "x": 227.9996025437202, + "y": 250.35413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 07, 1995; Rating Delta: −0.676110363392", + "x": 231.73887122416536, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 11, 1981; Rating Delta: −1.37611036339", + "x": 181.5739268680445, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 27, 1990; Rating Delta: −1.47611036339", + "x": 213.64348171701113, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1944; Rating Delta: 1.42388963661", + "x": 55.74523052464229, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 09, 1984; Rating Delta: −0.0761103633916", + "x": 192.27662957074722, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 24, 1987; Rating Delta: −2.87611036339", + "x": 204.02821939586644, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 19, 1981; Rating Delta: 0.423889636608", + "x": 182.79451510333863, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 17, 1983; Rating Delta: −1.57611036339", + "x": 189.73887122416534, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 19, 1999; Rating Delta: −0.776110363392", + "x": 244.62639109697935, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 1978; Rating Delta: −1.37611036339", + "x": 174.0476947535771, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 07, 1994; Rating Delta: −1.37611036339", + "x": 229.13473767885534, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 24, 1977; Rating Delta: 0.523889636608", + "x": 168.90580286168523, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 12, 2006; Rating Delta: 0.423889636608", + "x": 269.2460254372019, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 28, 1997; Rating Delta: −0.176110363392", + "x": 237.48171701112878, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 06, 1995; Rating Delta: −0.376110363392", + "x": 232.6069157392687, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 07, 1979; Rating Delta: −0.0761103633916", + "x": 177.4531001589825, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 01, 1984; Rating Delta: 0.223889636608", + "x": 193.0775039745628, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 26, 1986; Rating Delta: 1.02388963661", + "x": 201.73926868044515, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 08, 1986; Rating Delta: 1.92388963661", + "x": 200.689586645469, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: May 17, 1991; Rating Delta: −1.67611036339", + "x": 217.31597774244833, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 25, 1969; Rating Delta: −1.97611036339", + "x": 141.32869634340224, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 145, 45)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 23, 1994; Rating Delta: −2.97611036339", + "x": 229.86963434022258, + "y": 224.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 04, 1982; Rating Delta: 1.52388963661", + "x": 186.1331478537361, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1973; Rating Delta: 2.12388963661", + "x": 156.724960254372, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 26, 1996; Rating Delta: 0.723889636608", + "x": 235.41136724960256, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 09, 1989; Rating Delta: −1.27611036339", + "x": 210.5719395866455, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 06, 1991; Rating Delta: 0.923889636608", + "x": 219.25278219395864, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 18, 1994; Rating Delta: 0.223889636608", + "x": 229.53577106518284, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 26, 1981; Rating Delta: 0.523889636608", + "x": 182.86128775834658, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 172, 86)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 28, 1996; Rating Delta: −2.37611036339", + "x": 235.14427662957075, + "y": 201.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 06, 2004; Rating Delta: 0.723889636608", + "x": 263.38910969793324, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 145, 45)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 2007; Rating Delta: −2.97611036339", + "x": 275.23688394276627, + "y": 224.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 03, 1951; Rating Delta: 2.02388963661", + "x": 78.40023847376789, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 25, 1994; Rating Delta: −0.976110363392", + "x": 226.99841017488075, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 27, 1999; Rating Delta: −0.176110363392", + "x": 246.16176470588235, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(38, 106, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 19, 1956; Rating Delta: 2.52388963661", + "x": 97.15421303656598, + "y": 17.85413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1968; Rating Delta: 0.723889636608", + "x": 139.36406995230524, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1948; Rating Delta: 0.823889636608", + "x": 69.68203497615262, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 13, 1977; Rating Delta: 0.823889636608", + "x": 169.0870429252782, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1998; Rating Delta: −1.07611036339", + "x": 243.82511923688395, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 18, 1996; Rating Delta: −0.0761103633916", + "x": 236.21263910969793, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 10, 1997; Rating Delta: 1.52388963661", + "x": 239.61804451510335, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1948; Rating Delta: 1.02388963661", + "x": 69.68203497615262, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 22, 2002; Rating Delta: −1.27611036339", + "x": 254.84260731319554, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: May 24, 1996; Rating Delta: −1.57611036339", + "x": 234.810413354531, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 18, 2009; Rating Delta: 0.623889636608", + "x": 282.0858505564388, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 12, 1999; Rating Delta: 0.623889636608", + "x": 244.2925278219396, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 17, 1993; Rating Delta: 0.823889636608", + "x": 225.46224165341815, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 01, 1988; Rating Delta: 0.723889636608", + "x": 208.75993640699522, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 18, 1974; Rating Delta: −0.176110363392", + "x": 159.55763116057233, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 22, 1986; Rating Delta: −1.17611036339", + "x": 200.82313195548488, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 16, 1994; Rating Delta: −0.776110363392", + "x": 228.9344197138315, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 16, 1996; Rating Delta: −0.176110363392", + "x": 235.61168521462636, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 16, 1966; Rating Delta: 0.323889636608", + "x": 130.7881558028617, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 27, 1995; Rating Delta: 0.523889636608", + "x": 232.5210651828299, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1979; Rating Delta: −0.776110363392", + "x": 177.68203497615264, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(212, 123, 28)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 20, 1987; Rating Delta: −3.47611036339", + "x": 205.1637519872814, + "y": 242.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 16, 1996; Rating Delta: −0.676110363392", + "x": 235.61168521462636, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 07, 2007; Rating Delta: −0.976110363392", + "x": 275.0079491255962, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 16, 1995; Rating Delta: −0.476110363392", + "x": 231.5385532591415, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 02, 1994; Rating Delta: 0.0238896366084", + "x": 228.80087440381556, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 01, 1995; Rating Delta: −1.57611036339", + "x": 230.51828298887122, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: May 16, 1986; Rating Delta: 0.223889636608", + "x": 199.8883147853736, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 29, 1965; Rating Delta: 0.723889636608", + "x": 128.89030206677265, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 2009; Rating Delta: −2.87611036339", + "x": 282.20985691573924, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: May 03, 1996; Rating Delta: −0.376110363392", + "x": 234.61009538950717, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1933; Rating Delta: 2.02388963661", + "x": 17.4181240063593, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 28, 1995; Rating Delta: −0.676110363392", + "x": 231.93918918918916, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 19, 2000; Rating Delta: −0.176110363392", + "x": 248.41295707472176, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 11, 2003; Rating Delta: −1.87611036339", + "x": 259.6498410174881, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 04, 1988; Rating Delta: 0.723889636608", + "x": 208.50238473767885, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: May 24, 1995; Rating Delta: −0.476110363392", + "x": 231.3191573926868, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 06, 1981; Rating Delta: 0.623889636608", + "x": 184.13036565977742, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1993; Rating Delta: 1.42388963661", + "x": 226.40699523052464, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 25, 2002; Rating Delta: −1.27611036339", + "x": 257.17925278219394, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 22, 1991; Rating Delta: −0.976110363392", + "x": 216.78219395866455, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 19, 1993; Rating Delta: −1.97611036339", + "x": 223.72655007949126, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 1989; Rating Delta: −0.476110363392", + "x": 212.44197138314783, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 30, 1990; Rating Delta: 0.123889636608", + "x": 213.37678855325913, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 1969; Rating Delta: −0.0761103633916", + "x": 142.73131955484897, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 09, 1981; Rating Delta: 0.223889636608", + "x": 184.44515103338634, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 19, 1996; Rating Delta: 1.92388963661", + "x": 235.34459459459458, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 07, 1965; Rating Delta: 1.52388963661", + "x": 126.05723370429251, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 22, 1989; Rating Delta: −1.57611036339", + "x": 209.818759936407, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 21, 1999; Rating Delta: 0.623889636608", + "x": 245.22694753577105, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 15, 1994; Rating Delta: 0.923889636608", + "x": 228.33346581875995, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(56, 128, 184)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 02, 1991; Rating Delta: 2.22388963661", + "x": 217.75476947535773, + "y": 29.10413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 07, 2005; Rating Delta: 1.12388963661", + "x": 264.85850556438794, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 26, 1984; Rating Delta: 1.82388963661", + "x": 194.47972972972974, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 19, 1990; Rating Delta: 0.923889636608", + "x": 212.70906200317964, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 10, 1993; Rating Delta: 1.62388963661", + "x": 225.39546899841017, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(216, 128, 31)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 09, 1982; Rating Delta: −3.37611036339", + "x": 186.46701112877582, + "y": 239.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1955; Rating Delta: 0.423889636608", + "x": 94.06359300476947, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 14, 2000; Rating Delta: −0.776110363392", + "x": 247.49761526232115, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 145, 45)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 11, 2000; Rating Delta: −2.97611036339", + "x": 247.76470588235296, + "y": 224.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 01, 1995; Rating Delta: 0.323889636608", + "x": 233.1414944356121, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 24, 1996; Rating Delta: 0.823889636608", + "x": 235.3922893481717, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 01, 1990; Rating Delta: 1.12388963661", + "x": 213.9773449920509, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 18, 2003; Rating Delta: −1.07611036339", + "x": 259.716613672496, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 1982; Rating Delta: 1.12388963661", + "x": 188.00317965023848, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 04, 1996; Rating Delta: 0.423889636608", + "x": 236.07909379968203, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 1955; Rating Delta: 0.923889636608", + "x": 93.21422893481717, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: May 10, 1996; Rating Delta: −0.276110363392", + "x": 234.67686804451512, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(48, 121, 180)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 08, 1976; Rating Delta: 2.32388963661", + "x": 164.11764705882354, + "y": 25.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 13, 2003; Rating Delta: −0.276110363392", + "x": 259.3827503974563, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 1995; Rating Delta: 1.92388963661", + "x": 233.0556438791733, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 24, 1983; Rating Delta: 0.0238896366084", + "x": 189.8056438791733, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 23, 1996; Rating Delta: −0.576110363392", + "x": 233.9427662957075, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 21, 1989; Rating Delta: 0.323889636608", + "x": 210.97257551669315, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 13, 1997; Rating Delta: 0.723889636608", + "x": 238.4829093799682, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 14, 1995; Rating Delta: −1.17611036339", + "x": 231.8056438791733, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 03, 1987; Rating Delta: 1.72388963661", + "x": 203.54173290937996, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 31, 1981; Rating Delta: −1.37611036339", + "x": 183.19515103338634, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 12, 2004; Rating Delta: 1.02388963661", + "x": 264.3243243243243, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 04, 1983; Rating Delta: 1.02388963661", + "x": 188.47058823529414, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 12, 1996; Rating Delta: 0.423889636608", + "x": 235.27782193958663, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1944; Rating Delta: 1.02388963661", + "x": 55.74523052464229, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 27, 1995; Rating Delta: −1.97611036339", + "x": 232.80723370429254, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 08, 1982; Rating Delta: 1.42388963661", + "x": 187.91732909379968, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 04, 1995; Rating Delta: −0.976110363392", + "x": 232.00596184419715, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 02, 2001; Rating Delta: 0.423889636608", + "x": 253.77424483306837, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: May 24, 1985; Rating Delta: −0.176110363392", + "x": 196.48290937996822, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 21, 2005; Rating Delta: −0.676110363392", + "x": 267.595786963434, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 26, 1999; Rating Delta: 0.123889636608", + "x": 244.6931637519873, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 24, 2004; Rating Delta: −0.276110363392", + "x": 264.43879173290935, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 2003; Rating Delta: −1.17611036339", + "x": 260.45111287758345, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 31, 1997; Rating Delta: 1.12388963661", + "x": 237.21462639109697, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 22, 1988; Rating Delta: 1.32388963661", + "x": 207.21422893481716, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 02, 1996; Rating Delta: 0.123889636608", + "x": 233.74244833068363, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1993; Rating Delta: 1.52388963661", + "x": 226.40699523052464, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1986; Rating Delta: −1.07611036339", + "x": 202.07313195548488, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 24, 1978; Rating Delta: −1.77611036339", + "x": 173.55127186009537, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 17, 1996; Rating Delta: 0.223889636608", + "x": 235.32551669316376, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 18, 1969; Rating Delta: 1.92388963661", + "x": 140.97575516693163, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 11, 1987; Rating Delta: 1.02388963661", + "x": 205.36406995230524, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 23, 1956; Rating Delta: 1.22388963661", + "x": 97.4785373608903, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 1989; Rating Delta: −0.676110363392", + "x": 212.3751987281399, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 17, 1994; Rating Delta: −0.276110363392", + "x": 228.06637519872817, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 176, 93)", + "ariaRoleDescription": "point", + "description": "Release Date: May 02, 1997; Rating Delta: −2.27611036339", + "x": 238.0822734499205, + "y": 197.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 03, 1983; Rating Delta: 0.123889636608", + "x": 189.60532591414943, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 10, 1991; Rating Delta: −0.376110363392", + "x": 216.10492845786962, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1955; Rating Delta: 0.523889636608", + "x": 94.06359300476947, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 24, 1993; Rating Delta: −1.37611036339", + "x": 225.52901430842607, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 27, 2002; Rating Delta: 0.223889636608", + "x": 256.91216216216213, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 18, 1961; Rating Delta: 1.42388963661", + "x": 114.266693163752, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: May 10, 1996; Rating Delta: 1.02388963661", + "x": 234.67686804451512, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 08, 1985; Rating Delta: 1.32388963661", + "x": 195.48171701112875, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 28, 1995; Rating Delta: −0.576110363392", + "x": 231.93918918918916, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 30, 1971; Rating Delta: 1.52388963661", + "x": 148.05365659777425, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 14, 1992; Rating Delta: 0.623889636608", + "x": 219.92050874403816, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 24, 1994; Rating Delta: 0.123889636608", + "x": 228.1331478537361, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 15, 1996; Rating Delta: 0.0238896366084", + "x": 234.1430842607313, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 01, 1960; Rating Delta: 0.523889636608", + "x": 108.00953895071542, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 26, 1973; Rating Delta: 1.82388963661", + "x": 156.73449920508745, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 27, 1996; Rating Delta: −0.376110363392", + "x": 236.01232114467408, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1937; Rating Delta: 1.72388963661", + "x": 31.354531001589823, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 12, 1996; Rating Delta: −0.576110363392", + "x": 233.54213036565977, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 12, 1988; Rating Delta: 0.323889636608", + "x": 207.70071542130367, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 1974; Rating Delta: 1.72388963661", + "x": 160.11128775834658, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 18, 1983; Rating Delta: −0.0761103633916", + "x": 191.20826709062004, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 13, 1967; Rating Delta: 0.723889636608", + "x": 133.95508744038156, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 19, 2002; Rating Delta: 1.02388963661", + "x": 256.24443561208267, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 04, 1985; Rating Delta: 0.223889636608", + "x": 198.33386327503973, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 2000; Rating Delta: −1.87611036339", + "x": 250.48330683624803, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 31, 1999; Rating Delta: 0.623889636608", + "x": 244.7408585055644, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 07, 2008; Rating Delta: −0.476110363392", + "x": 275.8759936406995, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 18, 2006; Rating Delta: 0.0238896366084", + "x": 270.4670111287758, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 12, 2005; Rating Delta: 1.02388963661", + "x": 266.9280604133545, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 18, 2008; Rating Delta: 1.12388963661", + "x": 275.40858505564387, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 27, 2009; Rating Delta: −0.876110363392", + "x": 279.5480922098569, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: May 24, 2002; Rating Delta: 0.823889636608", + "x": 255.71025437201905, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 23, 2004; Rating Delta: −0.176110363392", + "x": 262.387519872814, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 26, 2001; Rating Delta: −1.17611036339", + "x": 253.7070747217806, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 22, 2007; Rating Delta: 0.623889636608", + "x": 273.4050079491256, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 09, 2001; Rating Delta: −0.176110363392", + "x": 251.5039745627981, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 03, 2006; Rating Delta: 0.423889636608", + "x": 268.86486486486484, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 24, 1999; Rating Delta: −0.576110363392", + "x": 246.42885532591416, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 24, 2004; Rating Delta: −1.57611036339", + "x": 263.8565182829889, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 13, 2009; Rating Delta: −0.0761103633916", + "x": 281.75198728139907, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 05, 2005; Rating Delta: 1.22388963661", + "x": 266.8612877583466, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 26, 1999; Rating Delta: −1.37611036339", + "x": 244.4260731319555, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 21, 2008; Rating Delta: 0.423889636608", + "x": 276.0091414944356, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 2003; Rating Delta: 1.62388963661", + "x": 260.9189189189189, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 2002; Rating Delta: 1.62388963661", + "x": 257.70429252782196, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 14, 2000; Rating Delta: −0.476110363392", + "x": 248.36526232114466, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 27, 2003; Rating Delta: 1.32388963661", + "x": 259.5162957074722, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: May 11, 2007; Rating Delta: 0.823889636608", + "x": 273.0043720190779, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 25, 2004; Rating Delta: −0.276110363392", + "x": 262.9884737678855, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 26, 2010; Rating Delta: −0.576110363392", + "x": 282.7535771065183, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 13, 2009; Rating Delta: 1.02388963661", + "x": 279.147853736089, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 19, 2003; Rating Delta: 1.22388963661", + "x": 260.31756756756755, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 07, 2001; Rating Delta: −0.676110363392", + "x": 253.23966613672496, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 2002; Rating Delta: −0.476110363392", + "x": 257.7138314785374, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 09, 2007; Rating Delta: 1.52388963661", + "x": 272.40381558028616, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 19, 2007; Rating Delta: 0.323889636608", + "x": 274.54014308426076, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 01, 1999; Rating Delta: 1.02388963661", + "x": 246.49562798092208, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 23, 2001; Rating Delta: −0.676110363392", + "x": 251.37042925278217, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(216, 128, 31)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 01, 2000; Rating Delta: −3.37611036339", + "x": 247.94594594594594, + "y": 239.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 02, 2007; Rating Delta: 1.62388963661", + "x": 274.09181240063594, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 01, 2002; Rating Delta: −0.876110363392", + "x": 254.9093799682035, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 19, 2005; Rating Delta: 1.22388963661", + "x": 266.9948330683625, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 12, 2005; Rating Delta: 0.523889636608", + "x": 266.9280604133545, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 26, 2008; Rating Delta: −0.576110363392", + "x": 278.39427662957075, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 20, 2002; Rating Delta: 0.0238896366084", + "x": 256.8453895071542, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 06, 2009; Rating Delta: −0.276110363392", + "x": 281.6852146263911, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 13, 2004; Rating Delta: 0.523889636608", + "x": 261.72019077901433, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 18, 1998; Rating Delta: 0.123889636608", + "x": 242.88990461049283, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 17, 2000; Rating Delta: −0.476110363392", + "x": 250.4356120826709, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 2008; Rating Delta: 1.32388963661", + "x": 278.61367249602546, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 18, 2008; Rating Delta: −0.376110363392", + "x": 276.2762321144674, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 17, 2006; Rating Delta: 1.02388963661", + "x": 268.731319554849, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 17, 2002; Rating Delta: −0.876110363392", + "x": 256.22535771065185, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 08, 2002; Rating Delta: 0.423889636608", + "x": 257.31319554848966, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 20, 2002; Rating Delta: 0.723889636608", + "x": 256.8453895071542, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 09, 2009; Rating Delta: 1.52388963661", + "x": 281.1315580286169, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 09, 2004; Rating Delta: −1.17611036339", + "x": 262.2539745627981, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 18, 2000; Rating Delta: 0.323889636608", + "x": 247.8314785373609, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: May 17, 2002; Rating Delta: 1.12388963661", + "x": 255.64348171701113, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 20, 1998; Rating Delta: 1.02388963661", + "x": 243.4912559618442, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 18, 2002; Rating Delta: −1.47611036339", + "x": 257.112480127186, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 14, 1997; Rating Delta: 0.223889636608", + "x": 237.34817170111288, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: May 08, 2009; Rating Delta: 0.0238896366084", + "x": 279.9487281399046, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 06, 2002; Rating Delta: 1.62388963661", + "x": 257.58028616852147, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 19, 2003; Rating Delta: 0.123889636608", + "x": 260.31756756756755, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 2002; Rating Delta: 1.02388963661", + "x": 257.70429252782196, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 02, 2005; Rating Delta: 1.82388963661", + "x": 267.99682034976155, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 12, 2004; Rating Delta: −0.0761103633916", + "x": 264.3243243243243, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 10, 2006; Rating Delta: 0.523889636608", + "x": 271.26868044515106, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: May 28, 2010; Rating Delta: 1.02388963661", + "x": 283.6212241653418, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 01, 1997; Rating Delta: −1.67611036339", + "x": 238.95031796502383, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 25, 1997; Rating Delta: 0.0238896366084", + "x": 238.8835453100159, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 28, 2006; Rating Delta: 1.32388963661", + "x": 269.39864864864865, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 22, 2006; Rating Delta: −0.276110363392", + "x": 270.80087440381556, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 09, 2004; Rating Delta: −0.376110363392", + "x": 262.2539745627981, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 08, 2002; Rating Delta: −0.976110363392", + "x": 254.97615262321145, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 17, 1997; Rating Delta: −0.376110363392", + "x": 237.0810810810811, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 27, 2002; Rating Delta: −0.476110363392", + "x": 256.91216216216213, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 176, 93)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2004; Rating Delta: −2.27611036339", + "x": 264.73449920508745, + "y": 197.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 05, 2010; Rating Delta: 0.423889636608", + "x": 282.82034976152624, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 05, 2004; Rating Delta: −0.176110363392", + "x": 264.2575516693164, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 15, 2005; Rating Delta: 1.02388963661", + "x": 265.7929252782194, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2001; Rating Delta: 0.323889636608", + "x": 254.2798092209857, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 26, 1997; Rating Delta: −0.0761103633916", + "x": 240.06677265500795, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(56, 128, 184)", + "ariaRoleDescription": "point", + "description": "Release Date: May 25, 1979; Rating Delta: 2.22388963661", + "x": 175.58306836248013, + "y": 29.10413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 22, 2005; Rating Delta: 0.123889636608", + "x": 265.8596979332273, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2000; Rating Delta: −0.576110363392", + "x": 250.79809220985692, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 15, 2000; Rating Delta: 1.72388963661", + "x": 249.83426073131955, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 22, 2007; Rating Delta: −0.776110363392", + "x": 273.4050079491256, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: May 23, 2003; Rating Delta: 0.323889636608", + "x": 259.18243243243245, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(194, 103, 13)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 28, 2005; Rating Delta: −3.97611036339", + "x": 265.05882352941177, + "y": 261.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 17, 2010; Rating Delta: −0.0761103633916", + "x": 284.689586645469, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 06, 2001; Rating Delta: −0.176110363392", + "x": 251.77066772655007, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 14, 2002; Rating Delta: 0.623889636608", + "x": 255.9105723370429, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 2007; Rating Delta: −0.376110363392", + "x": 275.23688394276627, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 14, 2007; Rating Delta: −0.776110363392", + "x": 275.07472178060414, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 20, 2003; Rating Delta: −0.876110363392", + "x": 259.44952305246426, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 24, 2004; Rating Delta: −0.876110363392", + "x": 264.43879173290935, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(48, 121, 180)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 15, 1999; Rating Delta: 2.32388963661", + "x": 246.34300476947536, + "y": 25.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 2008; Rating Delta: −1.77611036339", + "x": 277.8787758346582, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 21, 2006; Rating Delta: −0.576110363392", + "x": 269.3318759936407, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 23, 2009; Rating Delta: −0.576110363392", + "x": 281.55127186009537, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(56, 128, 184)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 02, 2001; Rating Delta: 2.22388963661", + "x": 253.77424483306837, + "y": 29.10413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(48, 121, 180)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 30, 1998; Rating Delta: 2.32388963661", + "x": 243.29093799682033, + "y": 25.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 02, 2007; Rating Delta: 1.62388963661", + "x": 274.6736883942766, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: May 05, 2006; Rating Delta: −1.37611036339", + "x": 269.46542130365657, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 12, 1997; Rating Delta: 0.823889636608", + "x": 240.2193958664547, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 11, 2000; Rating Delta: 0.923889636608", + "x": 249.5003974562798, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 30, 2001; Rating Delta: 1.82388963661", + "x": 251.70429252782196, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 10, 2001; Rating Delta: −0.0761103633916", + "x": 252.97257551669315, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 01, 2003; Rating Delta: −0.176110363392", + "x": 259.8501589825119, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 09, 1999; Rating Delta: 0.623889636608", + "x": 245.6943561208267, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 14, 2000; Rating Delta: 1.12388963661", + "x": 248.36526232114466, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 15, 2003; Rating Delta: 1.32388963661", + "x": 259.9837042925278, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 20, 2001; Rating Delta: −0.576110363392", + "x": 252.7722575516693, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 15, 2005; Rating Delta: −0.476110363392", + "x": 265.7929252782194, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 27, 2004; Rating Delta: −1.97611036339", + "x": 263.58942766295706, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 185, 107)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 11, 1997; Rating Delta: −2.07611036339", + "x": 237.88195548489665, + "y": 190.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 14, 1997; Rating Delta: 0.323889636608", + "x": 239.9523052464229, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 09, 2004; Rating Delta: 0.723889636608", + "x": 263.1220190779014, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 15, 2009; Rating Delta: 0.423889636608", + "x": 280.01550079491255, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 24, 1999; Rating Delta: 0.723889636608", + "x": 247.2972972972973, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: May 18, 2001; Rating Delta: −0.776110363392", + "x": 252.1713036565978, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 11, 2003; Rating Delta: −0.176110363392", + "x": 258.78179650238474, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 02, 1998; Rating Delta: −0.576110363392", + "x": 243.02344992050874, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 01, 2001; Rating Delta: −1.67611036339", + "x": 252.30484896661366, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 1999; Rating Delta: 0.223889636608", + "x": 247.23052464228937, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 06, 2002; Rating Delta: −0.676110363392", + "x": 257.58028616852147, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 05, 1999; Rating Delta: 0.323889636608", + "x": 244.49284578696344, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 28, 2006; Rating Delta: −0.0761103633916", + "x": 270.266693163752, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 12, 2001; Rating Delta: −0.276110363392", + "x": 250.9697933227345, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 20, 2006; Rating Delta: 0.123889636608", + "x": 271.06796502384736, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 02, 1998; Rating Delta: 0.523889636608", + "x": 243.02344992050874, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 12, 1999; Rating Delta: −0.376110363392", + "x": 246.89666136724958, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 19, 2008; Rating Delta: 0.523889636608", + "x": 277.7452305246423, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 08, 2006; Rating Delta: 1.62388963661", + "x": 271.5357710651828, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 17, 2003; Rating Delta: 0.923889636608", + "x": 260.58465818759936, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 1997; Rating Delta: 0.823889636608", + "x": 240.2670906200318, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 03, 2006; Rating Delta: −1.67611036339", + "x": 268.86486486486484, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 15, 2002; Rating Delta: 0.323889636608", + "x": 257.3799682034976, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 185, 107)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 21, 2005; Rating Delta: −2.07611036339", + "x": 264.99205087440384, + "y": 190.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 09, 1999; Rating Delta: 0.923889636608", + "x": 245.6943561208267, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 01, 1998; Rating Delta: −0.176110363392", + "x": 242.13632750397457, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 28, 2002; Rating Delta: −0.976110363392", + "x": 256.04411764705884, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 20, 2004; Rating Delta: −1.07611036339", + "x": 261.78696343402225, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 07, 2004; Rating Delta: −0.0761103633916", + "x": 263.10294117647055, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 2006; Rating Delta: −0.376110363392", + "x": 271.6025437201908, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 29, 2001; Rating Delta: 0.623889636608", + "x": 252.57193958664544, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 25, 2000; Rating Delta: −0.776110363392", + "x": 249.6339427662957, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 23, 2009; Rating Delta: 0.123889636608", + "x": 281.55127186009537, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 02, 2009; Rating Delta: 0.923889636608", + "x": 281.35095389507154, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 23, 2007; Rating Delta: 0.123889636608", + "x": 272.27027027027026, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 24, 1997; Rating Delta: 1.52388963661", + "x": 240.33386327503976, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 11, 2009; Rating Delta: 1.32388963661", + "x": 282.0190779014309, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 11, 1998; Rating Delta: 1.32388963661", + "x": 243.69157392686805, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 19, 2005; Rating Delta: 1.12388963661", + "x": 264.97297297297297, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 27, 1999; Rating Delta: −1.37611036339", + "x": 246.16176470588235, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 11, 2010; Rating Delta: 0.923889636608", + "x": 283.7547694753577, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 15, 1999; Rating Delta: −0.676110363392", + "x": 244.02543720190778, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 31, 2006; Rating Delta: −1.57611036339", + "x": 269.13195548489665, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 08, 2001; Rating Delta: 0.123889636608", + "x": 252.37162162162164, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 28, 2001; Rating Delta: 0.523889636608", + "x": 253.43998410174882, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 11, 2000; Rating Delta: −1.47611036339", + "x": 249.5003974562798, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 07, 2007; Rating Delta: 1.62388963661", + "x": 275.0079491255962, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 11, 2002; Rating Delta: 0.423889636608", + "x": 257.0457074721781, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 17, 2007; Rating Delta: 1.22388963661", + "x": 274.81717011128774, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 14, 2007; Rating Delta: 1.22388963661", + "x": 274.206279809221, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 10, 1999; Rating Delta: 0.323889636608", + "x": 245.4177265500795, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 25, 2002; Rating Delta: −0.0761103633916", + "x": 256.30166931637524, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: May 02, 1997; Rating Delta: 0.823889636608", + "x": 238.0822734499205, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 26, 2008; Rating Delta: 0.523889636608", + "x": 278.39427662957075, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 18, 2002; Rating Delta: 0.323889636608", + "x": 257.112480127186, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 18, 2009; Rating Delta: 2.02388963661", + "x": 282.0858505564388, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 14, 1998; Rating Delta: −2.87611036339", + "x": 242.5560413354531, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 2004; Rating Delta: 1.32388963661", + "x": 264.65818759936406, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 13, 2004; Rating Delta: −0.876110363392", + "x": 263.45588235294116, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 16, 2004; Rating Delta: −0.676110363392", + "x": 262.9026232114467, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 30, 2007; Rating Delta: 0.223889636608", + "x": 274.94117647058823, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 06, 2008; Rating Delta: 0.523889636608", + "x": 276.74364069952304, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 05, 2009; Rating Delta: 1.02388963661", + "x": 280.2158187599364, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 28, 2001; Rating Delta: −0.176110363392", + "x": 253.43998410174882, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 25, 1998; Rating Delta: −0.176110363392", + "x": 243.5389507154213, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 27, 2006; Rating Delta: 1.32388963661", + "x": 271.13473767885534, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 29, 2008; Rating Delta: −0.976110363392", + "x": 277.54491255961847, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 176, 93)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 09, 2004; Rating Delta: −2.27611036339", + "x": 261.38632750397454, + "y": 197.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(153, 74, 7)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 27, 2004; Rating Delta: −4.87611036339", + "x": 263.58942766295706, + "y": 295.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(189, 99, 12)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 12, 1999; Rating Delta: −4.07611036339", + "x": 244.55961844197137, + "y": 265.3541386271866 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 18, 2003; Rating Delta: −0.0761103633916", + "x": 259.716613672496, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 07, 2002; Rating Delta: −0.976110363392", + "x": 255.84379968203498, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 19, 2004; Rating Delta: 1.22388963661", + "x": 264.39109697933225, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 22, 2005; Rating Delta: 0.823889636608", + "x": 266.7277424483307, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 12, 2008; Rating Delta: 0.923889636608", + "x": 277.67845786963437, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 15, 2000; Rating Delta: −0.676110363392", + "x": 249.83426073131955, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 16, 2000; Rating Delta: −1.37611036339", + "x": 248.96621621621622, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 05, 2000; Rating Delta: 0.323889636608", + "x": 248.27941176470588, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 05, 2008; Rating Delta: −0.876110363392", + "x": 277.6116852146264, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 20, 2002; Rating Delta: −0.776110363392", + "x": 256.8453895071542, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: May 09, 2003; Rating Delta: 1.52388963661", + "x": 259.04888712241655, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(185, 96, 11)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 03, 1998; Rating Delta: −4.17611036339", + "x": 241.28775834658188, + "y": 269.1041386271866 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 172, 86)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 31, 2006; Rating Delta: −2.37611036339", + "x": 269.13195548489665, + "y": 201.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 28, 2003; Rating Delta: 0.0238896366084", + "x": 258.64864864864865, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 15, 2005; Rating Delta: 2.02388963661", + "x": 266.3748012718601, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(194, 103, 13)", + "ariaRoleDescription": "point", + "description": "Release Date: May 12, 2000; Rating Delta: −3.97611036339", + "x": 248.63235294117646, + "y": 261.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(33, 98, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 18, 2008; Rating Delta: 2.62388963661", + "x": 277.14427662957075, + "y": 14.104138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 145, 45)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 22, 1999; Rating Delta: −2.97611036339", + "x": 246.69594594594594, + "y": 224.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 22, 2003; Rating Delta: −0.176110363392", + "x": 260.05047694753574, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 27, 2001; Rating Delta: −0.176110363392", + "x": 252.55286168521462, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2008; Rating Delta: 1.72388963661", + "x": 278.670906200318, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 25, 2008; Rating Delta: −0.176110363392", + "x": 276.34300476947533, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 11, 2000; Rating Delta: −1.47611036339", + "x": 249.5003974562798, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 05, 1999; Rating Delta: −1.47611036339", + "x": 246.82988871224165, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 29, 2000; Rating Delta: 0.323889636608", + "x": 249.96780604133545, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 04, 2005; Rating Delta: −0.676110363392", + "x": 265.3926868044515, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 25, 1999; Rating Delta: −1.57611036339", + "x": 245.56081081081084, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 20, 2000; Rating Delta: −0.376110363392", + "x": 250.1681240063593, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 10, 2008; Rating Delta: 0.923889636608", + "x": 277.9455484896661, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 08, 2006; Rating Delta: 1.72388963661", + "x": 271.5357710651828, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 24, 2007; Rating Delta: −0.276110363392", + "x": 274.00596184419715, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 29, 2000; Rating Delta: −1.87611036339", + "x": 249.96780604133545, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 1996; Rating Delta: 0.323889636608", + "x": 236.8139904610493, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 12, 2003; Rating Delta: 0.623889636608", + "x": 258.49602543720187, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 23, 2001; Rating Delta: 1.22388963661", + "x": 253.9745627980922, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 02, 2007; Rating Delta: 0.0238896366084", + "x": 274.6736883942766, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 29, 1999; Rating Delta: 1.62388963661", + "x": 246.7627186009539, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 30, 2001; Rating Delta: −0.176110363392", + "x": 254.04133545310017, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 26, 2007; Rating Delta: 1.02388963661", + "x": 274.6069157392687, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 16, 1998; Rating Delta: −0.976110363392", + "x": 243.15699523052464, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 26, 2003; Rating Delta: 1.42388963661", + "x": 260.966613672496, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 22, 1999; Rating Delta: 0.923889636608", + "x": 246.69594594594594, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 07, 2006; Rating Delta: −0.876110363392", + "x": 269.1983306836248, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 01, 2010; Rating Delta: −1.87611036339", + "x": 283.9455484896661, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 16, 2007; Rating Delta: 0.323889636608", + "x": 274.8076311605723, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 22, 2002; Rating Delta: 0.423889636608", + "x": 255.69117647058823, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 30, 2005; Rating Delta: −0.976110363392", + "x": 265.6406995230525, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 11, 2003; Rating Delta: 0.823889636608", + "x": 258.78179650238474, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 08, 2002; Rating Delta: −1.07611036339", + "x": 254.70906200317964, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 10, 2003; Rating Delta: 1.82388963661", + "x": 261.1001589825119, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 02, 2004; Rating Delta: 1.72388963661", + "x": 263.0552464228935, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 24, 1998; Rating Delta: −0.476110363392", + "x": 241.48767885532592, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 01, 2002; Rating Delta: −0.276110363392", + "x": 254.64228934817172, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 06, 1998; Rating Delta: 1.92388963661", + "x": 241.02066772655007, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 02, 2000; Rating Delta: −1.57611036339", + "x": 248.83267090620032, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 28, 2001; Rating Delta: 1.42388963661", + "x": 254.30842607313195, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 28, 2000; Rating Delta: −1.67611036339", + "x": 247.63116057233705, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 30, 2004; Rating Delta: −1.47611036339", + "x": 261.5866454689984, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 05, 2002; Rating Delta: 0.0238896366084", + "x": 255.24324324324323, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 13, 2000; Rating Delta: 1.42388963661", + "x": 250.10135135135135, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 1999; Rating Delta: 0.123889636608", + "x": 247.23052464228937, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 29, 2004; Rating Delta: 0.0238896366084", + "x": 264.1903815580286, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 03, 2007; Rating Delta: 0.723889636608", + "x": 273.8056438791733, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 12, 2004; Rating Delta: −0.676110363392", + "x": 264.3243243243243, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 13, 2001; Rating Delta: 0.523889636608", + "x": 251.83744038155805, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 07, 2008; Rating Delta: 1.22388963661", + "x": 275.8759936406995, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 21, 1998; Rating Delta: 0.723889636608", + "x": 242.62281399046103, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 14, 1999; Rating Delta: −0.0761103633916", + "x": 245.74205087440382, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 12, 1999; Rating Delta: 0.123889636608", + "x": 244.2925278219396, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 22, 2002; Rating Delta: −0.776110363392", + "x": 255.10969793322735, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 08, 2004; Rating Delta: −0.576110363392", + "x": 264.5723370429253, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 30, 2007; Rating Delta: 0.223889636608", + "x": 272.6037360890302, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 20, 2009; Rating Delta: 1.42388963661", + "x": 281.818759936407, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 09, 2002; Rating Delta: 0.0238896366084", + "x": 256.4447535771065, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 06, 2007; Rating Delta: 1.72388963661", + "x": 272.67050874403816, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2006; Rating Delta: −1.97611036339", + "x": 271.697933227345, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 02, 2007; Rating Delta: 0.823889636608", + "x": 272.33704292527824, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 2008; Rating Delta: 0.323889636608", + "x": 277.8787758346582, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 13, 2001; Rating Delta: −0.0761103633916", + "x": 252.70548489666137, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 21, 1997; Rating Delta: −0.176110363392", + "x": 237.41494435612083, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 06, 2001; Rating Delta: 1.12388963661", + "x": 251.77066772655007, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 20, 2002; Rating Delta: −2.87611036339", + "x": 256.8453895071542, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 16, 2002; Rating Delta: −0.776110363392", + "x": 256.5115262321145, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 06, 2000; Rating Delta: 0.0238896366084", + "x": 250.0345786963434, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 2001; Rating Delta: 1.72388963661", + "x": 254.241653418124, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 176, 93)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 27, 2006; Rating Delta: −2.27611036339", + "x": 268.5310015898251, + "y": 197.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 21, 2000; Rating Delta: 1.52388963661", + "x": 247.5643879173291, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 22, 2006; Rating Delta: −0.676110363392", + "x": 270.80087440381556, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 12, 2001; Rating Delta: 0.223889636608", + "x": 253.5735294117647, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 17, 2006; Rating Delta: 0.823889636608", + "x": 271.335453100159, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 15, 2010; Rating Delta: 0.623889636608", + "x": 282.3529411764706, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 172, 86)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 04, 2005; Rating Delta: −2.37611036339", + "x": 265.1255961844197, + "y": 201.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 2008; Rating Delta: 1.12388963661", + "x": 278.34658187599365, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 29, 2008; Rating Delta: 0.423889636608", + "x": 275.8092209856916, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 05, 1999; Rating Delta: 0.0238896366084", + "x": 246.82988871224165, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 172, 86)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 24, 2001; Rating Delta: −2.37611036339", + "x": 253.68799682034975, + "y": 201.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 19, 2004; Rating Delta: 0.223889636608", + "x": 262.05405405405406, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 10, 1997; Rating Delta: 1.62388963661", + "x": 239.61804451510335, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 03, 2006; Rating Delta: 1.42388963661", + "x": 271.2019077901431, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 14, 2002; Rating Delta: 1.42388963661", + "x": 255.9105723370429, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 23, 2004; Rating Delta: 1.32388963661", + "x": 263.25556438791733, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 03, 2007; Rating Delta: 1.92388963661", + "x": 273.8056438791733, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 13, 1998; Rating Delta: −0.676110363392", + "x": 240.82034976152624, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 22, 2003; Rating Delta: −1.97611036339", + "x": 260.05047694753574, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 17, 2000; Rating Delta: −0.776110363392", + "x": 250.4356120826709, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 11, 2002; Rating Delta: 1.92388963661", + "x": 257.0457074721781, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 08, 1999; Rating Delta: 1.32388963661", + "x": 246.56240063593003, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 07, 2008; Rating Delta: 1.52388963661", + "x": 278.21303656597775, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 16, 2003; Rating Delta: −1.07611036339", + "x": 258.82949125596184, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 23, 2001; Rating Delta: −0.0761103633916", + "x": 251.63751987281398, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 11, 2005; Rating Delta: −0.0761103633916", + "x": 265.1923688394277, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 24, 2003; Rating Delta: −0.0761103633916", + "x": 260.6514308426073, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 09, 2009; Rating Delta: −1.27611036339", + "x": 278.8139904610493, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 17, 1999; Rating Delta: −1.97611036339", + "x": 246.3620826709062, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 06, 2001; Rating Delta: 0.823889636608", + "x": 251.77066772655007, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 31, 2006; Rating Delta: 1.22388963661", + "x": 269.13195548489665, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 22, 1999; Rating Delta: 0.523889636608", + "x": 246.69594594594594, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 05, 2010; Rating Delta: 0.623889636608", + "x": 282.82034976152624, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 09, 2005; Rating Delta: 1.52388963661", + "x": 268.0635930047695, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: May 14, 2004; Rating Delta: −0.976110363392", + "x": 262.58783783783787, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 02, 2006; Rating Delta: −0.376110363392", + "x": 269.7325119236884, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 154, 58)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 27, 1998; Rating Delta: −2.77611036339", + "x": 240.95389507154215, + "y": 216.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: May 18, 2007; Rating Delta: 0.123889636608", + "x": 273.0711446740859, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 18, 2000; Rating Delta: 0.623889636608", + "x": 247.8314785373609, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 07, 2007; Rating Delta: −1.07611036339", + "x": 274.13950715421305, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(212, 123, 28)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 23, 2001; Rating Delta: −3.47611036339", + "x": 251.63751987281398, + "y": 242.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 11, 2002; Rating Delta: −0.276110363392", + "x": 257.0457074721781, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 26, 2010; Rating Delta: 0.823889636608", + "x": 282.4578696343402, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 20, 2001; Rating Delta: 0.823889636608", + "x": 252.7722575516693, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 08, 2008; Rating Delta: 1.82388963661", + "x": 275.6089030206677, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 27, 2004; Rating Delta: −1.37611036339", + "x": 263.58942766295706, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 06, 2004; Rating Delta: −0.776110363392", + "x": 261.65341812400635, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 13, 2002; Rating Delta: −0.0761103633916", + "x": 256.7786168521463, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 27, 2000; Rating Delta: 1.12388963661", + "x": 249.9487281399046, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 26, 2003; Rating Delta: 1.02388963661", + "x": 260.966613672496, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 21, 2009; Rating Delta: 2.12388963661", + "x": 280.9503179650238, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 17, 1999; Rating Delta: −0.376110363392", + "x": 246.3620826709062, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 23, 2004; Rating Delta: 1.52388963661", + "x": 261.51987281399045, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 154, 58)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 20, 1997; Rating Delta: −2.77611036339", + "x": 238.54968203497617, + "y": 216.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 21, 2003; Rating Delta: −1.57611036339", + "x": 258.5818759936407, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 19, 2003; Rating Delta: 1.02388963661", + "x": 260.31756756756755, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 27, 2006; Rating Delta: −1.67611036339", + "x": 268.5310015898251, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 24, 2001; Rating Delta: −0.876110363392", + "x": 253.10612082670906, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 26, 1998; Rating Delta: 1.02388963661", + "x": 242.08863275039744, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 25, 2003; Rating Delta: 0.623889636608", + "x": 259.783386327504, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: May 15, 1998; Rating Delta: 0.523889636608", + "x": 241.68799682034978, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 13, 1999; Rating Delta: 0.123889636608", + "x": 246.02821939586644, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 24, 2005; Rating Delta: −1.47611036339", + "x": 266.4606518282989, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 2004; Rating Delta: 0.323889636608", + "x": 264.65818759936406, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 12, 2003; Rating Delta: −0.876110363392", + "x": 260.2507949125596, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 23, 2005; Rating Delta: −0.776110363392", + "x": 268.1971383147854, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 05, 2008; Rating Delta: 0.423889636608", + "x": 278.48012718600955, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 12, 1998; Rating Delta: −0.0761103633916", + "x": 241.95508744038156, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 30, 2005; Rating Delta: 1.32388963661", + "x": 267.3954689984102, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 01, 2008; Rating Delta: 0.723889636608", + "x": 275.5421303656598, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 12, 1999; Rating Delta: −1.97611036339", + "x": 244.55961844197137, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 09, 2006; Rating Delta: 1.22388963661", + "x": 269.7992845786963, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 2000; Rating Delta: 1.22388963661", + "x": 250.76947535771066, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2002; Rating Delta: −0.576110363392", + "x": 257.7615262321145, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 2003; Rating Delta: −2.87611036339", + "x": 260.9189189189189, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 26, 1997; Rating Delta: 0.623889636608", + "x": 237.72972972972974, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(227, 141, 42)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 23, 2004; Rating Delta: −3.07611036339", + "x": 263.25556438791733, + "y": 227.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 11, 2000; Rating Delta: −0.376110363392", + "x": 249.5003974562798, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 167, 79)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 26, 2002; Rating Delta: −2.47611036339", + "x": 256.31120826709065, + "y": 205.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: May 12, 2000; Rating Delta: −0.0761103633916", + "x": 248.63235294117646, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 31, 1997; Rating Delta: −0.276110363392", + "x": 239.818759936407, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 16, 2004; Rating Delta: −0.276110363392", + "x": 262.32074721780606, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 08, 2002; Rating Delta: −1.07611036339", + "x": 254.70906200317964, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 20, 2001; Rating Delta: −1.67611036339", + "x": 251.90421303656598, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 20, 1998; Rating Delta: −0.176110363392", + "x": 243.4912559618442, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 18, 2000; Rating Delta: −0.0761103633916", + "x": 249.56717011128777, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 10, 2004; Rating Delta: 0.223889636608", + "x": 263.72297297297297, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 10, 2008; Rating Delta: 0.123889636608", + "x": 277.9455484896661, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 15, 2005; Rating Delta: 0.823889636608", + "x": 266.66096979332275, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 27, 2006; Rating Delta: 0.523889636608", + "x": 271.13473767885534, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 27, 2003; Rating Delta: −1.57611036339", + "x": 259.5162957074722, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 03, 2000; Rating Delta: −0.776110363392", + "x": 250.302066772655, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 04, 1997; Rating Delta: 1.22388963661", + "x": 237.81558028616854, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 27, 2002; Rating Delta: 0.923889636608", + "x": 257.7806041335453, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 04, 2005; Rating Delta: −0.476110363392", + "x": 267.72972972972974, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 21, 2000; Rating Delta: 1.02388963661", + "x": 249.0139109697933, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2003; Rating Delta: −0.676110363392", + "x": 261.2432432432432, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 2005; Rating Delta: −1.07611036339", + "x": 268.17806041335456, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 26, 2009; Rating Delta: −0.176110363392", + "x": 280.41613672496027, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 01, 1999; Rating Delta: −1.37611036339", + "x": 246.20945945945948, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 16, 1998; Rating Delta: −0.976110363392", + "x": 243.15699523052464, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 12, 2004; Rating Delta: −1.17611036339", + "x": 264.3243243243243, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2006; Rating Delta: 1.82388963661", + "x": 271.697933227345, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 26, 2010; Rating Delta: 0.223889636608", + "x": 283.02027027027026, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 16, 2007; Rating Delta: −0.0761103633916", + "x": 274.8076311605723, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 2000; Rating Delta: 1.02388963661", + "x": 250.7027027027027, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 23, 2008; Rating Delta: 0.623889636608", + "x": 276.61009538950714, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 26, 2004; Rating Delta: 1.52388963661", + "x": 264.4578696343402, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(185, 96, 11)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 13, 1998; Rating Delta: −4.17611036339", + "x": 241.08744038155803, + "y": 269.1041386271866 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 14, 2000; Rating Delta: 0.223889636608", + "x": 249.23330683624803, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 05, 2005; Rating Delta: 0.723889636608", + "x": 266.8612877583466, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 2006; Rating Delta: 0.423889636608", + "x": 271.6025437201908, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 03, 2005; Rating Delta: 1.72388963661", + "x": 266.26033386327504, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 16, 2004; Rating Delta: −0.876110363392", + "x": 263.18879173290935, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 10, 1998; Rating Delta: 0.123889636608", + "x": 241.35413354531, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1998; Rating Delta: 0.123889636608", + "x": 243.82511923688395, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(227, 141, 42)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 03, 2004; Rating Delta: −3.07611036339", + "x": 263.65620031796504, + "y": 227.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 29, 2000; Rating Delta: 0.223889636608", + "x": 250.83624801271858, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 01, 2002; Rating Delta: −0.776110363392", + "x": 257.24642289348174, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2003; Rating Delta: 1.02388963661", + "x": 261.2432432432432, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 23, 2006; Rating Delta: −1.27611036339", + "x": 269.93282988871226, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 176, 93)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 05, 2007; Rating Delta: −2.27611036339", + "x": 271.8028616852146, + "y": 197.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 04, 2002; Rating Delta: −0.0761103633916", + "x": 256.9789348171701, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(216, 128, 31)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 03, 2004; Rating Delta: −3.37611036339", + "x": 264.52464228934815, + "y": 239.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 21, 2006; Rating Delta: 1.42388963661", + "x": 270.199920508744, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 13, 2002; Rating Delta: −1.67611036339", + "x": 257.6470588235294, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2009; Rating Delta: 0.423889636608", + "x": 282.1526232114467, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2003; Rating Delta: −0.0761103633916", + "x": 261.2432432432432, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 18, 2005; Rating Delta: 0.423889636608", + "x": 265.2591414944356, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 13, 2000; Rating Delta: 0.623889636608", + "x": 250.10135135135135, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 22, 2008; Rating Delta: 1.32388963661", + "x": 275.74244833068366, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 10, 2007; Rating Delta: 1.52388963661", + "x": 274.45429252782196, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 27, 2010; Rating Delta: 0.223889636608", + "x": 284.48926868044515, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 14, 2005; Rating Delta: 0.823889636608", + "x": 264.92527821939586, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 2002; Rating Delta: 0.823889636608", + "x": 257.818759936407, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 25, 2009; Rating Delta: 0.223889636608", + "x": 281.28418124006356, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 06, 2004; Rating Delta: 0.0238896366084", + "x": 263.38910969793324, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 12, 2004; Rating Delta: −2.17611036339", + "x": 261.9872813990461, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 14, 2003; Rating Delta: −1.17611036339", + "x": 258.51510333863274, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 06, 2004; Rating Delta: 1.52388963661", + "x": 263.38910969793324, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 29, 2008; Rating Delta: −1.97611036339", + "x": 277.54491255961847, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 09, 2001; Rating Delta: −1.27611036339", + "x": 251.5039745627981, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 10, 2006; Rating Delta: −0.0761103633916", + "x": 271.26868044515106, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 06, 1997; Rating Delta: 0.323889636608", + "x": 238.41613672496024, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 25, 2003; Rating Delta: 0.523889636608", + "x": 258.91534181240064, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 08, 1997; Rating Delta: 0.223889636608", + "x": 239.01709062003178, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 11, 1997; Rating Delta: 1.02388963661", + "x": 238.74999999999997, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 26, 2003; Rating Delta: 0.723889636608", + "x": 260.966613672496, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 10, 2006; Rating Delta: 0.523889636608", + "x": 271.26868044515106, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 185, 107)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 12, 2001; Rating Delta: −2.07611036339", + "x": 253.5735294117647, + "y": 190.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 06, 2009; Rating Delta: 1.52388963661", + "x": 279.0810810810811, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 20, 2004; Rating Delta: −1.97611036339", + "x": 261.78696343402225, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 08, 2006; Rating Delta: −1.47611036339", + "x": 270.6673290937997, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 15, 1997; Rating Delta: 0.623889636608", + "x": 239.08386327503976, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 09, 2009; Rating Delta: −0.776110363392", + "x": 281.4177265500795, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 08, 1999; Rating Delta: 0.423889636608", + "x": 247.14467408585057, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 01, 2006; Rating Delta: 0.823889636608", + "x": 270.6005564387917, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 04, 1996; Rating Delta: −0.176110363392", + "x": 236.07909379968203, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 26, 2010; Rating Delta: 0.423889636608", + "x": 282.7535771065183, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 22, 1999; Rating Delta: −0.576110363392", + "x": 246.69594594594594, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 25, 2000; Rating Delta: −0.276110363392", + "x": 249.6339427662957, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 28, 2003; Rating Delta: −0.876110363392", + "x": 258.38155802861684, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 185, 107)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 19, 2000; Rating Delta: −2.07611036339", + "x": 249.28100158982514, + "y": 190.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 12, 1999; Rating Delta: −0.476110363392", + "x": 244.55961844197137, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 2006; Rating Delta: 0.723889636608", + "x": 271.6597774244833, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: May 06, 2005; Rating Delta: −0.176110363392", + "x": 265.9932432432432, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(167, 84, 9)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 01, 2006; Rating Delta: −4.57611036339", + "x": 270.6005564387917, + "y": 284.1041386271866 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 15, 2002; Rating Delta: 0.323889636608", + "x": 254.7758346581876, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 25, 2002; Rating Delta: 1.32388963661", + "x": 254.57551669316376, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 05, 1999; Rating Delta: 0.423889636608", + "x": 244.49284578696344, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 27, 2009; Rating Delta: −0.0761103633916", + "x": 281.8855325914149, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 16, 2005; Rating Delta: 0.123889636608", + "x": 267.2619236883943, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 16, 2009; Rating Delta: 1.12388963661", + "x": 282.066772655008, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 29, 2001; Rating Delta: 0.0238896366084", + "x": 252.57193958664544, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 19, 2001; Rating Delta: 0.223889636608", + "x": 253.64030206677268, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 29, 2002; Rating Delta: −1.27611036339", + "x": 255.1764705882353, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 06, 2004; Rating Delta: −1.57611036339", + "x": 261.65341812400635, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 04, 2001; Rating Delta: −1.07611036339", + "x": 252.61963434022258, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 16, 2010; Rating Delta: 0.323889636608", + "x": 283.22058823529414, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(38, 106, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 17, 2003; Rating Delta: 2.52388963661", + "x": 257.9809220985692, + "y": 17.85413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 25, 2003; Rating Delta: −0.376110363392", + "x": 258.91534181240064, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 06, 2002; Rating Delta: −0.176110363392", + "x": 256.7118441971383, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 11, 1998; Rating Delta: 0.823889636608", + "x": 242.82313195548488, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 04, 2000; Rating Delta: −0.976110363392", + "x": 249.43362480127183, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 10, 2006; Rating Delta: 0.423889636608", + "x": 268.664546899841, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 25, 2005; Rating Delta: −1.47611036339", + "x": 265.3259141494436, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 29, 2003; Rating Delta: −1.37611036339", + "x": 260.1172496025437, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 18, 2009; Rating Delta: 0.923889636608", + "x": 281.21740858505564, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 2007; Rating Delta: 1.02388963661", + "x": 275.14149443561206, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(198, 106, 14)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 08, 2007; Rating Delta: −3.87611036339", + "x": 273.8533386327504, + "y": 257.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: May 09, 2003; Rating Delta: −0.776110363392", + "x": 259.04888712241655, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 15, 2006; Rating Delta: −0.676110363392", + "x": 270.73410174880763, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 25, 2005; Rating Delta: −1.37611036339", + "x": 265.3259141494436, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: May 22, 2009; Rating Delta: −2.87611036339", + "x": 280.08227344992054, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 14, 2003; Rating Delta: −0.776110363392", + "x": 258.248012718601, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 27, 1998; Rating Delta: 1.52388963661", + "x": 240.95389507154215, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 26, 2001; Rating Delta: 2.02388963661", + "x": 253.7070747217806, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 08, 2005; Rating Delta: −0.676110363392", + "x": 266.59419713831477, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 23, 2004; Rating Delta: −0.576110363392", + "x": 261.51987281399045, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(205, 115, 21)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 17, 2006; Rating Delta: −3.67611036339", + "x": 268.731319554849, + "y": 250.35413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 09, 2010; Rating Delta: 0.223889636608", + "x": 283.15381558028616, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 19, 2004; Rating Delta: 1.12388963661", + "x": 262.05405405405406, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 08, 2010; Rating Delta: 0.323889636608", + "x": 282.2861685214626, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 08, 2008; Rating Delta: −1.77611036339", + "x": 276.1808426073132, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2007; Rating Delta: 1.32388963661", + "x": 275.17965023847376, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 24, 1999; Rating Delta: −0.276110363392", + "x": 246.42885532591416, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 21, 2009; Rating Delta: 1.12388963661", + "x": 280.9503179650238, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 28, 1999; Rating Delta: −0.676110363392", + "x": 245.8755961844197, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 01, 1999; Rating Delta: −1.17611036339", + "x": 246.49562798092208, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 22, 2000; Rating Delta: 1.52388963661", + "x": 249.9010333863275, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 15, 2008; Rating Delta: −0.276110363392", + "x": 275.6756756756757, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 05, 2010; Rating Delta: 0.723889636608", + "x": 282.55325914149444, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 23, 2005; Rating Delta: 0.323889636608", + "x": 267.3286963434022, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 25, 2005; Rating Delta: −1.17611036339", + "x": 265.5930047694754, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 12, 1997; Rating Delta: 0.923889636608", + "x": 240.2193958664547, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 28, 2002; Rating Delta: −0.776110363392", + "x": 256.04411764705884, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 12, 1999; Rating Delta: −0.276110363392", + "x": 244.55961844197137, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 30, 1998; Rating Delta: −0.576110363392", + "x": 240.68680445151034, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 16, 2010; Rating Delta: −1.17611036339", + "x": 283.22058823529414, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 2006; Rating Delta: 0.723889636608", + "x": 271.3831478537361, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 12, 2008; Rating Delta: −1.87611036339", + "x": 278.5468998410175, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 09, 2010; Rating Delta: 1.42388963661", + "x": 284.0218600953895, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 12, 2005; Rating Delta: −1.97611036339", + "x": 266.9280604133545, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 10, 1999; Rating Delta: −0.676110363392", + "x": 247.1637519872814, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 26, 1997; Rating Delta: −0.476110363392", + "x": 237.72972972972974, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 24, 2003; Rating Delta: −1.67611036339", + "x": 258.0476947535771, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 2008; Rating Delta: −0.376110363392", + "x": 278.7281399046105, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 27, 1999; Rating Delta: −0.376110363392", + "x": 246.16176470588235, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 22, 2002; Rating Delta: −0.476110363392", + "x": 254.84260731319554, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 29, 2006; Rating Delta: 0.523889636608", + "x": 271.73608903020664, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 04, 1999; Rating Delta: −0.176110363392", + "x": 245.94236883942767, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 27, 2007; Rating Delta: 1.22388963661", + "x": 273.4527027027027, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 06, 2000; Rating Delta: −1.67611036339", + "x": 250.0345786963434, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 12, 1998; Rating Delta: −1.47611036339", + "x": 241.95508744038156, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 02, 2006; Rating Delta: 0.823889636608", + "x": 269.7325119236884, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(167, 84, 9)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 29, 2008; Rating Delta: −4.57611036339", + "x": 277.54491255961847, + "y": 284.1041386271866 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 14, 2009; Rating Delta: 2.02388963661", + "x": 280.8835453100159, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 24, 1998; Rating Delta: −1.07611036339", + "x": 242.35572337042925, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 30, 2007; Rating Delta: 1.72388963661", + "x": 274.94117647058823, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 21, 2003; Rating Delta: 0.323889636608", + "x": 258.3147853736089, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 29, 1999; Rating Delta: −0.476110363392", + "x": 246.7627186009539, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 25, 2004; Rating Delta: 0.223889636608", + "x": 262.9884737678855, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 172, 86)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 24, 2006; Rating Delta: −2.37611036339", + "x": 268.7980922098569, + "y": 201.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 21, 1998; Rating Delta: −0.676110363392", + "x": 242.62281399046103, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 03, 2000; Rating Delta: −0.976110363392", + "x": 247.96502384737678, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 10, 1999; Rating Delta: −0.976110363392", + "x": 247.1637519872814, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 14, 2008; Rating Delta: −0.276110363392", + "x": 275.9423688394277, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 23, 2009; Rating Delta: −0.876110363392", + "x": 278.9475357710652, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: May 19, 2000; Rating Delta: −0.0761103633916", + "x": 248.69912559618444, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 15, 2007; Rating Delta: −1.37611036339", + "x": 273.3382352941176, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(201, 110, 17)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 2005; Rating Delta: −3.77611036339", + "x": 268.2734499205087, + "y": 254.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 12, 1999; Rating Delta: 1.02388963661", + "x": 246.89666136724958, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 02, 2001; Rating Delta: −0.976110363392", + "x": 253.77424483306837, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 14, 2005; Rating Delta: −0.376110363392", + "x": 267.5290143084261, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 28, 1997; Rating Delta: 1.42388963661", + "x": 237.48171701112878, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 21, 2005; Rating Delta: −1.07611036339", + "x": 267.595786963434, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 26, 1999; Rating Delta: −1.47611036339", + "x": 244.6931637519873, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 18, 2005; Rating Delta: −0.176110363392", + "x": 265.2591414944356, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 08, 2001; Rating Delta: 0.323889636608", + "x": 252.95349761526234, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: May 08, 1998; Rating Delta: −0.276110363392", + "x": 241.6212241653418, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(56, 128, 184)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 06, 2006; Rating Delta: 2.22388963661", + "x": 270.93441971383146, + "y": 29.10413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 2000; Rating Delta: −1.47611036339", + "x": 250.76947535771066, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 22, 2008; Rating Delta: 0.323889636608", + "x": 277.4781399046105, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: May 29, 2009; Rating Delta: 0.823889636608", + "x": 280.14904610492846, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 11, 2005; Rating Delta: −2.87611036339", + "x": 267.79650238473766, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 22, 2001; Rating Delta: −0.276110363392", + "x": 252.50516693163752, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 26, 1998; Rating Delta: −1.07611036339", + "x": 242.08863275039744, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 05, 2003; Rating Delta: −0.776110363392", + "x": 260.1840222575517, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 21, 2008; Rating Delta: −0.376110363392", + "x": 276.0091414944356, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 13, 2006; Rating Delta: 0.423889636608", + "x": 271.00119236883944, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 185, 107)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 27, 2001; Rating Delta: −2.07611036339", + "x": 251.97098569157393, + "y": 190.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2004; Rating Delta: −0.976110363392", + "x": 264.73449920508745, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: May 05, 2000; Rating Delta: −1.07611036339", + "x": 248.5655802861685, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 21, 2003; Rating Delta: −0.976110363392", + "x": 258.5818759936407, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 2006; Rating Delta: 0.323889636608", + "x": 271.6025437201908, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 13, 1999; Rating Delta: 0.123889636608", + "x": 246.02821939586644, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 23, 1999; Rating Delta: −0.0761103633916", + "x": 245.82790143084262, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 13, 2002; Rating Delta: −1.07611036339", + "x": 257.6470588235294, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 28, 2001; Rating Delta: 0.923889636608", + "x": 253.43998410174882, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 04, 2006; Rating Delta: 1.12388963661", + "x": 270.3334658187599, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 04, 2003; Rating Delta: −0.376110363392", + "x": 258.7154213036566, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 132, 35)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 02, 2002; Rating Delta: −3.27611036339", + "x": 256.3779809220986, + "y": 235.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 04, 1999; Rating Delta: −0.276110363392", + "x": 245.36049284578698, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 13, 2007; Rating Delta: 0.723889636608", + "x": 272.73728139904614, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 12, 2001; Rating Delta: 0.523889636608", + "x": 250.9697933227345, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 17, 2007; Rating Delta: −1.17611036339", + "x": 273.93918918918916, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 10, 2000; Rating Delta: 0.0238896366084", + "x": 248.03179650238474, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 18, 2003; Rating Delta: 1.22388963661", + "x": 259.716613672496, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(237, 158, 65)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 27, 1999; Rating Delta: −2.67611036339", + "x": 246.16176470588235, + "y": 212.85413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 15, 2000; Rating Delta: −0.576110363392", + "x": 249.83426073131955, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 05, 2005; Rating Delta: −1.57611036339", + "x": 266.8612877583466, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 30, 2005; Rating Delta: 0.923889636608", + "x": 267.3954689984102, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 145, 45)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 13, 2003; Rating Delta: −2.97611036339", + "x": 259.3827503974563, + "y": 224.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(237, 158, 65)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 08, 2000; Rating Delta: −2.67611036339", + "x": 250.63593004769476, + "y": 212.85413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 26, 2003; Rating Delta: −0.576110363392", + "x": 260.38434022257553, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 14, 2006; Rating Delta: −0.176110363392", + "x": 270.1331478537361, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: May 19, 2006; Rating Delta: 0.123889636608", + "x": 269.59896661367253, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 167, 79)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 14, 2007; Rating Delta: −2.47611036339", + "x": 274.206279809221, + "y": 205.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: May 03, 2002; Rating Delta: −0.976110363392", + "x": 255.50993640699525, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 16, 2001; Rating Delta: −1.27611036339", + "x": 251.30365659777425, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 21, 2000; Rating Delta: −1.87611036339", + "x": 247.5643879173291, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 2007; Rating Delta: 0.823889636608", + "x": 274.85532591414943, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 17, 2010; Rating Delta: 1.42388963661", + "x": 284.689586645469, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 26, 2010; Rating Delta: −0.0761103633916", + "x": 282.7535771065183, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 29, 2010; Rating Delta: 0.423889636608", + "x": 282.4864864864865, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 26, 1999; Rating Delta: −0.276110363392", + "x": 244.6931637519873, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 09, 2009; Rating Delta: 1.22388963661", + "x": 281.4177265500795, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 14, 2000; Rating Delta: 0.423889636608", + "x": 248.36526232114466, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 18, 1997; Rating Delta: −1.47611036339", + "x": 237.9487281399046, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 26, 2008; Rating Delta: 0.323889636608", + "x": 277.8120031796502, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 26, 1999; Rating Delta: 0.0238896366084", + "x": 244.4260731319555, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 14, 2001; Rating Delta: −0.476110363392", + "x": 254.17488076311605, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 23, 1999; Rating Delta: 1.12388963661", + "x": 244.95985691573927, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 14, 2005; Rating Delta: −1.37611036339", + "x": 264.92527821939586, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 07, 2003; Rating Delta: 0.523889636608", + "x": 260.78537360890306, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 06, 1998; Rating Delta: 1.32388963661", + "x": 243.3577106518283, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 09, 2004; Rating Delta: 0.0238896366084", + "x": 262.2539745627981, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 12, 2003; Rating Delta: −0.0761103633916", + "x": 260.2507949125596, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 01, 1999; Rating Delta: −0.876110363392", + "x": 246.49562798092208, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 2002; Rating Delta: 0.423889636608", + "x": 257.44674085850556, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 06, 2002; Rating Delta: 0.223889636608", + "x": 257.58028616852147, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 24, 2005; Rating Delta: 1.52388963661", + "x": 266.4606518282989, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 06, 2006; Rating Delta: −0.876110363392", + "x": 270.93441971383146, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 2000; Rating Delta: 1.12388963661", + "x": 250.7027027027027, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 2007; Rating Delta: 1.22388963661", + "x": 274.85532591414943, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 03, 1999; Rating Delta: 0.623889636608", + "x": 247.09697933227343, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 24, 1999; Rating Delta: −0.876110363392", + "x": 247.01112877583464, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 20, 2006; Rating Delta: 0.423889636608", + "x": 268.4642289348172, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 16, 2001; Rating Delta: 1.12388963661", + "x": 251.57074721780603, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 20, 1998; Rating Delta: 0.923889636608", + "x": 243.4912559618442, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 30, 1999; Rating Delta: −0.176110363392", + "x": 245.02662957074725, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: May 24, 2002; Rating Delta: 0.223889636608", + "x": 255.71025437201905, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 30, 2004; Rating Delta: −1.67611036339", + "x": 262.4542925278219, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(189, 99, 12)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 26, 2007; Rating Delta: −4.07611036339", + "x": 272.00317965023845, + "y": 265.3541386271866 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 2006; Rating Delta: −1.27611036339", + "x": 271.6025437201908, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 17, 2000; Rating Delta: 0.923889636608", + "x": 248.0985691573927, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 14, 2005; Rating Delta: 0.123889636608", + "x": 267.5290143084261, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 13, 2010; Rating Delta: −1.57611036339", + "x": 284.35572337042925, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(56, 128, 184)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 19, 2004; Rating Delta: 2.22388963661", + "x": 262.05405405405406, + "y": 29.10413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 15, 2004; Rating Delta: 0.323889636608", + "x": 264.0568362480127, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: May 04, 2001; Rating Delta: 1.62388963661", + "x": 252.03775834658185, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 20, 2004; Rating Delta: 0.223889636608", + "x": 261.78696343402225, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 07, 1997; Rating Delta: 0.723889636608", + "x": 239.88553259141494, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 15, 1997; Rating Delta: 0.0238896366084", + "x": 239.08386327503976, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1996; Rating Delta: −0.176110363392", + "x": 236.8616852146264, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 08, 2001; Rating Delta: −0.376110363392", + "x": 252.37162162162164, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2000; Rating Delta: −0.276110363392", + "x": 250.79809220985692, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 31, 2007; Rating Delta: 1.02388963661", + "x": 274.07273449920507, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 16, 2001; Rating Delta: −1.07611036339", + "x": 251.57074721780603, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 09, 2005; Rating Delta: 0.523889636608", + "x": 267.1951510333863, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 20, 2004; Rating Delta: −1.27611036339", + "x": 263.52265500794914, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 04, 2008; Rating Delta: 0.823889636608", + "x": 277.8883147853736, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 23, 1999; Rating Delta: 0.523889636608", + "x": 244.95985691573927, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 04, 2009; Rating Delta: 0.123889636608", + "x": 281.08386327503973, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 27, 2002; Rating Delta: −2.17611036339", + "x": 257.49443561208267, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 16, 1999; Rating Delta: 0.923889636608", + "x": 245.76112877583464, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1998; Rating Delta: 0.0238896366084", + "x": 243.82511923688395, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 10, 2006; Rating Delta: −0.676110363392", + "x": 268.9316375198728, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 14, 2000; Rating Delta: 0.223889636608", + "x": 248.36526232114466, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 25, 2009; Rating Delta: −1.77611036339", + "x": 281.28418124006356, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 16, 2005; Rating Delta: 0.0238896366084", + "x": 268.13036565977745, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 08, 2002; Rating Delta: 1.22388963661", + "x": 257.31319554848966, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(201, 110, 17)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 28, 2005; Rating Delta: −3.77611036339", + "x": 265.05882352941177, + "y": 254.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: May 09, 1997; Rating Delta: −1.47611036339", + "x": 238.14904610492846, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 29, 2006; Rating Delta: −0.276110363392", + "x": 270.86764705882354, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 27, 1997; Rating Delta: 1.02388963661", + "x": 238.6164546899841, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 31, 2003; Rating Delta: 0.123889636608", + "x": 258.114467408585, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 10, 2006; Rating Delta: −0.376110363392", + "x": 268.664546899841, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 28, 2009; Rating Delta: −1.37611036339", + "x": 281.0170906200318, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(223, 136, 38)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 30, 2002; Rating Delta: −3.17611036339", + "x": 256.6450715421304, + "y": 231.60413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: May 22, 1998; Rating Delta: 1.32388963661", + "x": 241.7547694753577, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 22, 2006; Rating Delta: 0.123889636608", + "x": 270.80087440381556, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: May 09, 1997; Rating Delta: 1.12388963661", + "x": 238.14904610492846, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 06, 2002; Rating Delta: 0.0238896366084", + "x": 257.29411764705884, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 25, 2000; Rating Delta: −0.376110363392", + "x": 249.6339427662957, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 08, 2005; Rating Delta: −0.576110363392", + "x": 266.59419713831477, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 28, 1998; Rating Delta: −0.676110363392", + "x": 242.689586645469, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 06, 2003; Rating Delta: −1.17611036339", + "x": 259.3159777424483, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 22, 2001; Rating Delta: −0.276110363392", + "x": 252.50516693163752, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 08, 2008; Rating Delta: 1.32388963661", + "x": 275.6089030206677, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 23, 2004; Rating Delta: 1.32388963661", + "x": 262.9693958664547, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 23, 2009; Rating Delta: 1.02388963661", + "x": 281.26510333863274, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 19, 2001; Rating Delta: 0.523889636608", + "x": 253.64030206677268, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 15, 2007; Rating Delta: 0.623889636608", + "x": 273.3382352941176, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(38, 106, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 15, 1999; Rating Delta: 2.52388963661", + "x": 246.629173290938, + "y": 17.85413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 11, 2001; Rating Delta: 0.123889636608", + "x": 252.68640699523053, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 2000; Rating Delta: 0.923889636608", + "x": 250.7408585055644, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 176, 93)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 20, 2001; Rating Delta: −2.27611036339", + "x": 251.90421303656598, + "y": 197.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 09, 1998; Rating Delta: −1.87611036339", + "x": 240.48648648648648, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 15, 2010; Rating Delta: 1.22388963661", + "x": 282.3529411764706, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 12, 1999; Rating Delta: 0.623889636608", + "x": 246.89666136724958, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(162, 80, 8)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 20, 2003; Rating Delta: −4.67611036339", + "x": 259.44952305246426, + "y": 287.8541386271866 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 17, 2000; Rating Delta: 0.523889636608", + "x": 248.0985691573927, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 20, 2006; Rating Delta: 0.923889636608", + "x": 271.06796502384736, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 24, 1999; Rating Delta: 0.423889636608", + "x": 247.01112877583464, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 31, 2009; Rating Delta: 0.923889636608", + "x": 280.75, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 20, 2006; Rating Delta: −0.576110363392", + "x": 271.06796502384736, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 2004; Rating Delta: −0.276110363392", + "x": 264.65818759936406, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 28, 2006; Rating Delta: 1.52388963661", + "x": 269.39864864864865, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 26, 1997; Rating Delta: −1.67611036339", + "x": 240.06677265500795, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 03, 2006; Rating Delta: 0.723889636608", + "x": 271.2019077901431, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 22, 2006; Rating Delta: 0.223889636608", + "x": 270.80087440381556, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 15, 2008; Rating Delta: −1.57611036339", + "x": 277.41136724960256, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 17, 2006; Rating Delta: 0.823889636608", + "x": 268.99841017488075, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 2000; Rating Delta: 0.323889636608", + "x": 250.76947535771066, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 07, 2006; Rating Delta: −0.176110363392", + "x": 269.1983306836248, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: May 30, 2003; Rating Delta: 1.92388963661", + "x": 259.2492050874404, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 2006; Rating Delta: 1.12388963661", + "x": 271.3831478537361, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 30, 2007; Rating Delta: −2.17611036339", + "x": 272.04133545310015, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 23, 2005; Rating Delta: −0.0761103633916", + "x": 267.3286963434022, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 12, 2002; Rating Delta: 1.02388963661", + "x": 255.3096184419714, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 18, 2008; Rating Delta: 0.423889636608", + "x": 276.2762321144674, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 05, 2007; Rating Delta: 1.22388963661", + "x": 271.8028616852146, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 12, 2000; Rating Delta: −0.976110363392", + "x": 247.4785373608903, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 06, 2003; Rating Delta: 0.223889636608", + "x": 259.897853736089, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 28, 2000; Rating Delta: 1.02388963661", + "x": 248.4988076311606, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 30, 2005; Rating Delta: 1.72388963661", + "x": 267.3954689984102, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 24, 2004; Rating Delta: −1.37611036339", + "x": 263.8565182829889, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 26, 2002; Rating Delta: −1.87611036339", + "x": 255.44316375198727, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 13, 2009; Rating Delta: −0.676110363392", + "x": 279.147853736089, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 2002; Rating Delta: −0.976110363392", + "x": 257.44674085850556, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 25, 2002; Rating Delta: 1.02388963661", + "x": 257.17925278219394, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 08, 2004; Rating Delta: 0.923889636608", + "x": 263.9900635930048, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 01, 2008; Rating Delta: 0.923889636608", + "x": 277.27782193958666, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 25, 2009; Rating Delta: 1.12388963661", + "x": 281.8664546899841, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 02, 2002; Rating Delta: −1.47611036339", + "x": 256.3779809220986, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 26, 2008; Rating Delta: −0.676110363392", + "x": 277.8120031796502, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 27, 2001; Rating Delta: −1.17611036339", + "x": 251.97098569157393, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 05, 2008; Rating Delta: 1.62388963661", + "x": 278.48012718600955, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 29, 2006; Rating Delta: −0.176110363392", + "x": 271.73608903020664, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 06, 2006; Rating Delta: −0.276110363392", + "x": 268.3306836248013, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 13, 1997; Rating Delta: 0.923889636608", + "x": 239.06478537360888, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 2005; Rating Delta: 0.0238896366084", + "x": 268.17806041335456, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 31, 2009; Rating Delta: 0.523889636608", + "x": 280.75, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(205, 115, 21)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 30, 2010; Rating Delta: −3.67611036339", + "x": 283.35413354531, + "y": 250.35413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 08, 2005; Rating Delta: 0.0238896366084", + "x": 265.7261526232115, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 17, 2006; Rating Delta: −0.0761103633916", + "x": 271.335453100159, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 12, 1997; Rating Delta: 1.42388963661", + "x": 239.35095389507154, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 2002; Rating Delta: 1.12388963661", + "x": 257.7138314785374, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 11, 2004; Rating Delta: −1.47611036339", + "x": 262.8549284578696, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: May 11, 2007; Rating Delta: −0.476110363392", + "x": 273.0043720190779, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 24, 1997; Rating Delta: 1.52388963661", + "x": 239.75158982511923, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 145, 45)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 27, 2004; Rating Delta: −2.97611036339", + "x": 261.85373608903024, + "y": 224.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 10, 2003; Rating Delta: −1.27611036339", + "x": 260.51788553259144, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 21, 2003; Rating Delta: −0.276110363392", + "x": 258.3147853736089, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 2006; Rating Delta: −0.176110363392", + "x": 271.6025437201908, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 06, 1998; Rating Delta: 1.22388963661", + "x": 243.3577106518283, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 05, 2007; Rating Delta: −0.276110363392", + "x": 274.40659777424486, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 2004; Rating Delta: −0.576110363392", + "x": 264.79173290937996, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 14, 2003; Rating Delta: −0.0761103633916", + "x": 258.248012718601, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 24, 2009; Rating Delta: −1.27611036339", + "x": 280.683227344992, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 15, 2006; Rating Delta: 0.523889636608", + "x": 270.73410174880763, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 07, 2002; Rating Delta: 0.323889636608", + "x": 256.4256756756757, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 25, 2002; Rating Delta: −0.976110363392", + "x": 257.17925278219394, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 1996; Rating Delta: 0.123889636608", + "x": 236.8139904610493, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 14, 2001; Rating Delta: −0.676110363392", + "x": 253.30643879173292, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 16, 2007; Rating Delta: −1.07611036339", + "x": 272.20349761526234, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 19, 2008; Rating Delta: −1.57611036339", + "x": 277.7452305246423, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 2000; Rating Delta: 0.423889636608", + "x": 250.7408585055644, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(198, 106, 14)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 01, 2003; Rating Delta: −3.87611036339", + "x": 259.8501589825119, + "y": 257.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 22, 1997; Rating Delta: −0.776110363392", + "x": 239.15063593004768, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 07, 2009; Rating Delta: −0.476110363392", + "x": 280.816772655008, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: May 05, 2000; Rating Delta: 2.02388963661", + "x": 248.5655802861685, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(180, 93, 11)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 21, 2001; Rating Delta: −4.27611036339", + "x": 253.37321144674084, + "y": 272.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 22, 1999; Rating Delta: −1.57611036339", + "x": 244.09220985691576, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 21, 2007; Rating Delta: −0.676110363392", + "x": 274.27305246422895, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 10, 1999; Rating Delta: 2.12388963661", + "x": 247.1637519872814, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 22, 2005; Rating Delta: −0.276110363392", + "x": 265.8596979332273, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 03, 2007; Rating Delta: 1.82388963661", + "x": 273.8056438791733, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 07, 2005; Rating Delta: 1.42388963661", + "x": 267.4622416534181, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 18, 1999; Rating Delta: −0.176110363392", + "x": 245.49403815580285, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 04, 2000; Rating Delta: −0.876110363392", + "x": 247.69793322734498, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 12, 2006; Rating Delta: 0.623889636608", + "x": 269.53219395866455, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 30, 2004; Rating Delta: −1.57611036339", + "x": 262.4542925278219, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: May 19, 1998; Rating Delta: −1.47611036339", + "x": 241.72615262321142, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 09, 2000; Rating Delta: 0.123889636608", + "x": 248.89944356120824, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 2008; Rating Delta: −0.0761103633916", + "x": 278.7281399046105, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 20, 1987; Rating Delta: 1.82388963661", + "x": 202.55961844197137, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 26, 2001; Rating Delta: 1.02388963661", + "x": 254.2893481717011, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 22, 2007; Rating Delta: 0.0238896366084", + "x": 274.28259141494436, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 12, 2003; Rating Delta: 0.823889636608", + "x": 261.1192368839428, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1999; Rating Delta: 0.923889636608", + "x": 247.30683624801273, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 04, 2000; Rating Delta: 0.523889636608", + "x": 249.43362480127183, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 01, 2007; Rating Delta: −0.0761103633916", + "x": 273.2046899841017, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 12, 2005; Rating Delta: 0.523889636608", + "x": 266.9280604133545, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 21, 2008; Rating Delta: −0.176110363392", + "x": 276.0091414944356, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 31, 2005; Rating Delta: 1.32388963661", + "x": 267.10930047694757, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 28, 2004; Rating Delta: 1.62388963661", + "x": 263.30325914149444, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 16, 1978; Rating Delta: 0.723889636608", + "x": 172.31120826709062, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 12, 2010; Rating Delta: 0.823889636608", + "x": 282.88712241653417, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 16, 1997; Rating Delta: −0.976110363392", + "x": 238.7976947535771, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 26, 2005; Rating Delta: −0.376110363392", + "x": 267.0616057233704, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 09, 2004; Rating Delta: 0.723889636608", + "x": 262.2539745627981, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 17, 2000; Rating Delta: −0.576110363392", + "x": 250.4356120826709, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 06, 2007; Rating Delta: 1.62388963661", + "x": 272.67050874403816, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 176, 93)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 09, 2005; Rating Delta: −2.27611036339", + "x": 267.77742448330685, + "y": 197.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 05, 2005; Rating Delta: 1.62388963661", + "x": 267.4431637519873, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 09, 2000; Rating Delta: −0.476110363392", + "x": 248.89944356120824, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 11, 1997; Rating Delta: 1.12388963661", + "x": 237.88195548489665, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 13, 2006; Rating Delta: −1.67611036339", + "x": 271.00119236883944, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 22, 2004; Rating Delta: −0.576110363392", + "x": 264.1236089030207, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 25, 2010; Rating Delta: −0.476110363392", + "x": 283.8883147853736, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 25, 2005; Rating Delta: −0.576110363392", + "x": 265.5930047694754, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 06, 2000; Rating Delta: −1.47611036339", + "x": 250.0345786963434, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 09, 2001; Rating Delta: −0.776110363392", + "x": 251.5039745627981, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 17, 2003; Rating Delta: 0.523889636608", + "x": 260.58465818759936, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 31, 2003; Rating Delta: −0.776110363392", + "x": 258.114467408585, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 17, 2003; Rating Delta: −0.776110363392", + "x": 257.9809220985692, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 20, 2001; Rating Delta: 1.42388963661", + "x": 252.7722575516693, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 28, 2009; Rating Delta: −1.77611036339", + "x": 281.0170906200318, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 20, 2007; Rating Delta: 0.923889636608", + "x": 273.6720985691574, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 16, 1998; Rating Delta: 0.0238896366084", + "x": 240.55325914149444, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1996; Rating Delta: −0.276110363392", + "x": 236.8616852146264, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: May 12, 2000; Rating Delta: −0.276110363392", + "x": 248.63235294117646, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 02, 2008; Rating Delta: 0.223889636608", + "x": 276.99165341812403, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 172, 86)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 05, 2007; Rating Delta: −2.37611036339", + "x": 271.8028616852146, + "y": 201.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 13, 2008; Rating Delta: −1.07611036339", + "x": 276.81041335453097, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 01, 1999; Rating Delta: 1.22388963661", + "x": 246.49562798092208, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 14, 2006; Rating Delta: 0.923889636608", + "x": 269.26510333863274, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 10, 2006; Rating Delta: 0.723889636608", + "x": 271.26868044515106, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: May 17, 2002; Rating Delta: −1.37611036339", + "x": 255.64348171701113, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 30, 2010; Rating Delta: 1.12388963661", + "x": 283.35413354531, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 22, 2008; Rating Delta: −0.776110363392", + "x": 277.4781399046105, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 22, 2005; Rating Delta: 0.623889636608", + "x": 266.7277424483307, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 11, 2003; Rating Delta: −0.776110363392", + "x": 258.78179650238474, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 10, 2003; Rating Delta: 0.223889636608", + "x": 260.51788553259144, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 05, 2004; Rating Delta: 0.323889636608", + "x": 261.92050874403816, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 28, 2005; Rating Delta: −0.676110363392", + "x": 265.05882352941177, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 16, 2005; Rating Delta: 0.423889636608", + "x": 268.13036565977745, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 28, 2003; Rating Delta: −1.17611036339", + "x": 258.64864864864865, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 20, 2001; Rating Delta: 1.32388963661", + "x": 252.7722575516693, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 11, 2005; Rating Delta: 0.0238896366084", + "x": 265.1923688394277, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: May 01, 1998; Rating Delta: 0.523889636608", + "x": 241.55445151033385, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(227, 141, 42)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 09, 2001; Rating Delta: −3.07611036339", + "x": 253.84101748807632, + "y": 227.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 11, 2008; Rating Delta: 1.02388963661", + "x": 277.0775039745628, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 02, 2004; Rating Delta: 0.523889636608", + "x": 262.18759936406997, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: May 28, 2004; Rating Delta: −0.576110363392", + "x": 262.7213831478537, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 23, 2004; Rating Delta: 0.423889636608", + "x": 263.25556438791733, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 24, 2000; Rating Delta: −1.67611036339", + "x": 248.16534181240064, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 02, 2001; Rating Delta: −1.47611036339", + "x": 251.17011128775835, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 23, 1999; Rating Delta: −1.67611036339", + "x": 245.82790143084262, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 05, 2002; Rating Delta: −0.176110363392", + "x": 255.24324324324323, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 31, 2000; Rating Delta: 1.32388963661", + "x": 248.23211446740856, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 01, 2000; Rating Delta: −1.97611036339", + "x": 249.70071542130364, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 26, 2001; Rating Delta: −0.176110363392", + "x": 253.7070747217806, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(239, 163, 72)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 24, 2008; Rating Delta: −2.57611036339", + "x": 278.079093799682, + "y": 209.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 2006; Rating Delta: 0.423889636608", + "x": 271.3736089030207, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 23, 2005; Rating Delta: 1.32388963661", + "x": 267.3286963434022, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 11, 2005; Rating Delta: −0.576110363392", + "x": 265.1923688394277, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 2007; Rating Delta: 0.523889636608", + "x": 274.85532591414943, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 25, 2008; Rating Delta: 0.423889636608", + "x": 276.34300476947533, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 30, 2004; Rating Delta: 0.923889636608", + "x": 263.3223370429253, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: May 12, 2000; Rating Delta: −1.57611036339", + "x": 248.63235294117646, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 23, 2007; Rating Delta: −1.27611036339", + "x": 272.53696343402225, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 10, 2006; Rating Delta: 0.223889636608", + "x": 268.9316375198728, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 2008; Rating Delta: 0.423889636608", + "x": 277.8787758346582, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 15, 2002; Rating Delta: −2.17611036339", + "x": 257.3799682034976, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 172, 86)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 12, 2002; Rating Delta: −2.37611036339", + "x": 256.1776629570747, + "y": 201.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 09, 1998; Rating Delta: −1.57611036339", + "x": 243.0902225755167, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(237, 158, 65)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 26, 2008; Rating Delta: −2.67611036339", + "x": 278.39427662957075, + "y": 212.85413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 22, 2008; Rating Delta: 0.123889636608", + "x": 277.4781399046105, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 02, 2004; Rating Delta: −0.876110363392", + "x": 262.18759936406997, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 09, 2007; Rating Delta: −0.276110363392", + "x": 272.13672496025436, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 05, 2009; Rating Delta: 1.62388963661", + "x": 280.2158187599364, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 18, 2000; Rating Delta: −1.97611036339", + "x": 247.8314785373609, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 06, 2007; Rating Delta: 0.623889636608", + "x": 272.67050874403816, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 18, 2003; Rating Delta: 0.823889636608", + "x": 258.84856915739266, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 08, 2006; Rating Delta: 0.623889636608", + "x": 271.5357710651828, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 04, 2000; Rating Delta: −0.776110363392", + "x": 249.43362480127183, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 25, 1998; Rating Delta: −1.57611036339", + "x": 243.5389507154213, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 05, 2003; Rating Delta: −1.67611036339", + "x": 261.0524642289348, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(205, 115, 21)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 10, 2005; Rating Delta: −3.67611036339", + "x": 266.32710651828296, + "y": 250.35413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: May 05, 2006; Rating Delta: −0.976110363392", + "x": 269.46542130365657, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: May 29, 1998; Rating Delta: −0.976110363392", + "x": 241.82154213036566, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 14, 2008; Rating Delta: 0.923889636608", + "x": 275.9423688394277, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 08, 2007; Rating Delta: −0.876110363392", + "x": 273.2714626391097, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 11, 2005; Rating Delta: 1.02388963661", + "x": 265.4594594594594, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 06, 2006; Rating Delta: −0.576110363392", + "x": 268.3306836248013, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 03, 2007; Rating Delta: 0.223889636608", + "x": 273.8056438791733, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 27, 2002; Rating Delta: 1.32388963661", + "x": 257.7806041335453, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 26, 2001; Rating Delta: 1.22388963661", + "x": 253.7070747217806, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 07, 2003; Rating Delta: −0.876110363392", + "x": 258.4483306836248, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: May 06, 2005; Rating Delta: −0.876110363392", + "x": 265.9932432432432, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 18, 2003; Rating Delta: −0.876110363392", + "x": 259.716613672496, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 2001; Rating Delta: −0.776110363392", + "x": 254.241653418124, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 15, 2002; Rating Delta: 0.923889636608", + "x": 257.3799682034976, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 04, 2004; Rating Delta: 1.42388963661", + "x": 262.7881558028617, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 18, 2005; Rating Delta: 1.32388963661", + "x": 267.86327503974564, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 11, 2007; Rating Delta: 1.12388963661", + "x": 273.5862480127186, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 15, 2009; Rating Delta: 1.02388963661", + "x": 280.5973767885532, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 16, 2001; Rating Delta: 0.923889636608", + "x": 253.90779014308424, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 17, 2006; Rating Delta: 0.423889636608", + "x": 271.335453100159, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 15, 1997; Rating Delta: 0.523889636608", + "x": 238.50198728139904, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 14, 2001; Rating Delta: −2.17611036339", + "x": 253.30643879173292, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 16, 1998; Rating Delta: −0.676110363392", + "x": 240.55325914149444, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: May 15, 1998; Rating Delta: 0.0238896366084", + "x": 241.68799682034978, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 13, 2003; Rating Delta: 0.0238896366084", + "x": 259.3827503974563, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 11, 2006; Rating Delta: 1.22388963661", + "x": 270.4002384737679, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 11, 2009; Rating Delta: −1.17611036339", + "x": 281.1506359300477, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 15, 2002; Rating Delta: −0.0761103633916", + "x": 254.7758346581876, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 29, 2005; Rating Delta: 0.323889636608", + "x": 265.9264705882353, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 10, 2005; Rating Delta: −0.876110363392", + "x": 266.32710651828296, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 20, 2007; Rating Delta: 1.72388963661", + "x": 272.80405405405406, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: May 05, 2000; Rating Delta: 0.323889636608", + "x": 248.5655802861685, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 26, 2010; Rating Delta: 1.92388963661", + "x": 283.02027027027026, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 01, 2004; Rating Delta: 0.523889636608", + "x": 263.9232909379968, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 20, 2003; Rating Delta: −0.576110363392", + "x": 259.44952305246426, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 13, 2008; Rating Delta: 0.823889636608", + "x": 276.81041335453097, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 21, 1996; Rating Delta: 0.223889636608", + "x": 235.07750397456277, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 14, 2003; Rating Delta: −0.476110363392", + "x": 258.51510333863274, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 26, 2009; Rating Delta: 1.52388963661", + "x": 280.41613672496027, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 22, 2005; Rating Delta: 1.22388963661", + "x": 266.7277424483307, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 05, 2004; Rating Delta: −0.0761103633916", + "x": 261.92050874403816, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: May 03, 2002; Rating Delta: 0.0238896366084", + "x": 255.50993640699525, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 13, 2003; Rating Delta: −1.07611036339", + "x": 259.3827503974563, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 24, 2000; Rating Delta: −1.07611036339", + "x": 248.16534181240064, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 31, 2006; Rating Delta: 0.623889636608", + "x": 269.13195548489665, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 01, 2009; Rating Delta: 0.823889636608", + "x": 280.4638314785374, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 15, 2002; Rating Delta: 1.12388963661", + "x": 255.0429252782194, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 18, 2005; Rating Delta: −0.276110363392", + "x": 265.5262321144674, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 27, 1997; Rating Delta: 1.22388963661", + "x": 239.49403815580285, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1969; Rating Delta: −1.07611036339", + "x": 142.84578696343402, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 25, 2003; Rating Delta: 1.02388963661", + "x": 258.91534181240064, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 18, 1999; Rating Delta: 0.423889636608", + "x": 245.49403815580285, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 25, 2006; Rating Delta: −0.476110363392", + "x": 270.5337837837838, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 13, 2002; Rating Delta: 0.723889636608", + "x": 256.7786168521463, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 19, 2008; Rating Delta: −0.276110363392", + "x": 277.7452305246423, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 145, 45)", + "ariaRoleDescription": "point", + "description": "Release Date: May 27, 1998; Rating Delta: −2.97611036339", + "x": 241.8024642289348, + "y": 224.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 30, 1999; Rating Delta: −0.476110363392", + "x": 245.02662957074725, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 2004; Rating Delta: 0.923889636608", + "x": 264.65818759936406, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 13, 1998; Rating Delta: −2.17611036339", + "x": 243.42448330683624, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 17, 1997; Rating Delta: −0.876110363392", + "x": 239.68481717011127, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 10, 2009; Rating Delta: −0.376110363392", + "x": 280.5496820349762, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 18, 2006; Rating Delta: 1.42388963661", + "x": 270.4670111287758, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 07, 2000; Rating Delta: −0.176110363392", + "x": 249.16653418124005, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2009; Rating Delta: 0.823889636608", + "x": 282.1526232114467, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 27, 2006; Rating Delta: 0.423889636608", + "x": 268.5310015898251, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 12, 2009; Rating Delta: −0.876110363392", + "x": 280.28259141494436, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 04, 2002; Rating Delta: −0.276110363392", + "x": 254.3751987281399, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(24, 83, 141)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 16, 2010; Rating Delta: 2.82388963661", + "x": 284.08863275039744, + "y": 6.6041386271866624 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 22, 2003; Rating Delta: −1.07611036339", + "x": 260.63235294117646, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 25, 1999; Rating Delta: −0.776110363392", + "x": 246.1426868044515, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 2006; Rating Delta: 0.923889636608", + "x": 271.6025437201908, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: May 22, 2008; Rating Delta: 0.323889636608", + "x": 276.6005564387917, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 15, 1999; Rating Delta: −0.976110363392", + "x": 244.02543720190778, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 13, 2006; Rating Delta: 0.823889636608", + "x": 271.00119236883944, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 18, 2009; Rating Delta: −0.0761103633916", + "x": 281.21740858505564, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 24, 2009; Rating Delta: −1.07611036339", + "x": 279.8151828298887, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 23, 2009; Rating Delta: −0.176110363392", + "x": 278.9475357710652, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 19, 1997; Rating Delta: −0.176110363392", + "x": 239.4177265500795, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 20, 2007; Rating Delta: −0.176110363392", + "x": 273.6720985691574, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 24, 2006; Rating Delta: 1.42388963661", + "x": 269.0651828298887, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 05, 1999; Rating Delta: 1.72388963661", + "x": 246.82988871224165, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: May 24, 2002; Rating Delta: 0.0238896366084", + "x": 255.71025437201905, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 172, 86)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 23, 1999; Rating Delta: −2.37611036339", + "x": 245.82790143084262, + "y": 201.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 04, 1999; Rating Delta: −0.0761103633916", + "x": 245.36049284578698, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 02, 2009; Rating Delta: 0.223889636608", + "x": 281.35095389507154, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 17, 2007; Rating Delta: −0.276110363392", + "x": 273.93918918918916, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 14, 2007; Rating Delta: 0.0238896366084", + "x": 274.206279809221, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: May 07, 2010; Rating Delta: 1.02388963661", + "x": 283.420906200318, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: May 02, 2008; Rating Delta: 1.62388963661", + "x": 276.4097774244833, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 04, 1999; Rating Delta: 1.62388963661", + "x": 245.94236883942767, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 29, 2008; Rating Delta: 1.12388963661", + "x": 277.54491255961847, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 22, 2005; Rating Delta: 0.623889636608", + "x": 266.7277424483307, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 28, 2000; Rating Delta: −1.37611036339", + "x": 247.63116057233705, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 01, 2002; Rating Delta: −0.976110363392", + "x": 257.24642289348174, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 30, 2003; Rating Delta: 0.623889636608", + "x": 259.2492050874404, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 16, 2007; Rating Delta: −0.776110363392", + "x": 272.47019077901433, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 11, 1998; Rating Delta: −1.67611036339", + "x": 243.69157392686805, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1997; Rating Delta: 1.32388963661", + "x": 240.34340222575517, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 14, 1997; Rating Delta: −0.276110363392", + "x": 239.9523052464229, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 04, 2005; Rating Delta: 0.823889636608", + "x": 265.3926868044515, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 24, 1999; Rating Delta: −0.176110363392", + "x": 246.42885532591416, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 04, 2005; Rating Delta: 0.923889636608", + "x": 267.72972972972974, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 19, 1999; Rating Delta: −1.47611036339", + "x": 244.35930047694754, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 19, 1999; Rating Delta: 0.0238896366084", + "x": 246.96343402225756, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 2002; Rating Delta: −0.276110363392", + "x": 257.44674085850556, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 17, 2006; Rating Delta: 1.72388963661", + "x": 271.335453100159, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 14, 2008; Rating Delta: 0.523889636608", + "x": 278.2798092209857, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 18, 2009; Rating Delta: −0.976110363392", + "x": 281.21740858505564, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 22, 2006; Rating Delta: 0.923889636608", + "x": 270.80087440381556, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 25, 2002; Rating Delta: 0.0238896366084", + "x": 257.17925278219394, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 11, 2008; Rating Delta: −0.376110363392", + "x": 277.0775039745628, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 11, 2001; Rating Delta: −0.876110363392", + "x": 251.81836248012718, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 24, 2001; Rating Delta: 0.423889636608", + "x": 253.10612082670906, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 31, 2001; Rating Delta: −0.576110363392", + "x": 253.172893481717, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 18, 2003; Rating Delta: −0.476110363392", + "x": 259.716613672496, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 29, 2003; Rating Delta: −0.976110363392", + "x": 260.1172496025437, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 21, 2007; Rating Delta: 1.42388963661", + "x": 274.27305246422895, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 167, 79)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 07, 2004; Rating Delta: −2.47611036339", + "x": 262.23489666136726, + "y": 205.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 26, 2004; Rating Delta: −0.0761103633916", + "x": 262.12082670906204, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 13, 2002; Rating Delta: −1.17611036339", + "x": 257.6470588235294, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 27, 2007; Rating Delta: 0.123889636608", + "x": 272.870826709062, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 27, 2001; Rating Delta: −0.576110363392", + "x": 252.83903020667725, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 16, 2005; Rating Delta: 0.523889636608", + "x": 267.2619236883943, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: May 12, 2006; Rating Delta: −1.27611036339", + "x": 269.53219395866455, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 14, 2003; Rating Delta: −1.07611036339", + "x": 258.248012718601, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 2001; Rating Delta: −0.976110363392", + "x": 254.241653418124, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 18, 2010; Rating Delta: −1.97611036339", + "x": 283.82154213036563, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 15, 2002; Rating Delta: 0.323889636608", + "x": 254.7758346581876, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 04, 2002; Rating Delta: 0.0238896366084", + "x": 256.9789348171701, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 16, 2010; Rating Delta: 0.323889636608", + "x": 283.22058823529414, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 11, 2001; Rating Delta: −1.17611036339", + "x": 251.81836248012718, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 05, 2001; Rating Delta: −0.876110363392", + "x": 253.50675675675674, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 13, 1996; Rating Delta: 0.923889636608", + "x": 236.74721780604133, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 24, 2001; Rating Delta: 0.523889636608", + "x": 253.10612082670906, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 16, 2000; Rating Delta: 0.423889636608", + "x": 248.96621621621622, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 15, 2004; Rating Delta: 0.823889636608", + "x": 264.0568362480127, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 07, 2009; Rating Delta: 0.923889636608", + "x": 280.816772655008, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 14, 2008; Rating Delta: −0.376110363392", + "x": 275.66613672496027, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 03, 2005; Rating Delta: 0.823889636608", + "x": 266.84220985691576, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 05, 2007; Rating Delta: 1.62388963661", + "x": 274.98887122416534, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 18, 2001; Rating Delta: 1.62388963661", + "x": 252.75317965023848, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 13, 2000; Rating Delta: 0.0238896366084", + "x": 250.10135135135135, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 10, 2003; Rating Delta: −1.17611036339", + "x": 257.9141494435612, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 21, 2002; Rating Delta: −2.17611036339", + "x": 255.97734499205086, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 15, 2003; Rating Delta: −0.476110363392", + "x": 259.9837042925278, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 19, 2002; Rating Delta: 0.223889636608", + "x": 256.24443561208267, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2001; Rating Delta: −0.0761103633916", + "x": 254.2798092209857, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 17, 2003; Rating Delta: −2.17611036339", + "x": 257.9809220985692, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 16, 2010; Rating Delta: 1.82388963661", + "x": 283.22058823529414, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 18, 2000; Rating Delta: −0.0761103633916", + "x": 249.56717011128777, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 06, 2001; Rating Delta: 0.0238896366084", + "x": 252.63871224165342, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 11, 2010; Rating Delta: −0.176110363392", + "x": 283.7547694753577, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 10, 1977; Rating Delta: 0.123889636608", + "x": 169.35413354531, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 13, 2005; Rating Delta: 0.623889636608", + "x": 266.0600158982512, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 16, 2004; Rating Delta: 1.72388963661", + "x": 262.32074721780606, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 10, 2003; Rating Delta: 1.92388963661", + "x": 260.51788553259144, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: May 06, 2005; Rating Delta: 0.823889636608", + "x": 265.9932432432432, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 12, 2004; Rating Delta: 0.923889636608", + "x": 264.3243243243243, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 13, 2002; Rating Delta: 0.523889636608", + "x": 255.02384737678855, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 1997; Rating Delta: 0.123889636608", + "x": 239.5512718600954, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 14, 2005; Rating Delta: 1.32388963661", + "x": 268.1112877583466, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 01, 2007; Rating Delta: 1.22388963661", + "x": 273.2046899841017, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 23, 2010; Rating Delta: 0.323889636608", + "x": 283.8692368839428, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 28, 2007; Rating Delta: 0.823889636608", + "x": 274.3398251192369, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 2001; Rating Delta: −1.97611036339", + "x": 253.95548489666137, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 11, 2002; Rating Delta: −0.276110363392", + "x": 257.0457074721781, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 20, 2009; Rating Delta: 0.123889636608", + "x": 279.48131955484894, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 04, 1998; Rating Delta: −2.17611036339", + "x": 242.75635930047696, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 26, 2001; Rating Delta: 1.02388963661", + "x": 253.7070747217806, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 24, 2004; Rating Delta: −1.57611036339", + "x": 264.43879173290935, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 154, 58)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 22, 2005; Rating Delta: −2.77611036339", + "x": 265.8596979332273, + "y": 216.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: May 11, 2001; Rating Delta: 0.323889636608", + "x": 252.10453100158983, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 14, 2007; Rating Delta: 1.52388963661", + "x": 275.07472178060414, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1997; Rating Delta: 0.723889636608", + "x": 240.34340222575517, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 25, 2002; Rating Delta: −0.576110363392", + "x": 254.57551669316376, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 19, 1997; Rating Delta: 2.12388963661", + "x": 239.4177265500795, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 16, 2009; Rating Delta: 0.923889636608", + "x": 281.48449920508745, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 01, 2004; Rating Delta: 0.223889636608", + "x": 263.9232909379968, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 26, 2004; Rating Delta: −0.0761103633916", + "x": 262.12082670906204, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 21, 2006; Rating Delta: −0.476110363392", + "x": 270.199920508744, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 16, 2006; Rating Delta: 0.523889636608", + "x": 269.8660572337043, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 19, 2008; Rating Delta: 0.0238896366084", + "x": 277.7452305246423, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 13, 2000; Rating Delta: −1.57611036339", + "x": 250.10135135135135, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 05, 2009; Rating Delta: −0.976110363392", + "x": 280.2158187599364, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 12, 2002; Rating Delta: 0.223889636608", + "x": 255.3096184419714, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 12, 2007; Rating Delta: 1.22388963661", + "x": 274.4733704292528, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: May 16, 2003; Rating Delta: 1.02388963661", + "x": 259.11565977742447, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 30, 2004; Rating Delta: −0.576110363392", + "x": 262.4542925278219, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 06, 2004; Rating Delta: −1.07611036339", + "x": 263.38910969793324, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: May 13, 2005; Rating Delta: 1.12388963661", + "x": 266.0600158982512, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(212, 123, 28)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 24, 2006; Rating Delta: −3.47611036339", + "x": 269.0651828298887, + "y": 242.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 06, 2006; Rating Delta: 1.52388963661", + "x": 270.93441971383146, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 12, 2001; Rating Delta: −0.376110363392", + "x": 250.9697933227345, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 02, 2001; Rating Delta: −1.27611036339", + "x": 251.17011128775835, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 22, 2010; Rating Delta: −1.27611036339", + "x": 282.41971383147853, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 14, 2007; Rating Delta: 0.823889636608", + "x": 275.07472178060414, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 04, 2008; Rating Delta: −0.176110363392", + "x": 276.1426868044515, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 2006; Rating Delta: 1.82388963661", + "x": 271.6502384737679, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 13, 2006; Rating Delta: 0.0238896366084", + "x": 268.3974562798092, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 29, 1999; Rating Delta: 1.12388963661", + "x": 247.34499205087442, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 21, 1997; Rating Delta: 0.423889636608", + "x": 237.68203497615264, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 06, 2002; Rating Delta: 1.42388963661", + "x": 257.58028616852147, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 09, 2004; Rating Delta: −0.476110363392", + "x": 261.38632750397454, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 23, 2005; Rating Delta: 0.123889636608", + "x": 267.91096979332275, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 07, 2001; Rating Delta: 0.923889636608", + "x": 253.23966613672496, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 10, 2004; Rating Delta: 0.923889636608", + "x": 264.59141494435613, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 21, 2003; Rating Delta: 1.02388963661", + "x": 258.3147853736089, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 16, 1999; Rating Delta: −0.976110363392", + "x": 244.8930842607313, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 03, 2002; Rating Delta: −1.87611036339", + "x": 256.09181240063594, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 21, 2002; Rating Delta: 0.823889636608", + "x": 255.97734499205086, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 04, 1999; Rating Delta: 0.623889636608", + "x": 245.36049284578698, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 10, 1999; Rating Delta: −0.876110363392", + "x": 246.87758346581876, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 30, 1998; Rating Delta: 0.223889636608", + "x": 243.29093799682033, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: May 02, 2003; Rating Delta: −1.57611036339", + "x": 258.98211446740856, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: May 14, 2010; Rating Delta: 0.0238896366084", + "x": 283.4876788553259, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 05, 2002; Rating Delta: −0.176110363392", + "x": 255.24324324324323, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 27, 2006; Rating Delta: 1.52388963661", + "x": 270.84856915739266, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 22, 1998; Rating Delta: 0.423889636608", + "x": 242.33664546899843, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 30, 2002; Rating Delta: 0.523889636608", + "x": 257.8092209856916, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 26, 2006; Rating Delta: 1.72388963661", + "x": 270.2476152623212, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 20, 2007; Rating Delta: 0.423889636608", + "x": 272.80405405405406, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 09, 2007; Rating Delta: −0.0761103633916", + "x": 274.7408585055644, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 10, 2006; Rating Delta: 1.42388963661", + "x": 268.664546899841, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 07, 2003; Rating Delta: −0.176110363392", + "x": 258.181240063593, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 21, 2000; Rating Delta: −1.27611036339", + "x": 249.30007949125596, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 28, 2006; Rating Delta: 0.323889636608", + "x": 269.39864864864865, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 03, 1998; Rating Delta: −1.47611036339", + "x": 241.28775834658188, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 23, 1999; Rating Delta: −1.47611036339", + "x": 244.95985691573927, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 21, 2000; Rating Delta: 0.423889636608", + "x": 248.43203497615264, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 14, 1997; Rating Delta: 0.423889636608", + "x": 237.61526232114468, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: May 21, 1999; Rating Delta: −1.17611036339", + "x": 245.22694753577105, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 28, 2002; Rating Delta: 0.523889636608", + "x": 256.04411764705884, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(43, 113, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 18, 2002; Rating Delta: 2.42388963661", + "x": 257.6947535771065, + "y": 21.604138627186675 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(38, 106, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 2003; Rating Delta: 2.52388963661", + "x": 261.1669316375199, + "y": 17.85413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(38, 106, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 2001; Rating Delta: 2.52388963661", + "x": 254.22257551669315, + "y": 17.85413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 16, 2005; Rating Delta: 1.42388963661", + "x": 267.2619236883943, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 24, 2004; Rating Delta: −0.576110363392", + "x": 263.8565182829889, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 24, 2006; Rating Delta: 0.423889636608", + "x": 269.0651828298887, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 17, 2007; Rating Delta: −0.876110363392", + "x": 273.93918918918916, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 05, 2003; Rating Delta: 1.52388963661", + "x": 261.0524642289348, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 09, 2007; Rating Delta: −0.576110363392", + "x": 272.13672496025436, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 172, 86)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 31, 2010; Rating Delta: −2.37611036339", + "x": 283.06796502384736, + "y": 201.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 10, 1999; Rating Delta: −0.976110363392", + "x": 246.29531001589825, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 12, 2003; Rating Delta: 1.62388963661", + "x": 260.2507949125596, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 15, 2002; Rating Delta: 0.723889636608", + "x": 254.7758346581876, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 13, 2000; Rating Delta: −1.77611036339", + "x": 250.10135135135135, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 15, 2010; Rating Delta: 0.723889636608", + "x": 282.3529411764706, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: May 22, 1997; Rating Delta: −0.276110363392", + "x": 238.27305246422893, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 03, 2007; Rating Delta: −1.17611036339", + "x": 273.5099364069952, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 14, 2003; Rating Delta: −0.276110363392", + "x": 260.852146263911, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 09, 2010; Rating Delta: −1.87611036339", + "x": 283.15381558028616, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 10, 1998; Rating Delta: 0.123889636608", + "x": 242.22217806041337, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 14, 2006; Rating Delta: −0.576110363392", + "x": 270.1331478537361, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 26, 2008; Rating Delta: 0.823889636608", + "x": 277.8120031796502, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: May 04, 2007; Rating Delta: −0.376110363392", + "x": 272.9375993640699, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: May 05, 2000; Rating Delta: −1.97611036339", + "x": 248.5655802861685, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 28, 2007; Rating Delta: 1.32388963661", + "x": 274.3398251192369, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 26, 2003; Rating Delta: 0.523889636608", + "x": 260.38434022257553, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 07, 2003; Rating Delta: 1.62388963661", + "x": 260.78537360890306, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 27, 2000; Rating Delta: −0.976110363392", + "x": 250.23489666136723, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 11, 2009; Rating Delta: 0.323889636608", + "x": 282.0190779014309, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 22, 2005; Rating Delta: −1.57611036339", + "x": 266.44157392686805, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 17, 1999; Rating Delta: −0.0761103633916", + "x": 246.3620826709062, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 02, 2010; Rating Delta: 0.623889636608", + "x": 283.0870429252782, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 18, 2009; Rating Delta: −0.776110363392", + "x": 281.21740858505564, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 06, 2001; Rating Delta: −0.676110363392", + "x": 251.77066772655007, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(56, 128, 184)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 09, 2007; Rating Delta: 2.22388963661", + "x": 272.13672496025436, + "y": 29.10413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 30, 2010; Rating Delta: −0.676110363392", + "x": 283.9360095389507, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 08, 2007; Rating Delta: 1.32388963661", + "x": 273.2714626391097, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: May 27, 2005; Rating Delta: −0.0761103633916", + "x": 266.1935612082671, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 07, 1997; Rating Delta: −0.176110363392", + "x": 239.88553259141494, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 13, 2001; Rating Delta: 0.0238896366084", + "x": 252.70548489666137, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 07, 2008; Rating Delta: 0.523889636608", + "x": 278.21303656597775, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: May 27, 2005; Rating Delta: 0.323889636608", + "x": 266.1935612082671, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: May 13, 2005; Rating Delta: 1.12388963661", + "x": 266.0600158982512, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 22, 2005; Rating Delta: 0.123889636608", + "x": 265.8596979332273, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 24, 1998; Rating Delta: −1.27611036339", + "x": 242.35572337042925, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 16, 2009; Rating Delta: −0.976110363392", + "x": 278.88076311605727, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 04, 2003; Rating Delta: −0.576110363392", + "x": 258.7154213036566, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 23, 2004; Rating Delta: 1.42388963661", + "x": 262.387519872814, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 185, 107)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 25, 2005; Rating Delta: −2.07611036339", + "x": 265.3259141494436, + "y": 190.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 1999; Rating Delta: 1.12388963661", + "x": 247.27821939586644, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 14, 1997; Rating Delta: 0.0238896366084", + "x": 239.9523052464229, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(198, 106, 14)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 22, 2003; Rating Delta: −3.87611036339", + "x": 260.05047694753574, + "y": 257.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 07, 2008; Rating Delta: 0.123889636608", + "x": 275.8759936406995, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 13, 2006; Rating Delta: −1.77611036339", + "x": 271.00119236883944, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(180, 93, 11)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 18, 2005; Rating Delta: −4.27611036339", + "x": 265.2591414944356, + "y": 272.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 30, 2005; Rating Delta: 0.623889636608", + "x": 268.2639109697933, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(43, 113, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 31, 1999; Rating Delta: 2.42388963661", + "x": 244.7408585055644, + "y": 21.604138627186675 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 05, 2001; Rating Delta: −1.17611036339", + "x": 253.50675675675674, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 07, 2003; Rating Delta: −0.476110363392", + "x": 258.181240063593, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 08, 2005; Rating Delta: 1.52388963661", + "x": 266.59419713831477, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 15, 2008; Rating Delta: 1.12388963661", + "x": 277.41136724960256, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 19, 2002; Rating Delta: 0.323889636608", + "x": 255.37639109697932, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 19, 2008; Rating Delta: −0.476110363392", + "x": 277.7452305246423, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 23, 2001; Rating Delta: −1.77611036339", + "x": 251.37042925278217, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(223, 136, 38)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 21, 2008; Rating Delta: −3.17611036339", + "x": 276.0091414944356, + "y": 231.60413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 16, 2009; Rating Delta: −0.576110363392", + "x": 278.88076311605727, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: May 05, 2006; Rating Delta: −0.676110363392", + "x": 269.46542130365657, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 172, 86)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 18, 1997; Rating Delta: −2.37611036339", + "x": 237.9487281399046, + "y": 201.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 30, 2004; Rating Delta: 0.423889636608", + "x": 263.3223370429253, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 20, 1999; Rating Delta: −0.576110363392", + "x": 246.09499205087442, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 05, 2007; Rating Delta: 1.22388963661", + "x": 274.40659777424486, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 14, 2003; Rating Delta: 1.22388963661", + "x": 260.852146263911, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 20, 2010; Rating Delta: −0.176110363392", + "x": 284.42249602543717, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 27, 2006; Rating Delta: 0.423889636608", + "x": 268.5310015898251, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 20, 2004; Rating Delta: 1.02388963661", + "x": 263.52265500794914, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 22, 2003; Rating Delta: −1.57611036339", + "x": 260.05047694753574, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 11, 2008; Rating Delta: −1.47611036339", + "x": 277.0775039745628, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 2004; Rating Delta: 1.92388963661", + "x": 264.63910969793324, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(223, 136, 38)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 20, 2009; Rating Delta: −3.17611036339", + "x": 279.214626391097, + "y": 231.60413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: May 02, 2008; Rating Delta: −0.776110363392", + "x": 276.4097774244833, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 30, 2004; Rating Delta: 0.723889636608", + "x": 262.4542925278219, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 22, 2002; Rating Delta: 0.0238896366084", + "x": 254.84260731319554, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 27, 1998; Rating Delta: −2.87611036339", + "x": 241.22098569157393, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 23, 2000; Rating Delta: 0.623889636608", + "x": 249.03298887122418, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 09, 2005; Rating Delta: 0.823889636608", + "x": 268.0635930047695, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 01, 1997; Rating Delta: 0.723889636608", + "x": 238.6546104928458, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 10, 2000; Rating Delta: 0.523889636608", + "x": 250.36883942766298, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(43, 113, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 16, 2001; Rating Delta: 2.42388963661", + "x": 251.57074721780603, + "y": 21.604138627186675 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 03, 1998; Rating Delta: −0.476110363392", + "x": 241.28775834658188, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 31, 2000; Rating Delta: −1.37611036339", + "x": 250.27344992050874, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 03, 2006; Rating Delta: 1.52388963661", + "x": 268.86486486486484, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 12, 1999; Rating Delta: −0.676110363392", + "x": 244.2925278219396, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 13, 1998; Rating Delta: 0.623889636608", + "x": 243.42448330683624, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 16, 2004; Rating Delta: 1.32388963661", + "x": 263.18879173290935, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 1999; Rating Delta: 1.72388963661", + "x": 247.23052464228937, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 06, 2009; Rating Delta: 0.123889636608", + "x": 281.6852146263911, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 31, 2006; Rating Delta: 0.323889636608", + "x": 269.13195548489665, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 03, 2002; Rating Delta: 1.12388963661", + "x": 256.09181240063594, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 2000; Rating Delta: 0.523889636608", + "x": 250.76947535771066, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 24, 2005; Rating Delta: −1.57611036339", + "x": 265.5834658187599, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 24, 2000; Rating Delta: 0.623889636608", + "x": 248.74682034976152, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 05, 2006; Rating Delta: 0.623889636608", + "x": 269.46542130365657, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 2000; Rating Delta: −0.176110363392", + "x": 250.76947535771066, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 26, 2003; Rating Delta: 1.12388963661", + "x": 260.966613672496, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1998; Rating Delta: −0.876110363392", + "x": 243.82511923688395, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 2001; Rating Delta: 0.523889636608", + "x": 254.241653418124, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 02, 2002; Rating Delta: −1.37611036339", + "x": 256.3779809220986, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 18, 2003; Rating Delta: −1.47611036339", + "x": 258.84856915739266, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 29, 2005; Rating Delta: −0.376110363392", + "x": 266.79451510333865, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 26, 2003; Rating Delta: 1.32388963661", + "x": 260.38434022257553, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 10, 2000; Rating Delta: −1.17611036339", + "x": 248.03179650238474, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 30, 2005; Rating Delta: 0.723889636608", + "x": 267.3954689984102, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 24, 1999; Rating Delta: 0.423889636608", + "x": 246.42885532591416, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: May 13, 2005; Rating Delta: −0.0761103633916", + "x": 266.0600158982512, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 17, 2001; Rating Delta: −0.576110363392", + "x": 253.0393481717011, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 27, 2006; Rating Delta: 1.12388963661", + "x": 268.5310015898251, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 1997; Rating Delta: 0.223889636608", + "x": 240.01907790143085, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 13, 1998; Rating Delta: 0.923889636608", + "x": 241.08744038155803, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: May 13, 2005; Rating Delta: −1.17611036339", + "x": 266.0600158982512, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 27, 2002; Rating Delta: 0.423889636608", + "x": 256.91216216216213, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 2003; Rating Delta: −0.176110363392", + "x": 261.1860095389507, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 26, 2001; Rating Delta: 0.923889636608", + "x": 254.2893481717011, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 27, 2007; Rating Delta: 0.923889636608", + "x": 273.73887122416534, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 22, 1999; Rating Delta: −0.676110363392", + "x": 246.69594594594594, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 21, 2006; Rating Delta: 0.523889636608", + "x": 270.199920508744, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 29, 1999; Rating Delta: 2.02388963661", + "x": 246.7627186009539, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 22, 2002; Rating Delta: 0.923889636608", + "x": 254.84260731319554, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 24, 2003; Rating Delta: 1.12388963661", + "x": 261.2337042925278, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 02, 2001; Rating Delta: 1.12388963661", + "x": 253.77424483306837, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 22, 1997; Rating Delta: −0.576110363392", + "x": 239.15063593004768, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 12, 2009; Rating Delta: 1.72388963661", + "x": 280.28259141494436, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 20, 2004; Rating Delta: −1.07611036339", + "x": 261.78696343402225, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 2002; Rating Delta: 0.123889636608", + "x": 257.7138314785374, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 25, 2002; Rating Delta: 0.223889636608", + "x": 254.57551669316376, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: May 18, 2001; Rating Delta: 1.02388963661", + "x": 252.1713036565978, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 25, 2009; Rating Delta: 0.823889636608", + "x": 281.8664546899841, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 2004; Rating Delta: 0.123889636608", + "x": 264.70588235294116, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 06, 2000; Rating Delta: 0.723889636608", + "x": 250.0345786963434, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 17, 2004; Rating Delta: −0.676110363392", + "x": 263.7897456279809, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 06, 2004; Rating Delta: −0.176110363392", + "x": 261.65341812400635, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 21, 2002; Rating Delta: 1.42388963661", + "x": 255.97734499205086, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 20, 1998; Rating Delta: −1.07611036339", + "x": 241.15421303656598, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 09, 2005; Rating Delta: 0.823889636608", + "x": 268.0635930047695, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(227, 141, 42)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 1997; Rating Delta: −3.07611036339", + "x": 240.01907790143085, + "y": 227.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 1996; Rating Delta: 0.323889636608", + "x": 236.8139904610493, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 26, 2008; Rating Delta: −0.376110363392", + "x": 277.8120031796502, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 1997; Rating Delta: −0.176110363392", + "x": 240.28616852146263, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 24, 2003; Rating Delta: −0.976110363392", + "x": 259.7738473767886, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 29, 2006; Rating Delta: 0.823889636608", + "x": 271.73608903020664, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 20, 2009; Rating Delta: −0.176110363392", + "x": 281.818759936407, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(198, 106, 14)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 25, 2008; Rating Delta: −3.87611036339", + "x": 275.47535771065185, + "y": 257.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 01, 1999; Rating Delta: −0.776110363392", + "x": 246.49562798092208, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 28, 2005; Rating Delta: 1.52388963661", + "x": 268.2448330683625, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: May 07, 2010; Rating Delta: 0.923889636608", + "x": 283.420906200318, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 22, 2007; Rating Delta: 0.423889636608", + "x": 273.4050079491256, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: May 15, 2003; Rating Delta: 0.823889636608", + "x": 259.10612082670906, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 05, 2003; Rating Delta: 0.223889636608", + "x": 260.7662957074722, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: May 07, 2004; Rating Delta: 0.823889636608", + "x": 262.5210651828299, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 19, 1998; Rating Delta: 0.923889636608", + "x": 242.0218600953895, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 08, 2001; Rating Delta: 1.62388963661", + "x": 253.53537360890303, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: May 07, 1999; Rating Delta: 0.523889636608", + "x": 245.09340222575517, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: May 04, 2001; Rating Delta: −0.0761103633916", + "x": 252.03775834658185, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 01, 2008; Rating Delta: −1.17611036339", + "x": 277.27782193958666, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 23, 2005; Rating Delta: 1.52388963661", + "x": 268.1971383147854, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 14, 1999; Rating Delta: −0.176110363392", + "x": 245.74205087440382, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 19, 2002; Rating Delta: −0.376110363392", + "x": 255.37639109697932, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 27, 1999; Rating Delta: −0.776110363392", + "x": 246.16176470588235, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 2006; Rating Delta: 0.123889636608", + "x": 271.6693163751987, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 07, 2001; Rating Delta: −1.87611036339", + "x": 253.23966613672496, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 14, 2007; Rating Delta: 0.323889636608", + "x": 272.18441971383146, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 29, 2004; Rating Delta: 0.823889636608", + "x": 264.7726550079491, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 28, 2006; Rating Delta: −0.276110363392", + "x": 270.266693163752, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 27, 2009; Rating Delta: 0.523889636608", + "x": 279.5480922098569, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 16, 2003; Rating Delta: 0.923889636608", + "x": 258.82949125596184, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 02, 2001; Rating Delta: −0.376110363392", + "x": 251.43720190779015, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 20, 1997; Rating Delta: −0.0761103633916", + "x": 238.54968203497617, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 12, 2000; Rating Delta: 0.623889636608", + "x": 247.4785373608903, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 05, 2005; Rating Delta: 0.223889636608", + "x": 266.8612877583466, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 17, 2005; Rating Delta: 1.12388963661", + "x": 266.39387917329094, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 12, 1999; Rating Delta: −1.77611036339", + "x": 244.2925278219396, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 1996; Rating Delta: 0.0238896366084", + "x": 236.8139904610493, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 26, 2009; Rating Delta: 1.12388963661", + "x": 280.41613672496027, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 17, 2005; Rating Delta: 0.723889636608", + "x": 266.39387917329094, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 08, 2003; Rating Delta: 1.72388963661", + "x": 260.49880763116056, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 16, 2006; Rating Delta: −0.576110363392", + "x": 269.8660572337043, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 2002; Rating Delta: 1.02388963661", + "x": 257.7138314785374, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 16, 2008; Rating Delta: 0.623889636608", + "x": 276.5433227344992, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 19, 2004; Rating Delta: 0.623889636608", + "x": 264.39109697933225, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 01, 2006; Rating Delta: 0.323889636608", + "x": 271.4689984101749, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 14, 2008; Rating Delta: −0.0761103633916", + "x": 275.9423688394277, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 30, 2005; Rating Delta: −0.576110363392", + "x": 267.3954689984102, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 09, 2007; Rating Delta: 2.02388963661", + "x": 274.7408585055644, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 05, 2004; Rating Delta: 1.82388963661", + "x": 264.2575516693164, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 29, 1998; Rating Delta: 0.923889636608", + "x": 242.40341812400635, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 30, 2010; Rating Delta: −0.976110363392", + "x": 283.35413354531, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 09, 2009; Rating Delta: −1.07611036339", + "x": 278.8139904610493, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: May 10, 2002; Rating Delta: −0.876110363392", + "x": 255.57670906200318, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 27, 1998; Rating Delta: −0.576110363392", + "x": 241.22098569157393, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 03, 2000; Rating Delta: −1.87611036339", + "x": 247.96502384737678, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 11, 2003; Rating Delta: 0.0238896366084", + "x": 259.6498410174881, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 29, 2004; Rating Delta: 0.523889636608", + "x": 264.7726550079491, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 28, 1999; Rating Delta: 0.623889636608", + "x": 245.29372019077903, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 10, 2000; Rating Delta: −1.27611036339", + "x": 250.36883942766298, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 27, 2002; Rating Delta: 1.02388963661", + "x": 257.7806041335453, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 04, 2008; Rating Delta: −0.276110363392", + "x": 276.1426868044515, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 25, 2009; Rating Delta: 0.0238896366084", + "x": 281.8664546899841, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 10, 2000; Rating Delta: 0.323889636608", + "x": 248.03179650238474, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 15, 2010; Rating Delta: 1.02388963661", + "x": 284.67050874403816, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 27, 2000; Rating Delta: −1.37611036339", + "x": 250.23489666136723, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: May 22, 2009; Rating Delta: −0.376110363392", + "x": 280.08227344992054, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 2008; Rating Delta: 0.523889636608", + "x": 277.8787758346582, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 16, 2009; Rating Delta: 0.0238896366084", + "x": 278.88076311605727, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 27, 2007; Rating Delta: 2.02388963661", + "x": 273.73887122416534, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 16, 2007; Rating Delta: −0.776110363392", + "x": 272.47019077901433, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 07, 2001; Rating Delta: 1.72388963661", + "x": 254.1081081081081, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 27, 2007; Rating Delta: 0.0238896366084", + "x": 273.73887122416534, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 25, 2004; Rating Delta: 1.72388963661", + "x": 262.9884737678855, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 22, 2005; Rating Delta: −0.776110363392", + "x": 266.7277424483307, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 16, 2001; Rating Delta: −0.476110363392", + "x": 253.90779014308424, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 11, 2004; Rating Delta: 0.623889636608", + "x": 262.8549284578696, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 21, 2005; Rating Delta: 0.923889636608", + "x": 267.595786963434, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 09, 2007; Rating Delta: 1.22388963661", + "x": 272.40381558028616, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 11, 2005; Rating Delta: 0.623889636608", + "x": 265.1923688394277, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 10, 2003; Rating Delta: 0.123889636608", + "x": 260.51788553259144, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 22, 2005; Rating Delta: 0.223889636608", + "x": 265.8596979332273, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 04, 2006; Rating Delta: −0.376110363392", + "x": 270.3334658187599, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 23, 2007; Rating Delta: −0.0761103633916", + "x": 272.27027027027026, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 08, 2000; Rating Delta: 0.123889636608", + "x": 249.76748807631162, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 2001; Rating Delta: −0.376110363392", + "x": 254.241653418124, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 28, 2000; Rating Delta: −1.97611036339", + "x": 249.3668521462639, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 12, 2002; Rating Delta: −0.476110363392", + "x": 256.1776629570747, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 12, 2004; Rating Delta: 1.62388963661", + "x": 264.3243243243243, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 21, 2007; Rating Delta: 1.92388963661", + "x": 274.27305246422895, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2005; Rating Delta: 0.623889636608", + "x": 268.2162162162162, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 17, 2006; Rating Delta: 0.223889636608", + "x": 268.731319554849, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 17, 1998; Rating Delta: −0.376110363392", + "x": 241.42090620031797, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 11, 2002; Rating Delta: −0.176110363392", + "x": 254.44197138314786, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 07, 2001; Rating Delta: 1.32388963661", + "x": 254.1081081081081, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 10, 2004; Rating Delta: −0.276110363392", + "x": 264.59141494435613, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 08, 2007; Rating Delta: 0.623889636608", + "x": 273.2714626391097, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 22, 2010; Rating Delta: 1.32388963661", + "x": 283.27782193958666, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 19, 1999; Rating Delta: 1.62388963661", + "x": 244.35930047694754, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 11, 2002; Rating Delta: 0.723889636608", + "x": 257.0457074721781, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 06, 2006; Rating Delta: −0.876110363392", + "x": 269.7706677265501, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 1999; Rating Delta: 0.323889636608", + "x": 247.27821939586644, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 16, 2007; Rating Delta: 1.72388963661", + "x": 273.3477742448331, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 07, 2006; Rating Delta: 0.823889636608", + "x": 270.0663751987281, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 21, 2002; Rating Delta: 0.723889636608", + "x": 256.5592209856916, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 18, 1998; Rating Delta: 0.623889636608", + "x": 242.88990461049283, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 25, 2009; Rating Delta: −1.57611036339", + "x": 281.28418124006356, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 26, 2001; Rating Delta: −2.87611036339", + "x": 253.7070747217806, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 13, 2006; Rating Delta: −0.276110363392", + "x": 271.00119236883944, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 2006; Rating Delta: 0.223889636608", + "x": 271.3831478537361, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 29, 2006; Rating Delta: −0.276110363392", + "x": 270.86764705882354, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 06, 2004; Rating Delta: −0.376110363392", + "x": 263.38910969793324, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 15, 2003; Rating Delta: 1.22388963661", + "x": 259.9837042925278, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 05, 2003; Rating Delta: −1.37611036339", + "x": 260.1840222575517, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 23, 1998; Rating Delta: −0.276110363392", + "x": 243.2237678855326, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 03, 2001; Rating Delta: −0.676110363392", + "x": 252.90580286168523, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 30, 2004; Rating Delta: 1.12388963661", + "x": 261.5866454689984, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 31, 1997; Rating Delta: 0.423889636608", + "x": 240.40063593004768, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 21, 2003; Rating Delta: 0.723889636608", + "x": 258.3147853736089, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 10, 2001; Rating Delta: −0.276110363392", + "x": 252.97257551669315, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 17, 2001; Rating Delta: −0.676110363392", + "x": 253.0393481717011, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 23, 2005; Rating Delta: 0.723889636608", + "x": 267.3286963434022, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 2001; Rating Delta: −0.476110363392", + "x": 253.95548489666137, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 23, 2009; Rating Delta: 0.123889636608", + "x": 278.9475357710652, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 26, 1998; Rating Delta: 0.823889636608", + "x": 242.08863275039744, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 2003; Rating Delta: −1.37611036339", + "x": 260.45111287758345, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 02, 1999; Rating Delta: −1.37611036339", + "x": 244.75993640699522, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: May 02, 2003; Rating Delta: 0.723889636608", + "x": 258.98211446740856, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 04, 2005; Rating Delta: −0.976110363392", + "x": 265.3926868044515, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 29, 2006; Rating Delta: 2.12388963661", + "x": 271.73608903020664, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 25, 2004; Rating Delta: 0.823889636608", + "x": 261.83465818759936, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1998; Rating Delta: 0.0238896366084", + "x": 243.82511923688395, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 05, 1999; Rating Delta: −0.476110363392", + "x": 244.22575516693163, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2003; Rating Delta: −0.176110363392", + "x": 261.2432432432432, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 17, 2008; Rating Delta: −0.876110363392", + "x": 278.0123211446741, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 11, 2004; Rating Delta: −0.976110363392", + "x": 263.43680445151034, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 03, 2001; Rating Delta: −0.376110363392", + "x": 252.90580286168523, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 26, 1997; Rating Delta: −0.476110363392", + "x": 239.48449920508745, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2003; Rating Delta: 0.823889636608", + "x": 261.2432432432432, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 25, 2003; Rating Delta: −0.776110363392", + "x": 258.91534181240064, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: May 21, 2010; Rating Delta: −0.0761103633916", + "x": 283.5544515103339, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 07, 2009; Rating Delta: 0.223889636608", + "x": 280.816772655008, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(189, 99, 12)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 07, 2006; Rating Delta: −4.07611036339", + "x": 269.1983306836248, + "y": 265.3541386271866 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 28, 2003; Rating Delta: 0.523889636608", + "x": 258.38155802861684, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 2004; Rating Delta: 0.923889636608", + "x": 264.70588235294116, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 04, 2003; Rating Delta: 0.923889636608", + "x": 258.7154213036566, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(56, 128, 184)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 27, 2002; Rating Delta: 2.22388963661", + "x": 257.7806041335453, + "y": 29.10413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 10, 2006; Rating Delta: −1.17611036339", + "x": 268.664546899841, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 09, 2003; Rating Delta: 1.72388963661", + "x": 259.6307631160572, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 07, 2006; Rating Delta: 1.02388963661", + "x": 270.0663751987281, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: May 25, 2007; Rating Delta: 0.723889636608", + "x": 273.1379173290938, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 11, 2004; Rating Delta: 0.123889636608", + "x": 262.8549284578696, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 18, 2000; Rating Delta: 0.723889636608", + "x": 247.8314785373609, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 24, 1999; Rating Delta: −1.17611036339", + "x": 247.2972972972973, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: May 12, 2000; Rating Delta: −1.17611036339", + "x": 248.63235294117646, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 12, 2010; Rating Delta: −0.476110363392", + "x": 282.62003179650236, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: May 04, 2007; Rating Delta: 0.323889636608", + "x": 272.9375993640699, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: May 14, 2010; Rating Delta: −0.976110363392", + "x": 283.4876788553259, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 16, 1999; Rating Delta: −0.976110363392", + "x": 245.76112877583464, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 23, 2010; Rating Delta: −1.87611036339", + "x": 283.28736089030207, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 19, 2001; Rating Delta: 0.623889636608", + "x": 251.03656597774244, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 08, 2000; Rating Delta: −0.176110363392", + "x": 250.63593004769476, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 2000; Rating Delta: 0.823889636608", + "x": 250.7027027027027, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 27, 2001; Rating Delta: −0.776110363392", + "x": 252.83903020667725, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 30, 2010; Rating Delta: 1.12388963661", + "x": 283.35413354531, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 20, 2009; Rating Delta: −0.176110363392", + "x": 281.818759936407, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(239, 163, 72)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 16, 2002; Rating Delta: −2.57611036339", + "x": 256.5115262321145, + "y": 209.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 08, 1998; Rating Delta: −1.47611036339", + "x": 241.33505564387917, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 25, 2009; Rating Delta: 0.423889636608", + "x": 281.28418124006356, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 154, 58)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2002; Rating Delta: −2.77611036339", + "x": 257.7615262321145, + "y": 216.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 29, 2001; Rating Delta: 0.223889636608", + "x": 252.57193958664544, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 25, 2009; Rating Delta: 0.623889636608", + "x": 281.28418124006356, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 16, 2004; Rating Delta: 0.123889636608", + "x": 262.32074721780606, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 154, 58)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 06, 2001; Rating Delta: −2.77611036339", + "x": 251.77066772655007, + "y": 216.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 10, 2004; Rating Delta: 0.423889636608", + "x": 264.3052464228935, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 16, 2004; Rating Delta: −0.476110363392", + "x": 261.4531001589825, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 14, 2009; Rating Delta: 1.52388963661", + "x": 280.8835453100159, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 29, 2001; Rating Delta: −1.77611036339", + "x": 252.57193958664544, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: May 12, 2006; Rating Delta: −0.676110363392", + "x": 269.53219395866455, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 16, 2002; Rating Delta: 0.123889636608", + "x": 256.5115262321145, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 16, 1998; Rating Delta: −0.776110363392", + "x": 243.15699523052464, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 30, 2006; Rating Delta: 0.523889636608", + "x": 269.9996025437202, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 13, 2009; Rating Delta: 1.22388963661", + "x": 281.75198728139907, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 03, 2004; Rating Delta: −0.576110363392", + "x": 263.65620031796504, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 20, 1998; Rating Delta: 0.423889636608", + "x": 241.15421303656598, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 06, 2009; Rating Delta: 1.22388963661", + "x": 281.6852146263911, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 24, 2008; Rating Delta: 0.423889636608", + "x": 278.079093799682, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 11, 2005; Rating Delta: −0.776110363392", + "x": 267.79650238473766, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 09, 2010; Rating Delta: 0.623889636608", + "x": 284.0218600953895, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 24, 1997; Rating Delta: −0.0761103633916", + "x": 237.14785373608902, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 27, 2006; Rating Delta: 1.22388963661", + "x": 271.7170111287758, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 02, 2004; Rating Delta: −0.676110363392", + "x": 262.18759936406997, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 17, 2005; Rating Delta: −1.17611036339", + "x": 266.39387917329094, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 2006; Rating Delta: 1.52388963661", + "x": 271.6025437201908, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 08, 2004; Rating Delta: 0.623889636608", + "x": 263.9900635930048, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: May 25, 2001; Rating Delta: −0.876110363392", + "x": 252.2380763116057, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 18, 1998; Rating Delta: 0.523889636608", + "x": 243.758346581876, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 11, 2008; Rating Delta: −1.17611036339", + "x": 276.2094594594595, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 16, 2005; Rating Delta: 0.623889636608", + "x": 267.2619236883943, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 29, 2002; Rating Delta: 0.623889636608", + "x": 255.1764705882353, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 19, 2009; Rating Delta: −0.876110363392", + "x": 280.3493640699523, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 20, 2006; Rating Delta: 2.12388963661", + "x": 271.06796502384736, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1997; Rating Delta: −0.776110363392", + "x": 240.34340222575517, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 04, 2000; Rating Delta: −0.276110363392", + "x": 249.43362480127183, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 04, 1998; Rating Delta: −1.77611036339", + "x": 243.6248012718601, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 28, 2000; Rating Delta: 0.623889636608", + "x": 249.08068362480128, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 01, 2009; Rating Delta: 0.823889636608", + "x": 280.4638314785374, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 03, 2002; Rating Delta: −0.376110363392", + "x": 256.09181240063594, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 11, 2006; Rating Delta: −1.27611036339", + "x": 270.4002384737679, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 11, 2002; Rating Delta: 1.12388963661", + "x": 257.0457074721781, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 05, 2008; Rating Delta: −0.176110363392", + "x": 278.48012718600955, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 06, 2009; Rating Delta: −0.276110363392", + "x": 279.0810810810811, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 23, 1999; Rating Delta: −0.376110363392", + "x": 244.95985691573927, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 2006; Rating Delta: 1.32388963661", + "x": 271.6502384737679, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 20, 2000; Rating Delta: 0.523889636608", + "x": 250.1681240063593, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 22, 2002; Rating Delta: −1.57611036339", + "x": 254.84260731319554, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 2002; Rating Delta: 0.923889636608", + "x": 257.44674085850556, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 154, 58)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 25, 2002; Rating Delta: −2.77611036339", + "x": 257.17925278219394, + "y": 216.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 10, 2008; Rating Delta: −0.176110363392", + "x": 277.9455484896661, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 30, 2006; Rating Delta: 1.32388963661", + "x": 270.87718600953895, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: May 15, 1998; Rating Delta: −1.27611036339", + "x": 241.68799682034978, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 25, 2006; Rating Delta: 0.223889636608", + "x": 270.5337837837838, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 02, 2006; Rating Delta: 0.823889636608", + "x": 270.3143879173291, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 29, 2002; Rating Delta: 1.32388963661", + "x": 257.5135135135135, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 24, 2003; Rating Delta: 0.623889636608", + "x": 260.6514308426073, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 1997; Rating Delta: 0.623889636608", + "x": 240.01907790143085, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 25, 2008; Rating Delta: 1.02388963661", + "x": 275.47535771065185, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 08, 1999; Rating Delta: −1.47611036339", + "x": 246.56240063593003, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 13, 2003; Rating Delta: −1.27611036339", + "x": 259.3827503974563, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 29, 2007; Rating Delta: 1.82388963661", + "x": 273.4717806041335, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(209, 119, 24)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 06, 2006; Rating Delta: −3.57611036339", + "x": 268.3306836248013, + "y": 246.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(212, 123, 28)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 08, 2002; Rating Delta: −3.47611036339", + "x": 254.70906200317964, + "y": 242.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 14, 2010; Rating Delta: 0.623889636608", + "x": 283.4876788553259, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 11, 2005; Rating Delta: 0.123889636608", + "x": 265.4594594594594, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 27, 2000; Rating Delta: 1.32388963661", + "x": 250.23489666136723, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 30, 1999; Rating Delta: −1.07611036339", + "x": 245.89467408585057, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 14, 2005; Rating Delta: −1.07611036339", + "x": 264.92527821939586, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 2006; Rating Delta: 1.12388963661", + "x": 271.6502384737679, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 31, 2000; Rating Delta: 0.123889636608", + "x": 248.23211446740856, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 09, 2004; Rating Delta: 1.42388963661", + "x": 263.1220190779014, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 04, 2002; Rating Delta: 1.02388963661", + "x": 256.9789348171701, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 10, 2008; Rating Delta: 1.42388963661", + "x": 278.52782193958666, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 05, 2007; Rating Delta: −0.676110363392", + "x": 272.66096979332275, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 01, 2005; Rating Delta: −1.57611036339", + "x": 266.52742448330685, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 16, 2001; Rating Delta: −0.0761103633916", + "x": 251.30365659777425, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 16, 2007; Rating Delta: −0.176110363392", + "x": 274.8076311605723, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 19, 2005; Rating Delta: 0.223889636608", + "x": 266.9948330683625, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 23, 2007; Rating Delta: 1.42388963661", + "x": 272.53696343402225, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 10, 1997; Rating Delta: −0.876110363392", + "x": 237.01430842607311, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 01, 2008; Rating Delta: 1.52388963661", + "x": 277.8596979332273, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 12, 2010; Rating Delta: 0.723889636608", + "x": 282.88712241653417, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 03, 2004; Rating Delta: 0.723889636608", + "x": 263.65620031796504, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 23, 2005; Rating Delta: 0.623889636608", + "x": 267.91096979332275, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 11, 2000; Rating Delta: −0.0761103633916", + "x": 249.5003974562798, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 06, 1998; Rating Delta: −0.376110363392", + "x": 240.7535771065183, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 10, 2004; Rating Delta: −0.476110363392", + "x": 263.72297297297297, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 21, 2007; Rating Delta: −0.0761103633916", + "x": 274.27305246422895, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 15, 2002; Rating Delta: 0.123889636608", + "x": 255.0429252782194, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 07, 2000; Rating Delta: 0.323889636608", + "x": 248.29848966613673, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 26, 2008; Rating Delta: 1.32388963661", + "x": 278.6804451510334, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 22, 2008; Rating Delta: 0.323889636608", + "x": 275.74244833068366, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 19, 2002; Rating Delta: −0.376110363392", + "x": 254.8139904610493, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 25, 2000; Rating Delta: −0.776110363392", + "x": 247.89825119236883, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 2008; Rating Delta: 0.623889636608", + "x": 277.8787758346582, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 20, 1998; Rating Delta: −0.876110363392", + "x": 243.4912559618442, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 19, 2001; Rating Delta: −0.0761103633916", + "x": 253.64030206677268, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 24, 1999; Rating Delta: 0.123889636608", + "x": 247.01112877583464, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 18, 2005; Rating Delta: −1.17611036339", + "x": 265.5262321144674, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 24, 2005; Rating Delta: 0.523889636608", + "x": 266.4606518282989, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 30, 2000; Rating Delta: −2.17611036339", + "x": 249.0997615262321, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 14, 2003; Rating Delta: 0.823889636608", + "x": 258.248012718601, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 18, 2002; Rating Delta: 0.723889636608", + "x": 257.112480127186, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 07, 2007; Rating Delta: −0.0761103633916", + "x": 274.13950715421305, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 23, 2007; Rating Delta: −0.476110363392", + "x": 272.27027027027026, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 11, 1998; Rating Delta: 1.02388963661", + "x": 242.82313195548488, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 19, 2007; Rating Delta: 0.623889636608", + "x": 274.54014308426076, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 20, 2008; Rating Delta: 0.0238896366084", + "x": 277.4590620031796, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 07, 2001; Rating Delta: −0.476110363392", + "x": 253.23966613672496, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 29, 2002; Rating Delta: −0.776110363392", + "x": 255.1764705882353, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 23, 2005; Rating Delta: −1.27611036339", + "x": 267.3286963434022, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 22, 2000; Rating Delta: −0.376110363392", + "x": 248.1462639109698, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 25, 1998; Rating Delta: 0.923889636608", + "x": 242.95667726550082, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 25, 2005; Rating Delta: 0.523889636608", + "x": 265.5930047694754, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 10, 2000; Rating Delta: −0.976110363392", + "x": 250.36883942766298, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(56, 128, 184)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 06, 2000; Rating Delta: 2.22388963661", + "x": 250.0345786963434, + "y": 29.10413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 17, 2001; Rating Delta: 0.123889636608", + "x": 253.0393481717011, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 04, 2007; Rating Delta: 1.22388963661", + "x": 273.51947535771063, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(194, 103, 13)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 25, 2003; Rating Delta: −3.97611036339", + "x": 258.91534181240064, + "y": 261.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 28, 2011; Rating Delta: 0.423889636608", + "x": 285.95866454689985, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 29, 2000; Rating Delta: 1.22388963661", + "x": 249.96780604133545, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 12, 2008; Rating Delta: −0.276110363392", + "x": 277.67845786963437, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: May 19, 2000; Rating Delta: 0.123889636608", + "x": 248.69912559618444, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 04, 2008; Rating Delta: −0.276110363392", + "x": 276.1426868044515, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 07, 2000; Rating Delta: −0.0761103633916", + "x": 248.29848966613673, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 26, 2003; Rating Delta: 0.323889636608", + "x": 260.38434022257553, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 24, 2006; Rating Delta: 1.22388963661", + "x": 268.7980922098569, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 20, 2006; Rating Delta: −0.276110363392", + "x": 271.06796502384736, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 03, 2001; Rating Delta: 0.123889636608", + "x": 252.90580286168523, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 10, 2007; Rating Delta: −0.276110363392", + "x": 273.87241653418124, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 18, 1998; Rating Delta: 0.523889636608", + "x": 242.88990461049283, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 11, 1998; Rating Delta: 1.52388963661", + "x": 243.69157392686805, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 19, 1999; Rating Delta: 0.623889636608", + "x": 244.62639109697935, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 08, 2004; Rating Delta: −1.07611036339", + "x": 263.9900635930048, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 22, 2004; Rating Delta: 2.02388963661", + "x": 264.70588235294116, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 08, 2005; Rating Delta: −0.376110363392", + "x": 265.7261526232115, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 04, 1997; Rating Delta: −0.376110363392", + "x": 237.81558028616854, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 154, 58)", + "ariaRoleDescription": "point", + "description": "Release Date: May 11, 2007; Rating Delta: −2.77611036339", + "x": 273.0043720190779, + "y": 216.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 28, 2001; Rating Delta: 1.12388963661", + "x": 254.30842607313195, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 26, 2002; Rating Delta: 0.823889636608", + "x": 255.44316375198727, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 172, 86)", + "ariaRoleDescription": "point", + "description": "Release Date: May 27, 2010; Rating Delta: −2.37611036339", + "x": 283.6116852146264, + "y": 201.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: May 28, 2004; Rating Delta: 0.723889636608", + "x": 262.7213831478537, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 09, 2001; Rating Delta: −0.676110363392", + "x": 251.2368839427663, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 29, 2004; Rating Delta: 1.42388963661", + "x": 264.1903815580286, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 28, 2005; Rating Delta: 0.523889636608", + "x": 267.66255961844195, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 27, 2006; Rating Delta: 0.0238896366084", + "x": 271.13473767885534, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 26, 2007; Rating Delta: −0.276110363392", + "x": 274.6069157392687, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 24, 2008; Rating Delta: −0.576110363392", + "x": 278.079093799682, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 23, 2009; Rating Delta: −0.0761103633916", + "x": 281.55127186009537, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 23, 2001; Rating Delta: −1.67611036339", + "x": 251.63751987281398, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 23, 2006; Rating Delta: −0.576110363392", + "x": 269.93282988871226, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(237, 158, 65)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 10, 2005; Rating Delta: −2.67611036339", + "x": 266.32710651828296, + "y": 212.85413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 25, 2003; Rating Delta: 1.12388963661", + "x": 259.783386327504, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 07, 2006; Rating Delta: 0.923889636608", + "x": 270.0663751987281, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 04, 2001; Rating Delta: −1.57611036339", + "x": 252.61963434022258, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 24, 2003; Rating Delta: −0.876110363392", + "x": 260.6514308426073, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 14, 2006; Rating Delta: −1.27611036339", + "x": 269.26510333863274, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 26, 2004; Rating Delta: −1.47611036339", + "x": 262.12082670906204, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 14, 2002; Rating Delta: −1.57611036339", + "x": 255.9105723370429, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 13, 2002; Rating Delta: 1.02388963661", + "x": 257.6470588235294, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 2003; Rating Delta: 0.923889636608", + "x": 260.45111287758345, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 29, 2006; Rating Delta: −0.276110363392", + "x": 270.86764705882354, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 28, 2006; Rating Delta: 0.523889636608", + "x": 270.266693163752, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 13, 2001; Rating Delta: 0.523889636608", + "x": 252.70548489666137, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(216, 128, 31)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 1996; Rating Delta: −3.37611036339", + "x": 236.8139904610493, + "y": 239.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 12, 1997; Rating Delta: −0.376110363392", + "x": 240.2193958664547, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 04, 2000; Rating Delta: −0.976110363392", + "x": 247.69793322734498, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 19, 2002; Rating Delta: −0.976110363392", + "x": 255.37639109697932, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 10, 2007; Rating Delta: 1.62388963661", + "x": 273.87241653418124, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 2004; Rating Delta: 0.923889636608", + "x": 264.65818759936406, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 21, 1997; Rating Delta: 0.0238896366084", + "x": 237.68203497615264, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 21, 2006; Rating Delta: −0.176110363392", + "x": 269.3318759936407, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 24, 2007; Rating Delta: −0.776110363392", + "x": 274.00596184419715, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(205, 115, 21)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 30, 2004; Rating Delta: −3.67611036339", + "x": 261.5866454689984, + "y": 250.35413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 23, 2002; Rating Delta: −1.27611036339", + "x": 256.5782988871224, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 10, 2001; Rating Delta: 0.523889636608", + "x": 252.97257551669315, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 10, 1997; Rating Delta: 0.423889636608", + "x": 239.61804451510335, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: May 30, 2008; Rating Delta: −0.876110363392", + "x": 276.6768680445151, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 08, 2001; Rating Delta: 0.0238896366084", + "x": 252.37162162162164, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 12, 2003; Rating Delta: 0.523889636608", + "x": 261.1192368839428, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 17, 1999; Rating Delta: −0.676110363392", + "x": 246.3620826709062, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 09, 2004; Rating Delta: 0.0238896366084", + "x": 262.2539745627981, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 29, 2000; Rating Delta: 0.523889636608", + "x": 250.83624801271858, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 16, 2000; Rating Delta: −0.376110363392", + "x": 248.96621621621622, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 10, 2006; Rating Delta: −2.17611036339", + "x": 268.9316375198728, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 07, 2000; Rating Delta: −0.276110363392", + "x": 249.16653418124005, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 24, 2004; Rating Delta: 1.72388963661", + "x": 263.8565182829889, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 04, 2006; Rating Delta: 0.423889636608", + "x": 270.91534181240064, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 29, 1999; Rating Delta: −0.876110363392", + "x": 244.15898251192368, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 17, 2006; Rating Delta: 0.123889636608", + "x": 268.99841017488075, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 08, 2006; Rating Delta: 0.423889636608", + "x": 270.6673290937997, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 09, 2001; Rating Delta: −0.276110363392", + "x": 253.84101748807632, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 21, 2006; Rating Delta: 0.223889636608", + "x": 269.3318759936407, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 19, 2010; Rating Delta: 1.72388963661", + "x": 282.68680445151034, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 11, 1998; Rating Delta: 1.12388963661", + "x": 243.69157392686805, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 07, 2007; Rating Delta: 1.72388963661", + "x": 274.13950715421305, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2009; Rating Delta: 1.22388963661", + "x": 282.1526232114467, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 12, 2010; Rating Delta: 0.423889636608", + "x": 282.88712241653417, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 23, 2007; Rating Delta: 0.923889636608", + "x": 272.53696343402225, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: May 18, 2001; Rating Delta: 1.72388963661", + "x": 252.1713036565978, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: May 19, 2004; Rating Delta: 1.22388963661", + "x": 262.635532591415, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: May 18, 2007; Rating Delta: −0.176110363392", + "x": 273.0711446740859, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 21, 2010; Rating Delta: 0.423889636608", + "x": 283.5544515103339, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 01, 2004; Rating Delta: −0.376110363392", + "x": 263.9232909379968, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 31, 2003; Rating Delta: 1.12388963661", + "x": 260.7186009538951, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 13, 2002; Rating Delta: −1.57611036339", + "x": 256.7786168521463, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 15, 2002; Rating Delta: −0.976110363392", + "x": 255.0429252782194, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 22, 2007; Rating Delta: 1.92388963661", + "x": 273.4050079491256, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 02, 2002; Rating Delta: 0.623889636608", + "x": 256.3779809220986, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 11, 1998; Rating Delta: 0.423889636608", + "x": 242.82313195548488, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 11, 1997; Rating Delta: −1.37611036339", + "x": 238.74999999999997, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 27, 2007; Rating Delta: 1.32388963661", + "x": 273.73887122416534, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 02, 2003; Rating Delta: 0.323889636608", + "x": 259.5639904610493, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 01, 2005; Rating Delta: 2.02388963661", + "x": 265.6597774244833, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 24, 2003; Rating Delta: −0.676110363392", + "x": 260.6514308426073, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 06, 1999; Rating Delta: 1.92388963661", + "x": 245.9614467408585, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: May 07, 2004; Rating Delta: 1.32388963661", + "x": 262.5210651828299, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 12, 2005; Rating Delta: 0.223889636608", + "x": 266.9280604133545, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 31, 2000; Rating Delta: −0.976110363392", + "x": 248.23211446740856, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 29, 2005; Rating Delta: 0.323889636608", + "x": 266.79451510333865, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 01, 2002; Rating Delta: −1.37611036339", + "x": 254.64228934817172, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 19, 1999; Rating Delta: 1.22388963661", + "x": 246.96343402225756, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 07, 2006; Rating Delta: 1.52388963661", + "x": 269.1983306836248, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 17, 2008; Rating Delta: 0.723889636608", + "x": 278.0123211446741, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 09, 2001; Rating Delta: 0.123889636608", + "x": 251.2368839427663, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 14, 2007; Rating Delta: −0.676110363392", + "x": 274.7885532591415, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 13, 2007; Rating Delta: −0.376110363392", + "x": 272.73728139904614, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 09, 2004; Rating Delta: −1.67611036339", + "x": 263.1220190779014, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 10, 2005; Rating Delta: −1.27611036339", + "x": 266.32710651828296, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 31, 2006; Rating Delta: 0.323889636608", + "x": 269.13195548489665, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 12, 2008; Rating Delta: 2.02388963661", + "x": 278.26073131955485, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 14, 1998; Rating Delta: 0.123889636608", + "x": 242.5560413354531, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 10, 1998; Rating Delta: −0.376110363392", + "x": 242.22217806041337, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 10, 2005; Rating Delta: −1.57611036339", + "x": 266.32710651828296, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 26, 2007; Rating Delta: 0.323889636608", + "x": 272.00317965023845, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 30, 2001; Rating Delta: −0.476110363392", + "x": 251.70429252782196, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 29, 2002; Rating Delta: −0.0761103633916", + "x": 255.1764705882353, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 05, 1999; Rating Delta: −1.47611036339", + "x": 244.22575516693163, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 24, 2001; Rating Delta: −1.67611036339", + "x": 253.10612082670906, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 15, 1998; Rating Delta: 0.923889636608", + "x": 242.26987281399047, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 07, 1998; Rating Delta: −0.476110363392", + "x": 242.48926868044515, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 18, 2006; Rating Delta: −0.276110363392", + "x": 270.4670111287758, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 2004; Rating Delta: 0.623889636608", + "x": 264.65818759936406, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 2003; Rating Delta: 1.52388963661", + "x": 261.1860095389507, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 02, 2005; Rating Delta: −2.17611036339", + "x": 267.1283783783784, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: May 19, 2006; Rating Delta: −1.27611036339", + "x": 269.59896661367253, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2001; Rating Delta: 0.423889636608", + "x": 254.2798092209857, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 07, 2003; Rating Delta: −0.0761103633916", + "x": 258.181240063593, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: May 26, 2000; Rating Delta: 0.323889636608", + "x": 248.76589825119237, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 18, 2002; Rating Delta: −1.37611036339", + "x": 254.50874403815578, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 24, 1999; Rating Delta: 0.423889636608", + "x": 247.2972972972973, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 20, 2007; Rating Delta: 1.02388963661", + "x": 273.6720985691574, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 08, 2000; Rating Delta: 1.92388963661", + "x": 250.63593004769476, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 11, 2000; Rating Delta: −1.87611036339", + "x": 247.76470588235296, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 22, 2002; Rating Delta: −1.17611036339", + "x": 255.10969793322735, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 27, 2002; Rating Delta: −0.0761103633916", + "x": 257.49443561208267, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 21, 2010; Rating Delta: 0.423889636608", + "x": 283.5544515103339, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 24, 2009; Rating Delta: 0.423889636608", + "x": 279.8151828298887, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 15, 2001; Rating Delta: 0.623889636608", + "x": 252.43839427662957, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 27, 2002; Rating Delta: −0.576110363392", + "x": 257.7806041335453, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 25, 2008; Rating Delta: 1.22388963661", + "x": 276.34300476947533, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 14, 2010; Rating Delta: 0.123889636608", + "x": 284.0695548489666, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 26, 1997; Rating Delta: 0.123889636608", + "x": 239.48449920508745, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(239, 163, 72)", + "ariaRoleDescription": "point", + "description": "Release Date: May 28, 2004; Rating Delta: −2.57611036339", + "x": 262.7213831478537, + "y": 209.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 15, 1996; Rating Delta: −0.676110363392", + "x": 236.48012718600953, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 2004; Rating Delta: 0.423889636608", + "x": 264.65818759936406, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 31, 1997; Rating Delta: −1.47611036339", + "x": 238.94077901430842, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 17, 2007; Rating Delta: 1.52388963661", + "x": 273.93918918918916, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 18, 2008; Rating Delta: −1.77611036339", + "x": 277.14427662957075, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 04, 2000; Rating Delta: 0.0238896366084", + "x": 249.43362480127183, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 28, 2003; Rating Delta: 1.52388963661", + "x": 258.38155802861684, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: May 09, 2008; Rating Delta: 0.0238896366084", + "x": 276.47655007949123, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 14, 2008; Rating Delta: 0.523889636608", + "x": 275.66613672496027, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(239, 163, 72)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 31, 2001; Rating Delta: −2.57611036339", + "x": 253.172893481717, + "y": 209.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 13, 1997; Rating Delta: −2.87611036339", + "x": 238.4829093799682, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 13, 1998; Rating Delta: −0.676110363392", + "x": 240.82034976152624, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(216, 128, 31)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 23, 1998; Rating Delta: −3.37611036339", + "x": 240.6200317965024, + "y": 239.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 30, 2004; Rating Delta: 1.42388963661", + "x": 263.0361685214626, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: May 04, 2007; Rating Delta: 0.123889636608", + "x": 272.9375993640699, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: May 03, 2002; Rating Delta: 1.12388963661", + "x": 255.50993640699525, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(88, 157, 200)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 13, 2010; Rating Delta: 1.82388963661", + "x": 284.35572337042925, + "y": 44.104138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 02, 2001; Rating Delta: −1.37611036339", + "x": 251.43720190779015, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 28, 2006; Rating Delta: 0.323889636608", + "x": 269.98052464228937, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 14, 2000; Rating Delta: 0.523889636608", + "x": 247.49761526232115, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 14, 2003; Rating Delta: 0.323889636608", + "x": 258.51510333863274, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 2001; Rating Delta: 0.623889636608", + "x": 253.95548489666137, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 25, 2003; Rating Delta: −2.17611036339", + "x": 259.783386327504, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 30, 2001; Rating Delta: −0.576110363392", + "x": 251.70429252782196, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 09, 2010; Rating Delta: 0.523889636608", + "x": 283.15381558028616, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 05, 2005; Rating Delta: 1.32388963661", + "x": 267.4431637519873, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 05, 2001; Rating Delta: 0.323889636608", + "x": 253.50675675675674, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 05, 2005; Rating Delta: 1.22388963661", + "x": 266.8612877583466, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 08, 1999; Rating Delta: −0.276110363392", + "x": 246.56240063593003, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(237, 158, 65)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 07, 2001; Rating Delta: −2.67611036339", + "x": 253.23966613672496, + "y": 212.85413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: May 24, 2002; Rating Delta: 0.323889636608", + "x": 255.71025437201905, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 07, 1997; Rating Delta: 0.823889636608", + "x": 239.88553259141494, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 2003; Rating Delta: 1.52388963661", + "x": 260.45111287758345, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 24, 2006; Rating Delta: −1.77611036339", + "x": 269.0651828298887, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: May 19, 2000; Rating Delta: 0.223889636608", + "x": 248.69912559618444, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(209, 119, 24)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 15, 1997; Rating Delta: −3.57611036339", + "x": 239.08386327503976, + "y": 246.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 14, 1998; Rating Delta: −1.17611036339", + "x": 242.5560413354531, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 11, 2004; Rating Delta: −1.17611036339", + "x": 262.8549284578696, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1998; Rating Delta: −0.0761103633916", + "x": 243.82511923688395, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 12, 2007; Rating Delta: −1.97611036339", + "x": 271.8696343402226, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 10, 2006; Rating Delta: 1.52388963661", + "x": 271.26868044515106, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 28, 2006; Rating Delta: −0.376110363392", + "x": 269.39864864864865, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 10, 1999; Rating Delta: −0.276110363392", + "x": 246.29531001589825, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 10, 1999; Rating Delta: 0.823889636608", + "x": 246.29531001589825, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 11, 2008; Rating Delta: 0.723889636608", + "x": 276.2094594594595, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 1999; Rating Delta: −0.476110363392", + "x": 247.23052464228937, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 19, 2002; Rating Delta: −0.676110363392", + "x": 256.24443561208267, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 29, 2005; Rating Delta: −1.47611036339", + "x": 266.79451510333865, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 12, 2003; Rating Delta: −0.276110363392", + "x": 261.1192368839428, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 22, 2002; Rating Delta: 0.123889636608", + "x": 255.10969793322735, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 28, 2008; Rating Delta: 0.223889636608", + "x": 276.0759141494435, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 30, 2000; Rating Delta: −0.0761103633916", + "x": 249.0997615262321, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 15, 1999; Rating Delta: −0.676110363392", + "x": 246.629173290938, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 16, 2009; Rating Delta: −0.976110363392", + "x": 281.48449920508745, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 17, 2009; Rating Delta: 1.02388963661", + "x": 279.7484101748808, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 06, 2008; Rating Delta: −0.0761103633916", + "x": 277.32551669316376, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 11, 2006; Rating Delta: −0.176110363392", + "x": 270.4002384737679, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 15, 1999; Rating Delta: 1.72388963661", + "x": 246.629173290938, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 1996; Rating Delta: 1.32388963661", + "x": 236.5468998410175, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 11, 1998; Rating Delta: 0.123889636608", + "x": 243.69157392686805, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 13, 2002; Rating Delta: 0.123889636608", + "x": 257.6470588235294, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: May 30, 2008; Rating Delta: −0.276110363392", + "x": 276.6768680445151, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 15, 2002; Rating Delta: 0.523889636608", + "x": 254.7758346581876, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 28, 2006; Rating Delta: −0.376110363392", + "x": 269.98052464228937, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 12, 2003; Rating Delta: −0.376110363392", + "x": 261.1192368839428, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 14, 2008; Rating Delta: −0.676110363392", + "x": 275.66613672496027, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: May 31, 2002; Rating Delta: 0.0238896366084", + "x": 255.77702702702703, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 21, 2002; Rating Delta: 0.523889636608", + "x": 255.97734499205086, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(216, 128, 31)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 17, 2005; Rating Delta: −3.37611036339", + "x": 266.9757551669316, + "y": 239.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 08, 2007; Rating Delta: 0.723889636608", + "x": 273.2714626391097, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 25, 2009; Rating Delta: 0.0238896366084", + "x": 281.28418124006356, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 02, 1999; Rating Delta: 0.223889636608", + "x": 245.62758346581876, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: May 28, 2008; Rating Delta: −0.576110363392", + "x": 276.65779014308424, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(56, 128, 184)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 24, 1998; Rating Delta: 2.22388963661", + "x": 242.35572337042925, + "y": 29.10413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 08, 2003; Rating Delta: −0.376110363392", + "x": 259.9169316375199, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 22, 2004; Rating Delta: 1.52388963661", + "x": 264.1236089030207, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 15, 2004; Rating Delta: 1.32388963661", + "x": 264.0568362480127, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 12, 2004; Rating Delta: 0.223889636608", + "x": 261.9872813990461, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 11, 2002; Rating Delta: −2.87611036339", + "x": 257.0457074721781, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 04, 2003; Rating Delta: 0.523889636608", + "x": 259.5830683624801, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 06, 2002; Rating Delta: −1.67611036339", + "x": 256.7118441971383, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 16, 2001; Rating Delta: −0.276110363392", + "x": 251.30365659777425, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 21, 2007; Rating Delta: −0.0761103633916", + "x": 274.27305246422895, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 31, 1997; Rating Delta: −0.176110363392", + "x": 239.818759936407, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 15, 2008; Rating Delta: −0.876110363392", + "x": 277.41136724960256, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 12, 2002; Rating Delta: −1.57611036339", + "x": 255.3096184419714, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 12, 1998; Rating Delta: −1.57611036339", + "x": 241.95508744038156, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 17, 2008; Rating Delta: 0.523889636608", + "x": 278.0123211446741, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 13, 2001; Rating Delta: 0.823889636608", + "x": 252.41931637519875, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: May 05, 2006; Rating Delta: 1.42388963661", + "x": 269.46542130365657, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 23, 2005; Rating Delta: 0.823889636608", + "x": 267.91096979332275, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 27, 2004; Rating Delta: −0.476110363392", + "x": 263.58942766295706, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 19, 2002; Rating Delta: −0.176110363392", + "x": 256.24443561208267, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 30, 2009; Rating Delta: −1.47611036339", + "x": 279.0143084260731, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 01, 2006; Rating Delta: 0.223889636608", + "x": 269.1414944356121, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 04, 2006; Rating Delta: 0.123889636608", + "x": 270.3334658187599, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1999; Rating Delta: 0.923889636608", + "x": 247.30683624801273, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 06, 2004; Rating Delta: 0.823889636608", + "x": 263.97098569157396, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 17, 1999; Rating Delta: 0.523889636608", + "x": 246.3620826709062, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 176, 93)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 30, 2004; Rating Delta: −2.27611036339", + "x": 263.3223370429253, + "y": 197.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 22, 1999; Rating Delta: −0.176110363392", + "x": 246.69594594594594, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 176, 93)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 27, 2000; Rating Delta: −2.27611036339", + "x": 250.23489666136723, + "y": 197.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 26, 2005; Rating Delta: −1.47611036339", + "x": 267.0616057233704, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 2007; Rating Delta: −0.876110363392", + "x": 274.85532591414943, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 28, 2003; Rating Delta: −0.976110363392", + "x": 258.64864864864865, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 06, 1999; Rating Delta: 0.423889636608", + "x": 245.9614467408585, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 09, 2009; Rating Delta: 1.22388963661", + "x": 281.4177265500795, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 2008; Rating Delta: −0.176110363392", + "x": 278.61367249602546, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 15, 2004; Rating Delta: 1.02388963661", + "x": 264.0568362480127, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 14, 1999; Rating Delta: 0.423889636608", + "x": 245.16017488076312, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 07, 2003; Rating Delta: 0.123889636608", + "x": 258.4483306836248, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 28, 2000; Rating Delta: −0.176110363392", + "x": 247.63116057233705, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 14, 2001; Rating Delta: −0.776110363392", + "x": 254.17488076311605, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 18, 2008; Rating Delta: −0.776110363392", + "x": 275.40858505564387, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 16, 2007; Rating Delta: 1.12388963661", + "x": 272.20349761526234, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 01, 2003; Rating Delta: 0.323889636608", + "x": 259.5544515103339, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 03, 2007; Rating Delta: 1.02388963661", + "x": 273.5099364069952, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 24, 2009; Rating Delta: −0.276110363392", + "x": 280.39705882352945, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 30, 2005; Rating Delta: 1.02388963661", + "x": 267.3954689984102, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 19, 2010; Rating Delta: 1.32388963661", + "x": 282.68680445151034, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 23, 2010; Rating Delta: 1.12388963661", + "x": 283.28736089030207, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 11, 2000; Rating Delta: −1.77611036339", + "x": 247.76470588235296, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 06, 2009; Rating Delta: 0.523889636608", + "x": 281.6852146263911, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 20, 2002; Rating Delta: 0.423889636608", + "x": 257.7138314785374, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: May 25, 2007; Rating Delta: −0.276110363392", + "x": 273.1379173290938, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 27, 2002; Rating Delta: −1.67611036339", + "x": 257.49443561208267, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 01, 2008; Rating Delta: −0.976110363392", + "x": 275.5421303656598, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 145, 45)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 14, 2005; Rating Delta: −2.97611036339", + "x": 267.5290143084261, + "y": 224.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 23, 1998; Rating Delta: 1.22388963661", + "x": 243.8060413354531, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2000; Rating Delta: 1.02388963661", + "x": 250.79809220985692, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 07, 2000; Rating Delta: −0.376110363392", + "x": 249.16653418124005, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 09, 2005; Rating Delta: −0.876110363392", + "x": 267.1951510333863, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 29, 1999; Rating Delta: −1.07611036339", + "x": 246.7627186009539, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 02, 2001; Rating Delta: −0.676110363392", + "x": 253.77424483306837, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 09, 2007; Rating Delta: 0.823889636608", + "x": 272.40381558028616, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 05, 2007; Rating Delta: −1.27611036339", + "x": 271.8028616852146, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 22, 1999; Rating Delta: −0.476110363392", + "x": 246.69594594594594, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 28, 1999; Rating Delta: 0.423889636608", + "x": 245.29372019077903, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 27, 1999; Rating Delta: 0.0238896366084", + "x": 246.16176470588235, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 27, 2002; Rating Delta: −1.27611036339", + "x": 256.91216216216213, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 11, 2000; Rating Delta: −0.276110363392", + "x": 247.76470588235296, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 26, 2003; Rating Delta: −0.976110363392", + "x": 260.966613672496, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 20, 2003; Rating Delta: 0.723889636608", + "x": 260.0313990461049, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 16, 2000; Rating Delta: 0.123889636608", + "x": 248.96621621621622, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 1997; Rating Delta: 1.12388963661", + "x": 240.28616852146263, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 09, 2010; Rating Delta: 1.52388963661", + "x": 284.0218600953895, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 11, 2003; Rating Delta: −0.776110363392", + "x": 259.6498410174881, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 08, 2002; Rating Delta: −0.676110363392", + "x": 254.97615262321145, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 30, 2001; Rating Delta: −1.37611036339", + "x": 251.70429252782196, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 2007; Rating Delta: 1.12388963661", + "x": 274.85532591414943, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 23, 2007; Rating Delta: 0.323889636608", + "x": 272.53696343402225, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 1997; Rating Delta: 0.123889636608", + "x": 240.28616852146263, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 14, 2001; Rating Delta: 1.32388963661", + "x": 254.17488076311605, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 25, 2003; Rating Delta: −1.07611036339", + "x": 259.783386327504, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 15, 2001; Rating Delta: −0.876110363392", + "x": 252.43839427662957, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: May 28, 2004; Rating Delta: 0.0238896366084", + "x": 262.7213831478537, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 1999; Rating Delta: 0.823889636608", + "x": 247.23052464228937, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 154, 58)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 16, 2004; Rating Delta: −2.77611036339", + "x": 261.4531001589825, + "y": 216.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 10, 2001; Rating Delta: 1.52388963661", + "x": 252.97257551669315, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(43, 113, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 17, 2010; Rating Delta: 2.42388963661", + "x": 284.689586645469, + "y": 21.604138627186675 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 19, 1999; Rating Delta: 1.72388963661", + "x": 246.96343402225756, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(33, 98, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 18, 2010; Rating Delta: 2.62388963661", + "x": 283.82154213036563, + "y": 14.104138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 12, 2009; Rating Delta: 0.223889636608", + "x": 280.28259141494436, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 27, 2002; Rating Delta: 0.323889636608", + "x": 257.49443561208267, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 27, 2000; Rating Delta: 1.52388963661", + "x": 250.81717011128777, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(209, 119, 24)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 26, 2000; Rating Delta: −3.57611036339", + "x": 249.3477742448331, + "y": 246.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 05, 2001; Rating Delta: 1.32388963661", + "x": 253.50675675675674, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 27, 2008; Rating Delta: 0.823889636608", + "x": 277.5258346581876, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 20, 2002; Rating Delta: −0.276110363392", + "x": 256.8453895071542, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 18, 2002; Rating Delta: −0.776110363392", + "x": 257.112480127186, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: May 12, 1999; Rating Delta: −1.67611036339", + "x": 245.14109697933227, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: May 08, 2009; Rating Delta: 1.92388963661", + "x": 279.9487281399046, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 18, 2004; Rating Delta: 0.823889636608", + "x": 262.9217011128776, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 02, 2005; Rating Delta: 1.32388963661", + "x": 267.99682034976155, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 02, 2005; Rating Delta: 0.323889636608", + "x": 267.1283783783784, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 11, 2002; Rating Delta: 0.323889636608", + "x": 257.0457074721781, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 25, 2009; Rating Delta: 1.22388963661", + "x": 281.8664546899841, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 13, 2008; Rating Delta: 0.923889636608", + "x": 277.3922893481717, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: May 14, 2004; Rating Delta: 0.723889636608", + "x": 262.58783783783787, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 09, 2002; Rating Delta: −0.776110363392", + "x": 256.4447535771065, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 217, 172)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 27, 2007; Rating Delta: −1.17611036339", + "x": 272.870826709062, + "y": 156.60413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(96, 164, 204)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 05, 1998; Rating Delta: 1.72388963661", + "x": 241.88831478537358, + "y": 47.85413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 18, 2006; Rating Delta: −0.476110363392", + "x": 270.4670111287758, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 14, 2005; Rating Delta: 0.323889636608", + "x": 267.5290143084261, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 16, 1999; Rating Delta: 0.623889636608", + "x": 245.474960254372, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 24, 2006; Rating Delta: 1.12388963661", + "x": 268.7980922098569, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 14, 2009; Rating Delta: 0.823889636608", + "x": 280.8835453100159, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 31, 2004; Rating Delta: −1.77611036339", + "x": 262.16852146263915, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 11, 2002; Rating Delta: 0.223889636608", + "x": 257.0457074721781, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 16, 2005; Rating Delta: 0.423889636608", + "x": 267.2619236883943, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 10, 1997; Rating Delta: −1.77611036339", + "x": 237.01430842607311, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 01, 2006; Rating Delta: 0.623889636608", + "x": 271.4689984101749, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(237, 158, 65)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 14, 2001; Rating Delta: −2.67611036339", + "x": 253.88871224165342, + "y": 212.85413862718661 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 24, 1998; Rating Delta: −0.676110363392", + "x": 241.48767885532592, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 14, 2006; Rating Delta: −0.876110363392", + "x": 269.26510333863274, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 06, 1998; Rating Delta: −0.176110363392", + "x": 241.02066772655007, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 27, 2004; Rating Delta: −1.47611036339", + "x": 261.85373608903024, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 21, 2008; Rating Delta: −0.176110363392", + "x": 278.34658187599365, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 27, 2001; Rating Delta: −1.87611036339", + "x": 251.97098569157393, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 26, 1999; Rating Delta: −0.876110363392", + "x": 244.4260731319555, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 06, 2006; Rating Delta: −0.476110363392", + "x": 270.93441971383146, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 17, 2003; Rating Delta: −0.176110363392", + "x": 260.58465818759936, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 30, 2001; Rating Delta: −1.27611036339", + "x": 254.04133545310017, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 08, 2006; Rating Delta: 0.623889636608", + "x": 270.6673290937997, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 17, 2006; Rating Delta: 1.52388963661", + "x": 268.99841017488075, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(72, 143, 192)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 23, 2008; Rating Delta: 2.02388963661", + "x": 275.456279809221, + "y": 36.60413862718662 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 21, 2000; Rating Delta: 0.123889636608", + "x": 248.43203497615264, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: May 31, 2002; Rating Delta: −0.576110363392", + "x": 255.77702702702703, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 145, 45)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 02, 2005; Rating Delta: −2.97611036339", + "x": 267.1283783783784, + "y": 224.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 18, 2004; Rating Delta: 0.323889636608", + "x": 262.9217011128776, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 24, 2009; Rating Delta: 0.123889636608", + "x": 280.683227344992, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 176, 93)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 03, 2006; Rating Delta: −2.27611036339", + "x": 268.86486486486484, + "y": 197.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(239, 163, 72)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 08, 2006; Rating Delta: −2.57611036339", + "x": 271.5357710651828, + "y": 209.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 22, 2000; Rating Delta: 1.02388963661", + "x": 250.48330683624803, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 09, 2009; Rating Delta: −1.77611036339", + "x": 278.8139904610493, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 01, 2005; Rating Delta: −0.676110363392", + "x": 266.52742448330685, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 19, 2003; Rating Delta: 0.423889636608", + "x": 260.31756756756755, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(239, 163, 72)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 26, 2005; Rating Delta: −2.57611036339", + "x": 267.0616057233704, + "y": 209.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 23, 2002; Rating Delta: −0.476110363392", + "x": 256.5782988871224, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 20, 2006; Rating Delta: 0.323889636608", + "x": 268.4642289348172, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 09, 2005; Rating Delta: 0.823889636608", + "x": 267.1951510333863, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: May 08, 2002; Rating Delta: 0.323889636608", + "x": 255.55763116057236, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 20, 1999; Rating Delta: −2.87611036339", + "x": 246.09499205087442, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 03, 2006; Rating Delta: 0.323889636608", + "x": 271.2019077901431, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: May 13, 2005; Rating Delta: 0.823889636608", + "x": 266.0600158982512, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 25, 2008; Rating Delta: −0.176110363392", + "x": 275.47535771065185, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(64, 135, 188)", + "ariaRoleDescription": "point", + "description": "Release Date: May 29, 2009; Rating Delta: 2.12388963661", + "x": 280.14904610492846, + "y": 32.854138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 11, 2005; Rating Delta: 0.723889636608", + "x": 265.4594594594594, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 25, 1998; Rating Delta: −1.07611036339", + "x": 242.95667726550082, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(239, 163, 72)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 22, 2000; Rating Delta: −2.57611036339", + "x": 249.9010333863275, + "y": 209.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 15, 2000; Rating Delta: 0.423889636608", + "x": 249.83426073131955, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(170, 209, 228)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2008; Rating Delta: 1.02388963661", + "x": 278.670906200318, + "y": 74.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 19, 2005; Rating Delta: −0.676110363392", + "x": 266.9948330683625, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 02, 2001; Rating Delta: −1.97611036339", + "x": 251.17011128775835, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 23, 2009; Rating Delta: −0.176110363392", + "x": 281.55127186009537, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 03, 2000; Rating Delta: 0.123889636608", + "x": 250.302066772655, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 28, 2003; Rating Delta: 0.823889636608", + "x": 258.64864864864865, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 14, 2007; Rating Delta: 1.12388963661", + "x": 274.206279809221, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 200, 136)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 16, 2005; Rating Delta: −1.67611036339", + "x": 267.2619236883943, + "y": 175.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 01, 2004; Rating Delta: −0.0761103633916", + "x": 263.6371224165342, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 17, 2006; Rating Delta: 1.92388963661", + "x": 268.99841017488075, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: May 07, 2004; Rating Delta: −0.776110363392", + "x": 262.5210651828299, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 30, 2004; Rating Delta: 0.323889636608", + "x": 263.3223370429253, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 21, 2000; Rating Delta: 0.923889636608", + "x": 248.43203497615264, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 15, 1999; Rating Delta: −1.77611036339", + "x": 244.02543720190778, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 11, 2008; Rating Delta: 0.523889636608", + "x": 276.2094594594595, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 229, 201)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 08, 2000; Rating Delta: −0.676110363392", + "x": 250.63593004769476, + "y": 137.85413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 30, 1998; Rating Delta: 0.523889636608", + "x": 243.29093799682033, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 14, 2001; Rating Delta: 0.623889636608", + "x": 254.17488076311605, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 221, 179)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 25, 1997; Rating Delta: −1.07611036339", + "x": 238.01550079491258, + "y": 152.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 194, 121)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 03, 2006; Rating Delta: −1.87611036339", + "x": 271.2019077901431, + "y": 182.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 24, 2006; Rating Delta: −0.576110363392", + "x": 271.4022257551669, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 145, 45)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 28, 2000; Rating Delta: −2.97611036339", + "x": 248.4988076311606, + "y": 224.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 15, 1999; Rating Delta: −0.276110363392", + "x": 244.02543720190778, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 12, 2010; Rating Delta: −0.576110363392", + "x": 282.62003179650236, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 03, 2008; Rating Delta: 0.823889636608", + "x": 277.00119236883944, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 1997; Rating Delta: 0.723889636608", + "x": 240.34340222575517, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: May 12, 2006; Rating Delta: 0.523889636608", + "x": 269.53219395866455, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(56, 128, 184)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 27, 2008; Rating Delta: 2.22388963661", + "x": 276.9439586645469, + "y": 29.10413862718665 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 24, 2007; Rating Delta: −0.0761103633916", + "x": 274.00596184419715, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 29, 2005; Rating Delta: 0.923889636608", + "x": 266.508346581876, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 06, 2009; Rating Delta: 1.52388963661", + "x": 279.3481717011129, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: May 02, 2007; Rating Delta: 0.923889636608", + "x": 272.9185214626391, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: May 18, 2007; Rating Delta: −0.776110363392", + "x": 273.0711446740859, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 11, 2010; Rating Delta: 1.92388963661", + "x": 283.7547694753577, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(151, 198, 223)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 23, 2000; Rating Delta: 1.22388963661", + "x": 247.879173290938, + "y": 66.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 23, 2004; Rating Delta: −1.27611036339", + "x": 262.9693958664547, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 25, 2005; Rating Delta: 0.0238896366084", + "x": 268.2162162162162, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 207, 150)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 26, 2001; Rating Delta: −1.47611036339", + "x": 251.1033386327504, + "y": 167.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 03, 2003; Rating Delta: 0.323889636608", + "x": 260.45111287758345, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 26, 2009; Rating Delta: 0.523889636608", + "x": 280.99801271860093, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 227, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 04, 2005; Rating Delta: −0.776110363392", + "x": 265.1255961844197, + "y": 141.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 24, 1999; Rating Delta: 0.123889636608", + "x": 247.01112877583464, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 12, 2007; Rating Delta: 0.723889636608", + "x": 274.4733704292528, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 01, 2002; Rating Delta: 0.623889636608", + "x": 254.9093799682035, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 07, 2005; Rating Delta: 1.62388963661", + "x": 268.04451510333865, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 25, 2010; Rating Delta: 0.423889636608", + "x": 283.8883147853736, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 04, 2003; Rating Delta: −0.576110363392", + "x": 258.7154213036566, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 06, 2003; Rating Delta: 1.42388963661", + "x": 259.3159777424483, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 2007; Rating Delta: 0.423889636608", + "x": 275.14149443561206, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 28, 2000; Rating Delta: 0.123889636608", + "x": 248.4988076311606, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(249, 185, 107)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 01, 2000; Rating Delta: −2.07611036339", + "x": 249.70071542130364, + "y": 190.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 02, 2009; Rating Delta: 0.823889636608", + "x": 281.35095389507154, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 08, 2008; Rating Delta: −1.77611036339", + "x": 275.6089030206677, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 204, 143)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 03, 2006; Rating Delta: −1.57611036339", + "x": 268.59777424483303, + "y": 171.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 02, 1998; Rating Delta: 0.323889636608", + "x": 243.02344992050874, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 21, 2005; Rating Delta: 0.223889636608", + "x": 268.17806041335456, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 03, 2004; Rating Delta: 0.623889636608", + "x": 263.65620031796504, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 16, 2009; Rating Delta: 0.923889636608", + "x": 281.48449920508745, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(224, 234, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 20, 1998; Rating Delta: 0.323889636608", + "x": 241.15421303656598, + "y": 100.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 17, 2004; Rating Delta: 0.0238896366084", + "x": 263.7897456279809, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 14, 2002; Rating Delta: −0.476110363392", + "x": 255.9105723370429, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 18, 2005; Rating Delta: −0.176110363392", + "x": 265.2591414944356, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(239, 163, 72)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 12, 1999; Rating Delta: −2.57611036339", + "x": 244.55961844197137, + "y": 209.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 11, 1998; Rating Delta: 0.623889636608", + "x": 242.82313195548488, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 17, 2008; Rating Delta: −0.376110363392", + "x": 278.0123211446741, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 21, 2000; Rating Delta: 0.223889636608", + "x": 249.30007949125596, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 18, 2005; Rating Delta: 1.62388963661", + "x": 267.86327503974564, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 25, 2002; Rating Delta: 0.823889636608", + "x": 254.57551669316376, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 14, 2003; Rating Delta: −0.0761103633916", + "x": 258.51510333863274, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(250, 190, 114)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 30, 1999; Rating Delta: −1.97611036339", + "x": 245.6085055643879, + "y": 186.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 08, 2008; Rating Delta: −0.376110363392", + "x": 275.31319554848966, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 27, 2008; Rating Delta: 0.123889636608", + "x": 276.9439586645469, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 210, 157)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 22, 2000; Rating Delta: −1.37611036339", + "x": 249.9010333863275, + "y": 164.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 12, 2010; Rating Delta: 1.12388963661", + "x": 282.62003179650236, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 01, 2009; Rating Delta: 0.423889636608", + "x": 279.88195548489665, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(107, 171, 208)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 12, 2008; Rating Delta: 1.62388963661", + "x": 277.67845786963437, + "y": 51.604138627186636 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: May 08, 1998; Rating Delta: −2.87611036339", + "x": 241.6212241653418, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(244, 237, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 16, 1999; Rating Delta: −0.176110363392", + "x": 245.76112877583464, + "y": 119.10413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 20, 2004; Rating Delta: −0.576110363392", + "x": 263.52265500794914, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 01, 2001; Rating Delta: −1.27611036339", + "x": 252.30484896661366, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Feb 17, 2006; Rating Delta: 0.123889636608", + "x": 268.731319554849, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 226, 191)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 03, 2000; Rating Delta: −0.876110363392", + "x": 247.96502384737678, + "y": 145.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 16, 2006; Rating Delta: 1.12388963661", + "x": 269.8660572337043, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(80, 150, 196)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 17, 2008; Rating Delta: 1.92388963661", + "x": 278.5945945945946, + "y": 40.35413862718668 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(245, 235, 221)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 02, 2004; Rating Delta: −0.276110363392", + "x": 262.18759936406997, + "y": 122.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 09, 2006; Rating Delta: −0.0761103633916", + "x": 270.381160572337, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(239, 163, 72)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 08, 2000; Rating Delta: −2.57611036339", + "x": 249.76748807631162, + "y": 209.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 28, 2005; Rating Delta: 0.623889636608", + "x": 267.66255961844195, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 17, 2004; Rating Delta: 0.0238896366084", + "x": 263.7897456279809, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 224, 186)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 11, 2009; Rating Delta: −0.976110363392", + "x": 281.1506359300477, + "y": 149.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 06, 1998; Rating Delta: −0.576110363392", + "x": 243.3577106518283, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 232, 211)", + "ariaRoleDescription": "point", + "description": "Release Date: May 30, 2003; Rating Delta: −0.476110363392", + "x": 259.2492050874404, + "y": 130.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 15, 2000; Rating Delta: 0.0238896366084", + "x": 250.7027027027027, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(230, 236, 237)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 08, 2000; Rating Delta: 0.223889636608", + "x": 249.76748807631162, + "y": 104.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(246, 234, 216)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 25, 2008; Rating Delta: −0.376110363392", + "x": 277.2110492845787, + "y": 126.60413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 22, 2010; Rating Delta: 0.123889636608", + "x": 282.41971383147853, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(161, 204, 226)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 14, 2000; Rating Delta: 1.12388963661", + "x": 249.23330683624803, + "y": 70.35413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: May 02, 2003; Rating Delta: 1.52388963661", + "x": 258.98211446740856, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(206, 227, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: May 26, 2006; Rating Delta: 0.623889636608", + "x": 269.66573926868045, + "y": 89.10413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Mar 12, 2010; Rating Delta: −0.0761103633916", + "x": 282.88712241653417, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(188, 218, 233)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 13, 2010; Rating Delta: 0.823889636608", + "x": 284.35572337042925, + "y": 81.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(247, 181, 100)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 29, 2005; Rating Delta: −2.17611036339", + "x": 265.9264705882353, + "y": 194.10413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(241, 240, 235)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 20, 2000; Rating Delta: 0.0238896366084", + "x": 250.1681240063593, + "y": 111.60413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(129, 185, 215)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 10, 2000; Rating Delta: 1.42388963661", + "x": 250.36883942766298, + "y": 59.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(252, 214, 164)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 19, 2009; Rating Delta: −1.27611036339", + "x": 280.3493640699523, + "y": 160.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 19, 2008; Rating Delta: 0.723889636608", + "x": 278.61367249602546, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jun 22, 2007; Rating Delta: 0.423889636608", + "x": 273.4050079491256, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(140, 191, 219)", + "ariaRoleDescription": "point", + "description": "Release Date: Nov 23, 2005; Rating Delta: 1.32388963661", + "x": 267.91096979332275, + "y": 62.854138627186664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(243, 239, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 18, 1998; Rating Delta: −0.0761103633916", + "x": 243.758346581876, + "y": 115.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 08, 2010; Rating Delta: 0.423889636608", + "x": 282.2861685214626, + "y": 96.60413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(251, 197, 129)", + "ariaRoleDescription": "point", + "description": "Release Date: Apr 11, 2003; Rating Delta: −1.77611036339", + "x": 258.78179650238474, + "y": 179.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(179, 213, 231)", + "ariaRoleDescription": "point", + "description": "Release Date: Dec 18, 2009; Rating Delta: 0.923889636608", + "x": 282.0858505564388, + "y": 77.85413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(213, 230, 239)", + "ariaRoleDescription": "point", + "description": "Release Date: Jan 30, 1998; Rating Delta: 0.523889636608", + "x": 240.68680445151034, + "y": 92.85413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(235, 238, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Sep 28, 2001; Rating Delta: 0.123889636608", + "x": 253.43998410174882, + "y": 107.85413862718663 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(118, 178, 212)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 02, 2009; Rating Delta: 1.52388963661", + "x": 281.35095389507154, + "y": 55.35413862718666 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(197, 223, 236)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 31, 2008; Rating Delta: 0.723889636608", + "x": 278.14586645468995, + "y": 85.35413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(233, 149, 51)", + "ariaRoleDescription": "point", + "description": "Release Date: Aug 11, 2006; Rating Delta: −2.87611036339", + "x": 270.4002384737679, + "y": 220.35413862718667 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(248, 231, 206)", + "ariaRoleDescription": "point", + "description": "Release Date: Oct 28, 2005; Rating Delta: −0.576110363392", + "x": 267.66255961844195, + "y": 134.10413862718664 + }, + { + "size": 30, + "strokeWidth": 2, + "shape": "circle", + "opacity": 0.7, + "fill": "transparent", + "stroke": "rgb(219, 232, 238)", + "ariaRoleDescription": "point", + "description": "Release Date: Jul 17, 1998; Rating Delta: 0.423889636608", + "x": 242.2889507154213, + "y": 96.60413862718664 + } + ], + "marktype": "symbol", + "name": "marks", + "role": "mark", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 0.7, + "x": 0, + "y": 0, + "width": 200, + "height": 16, + "stroke": "#ddd", + "strokeWidth": 0, + "fill": { + "x1": 0, + "y1": 0, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "rgb(153, 74, 7)" + }, + { + "offset": 0.04821927735790314, + "color": "rgb(170, 86, 9)" + }, + { + "offset": 0.11232184146046724, + "color": "rgb(193, 102, 12)" + }, + { + "offset": 0.17642440556303135, + "color": "rgb(211, 122, 27)" + }, + { + "offset": 0.24052696966559545, + "color": "rgb(229, 144, 44)" + }, + { + "offset": 0.30462953376815954, + "color": "rgb(240, 166, 77)" + }, + { + "offset": 0.36873209787072364, + "color": "rgb(250, 189, 112)" + }, + { + "offset": 0.4328346619732878, + "color": "rgb(251, 206, 148)" + }, + { + "offset": 0.4969372260758519, + "color": "rgb(252, 223, 184)" + }, + { + "offset": 0.561039790178416, + "color": "rgb(247, 232, 210)" + }, + { + "offset": 0.6251423542809801, + "color": "rgb(242, 240, 235)" + }, + { + "offset": 0.6892449183835442, + "color": "rgb(215, 231, 238)" + }, + { + "offset": 0.7533474824861083, + "color": "rgb(172, 210, 229)" + }, + { + "offset": 0.8174500465886724, + "color": "rgb(121, 179, 213)" + }, + { + "offset": 0.8815526106912365, + "color": "rgb(74, 144, 193)" + }, + { + "offset": 0.9456551747938006, + "color": "rgb(39, 108, 166)" + }, + { + "offset": 1, + "color": "rgb(19, 75, 133)" + } + ] + } + } + ], + "marktype": "rect", + "role": "legend-gradient", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "fill": "#000", + "fontSize": 10, + "opacity": 1, + "font": "Courier", + "align": "center", + "baseline": "top", + "x": 22.464368292093447, + "y": 18, + "text": "−4" + }, + { + "fill": "#000", + "fontSize": 10, + "opacity": 1, + "font": "Courier", + "align": "center", + "baseline": "top", + "x": 73.74641957414472, + "y": 18, + "text": "−2" + }, + { + "fill": "#000", + "fontSize": 10, + "opacity": 1, + "font": "Courier", + "align": "center", + "baseline": "top", + "x": 125.02847085619602, + "y": 18, + "text": "0" + }, + { + "fill": "#000", + "fontSize": 10, + "opacity": 1, + "font": "Courier", + "align": "center", + "baseline": "top", + "x": 176.3105221382473, + "y": 18, + "text": "2" + } + ], + "marktype": "text", + "role": "legend-label", + "zindex": 0 + } + ], + "x": 0, + "y": 0 + } + ], + "marktype": "group", + "role": "legend-entry", + "zindex": 0 + } + ], + "orient": "bottom", + "x": 0, + "y": 324, + "width": 200, + "height": 28 + } + ], + "marktype": "group", + "role": "legend", + "zindex": 0 + } + ], + "fill": "transparent", + "x": 0, + "y": 0, + "width": 300, + "height": 300, + "stroke": "transparent" + } + ], + "marktype": "group", + "name": "root", + "role": "frame", + "zindex": 0 + } +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-specs/gradients/residuals_colorscale.vg.json b/sg2d-vega-test-data/vega-specs/gradients/residuals_colorscale.vg.json new file mode 100644 index 0000000..988e89b --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/gradients/residuals_colorscale.vg.json @@ -0,0 +1,145 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "A dot plot showing each movie in the database, and the difference from the average movie rating. The display is sorted by year to visualize everything in sequential order. The graph is for all Movies before 2019.", + "background": "white", + "padding": 5, + "width": 300, + "height": 300, + "style": "cell", + "encode": {"update": {"stroke": {"value": "transparent"}}}, + "data": [ + { + "name": "source_0", + "url": "data/movies.json", + "format": {"type": "json", "parse": {"Release Date": "date"}}, + "transform": [ + {"type": "filter", "expr": "datum['IMDB Rating'] != null"}, + { + "type": "filter", + "expr": "time(datetime(year(datum[\"Release Date\"]), 0, 1, 0, 0, 0, 0)) <= time(datetime(2019, 0, 1, 0, 0, 0, 0))" + }, + { + "type": "joinaggregate", + "as": ["AverageRating"], + "ops": ["mean"], + "fields": ["IMDB Rating"] + }, + { + "type": "formula", + "expr": "datum['IMDB Rating'] - datum.AverageRating", + "as": "RatingDelta" + }, + { + "type": "filter", + "expr": "(isDate(datum[\"Release Date\"]) || (isValid(datum[\"Release Date\"]) && isFinite(+datum[\"Release Date\"]))) && isValid(datum[\"RatingDelta\"]) && isFinite(+datum[\"RatingDelta\"])" + } + ] + } + ], + "marks": [ + { + "name": "marks", + "type": "symbol", + "style": ["point"], + "from": {"data": "source_0"}, + "encode": { + "update": { + "opacity": {"value": 0.7}, + "fill": {"value": "transparent"}, + "stroke": {"scale": "color", "field": "RatingDelta"}, + "ariaRoleDescription": {"value": "point"}, + "description": { + "signal": "\"Release Date: \" + (timeFormat(datum[\"Release Date\"], '%b %d, %Y')) + \"; Rating Delta: \" + (format(datum[\"RatingDelta\"], \"\"))" + }, + "x": {"scale": "x", "field": "Release Date"}, + "y": {"scale": "y", "field": "RatingDelta"} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "time", + "domain": {"data": "source_0", "field": "Release Date"}, + "range": [0, {"signal": "width"}] + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "source_0", "field": "RatingDelta"}, + "range": [{"signal": "height"}, 0], + "nice": true, + "zero": true + }, + { + "name": "color", + "type": "linear", + "domain": {"data": "source_0", "field": "RatingDelta"}, + "range": "diverging", + "domainMid": 0, + "interpolate": "hcl", + "zero": false + } + ], + "axes": [ + { + "scale": "x", + "orient": "bottom", + "gridScale": "y", + "grid": true, + "tickCount": {"signal": "ceil(width/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "y", + "orient": "left", + "gridScale": "x", + "grid": true, + "tickCount": {"signal": "ceil(height/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "x", + "orient": "bottom", + "grid": false, + "labels": false, + "labelFlush": true, + "labelOverlap": true, + "tickCount": {"signal": "ceil(width/40)"}, + "zindex": 0 + }, + { + "scale": "y", + "orient": "left", + "grid": false, + "labels": false, + "labelOverlap": true, + "tickCount": {"signal": "ceil(height/40)"}, + "zindex": 0 + } + ], + "legends": [ + { + "stroke": "color", + "gradientLength": {"signal": "clamp(height, 64, 200)"}, + "labelFont": "Courier", + "titleFont": "Courier", + "orient": "bottom", + "direction": "horizontal", + "encode": {"gradient": {"update": {"opacity": {"value": 0.7}}}} + } + ] +} \ No newline at end of file diff --git a/sg2d-wgpu/src/marks/symbol.wgsl b/sg2d-wgpu/src/marks/symbol.wgsl index e357ff1..5554330 100644 --- a/sg2d-wgpu/src/marks/symbol.wgsl +++ b/sg2d-wgpu/src/marks/symbol.wgsl @@ -143,10 +143,19 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { if (dist > outer_radius + buffer * 2.0) { discard; } else { - let alpha_factor = 1.0 - smoothstep(outer_radius - buffer, outer_radius + buffer, dist); - let mix_factor = 1.0 - smoothstep(inner_radius - buffer, inner_radius + buffer, dist); - var mixed_color: vec4 = mix(in.circle_stroke_color, in.circle_fill_color, mix_factor); - mixed_color[3] *= alpha_factor; + let outer_factor = 1.0 - smoothstep(outer_radius - buffer, outer_radius + buffer, dist); + let inner_factor = 1.0 - smoothstep(inner_radius - buffer, inner_radius + buffer, dist); + var mixed_color: vec4; + if (in.circle_fill_color[3] == 0.0) { + // No fill, so use opacity to fade out stroke rather than interpolate color + mixed_color = in.circle_stroke_color; + mixed_color[3] *= outer_factor * (1.0 - inner_factor); + } else { + // Has fill, interpolate opacity outside of circle and interpolate color inside + mixed_color = mix(in.circle_stroke_color, in.circle_fill_color, inner_factor); + mixed_color[3] *= outer_factor; + } + return mixed_color; } } else { diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index f2aa821..905aa23 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -111,6 +111,7 @@ mod test_image_baselines { case("gradients", "heatmap_with_colorbar", 0.001), case("gradients", "diagonal_gradient_bars_rounded", 0.001), case("gradients", "default_gradient_bars_rounded_stroke", 0.0015), + case("gradients", "residuals_colorscale", 0.0015), )] fn test_image_baseline(category: &str, spec_name: &str, tolerance: f64) { let specs_dir = format!( From a47e2b95a45e66f6a5ba3e384a3f70103c2cba11 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 10:29:41 -0500 Subject: [PATCH 11/27] clippy fix --- sg2d-wgpu/src/marks/gradient_rect.rs | 4 ++-- sg2d-wgpu/tests/try_colorgrad.rs | 20 -------------------- 2 files changed, 2 insertions(+), 22 deletions(-) delete mode 100644 sg2d-wgpu/tests/try_colorgrad.rs diff --git a/sg2d-wgpu/src/marks/gradient_rect.rs b/sg2d-wgpu/src/marks/gradient_rect.rs index e05a6ae..4a54630 100644 --- a/sg2d-wgpu/src/marks/gradient_rect.rs +++ b/sg2d-wgpu/src/marks/gradient_rect.rs @@ -201,8 +201,8 @@ impl GradientRectInstance { position: [*x, *y], width: *width, height: *height, - fill: fill, - stroke: stroke, + fill, + stroke, stroke_width: *stroke_width, corner_radius: *corner_radius, }) diff --git a/sg2d-wgpu/tests/try_colorgrad.rs b/sg2d-wgpu/tests/try_colorgrad.rs deleted file mode 100644 index 384247c..0000000 --- a/sg2d-wgpu/tests/try_colorgrad.rs +++ /dev/null @@ -1,20 +0,0 @@ -use colorgrad::Color; - -#[test] -fn test_try_it() { - let mut binding = colorgrad::CustomGradient::new(); - let builder = binding.domain(&[0.0, 0.1, 1.0]).colors(&[ - Color::new(0.0, 0.0, 0.0, 1.0), - Color::new(0.5, 0.5, 0.5, 1.0), - Color::new(1.0, 1.0, 1.0, 1.0), - ]); - let b = builder.build().unwrap(); - let c = b.at(0.5); - - for i in 0..256 { - let p = (i as f64) / 255.0; - println!("{i} - {p} - {:?}", b.at(p)) - } - - // println!("{c:?}"); -} From a679f399d4d55643c7a17e698814eb7cc6d0c2f1 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 10:58:57 -0500 Subject: [PATCH 12/27] Handle zero opacity fill in rect marks --- .../gradients/stroke_rect_gradient.png | Bin 0 -> 55046 bytes .../gradients/stroke_rect_gradient.sg.json | 400 ++++++++++++++++++ .../gradients/stroke_rect_gradient.vg.json | 199 +++++++++ sg2d-wgpu/src/marks/gradient_rect.wgsl | 35 +- sg2d-wgpu/tests/test_image_baselines.rs | 1 + 5 files changed, 622 insertions(+), 13 deletions(-) create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/stroke_rect_gradient.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/stroke_rect_gradient.sg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/stroke_rect_gradient.vg.json diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/stroke_rect_gradient.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/stroke_rect_gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..35466d944795650e7e42b0331c413219c6e585a8 GIT binary patch literal 55046 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%0A4qVElqTSH_>BeSU3b%bND35T>%~H+C?i8hw zj=H)@czqKZ^x53D^tl)V16ibd{mk?Bp=xvG1IIm$Q9+=1L9eHc+=|hfXA6l{yq~We zPvRlHZFboKffDaDH2uhsuLWe>XzgDDkaXM@+L^#P2xmXXIsDF^Y^)h*!>KmY51^M< zh*yEYtL_mLL&I*&7$Mv>c@?3xxllK=SBskqk8ElVJqJ2}%^Yh4&ciZDe4^ITkN7S6 zB_Kd|C5*{wq>y_q0IfmVN`?)I&4D=34Q>kF5L2H%2P&M5IZKR1Jv8a{1gmolL51dQ z?(n|R`InHEUl0{m`soUx-x4MomqVK$@IT#367nSvo&%jL6k~xK$I{>oB%qZxxA6)= zg*!po7ZDXqES89;6^(*(8f$|b%Bc>=!X2ESKUn1~OU)^K47LXq1JKeJ^)voWX> zod}kUYZ`RN^0HSQ4j;JWqMc`CRfedG6Rl`=#j^r01KCw^!+r*}vD_+Gz2#HKTawFn z6q)Y^AXRX;ufT5KZCU38(a=Q|yR@was=)8P;#8jTZVUe2?Qs>h`xD>I zfREMplWpJa`rvoEK1Q?yBKD-+%6)g%W`&8WPM&RlRd7r59{a#&aI^LlUy;Ih?K|{) zs3LL#^3%g0%~sIzXI4NzHVe3_3KnSNT(S0fq^gCx0|TCb>)`f701rb?aj^_)w0vUL zs}~ylBCfC2Y+Cx?K_(#LFv~6V4&uzU3`NJjwbjBOxb>b~y2_&`@YpUAwzlNM72Ar) zXP#Os2nd&~am9cH=)&paTr{gCzdwgbqzfL7*bhvEAthoR*;;8TZL%D1oC+^E)CsJV zgCa#U1<2CvZ}0V%rNHa7ND(G$Ffb4N-b^o$)O*N)FgJ+y(5GCY(pP0B`~4{>fZ!dnR{4sgB4en zK@3L1O5pIjXbwFWk?MkNkw{%3eDvw8G(|T19h>jJ6Vd$ijFY1Czllf}@2)!C)YcSZ zmBmpx38w*#Sp7ti-~w+ty1UA~Jd2Uop%HW#xO>>4(O!2ee6Xmc5ir&Kb#jM3c4}l; zX>QvbaQy4F9N;7w<3q$BJSBN$~|H( z_emjlWS5m;Y;V-!6=&42d;K1H?ncMU&{Z+)PHll$HuX7_d{%T?SN=t>XTjQGNp+2p z?>hL_{bQ!6n75CJirtN$KZWh1QtQ3_bsx}F_<0$K)F}8p8s?3apHssux4jv*d*E~F z#Yu6tT_5~T*XL5=p6-v;q9VfwDf$)sXzYg}-yA&oezD&L2z z#5e)9wRh3AN z=RVrr+KGKx2pe_#+WG{KT}>@^6#-$>W<#`R&2q~y2!N6PnT>8@)$<73DsG-WS!W13 zp|vE|`Zb;ljTc2ueC2gz=`>;#qJjeR=jfXVIz7yvjGeRpLnu`TdoB0>>gEmo3Wm`v*N+nHcbq} z4Ips_0`}wS+~L?(l(hIHe3Y2XEuQ@x&L2l>hq4C2pe}&}10cF7Dyvwhdu80MtMz2hk#8D)nXS#^5EXSy60%S0u zO`|3F>Ar1QHT$1K%Bndpk{G_;CZg#iogn!*;`hy4nqo8?4*VCHMeLSJn|#Y`QLVeO zj-mU|#7{%tO}2nT`foL*@Y~CKwh0c5sPxI3{v2-m7h(^+MGg3DNahygpOA&j0A|23Yzgnt=GL$q((^z9m&`Ho$$e#Kw9NTt) zeD%`{q(^k4roDPTU7v$}?v4>` z)#{(CC2sqMLHnF6j`FRdGjLnm|6dbKO3;Llv+`dA}tL%i-U)+ zn;|KB4iCR6d>9lhVdauO=}@rbjgTz+naYnf$uqaT;-X#i1LRkp{&~W(RVihzR~Cy> zr&0e9DZgP_CMlQ9*|WXmH4|BgIPViR9gjSbsd%3>zV(Oxh2CQ=bBa(@m%s1d&g zf?#ZkNVuBw5!cdun#524Tq*r48KT_>qgeGL-d5CMha;bw=8tzT4cCre&+OP@qUm}p z4f`Bp{Xaz9_Qj?h=zD2B2bNH~l4JgWn?4cE*}j-}ims9P?KC5zs!#4`)TRowOJ6=) zA}Xx=uA!zJScOr_m(Gyp@@|N(aiDtmJFk8I0!2Nz0eB0=49JIP zADUphkAPm>)6H=PL*t};B_weonpg6nmFqT_jx%uQMc++BKXm1P=%FiAxbKrxm+PX! zm8?hPw#o>up3^%q-?Xv!Nf~0b2`9IIhWF6u;y|zP-*N zskHz=rR~+;Y{!wk%)z{n3w4c^JQBJCuU|*TOn?)UurT^s^>f(e42^akIY;nZh;E23 zl5y&eJ}7?1`J!QlR0VHm+X-Ss}WScnh&xS3Bz-p?p*zX%d`cUsXTwRs_ zXcg8@7xHeDLVsGwUROe@W*p$%V)>WMD4XZV+6D0ZdlYZR+t2EF!}sT?_n|9u^NKCe zSabCTRV%pAa*DNwm&T6D%Cz+NZm;x~XGV@B*@NzillYwI;vBrTnogDRlfmplRvSSI z9TMtxvsKS?kjc~$LMJ*N4lxzR)+aU>j{5E4oe$n_`)w)GOC>pcbAmvfui2#evpV0m za@dz?FQjJj-t3uXod@lmpaUH_$B$X|5O&6v^-d#UmcshWjbqr)o@ZGLbs60$e=G)K z`YJbQa)tLu1yc6mNITsOZu@4oOO;t-$@NWn7ClMiA;T`RXl%&XIyv;dCEe*)=CY}t@Z;OoD^Xc00)Koz`smS_qLr4N}Gglq#I`Uk>`i8sgmwRR7 zu2w^TQcTGf#@uDX&4f!wpqnD3rXf3gCi0GB{)8cD!*?c;{KOh<3FQ1{F{rf@4HaZW zH%8yP#g|E*(M?YdZ*QCdi1c-M#5>^JR=pnb^kb70!PDyeH_(8%AFQ=Nh(v?zgqt1E zsBr~b`s)yI((xU=CHC+9KakiCybttt4jl)NFRj!~*R2j|!PX?VR+b8_DJPL;l)x-$ zTG4vhPt3GlmSX*8amQx-)rNePBQ(0)NM>}vz>7;@bTyBt`DO@4*X8bVs$KceUX|Un zmp4xzm?zrBKR&2hWxA?ef-gs|n|K8(YQ8c6q#lc|R_8saMuk@xQ^K5wBN(8oE8Muw zNU|F5(jLjVGPsmQ%!RxXnpcp%_n4{Jj$Tucb`hpi^%bX}m;FALmny;|Ph~=nwpl@Q zFPh(@i1A&&JN}WfsJZmdpxqODbH>Q zEOn9GyD-$A#pemI7D@RtAG6)vF`wGKJ|S+V{=S*S-MV&}^wKtH3T7(bt2}d+s9TXlY6+t3mwe z7t*W7xBccOsX&%0QG7KlBW+}AaI`H6{1_D{U=cnx1=7{EaBY#{t8SYCLC_O?;bv$>k@_G=!V_2Z1C0|NXsPObETE#Pi6F{gQ6_w*SSCm`t16ntQ#uCpsuz%v zHo^q6sAAA|Si?o8Jb?9_u6r^RvKcT_UsQ+}YUFH^e1DteiCNCB()HT48+g}6#hdbc z5dxa`SJbi_9L377-5ku%y)V?H_P(hgQS6dH895S;H@@e{n8r8xTJOQoVlo4ZILNh# zt{Q@21yus*QC6Y6&v(Qk7dU7lB^kAAe=|AN5faVsMGIoX8ky?+dzZT+E|$A>Uv&5CYdLem`_*KzKsISPY!x^idEVCA9uS^6;K+EhhQ56lP-mar6ylDqZNO z4{uA4nkWTUCob-CY>DQC%MN2z1(tK|A!w?N7{`h(7WmV1&2W4UPE&A^hjOkBq7-(W zvUk9Iv4QF6`qM4yOagONf?;?Y4$IC++(25O>1}QBc{#!631R!zckD@@-|N1wY^vnh zR8)P8{71pi{S#ZhlYaxlCX_!h{e=b3r#RGT$kyF#7jZgIvlLHB>HydW5da z5c&Xogvt?|i#CZQ>P#)_)(7mDs@5z&P?gGhr7ICfr{tiYc1tcgLn7)P z`yHH6K?a6E&v}bb7xinL!AePYIWQ&};jBK*E&Z8EaITr{NH1Jp{a>s7)5K(}3g^AI zE@7^>+%akG%|nRU&#Cyc=2+>rH-eKrXLkDc=~ZvT$qju^nK9bipv4 zAw2wS2Z0i`GZgxv^1@sXd=ZwmnONM757=LutxNc@*Sf$B3h+<5 zp-!mI70pIXqn0RUkU>4r{u@2YvL6bDw78N&!gEL)!`&*lE1FnJ?4=~JzB-UF<*Ewuc#y8k z)P#zdgFU@l66Y!8oko1}(Ly;f5mmj-BFQ(g$yxHl0&DB4qVIVR6MA2I5Ee!WZD`VI zwvqWYUE`c!S_}2^V7m2!uHhY0VAW-MU^+;VTuS_^Z^UB^p;5ej>sq@y*u*T!7R&Eu z%=NZVE%YVV{EbN$1B#gd{pckRVP&D{?ZIr|Pc>F-YOiqS8lNg=(+*3NhiQ3LR{+D|j5Rt&3u6^x?q>}a z@o8v;8!Gx@Q#x)3{FhkE@hirMR`Y@k8iF8RZ1^lw4b~na*cG-eV<{zF)jNkHY>LYF zqz_iP4cg&bm4U%TPvL{rJsEs;bNL>IcyYHMQ!8LWFq_>poAU4WYyfgD&3;8^q9wLV zD*V0Axh6-o#MR|WV0FfGsCL&~^J^>_4C`dIK`-~JfkZcg$-088 z%cYjncdzu8{H5v%rV2J%61)(E; z4AMsl;>X;t^g?Nf;9+Enr+bV@ELJZ>qmER#;3`MMPzMvXyU`hGw=N?s>^B?nm%aKD zbgwQ(466&<7f*8@4lN4N924&x%!{_C{s-7Wf1#PS$iZ^gwUrYnmZZO9e1+2^qGgGR z$a;!9XSg|xUkBGx77!%v2E2M4Yk>B!m?!4IOsq<17mfBN%qfF$SU>m-R!>&w&RVLs zo4VaV*8+a@Pl$H*niReHuD?9Nxu`bLV)Zd031-uZzK2?q-a%T4+)sjKxVlywt^-b+ zIYH0v14m3=&rp6pAlmT+Fb+VmpI>)QtlK=b`oRwP-_zUuV4hT+V(ZkXrxlIoV7wHJ zjc61{PPj5A`sBD>K3NDSt#%P<_Ssk*zW&VSXSXns;_V~a^>N21PW647QT zmf~~(?8QkFS@sb__Ugd9IQ3w);*dCwuM1T?<|pBxC;Kg$nJ_`+3XH1~-rH0lYtWpW z(>NV0e_G*zi%zUCGY>^V5a#ieyIBtU?+|+;v34obM7|g>;b^|M`I^5z{SBgJ-3$W$ z32aTGCRUibKx~E47Q?hN7`vu%uSpz;gJs|S`Cx}Y>7;ns`x8C2?l?Jcraz} zgIz}ICkWcojxx8?0bMMvh6yefFcLAy!M2My_PL2L7K$Y^3S6_yn(Zn~Y;l-3!a}2s z3?C$MEub`+2AbqZ!ECyLA~jGosx6nk$*_dEQSVV{E}Aupp9Jv`1rGTkQ}fCgfG~ny z@CDTtd=Y8!4$~}_GPAp?2v0*;P-S8-HAtv`t^s^&Zr{-3;vtxILg>Z9qPbhQ8HNZP z?;0N$aKMqeJ;4;`w{l=*qhxKyRh#HbHpE0x*NH8lp*onKl|T}hn>YAseRCeH zj^KBqES^>|{yHUg0{5g=vGs6aG52uy1u=b)%r%xx%_K`!ZgQim+Vw_PNN0`7l8-T@ z|4alAviX;6Fb#U-Z(+qS+Z2^AL%A7xY18A>z~Lx@hTlA?^MHnn%U}0a)ore^hN*kd z*yIe%$Wi>rkB2#KP10w4Ch^U>O6@TuD&52&d4tb+?gkozQiQe&o5XSx`D?ReJ447n zsrAp5gwEXyziPv+wV^TN513~QZNMR#O^@Tua-?c~28^@Zm%y4o4zd0s9F`o{P*^9> z4F`Tc{OF~8f4v@dCG1RW=yrBS+-uoEqp>q6x}kdhP#m#W!6aY=jE>pZvi-O@ zmSMs$zvGc9_S@YD$`x8&g6VY{oZLjsgS?d#Cf9u|c=k@uYF-k(hqe#|-IS6YJub3D z{4$&Bos&wBzTFbLblkd?%O+r>RAVzzHkZ*h7oi=h1;TMEAmkC~ag8fL^e*`f7~Mi} zsED=;)-pRleZZY~=|=YJ1c7_pfU0d`UB*`gQ*%MH5Jv|?I&rbV7aL4G)FPX_QK+&% zdp6F>&3A4Yyf{b)l%Thr84j%J#w$Ml~ql&YY+=A*Vg>c8jZ7*0g;NvwH&Bm&5!N2`m^A z3hWxBn@ZT#Ku;KY!;mKRV^w@pJYFoH!zekG^Vwa>90n)d*SPhJG!S;xv?XI)PIKL1 zKHa;7z87yLtlw;+(UMt;ZM)OV-g>PtyvKoqa)>TUjvhv!i?3M?v$r5ff>#!Bgjq^}r*KmYm|sL^8JppJ)pC>|@%Hb~!t9DMSuuGnCf4~;d+zFW z?*86TsoOhiW3SAx$1X6uP8fj-dxQ^Y!hPPLrvB#ts zud`fa1Ku_a=fm-XQ07~*B)`WZZM+Mwt~AN**>fvfj>4G9m1Mofk+c+hN@|bkNqQ!&ezF&4 zHQa!_oz5orI2cdz#LoFmQHt;=L1#P+Bm`%otwv%8h@i>J`y)67q#WHi41bgCDDGk!{0Jhdvx`h;fPK`DCTCkzlJJ#u1HbX6vF%G_h5*44n#+y=9-= zbMK0i(`=w9O4kI^rV3?)IDp&=T>##P(J;zZfoTQE5tzpb6OQY|PXNYNVGkw?&{i<; zQFBuGs3H~X=6Wgx#pzB0xhJc^6*h`?MJO6f^lB$h(PHVEHSGt|aNYRYM)bplTx_7H z%w;Pq(Q2hh3S-F5MW%%F=9nl1%e;9Ig0uj?UVRL{dSZ z40(MEbFr+3Q1tU$qdh<|s(sA;KF{9FYI53dUm1)(Jp7Ur3=>@Jj2h7%FSg3YEce@eLSEy0v4$FT!hrm?Fs4+%57LNXz zy@?f|W@*|l^25ISNACy|ULV3RiWt@zZwERS7K^HE{6UbYr`!6FsJEDwFzQp21;ZVs zwa{vm7YAx90@}5)A3YTg{i2j3?2Uxbh_SFUo@30^6PXs0=?vW zawtRl2ZL<3HB&db*Ob-#mKIZ01&xBQ!7tG6p#D!pHw_g%5N|@9bm}!W-M@DDD z%r50rfoc0U*AyP614k?Z(Jjsy4!ot;hK3B2v|R!dz@Z*Js^?Yt3w0b5>_*X*-|yid z!?GCavkbgEtZNO{4a4EoC=XW3wKE003#Ovu!CE<19{MOYNU_BfSMW;r0 z(qmh6sy=zDbg3~mLkv)M78XTgb9=fgjIW~S1mg%i;ltT^qfAs@oQH087>wlfkO`i( zil-XYC}C^?khh>hcpmwDWogeV;1^)hX>Ui2kV(_?UgOomnEQoTIwey7!h%#Us$iIM z4)c~^K)6`8%_NF%4-*1E0{L@G;eFky8P$dV-Al`FK18U*UDm^bj4$WOdRqti)D&5OiC8JS45mXQt)uKkf$j`&qAbb2O5Ev!k~D71sJdLJre1krW$pRBK$0z3M}k* zb#x|OAVt4Zj|ObrD1`f*)uXYZM(^oE_Twtw#FUm$(u$@RdKgcBbq;=UNFl9&vi+4F zmP`^?FhMk0U191q8&gP<3od)lqG|9=%5u;Fz1Z+w&pc(JuB}hbW`IeM2+qA3&tJ=MF) zW}>0#!bH^9YO%sWKQB#xY)s`B0@K0|BQT1--H9bBhB_!Z0q>#sE(h9tRa{i>(d!Zt z|BAC(#WOK@2?IGUAR!rApJ1a5Qkc~W^R2_y!5Ab11HoxkSC|G4j84l>p$1Qqq#DS< z(EO{2&q1^1Vt5d#cs0~h#;37N@{3}sPEd+-F7z3Q`n`US_YxCrO>Q{ zSp?6RGEW+OPO)C-HSt&6IK#va(BGoS2+}7!(7eS}P(euekg!x(+4edQhZO zW2p39V>`E}WMk0r&?c7!bSPa%;((O;9JYqs0#W>8A3*!v`YXNv5RG?ih^hPG9^k=^LNknM7MoSF@vk&!*G;^dxPVvq{G&ETwxmN~Zy#vQYD7&(t8n zM!s%6LS@tvT!{fJ{fD*X_HCQ2SVV_I{n}Tu@am6-3=a>3{691-izHO$z#Gp-UpxdHqUOJGp8j#&O^<^UE-C z{tPr@_IPu+!{9w~uEe%p0CnBuv>FSHYw($qG)&r?xWe1*n!koxB! z4E<12H7}0LUS6l?k22vy7*;)?p18qs>u!K$&Wf;c{!K8;-c}@co;4y0w(FEPMDzRQ-t@sig>xRYXQ&Q*p z<3%Wrl#S=h#v=zXbW$dn$c?rz%(Q~U`5umHv1bZnlGkS0EfR2)1(+0F7yYuF>9eK3{?8qr# z`SwTWuRZ+a(^-4z&1zpV9&8O!t%uH{zYTcAkt|R8i0M2xc2I$0wJRZoaBko!X-w~r zpz))d5SaFoGG=RCsi9)uNDoNe1Xz_0K4X9U?80w< zpO4q9bam;}aF|w3<~!mv-T<)Ej}1)Ue5qqsaRM-wz7#=mqynligTZ_5Pl(e?RsV*G zG6*4_Je=RT1#(;TRsl`xP7a8sY|Rp*SQc$^!W{s`0bt_AVBUoH?J-GY@55GU$!QY+ zc9PM`gvtl6AeIG@|NOQpnUs8*b0Jiohf|ZB*^!qhY(f2mQyo|=peZF?a zGT34^xMo0Q9KtNK7MM0PFg{YKPB!gT8zBw`8-Iw@-M~YKLjPKrve`I^O?_=*j~P3I z0>yjX;Uc>34dhm$-8fY0Zsm3O!01#mI-EXK;nfz=TLTKrd!kpn@;v$&Bw%7*$h9E~ zjBjfxWnB%i0dlA)FkqAC1rO*!<*O?CsF#dL4~D{;AyGG7ohsVlRauD|7#t;-65Ti{ zr1R?mU2TEZjxK|QFoZ$pTiDh-{TeKRuffffm{ji&zfs(99f~c zXK4{;zv9EABZvA@g-A6U#&d&q!Qsm8pl)EN+JSePquE7DrF*(}9O|>7OH6w>k~R!S zMB{XDNJ(uHO&m~SHjAbJ0QJ7+Q=JbzbBBgU8a6ctMw;VzTnvLG6oiJ<{}K{slD739 zOHBoda72*XCB~~12K!YXsFiv%*A7v|xKI_mbeK^LucfUf$Q243rwoYpVx_u|YdJ7G z3Bry8sqk**rAoxGJDA}PGq^F%3c=|R`AY+esYGX~kBAxP_iO4;3|UO6MhQ#>9$A@T zz0(0-T@FVo^d0a>^LTi3OMl(mQ1Mrgm3MroM|xSTv;4IHRX0v+h9rzPQ`gKiy_;;T zVkm|!#!2*n5Pc{+qC9ij5J50Vk;}W(bF_QCpyRUvp}}5rw%b_H=SeKgIhy*R3XF`` zX*8Pn+VCY|?U=u^7D{Dty9&reJR}V=>JvCPvV0=5k zE^;qAlaaFE$oB`tdQa-_hLU}w@~evNLl&3%2A6cZ<7W{91Dwpt)~p5MJ}Vv&j9`A7 zkt0v*Gz+Lk!{*RKGCfn$qbz>yu~VjQF^uyWAc~>6$<|+>GrlV0}*fQ`CeE_@aMS+614Mh<+bRo6&!m<}H6#q9WsX*w>&!?Vseem zC=CSh#)uQiP=7Tv&Ye@2LQiQ2^>WY}%wA#T6rtCEP*lug(k1Cej+$%16km+b4#hq6 zeVh_>6^49oMK2g$xh$b1HSh8glVVY08&IUO*Vh8+W0Hiz!uttB)o6PUE9M)|qql?$ z7|)mk2H`cT27SK1tG)!vIwSV48u~liJd7s2$EKAFD~m-h4oKXrbm#$vHVS;{f?jEv z&yb;L&f}iL>&JyWc@(l|K)dLa=a=;BdX(4f@qxmnAu`e9MIU@~eH@4<$P2N>27Tut zPe^c(a9&ri6~?#K`wZ2l_w{E0yM-TD@C5oj9D}wDs&$9=)*!;%Neq<5MA%E z+sZ6-X8|1L8XQ#bqJE1xU<_ANu$Np7GaM*gYT?_6ogD^<8+E%8iJrbNPsMnn=`s5= zO~;fPWow{zYa*aPud;8KZJ5d$lCOW+;V=wPA;ad)8oYkp4fD2R9uM+PMJT9kI-!Sw z23lfVww@a5J2edqn49Wm8x{ufNasMy>u`;>Y!KQ)L6srZgPCyp+Jo;CY_c#U+A0cJ zE+m6-{7tB?3`?*}Diq#H9T10j+>^bNmJmk?C><)^7S3ti3IX6f8CKrE0vFjGH_u^NwvWgEikOv#Jt6-aDi5O{Vgr0S#;M{i*aBVklpq?#ZZabQr32BB68={cRhI zSg-%n+?9Yeb*AemC|X78N<}2r(ZQ(-YGqN7Gurl{mbOgm9hr&{trlw$0-`2t35b=U zUcr&;qy0fSg}|^w!R%EN+ z^$ct|;1r;R12qDoroc>tp6l^73{aanuK&jrlDihDkG#Kvyb-CHe@M%+D~Mms)h zj{gvA$`;IUC|E}X zII7pU7J@gX`#W3V)2Mz#y$7SJ3M%f0%Fo(s`4QQg2uC{u+16DU7iX3}_)7+af{58wPBfL%_k))H@c>s)hH-|AdaHH!Bf@4+&pE04D}j9y|^W@4_%_Q_jt1A6MNW0Us*k-)0CGCk@>a01&bYx zRgSQH;gwuW7{qTfm0^b=UkUe*98rPZtD}rAQD%glMC~WJ9SImaIJwg0c%NK`z^}kT zijs-&<*`(PayLgeuA^65tngt2SP@=;I(on1#6lw~t@oOvQe?!Ww2f-p`NcM6Rm=aGtXMa&#ZFNps*!Ajk>VrzCH(XoAZ#`l+%p0G-VYC$+Xq40uG>RH8fT0c`X?%AP`;%bI^*siOoa+ zn;2-bbvt2-bI1xDYR&`ac-4;)fdNh4kl{VepT z{YJb%8)@)0-nA%nK0t%9m;>KaE8GgI-QZ>U86N5@J$-!>M^sQ&oZXnM_$vD@jzjx5 zK#=Ga-o_gALHYdfRDMeaTb}{%^jn-=8M+zvs|Onl7LjtzX}Qi0Z)zSYXvr&tI+$63 zaHxpEb|D;SI!ifxXt##k=c5jnh2&yzs#|SSuR9rx>6g1q(kUm5R z5LXSW-8xhOV=V>c)I$7>@)u8dC74|_-2kUM=s)A($N1zM7^$H}@Y zfULj^;JZmu<@zi+6t7%K3^RkRVW@z*1O7&7(3jnQE=Wb~$za zK1R2mz7puh24t2>K6r;dSRK`2m2de}9e5=DcZvV|0l#-)*(C?8nN(?pj^U=MS6I>R zu>ZQNyyco(B0SzJ*ZbE-7=d$hwoFN{D-+7!QW|7Oqh!!zI4O(Cp<~KAoJtlWkCz8PL42XY< zyvDR_fWBU6ueE~HsPquq8Kwz@)(VO>QC3ldhe~<;erl`C_k`}cz-`PS8P~=Ovk>Cu zb1m~>^?akO6yhSDA^z*&Q<(NJUiu)C`I{vBqQ9*`M<0B2bF`+Zd^w}Bc*9)eCQbxw!|&>Bd#H+|*$Q}ZI6xpCkY)}o zAB+apYy-Rmd~>!lX$R*gE_b_wG!%BA&g$fmRKk2b2nT$FVGz!Na_J}tC->NF1RVhd z2rjrl{0U5{Vm7y5yslhmV(}d*!l23olqZ-m7G`wIe5a7P%)?m`EZip7+^|_u4U#C= zugg`NwJc>Qsb4ggUYR&;x!|oqmeNX0+?HfCop3??D+wD2JA03oXl;W})EXG+Bq(M7 z&<1$yC!Sb}C#HY+AmGicyuPhj5&jky7QZ}lW#jJF4tw_%_>bdtn?RUBaXsF@il%|{ zq9dxZLqY9CMu}W~#0?(SQ@0U7_XvI@LWfFNXVq%BcXkTu&yYO=i;7jD8j?~Bh#!N+ z4sc0M3h|z7nO9-^TYupNAPm^G10mhKt6@htUY=Gn{ZQ(1Ec^j?YC3TBx|hfJ?yof5}$$WH%T{Lg%Tc^uWS&%y6j888-twf|3Fdcg&>_|#cqXJU3?yI0{USR$V` z@D6JcuOb|b2)O_AW36~@bqAR%83hNJzq?nBJvuavYf0fZ&k*LGnPO7^Rttnv?e>L^ z6w*&b4SovjoAIrzNI3sT5}tG-pam=Itj^eSylW8!F=SSty%7SO(&OBwxg%0HkD=@T z+q-qC5THk9b^|MN)w|P6aec8A(X>OfHk^5c^W>(TdE>8P+BU(L>LPZ|6k;F3*LPKj zlothtjdo8+U-ww&0wNh2^hQK8_UPF%9}gLOhAxl1-RPSPFX2PYHq@HQyl8=GivcEt zL}|1exM&gD4JQnjGA3%zZC%Msa4v)3@Pa%FD9Y41(vhW;Yd$M~n+nYHZ(a)5aY>Fux@XrqL7qd7own~l1sy{eF zr>p)5GbgYL(==Uz1M`!&sYFP^1CGCWY52*ccAXCKfI~+zeu}s^5kmBQ3IA`b`&0X% zwdTsMy^N;g?ih(t5=B*rz>fF>+>CnL2Yi1O*L+O5k+i3SPTN3390>IijJSchF|sdh z8hp*LIF#>!v+@=C48vx}8VNR|Qr^$~Y$}QR>{*xa<5@(rW9yeBF;2R+%)TGHFxp0r zj=txb?WaUH90`)hrGG8|Q1DcOZ$4h)|23c0&6lB`LJ%RBACbv#C8H7VQ^>oc^{=K) zFGB6?)2`;t0l!k=!UmAmnfw~BVo03WVwH0~lb>e={UF#L0|)Ke{6&g}qEP=Ifyauq z($-<>@mR%&0gu&sK*u{i_~J$@ntyjw(;TVezV}aD<59Ca$s>8T;Kv}VlRWKD!@`o| z-P>RPuaBAgPcRtah@BRf(Q&|+X_!|y5q|)LB0CkiDBMvO#XN>IDJ*{TD-hX+bS{9Y z5FtIU8Pv2=@YK(g6)x_)9P71LEhye7&5pHDt^9=7BBWaIl+>xja%BBZ&ymn-dbEAh zdXeh8I*6ZA1-jHvvPA~(RWGQoV-eceqi3(ec-g=A2luXzlD?Bi`Y%E;44Fl_?8QM= z_&|9gnH+T27F)@%r9TJZ7f8R5oq5JONeQFYavGyGPT=~9)FMfFWMPN*(blrnxKrZt zyt@sBy_%yHP7IhSvRBi@*oNtn<@YXo*=t3v&Z(-Lq^O-);zk)(g{W#tf=D1~Lkwjk zncFy$woO?hM3O*h8$UuM`4p4c+0bv#4U-^}^oJwlh$FO!CVs?yqjZz-U>xJ*2B4c9 z4u;M*1)k8B@*~0%6N41l`&0M7cC~`|kMp_QAj&Fb$-AwroSWQL{;%$&)X7-qwIZkh zonF;yWN-ZQ?`l|b%~7~tblV~tdmGFdl;2BOXwTdZ_#2M|Vg+QCOlTH- z8_eIp1`p8hwApE9W$C#c*OH<)0Z)ja=+kR5$*0b~{Q>mB1MaQ!lOP2go^EI_@1G-3 z%=;hF9DIGi<^BMx$aP7s;iri;Qz*d6-@w>r*oyaj;Qv+VBPD%*YN+kK_wkIsna2e6 z*(b0qcNzkb7^j^po3k=uNDN|R?q4-+U+U1#)|)$5uGI4PIB*PgNygVuA`(fgipr*NWyt&NMS@htXXI}zJa-WKH8{(Vfg3@h6e9Oou) z!%C)*f;ry3W))@eA-mWUGA|=YD1uLaKG>`@H4MB$OI1|_lNT2Z>9qm%2^0J;5n48z~hXY z6%UKvgl5v}xR~sj%_+p6Ivh%N1;?w41m#mmxG=O zi{qfg(3t26xr(}m1~X|{!oueSelKQ11FkQ%VkzRbgtnR!eD9Mc2aP}b{!_D6So2fubDljjMfPU8X&ATD5=E8ZgmPVd!$e{n$@V2NIVym zCs9pxk(WqykPG+ZR^qbY+}PCMTM5MbWEhQvic&~WIYgNy7`1?LRDjufW zfOez75kCq*&q+TGo-lZ9EqwN};Y6l`AEYNJRuQk}!$1r) zn-cy5vAc+8u$E~LOEZv5Ms3+%6o@jJ&LL^Ul4|q3p^#wf%3jcPuPG8=>r=BoQ`OSW z^IXC$W!ZyO!0c{d{Drr>F`}F2-ZI-;isEgg@$)8F=maQcnpWYZ0+e-2=6smuT8uJA zkgUG38;3eTUq89W2Ea&@aW?6pN#xr>#$+~|47Kawp)FMNh}WT{fHgvj9u0L9Lm6M0P^&;(^Wc22(AMFm @location(0) vec4 { let scaled_stroke_width = in.stroke_width * chart_uniforms.scale; let frag_xy = vec2(in.clip_position[0], in.clip_position[1]); + // Compute fill and stroke, potentially based on gradient + let fill = lookup_color(in.fill, in.clip_position, in.outer_top_left, in.outer_bottom_right); + let stroke = lookup_color(in.stroke, in.clip_position, in.outer_top_left, in.outer_bottom_right); + if (scaled_radius > 0.0) { // has rounded corners let inner_bottom_left = vec2(in.inner_top_left[0], in.inner_bottom_right[1]); @@ -114,16 +118,21 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { } let stroke_radius = scaled_radius + scaled_stroke_width / 2.0; - let alpha_factor = 1.0 - smoothstep(stroke_radius - buffer, stroke_radius + buffer, dist); + let outer_factor = 1.0 - smoothstep(stroke_radius - buffer, stroke_radius + buffer, dist); let inner_radius = scaled_radius - scaled_stroke_width / 2.0; - let mix_factor = 1.0 - smoothstep(inner_radius - buffer, inner_radius + buffer, dist); - var mixed_color: vec4 = mix( - lookup_color(in.stroke, in.clip_position, in.outer_top_left, in.outer_bottom_right), - lookup_color(in.fill, in.clip_position, in.outer_top_left, in.outer_bottom_right), - mix_factor - ); - mixed_color[3] *= alpha_factor; + let inner_factor = 1.0 - smoothstep(inner_radius - buffer, inner_radius + buffer, dist); + + var mixed_color: vec4; + + if (fill[3] == 0.0) { + mixed_color = stroke; + mixed_color[3] *= outer_factor * (1.0 - inner_factor); + } else { + mixed_color = mix(stroke, fill, inner_factor); + mixed_color[3] *= outer_factor; + } + return mixed_color; } else { var dist: f32 = scaled_radius; @@ -137,11 +146,11 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { dist = distance(inner_top_right, frag_xy); } else { // skip anit-aliasing when not in a corner - return lookup_color(in.fill, in.clip_position, in.outer_top_left, in.outer_bottom_right); + return fill; } let alpha_factor = 1.0 - smoothstep(scaled_radius - buffer, scaled_radius + buffer, dist); - var color: vec4 = lookup_color(in.fill, in.clip_position, in.outer_top_left, in.outer_bottom_right); + var color: vec4 = fill; color[3] *= alpha_factor; return color; } @@ -156,13 +165,13 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { let in_stroke = in_left_stroke || in_right_stroke || in_bottom_stroke || in_top_stroke; if (in_stroke) { - return lookup_color(in.stroke, in.clip_position, in.outer_top_left, in.outer_bottom_right); + return stroke; } else { - return lookup_color(in.fill, in.clip_position, in.outer_top_left, in.outer_bottom_right); + return fill; } } else { // no stroke - return lookup_color(in.fill, in.clip_position, in.outer_top_left, in.outer_bottom_right); + return fill; } } } diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index 905aa23..5d9adf7 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -112,6 +112,7 @@ mod test_image_baselines { case("gradients", "diagonal_gradient_bars_rounded", 0.001), case("gradients", "default_gradient_bars_rounded_stroke", 0.0015), case("gradients", "residuals_colorscale", 0.0015), + case("gradients", "stroke_rect_gradient", 0.002), )] fn test_image_baseline(category: &str, spec_name: &str, tolerance: f64) { let specs_dir = format!( From 363310436b7350f9b8020f3769e29b160106cf40 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 11:09:58 -0500 Subject: [PATCH 13/27] delete legacy rect mark --- sg2d-wgpu/src/marks/mod.rs | 1 - sg2d-wgpu/src/marks/rect.rs | 186 ---------------------------------- sg2d-wgpu/src/marks/rect.wgsl | 157 ---------------------------- 3 files changed, 344 deletions(-) delete mode 100644 sg2d-wgpu/src/marks/rect.rs delete mode 100644 sg2d-wgpu/src/marks/rect.wgsl diff --git a/sg2d-wgpu/src/marks/mod.rs b/sg2d-wgpu/src/marks/mod.rs index 41ba566..295d469 100644 --- a/sg2d-wgpu/src/marks/mod.rs +++ b/sg2d-wgpu/src/marks/mod.rs @@ -4,7 +4,6 @@ pub mod gradient_rect; pub mod image; pub mod instanced_mark; pub mod path; -pub mod rect; pub mod rule; pub mod symbol; pub mod text; diff --git a/sg2d-wgpu/src/marks/rect.rs b/sg2d-wgpu/src/marks/rect.rs deleted file mode 100644 index f5e710d..0000000 --- a/sg2d-wgpu/src/marks/rect.rs +++ /dev/null @@ -1,186 +0,0 @@ -use crate::canvas::CanvasDimensions; -use crate::marks::instanced_mark::InstancedMarkShader; -use itertools::izip; -use sg2d::marks::rect::RectMark; -use sg2d::marks::value::ColorOrGradient; -use wgpu::VertexBufferLayout; - -#[repr(C)] -#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] -pub struct RectUniform { - pub size: [f32; 2], - pub scale: f32, - _pad: [f32; 1], // Pad to 16 bytes -} - -impl RectUniform { - pub fn new(dimensions: CanvasDimensions) -> Self { - Self { - size: dimensions.size, - scale: dimensions.scale, - _pad: [0.0], - } - } -} - -#[repr(C)] -#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] -pub struct RectVertex { - pub position: [f32; 2], -} - -const VERTEX_ATTRIBUTES: [wgpu::VertexAttribute; 1] = wgpu::vertex_attr_array![ - 0 => Float32x2, // position -]; - -impl RectVertex { - pub fn desc() -> VertexBufferLayout<'static> { - VertexBufferLayout { - array_stride: std::mem::size_of::() as wgpu::BufferAddress, - step_mode: wgpu::VertexStepMode::Vertex, - attributes: &VERTEX_ATTRIBUTES, - } - } -} - -#[repr(C)] -#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] -pub struct RectInstance { - pub position: [f32; 2], - pub fill: [f32; 4], - pub width: f32, - pub height: f32, - pub stroke: [f32; 4], - pub stroke_width: f32, - pub corner_radius: f32, -} - -const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 7] = wgpu::vertex_attr_array![ - 1 => Float32x2, // position - 2 => Float32x4, // color - 3 => Float32, // width - 4 => Float32, // height - 5 => Float32x4, // stroke - 6 => Float32, // stroke_width - 7 => Float32, // corner_radius -]; - -impl RectInstance { - pub fn iter_from_spec(mark: &RectMark) -> impl Iterator + '_ { - izip!( - mark.x_iter(), - mark.y_iter(), - mark.width_iter(), - mark.height_iter(), - mark.fill_iter(), - mark.stroke_iter(), - mark.stroke_width_iter(), - mark.corner_radius_iter(), - ) - .map( - |(x, y, width, height, fill, stroke, stroke_width, corner_radius)| { - let fill = match fill { - ColorOrGradient::Color(c) => c, - _ => todo!("Gradient fill not implemented"), - }; - let stroke = match stroke { - ColorOrGradient::Color(c) => c, - _ => todo!("Gradient stroke not implemented"), - }; - RectInstance { - position: [*x, *y], - width: *width, - height: *height, - fill: *fill, - stroke: *stroke, - stroke_width: *stroke_width, - corner_radius: *corner_radius, - } - }, - ) - } -} - -pub struct RectShader { - verts: Vec, - indices: Vec, - instances: Vec, - uniform: RectUniform, - shader: String, - vertex_entry_point: String, - fragment_entry_point: String, -} - -impl RectShader { - pub fn from_rect_mark(mark: &RectMark, dimensions: CanvasDimensions) -> Self { - let instances = RectInstance::iter_from_spec(mark).collect::>(); - Self { - verts: vec![ - RectVertex { - position: [0.0, 0.0], - }, - RectVertex { - position: [1.0, 0.0], - }, - RectVertex { - position: [1.0, 1.0], - }, - RectVertex { - position: [0.0, 1.0], - }, - ], - indices: vec![0, 1, 2, 0, 2, 3], - instances, - uniform: RectUniform::new(dimensions), - shader: include_str!("rect.wgsl").to_string(), - vertex_entry_point: "vs_main".to_string(), - fragment_entry_point: "fs_main".to_string(), - } - } -} - -impl InstancedMarkShader for RectShader { - type Instance = RectInstance; - type Vertex = RectVertex; - type Uniform = RectUniform; - - fn verts(&self) -> &[Self::Vertex] { - self.verts.as_slice() - } - - fn indices(&self) -> &[u16] { - self.indices.as_slice() - } - - fn instances(&self) -> &[Self::Instance] { - self.instances.as_slice() - } - - fn uniform(&self) -> Self::Uniform { - self.uniform - } - - fn shader(&self) -> &str { - self.shader.as_str() - } - - fn vertex_entry_point(&self) -> &str { - self.vertex_entry_point.as_str() - } - - fn fragment_entry_point(&self) -> &str { - self.fragment_entry_point.as_str() - } - - fn instance_desc(&self) -> wgpu::VertexBufferLayout<'static> { - wgpu::VertexBufferLayout { - array_stride: std::mem::size_of::() as wgpu::BufferAddress, - step_mode: wgpu::VertexStepMode::Instance, - attributes: &INSTANCE_ATTRIBUTES, - } - } - - fn vertex_desc(&self) -> VertexBufferLayout<'static> { - RectVertex::desc() - } -} diff --git a/sg2d-wgpu/src/marks/rect.wgsl b/sg2d-wgpu/src/marks/rect.wgsl deleted file mode 100644 index 3235feb..0000000 --- a/sg2d-wgpu/src/marks/rect.wgsl +++ /dev/null @@ -1,157 +0,0 @@ -// Vertex shader -struct ChartUniform { - size: vec2, - scale: f32, - _pad: f32, // for 16 byte alignment -}; - -@group(0) @binding(0) -var chart_uniforms: ChartUniform; - -struct VertexInput { - @location(0) position: vec2, -}; - -struct InstanceInput { - @location(1) position: vec2, - @location(2) fill: vec4, - @location(3) width: f32, - @location(4) height: f32, - @location(5) stroke: vec4, - @location(6) stroke_width: f32, - @location(7) corner_radius: f32, -}; - -struct VertexOutput { - @builtin(position) clip_position: vec4, - @location(0) fill: vec4, - @location(1) stroke: vec4, - @location(2) stroke_width: f32, - @location(3) corner_radius: f32, - - // Outer points are outside of stroke - @location(4) outer_top_left: vec2, - @location(5) outer_bottom_right: vec2, - - // Inner points are centers of the corner radius - @location(6) inner_top_left: vec2, - @location(7) inner_bottom_right: vec2, -}; - -@vertex -fn vs_main( - model: VertexInput, - instance: InstanceInput, -) -> VertexOutput { - var out: VertexOutput; - // Pass through values - out.fill = instance.fill; - out.stroke = instance.stroke; - out.stroke_width = instance.stroke_width; - - // corner_radius may not be less than half the rect height - let corner_radius = min(instance.corner_radius, instance.height / 2.0); - out.corner_radius = corner_radius; - - // Compute corner points in fragment shader coordinates - let half_stroke = instance.stroke_width / 2.0; - let width_height = vec2(instance.width, instance.height); - out.outer_top_left = (instance.position - half_stroke) * chart_uniforms.scale; - out.outer_bottom_right = (instance.position + width_height + half_stroke) * chart_uniforms.scale; - - // Compute corner radius center points in fragment shader coordinates - out.inner_top_left = (instance.position + corner_radius) * chart_uniforms.scale; - out.inner_bottom_right = (instance.position + width_height - corner_radius) * chart_uniforms.scale; - - // Compute vertex coordinates - let x = 2.0 * (model.position[0] * (instance.width + instance.stroke_width) + instance.position[0] - half_stroke) / chart_uniforms.size[0] - 1.0; - let y = 2.0 * (model.position[1] * (instance.height + instance.stroke_width) + (chart_uniforms.size[1] - instance.position[1] - instance.height - half_stroke)) / chart_uniforms.size[1] - 1.0; - out.clip_position = vec4(x, y, 0.0, 1.0); - return out; -} - -// Fragment shader -@fragment -fn fs_main(in: VertexOutput) -> @location(0) vec4 { - let scaled_radius = in.corner_radius * chart_uniforms.scale; - let scaled_stroke_width = in.stroke_width * chart_uniforms.scale; - let frag_xy = vec2(in.clip_position[0], in.clip_position[1]); - - if (scaled_radius > 0.0) { - // has rounded corners - let inner_bottom_left = vec2(in.inner_top_left[0], in.inner_bottom_right[1]); - let inner_top_right = vec2(in.inner_bottom_right[0], in.inner_top_left[1]); - - let in_top_left = in.clip_position[0] < in.inner_top_left[0] && in.clip_position[1] < in.inner_top_left[1]; - let in_top_right = inner_top_right[0] < in.clip_position[0] && in.clip_position[1] < inner_top_right[1]; - let in_bottom_right = in.inner_bottom_right[0] < in.clip_position[0] && in.inner_bottom_right[1] < in.clip_position[1]; - let in_bottom_left = in.clip_position[0] < inner_bottom_left[0] && inner_bottom_left[1] < in.clip_position[1]; - - let buffer = 0.5 * chart_uniforms.scale; - if (scaled_stroke_width > 0.0) { - var dist: f32 = scaled_radius; - if (in_top_left) { - dist = distance(in.inner_top_left, frag_xy); - } else if (in_bottom_right) { - dist = distance(in.inner_bottom_right, frag_xy); - } else if (in_bottom_left) { - dist = distance(inner_bottom_left, frag_xy); - } else if (in_top_right) { - dist = distance(inner_top_right, frag_xy); - } else { - let right_dist = frag_xy[0] - inner_top_right[0]; - let left_dist = in.inner_top_left[0] - frag_xy[0]; - let top_dist = in.inner_top_left[1] - frag_xy[1]; - let bottom_dist = frag_xy[1] - in.inner_bottom_right[1]; - dist = max(max(right_dist, left_dist), max(bottom_dist, top_dist)); - } - - let stroke_radius = scaled_radius + scaled_stroke_width / 2.0; - let alpha_factor = 1.0 - smoothstep(stroke_radius - buffer, stroke_radius + buffer, dist); - - let inner_radius = scaled_radius - scaled_stroke_width / 2.0; - let mix_factor = 1.0 - smoothstep(inner_radius - buffer, inner_radius + buffer, dist); - var mixed_color: vec4 = mix(in.stroke, in.fill, mix_factor); - mixed_color[3] *= alpha_factor; - return mixed_color; - } else { - var dist: f32 = scaled_radius; - if (in_top_left) { - dist = distance(in.inner_top_left, frag_xy); - } else if (in_bottom_right) { - dist = distance(in.inner_bottom_right, frag_xy); - } else if (in_bottom_left) { - dist = distance(inner_bottom_left, frag_xy); - } else if (in_top_right) { - dist = distance(inner_top_right, frag_xy); - } else { - // skip anit-aliasing when not in a corner - return in.fill; - } - - let alpha_factor = 1.0 - smoothstep(scaled_radius - buffer, scaled_radius + buffer, dist); - var color: vec4 = in.fill; - color[3] *= alpha_factor; - return color; - } - } else { - // no rounded corners - if (scaled_stroke_width > 0.0) { - // has stroke - let in_left_stroke = in.clip_position[0] - in.outer_top_left[0] < scaled_stroke_width; - let in_right_stroke = in.outer_bottom_right[0] - in.clip_position[0] < scaled_stroke_width; - let in_top_stroke = in.clip_position[1] - in.outer_top_left[1] < scaled_stroke_width; - let in_bottom_stroke = in.outer_bottom_right[1] - in.clip_position[1] < scaled_stroke_width; - - let in_stroke = in_left_stroke || in_right_stroke || in_bottom_stroke || in_top_stroke; - if (in_stroke) { - return in.stroke; - } else { - return in.fill; - } - } else { - // no stroke - return in.fill; - } - } -} From 9f68c214d21139e4ead8e7390ad9f5825957ab18 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 11:12:23 -0500 Subject: [PATCH 14/27] Rename gradient_rect to rect --- sg2d-wgpu/src/canvas.rs | 12 +--- sg2d-wgpu/src/marks/mod.rs | 2 +- .../src/marks/{gradient_rect.rs => rect.rs} | 56 +++++++++---------- .../marks/{gradient_rect.wgsl => rect.wgsl} | 0 4 files changed, 31 insertions(+), 39 deletions(-) rename sg2d-wgpu/src/marks/{gradient_rect.rs => rect.rs} (88%) rename sg2d-wgpu/src/marks/{gradient_rect.wgsl => rect.wgsl} (100%) diff --git a/sg2d-wgpu/src/canvas.rs b/sg2d-wgpu/src/canvas.rs index afccb54..3d01486 100644 --- a/sg2d-wgpu/src/canvas.rs +++ b/sg2d-wgpu/src/canvas.rs @@ -15,7 +15,7 @@ use winit::window::Window; use crate::error::Sg2dWgpuError; use crate::marks::arc::ArcShader; use crate::marks::basic_mark::BasicMarkRenderer; -use crate::marks::gradient_rect::GradientRectShader; +use crate::marks::rect::RectShader; use crate::marks::image::ImageShader; use crate::marks::instanced_mark::InstancedMarkRenderer; use crate::marks::path::PathShader; @@ -138,20 +138,12 @@ pub trait Canvas { } fn add_rect_mark(&mut self, mark: &RectMark) -> Result<(), Sg2dWgpuError> { - // self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( - // self.device(), - // self.texture_format(), - // self.sample_count(), - // Box::new(RectShader::from_rect_mark(mark, self.dimensions())), - // ))); - - // Use gradient version self.add_mark_renderer(MarkRenderer::TextureInstanced( TextureInstancedMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), - Box::new(GradientRectShader::from_rect_mark(mark, self.dimensions())), + Box::new(RectShader::from_rect_mark(mark, self.dimensions())), ), )); Ok(()) diff --git a/sg2d-wgpu/src/marks/mod.rs b/sg2d-wgpu/src/marks/mod.rs index 295d469..adfb59c 100644 --- a/sg2d-wgpu/src/marks/mod.rs +++ b/sg2d-wgpu/src/marks/mod.rs @@ -1,6 +1,6 @@ pub mod arc; pub mod basic_mark; -pub mod gradient_rect; +pub mod rect; pub mod image; pub mod instanced_mark; pub mod path; diff --git a/sg2d-wgpu/src/marks/gradient_rect.rs b/sg2d-wgpu/src/marks/rect.rs similarity index 88% rename from sg2d-wgpu/src/marks/gradient_rect.rs rename to sg2d-wgpu/src/marks/rect.rs index 4a54630..e0fd28f 100644 --- a/sg2d-wgpu/src/marks/gradient_rect.rs +++ b/sg2d-wgpu/src/marks/rect.rs @@ -16,13 +16,13 @@ const GRADIENT_TEXTURE_HEIGHT: u32 = 256; #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] -pub struct GradientRectUniform { +pub struct RectUniform { pub size: [f32; 2], pub scale: f32, _pad: [f32; 1], // Pad to 16 bytes } -impl GradientRectUniform { +impl RectUniform { pub fn new(dimensions: CanvasDimensions) -> Self { Self { size: dimensions.size, @@ -34,7 +34,7 @@ impl GradientRectUniform { #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] -pub struct GradientRectVertex { +pub struct RectVertex { pub position: [f32; 2], } @@ -42,10 +42,10 @@ const VERTEX_ATTRIBUTES: [wgpu::VertexAttribute; 1] = wgpu::vertex_attr_array![ 0 => Float32x2, // position ]; -impl GradientRectVertex { +impl RectVertex { pub fn desc() -> VertexBufferLayout<'static> { VertexBufferLayout { - array_stride: std::mem::size_of::() as wgpu::BufferAddress, + array_stride: std::mem::size_of::() as wgpu::BufferAddress, step_mode: wgpu::VertexStepMode::Vertex, attributes: &VERTEX_ATTRIBUTES, } @@ -54,7 +54,7 @@ impl GradientRectVertex { #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] -pub struct GradientRectInstance { +pub struct RectInstance { pub position: [f32; 2], pub fill: [f32; 4], pub width: f32, @@ -74,9 +74,9 @@ const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 7] = wgpu::vertex_attr_array! 7 => Float32, // corner_radius ]; -impl GradientRectInstance { - pub fn from_spec(mark: &RectMark) -> (Vec, image::RgbaImage) { - let mut instances: Vec = Vec::new(); +impl RectInstance { + pub fn from_spec(mark: &RectMark) -> (Vec, image::RgbaImage) { + let mut instances: Vec = Vec::new(); let mut img = image::RgbaImage::new(GRADIENT_TEXTURE_WIDTH, GRADIENT_TEXTURE_HEIGHT); // Write gradients @@ -197,7 +197,7 @@ impl GradientRectInstance { ) { let fill = compute_color(fill); let stroke = compute_color(stroke); - instances.push(GradientRectInstance { + instances.push(RectInstance { position: [*x, *y], width: *width, height: *height, @@ -211,11 +211,11 @@ impl GradientRectInstance { } } -pub struct GradientRectShader { - verts: Vec, +pub struct RectShader { + verts: Vec, indices: Vec, - instances: Vec, - uniform: GradientRectUniform, + instances: Vec, + uniform: RectUniform, batches: Vec, texture_size: Extent3d, shader: String, @@ -223,9 +223,9 @@ pub struct GradientRectShader { fragment_entry_point: String, } -impl GradientRectShader { +impl RectShader { pub fn from_rect_mark(mark: &RectMark, dimensions: CanvasDimensions) -> Self { - let (instances, img) = GradientRectInstance::from_spec(mark); + let (instances, img) = RectInstance::from_spec(mark); let batches = vec![InstancedTextureMarkBatch { instances_range: 0..instances.len() as u32, @@ -234,16 +234,16 @@ impl GradientRectShader { Self { verts: vec![ - GradientRectVertex { + RectVertex { position: [0.0, 0.0], }, - GradientRectVertex { + RectVertex { position: [1.0, 0.0], }, - GradientRectVertex { + RectVertex { position: [1.0, 1.0], }, - GradientRectVertex { + RectVertex { position: [0.0, 1.0], }, ], @@ -255,18 +255,18 @@ impl GradientRectShader { height: 256, depth_or_array_layers: 1, }, - uniform: GradientRectUniform::new(dimensions), - shader: include_str!("gradient_rect.wgsl").to_string(), + uniform: RectUniform::new(dimensions), + shader: include_str!("rect.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), } } } -impl TextureInstancedMarkShader for GradientRectShader { - type Instance = GradientRectInstance; - type Vertex = GradientRectVertex; - type Uniform = GradientRectUniform; +impl TextureInstancedMarkShader for RectShader { + type Instance = RectInstance; + type Vertex = RectVertex; + type Uniform = RectUniform; fn verts(&self) -> &[Self::Vertex] { self.verts.as_slice() @@ -306,13 +306,13 @@ impl TextureInstancedMarkShader for GradientRectShader { fn instance_desc(&self) -> wgpu::VertexBufferLayout<'static> { wgpu::VertexBufferLayout { - array_stride: std::mem::size_of::() as wgpu::BufferAddress, + array_stride: std::mem::size_of::() as wgpu::BufferAddress, step_mode: wgpu::VertexStepMode::Instance, attributes: &INSTANCE_ATTRIBUTES, } } fn vertex_desc(&self) -> VertexBufferLayout<'static> { - GradientRectVertex::desc() + RectVertex::desc() } } diff --git a/sg2d-wgpu/src/marks/gradient_rect.wgsl b/sg2d-wgpu/src/marks/rect.wgsl similarity index 100% rename from sg2d-wgpu/src/marks/gradient_rect.wgsl rename to sg2d-wgpu/src/marks/rect.wgsl From 788d714ed33f2ec977a608d0e3a8e739bfaa8770 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 14:20:39 -0500 Subject: [PATCH 15/27] Add gradient support to area and line marks --- .../gradients/area_line_with_gradient.png | Bin 0 -> 59723 bytes .../gradients/area_line_with_gradient.sg.json | 3696 +++++++++++++++++ .../gradients/area_with_gradient.png | Bin 0 -> 57948 bytes .../gradients/area_with_gradient.sg.json | 2676 ++++++++++++ .../gradients/area_line_with_gradient.vg.json | 171 + .../gradients/area_with_gradient.vg.json | 158 + sg2d-vega/src/marks/area.rs | 24 +- sg2d-vega/src/marks/line.rs | 15 +- sg2d-vega/src/marks/symbol.rs | 4 +- sg2d-wgpu/src/canvas.rs | 10 +- sg2d-wgpu/src/marks/gradient.rs | 18 + sg2d-wgpu/src/marks/image.wgsl | 8 +- sg2d-wgpu/src/marks/mod.rs | 3 +- sg2d-wgpu/src/marks/path.rs | 79 +- sg2d-wgpu/src/marks/path.wgsl | 70 +- sg2d-wgpu/src/marks/rect.rs | 215 +- sg2d-wgpu/src/marks/rect.wgsl | 14 +- sg2d-wgpu/src/marks/texture_mark.rs | 30 +- sg2d-wgpu/tests/test_image_baselines.rs | 2 + sg2d/src/marks/area.rs | 12 +- sg2d/src/marks/line.rs | 8 +- 21 files changed, 7041 insertions(+), 172 deletions(-) create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/area_line_with_gradient.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/area_line_with_gradient.sg.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/area_with_gradient.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/area_with_gradient.sg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/area_line_with_gradient.vg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/area_with_gradient.vg.json create mode 100644 sg2d-wgpu/src/marks/gradient.rs diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/area_line_with_gradient.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/area_line_with_gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..708229e7a051fbee579540e06a3c33ed8efdce11 GIT binary patch literal 59723 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%0D~ATdT?|#zwC8*}$4^ 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 literal 0 HcmV?d00001 diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/area_with_gradient.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/area_with_gradient.sg.json new file mode 100644 index 0000000..3e8642f --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/area_with_gradient.sg.json @@ -0,0 +1,2676 @@ +{ + "width": 218, + "height": 217, + "origin": [ + 11, + 6 + ], + "scenegraph": { + "clip": false, + "interactive": true, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 15, + "y": -200, + "y2": 0 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 51, + "y": -200, + "y2": 0 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 87, + "y": -200, + "y2": 0 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 122, + "y": -200, + "y2": 0 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 158, + "y": -200, + "y2": 0 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 194, + "y": -200, + "y2": 0 + } + ], + "marktype": "rule", + "role": "axis-grid", + "zindex": 0 + } + ], + "orient": "bottom", + "offset": 0, + "x": 0.5, + "y": 200.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0, + "aria": false + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 200, + "x2": 200 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 150, + "x2": 200 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 100, + "x2": 200 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 50, + "x2": 200 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 0, + "x2": 200 + } + ], + "marktype": "rule", + "role": "axis-grid", + "zindex": 0 + } + ], + "orient": "left", + "offset": 0, + "x": 0.5, + "y": 0.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0, + "aria": false + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 15 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 51 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 87 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 122 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 158 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 194 + } + ], + "marktype": "rule", + "role": "axis-tick", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "x": 0, + "x2": 200, + "y": 0 + } + ], + "marktype": "rule", + "role": "axis-domain", + "zindex": 0 + } + ], + "orient": "bottom", + "offset": 0, + "x": 0.5, + "y": 200.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 200, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 150, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 100, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 50, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "x": 0, + "x2": -5 + } + ], + "marktype": "rule", + "role": "axis-tick", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "x": 0, + "y": 200, + "y2": 0 + } + ], + "marktype": "rule", + "role": "axis-domain", + "zindex": 0 + } + ], + "orient": "left", + "offset": 0, + "x": 0.5, + "y": 0.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0 + }, + { + "clip": false, + "interactive": true, + "items": [ + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Aug 01, 2004; price: 102.37", + "x": 0, + "y": 174.4075, + "y2": 200, + "defined": true, + "height": 25.5925 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Sep 01, 2004; price: 129.6", + "x": 3.0421360374542554, + "y": 167.6, + "y2": 200, + "defined": true, + "height": 32.400000000000006 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Oct 01, 2004; price: 190.64", + "x": 5.986138654345471, + "y": 152.34, + "y2": 200, + "defined": true, + "height": 47.66 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Nov 01, 2004; price: 181.98", + "x": 9.032363584323186, + "y": 154.505, + "y2": 200, + "defined": true, + "height": 45.495000000000005 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Dec 01, 2004; price: 192.79", + "x": 11.976366201214402, + "y": 151.8025, + "y2": 200, + "defined": true, + "height": 48.19749999999999 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jan 01, 2005; price: 195.62", + "x": 15.018502238668658, + "y": 151.095, + "y2": 200, + "defined": true, + "height": 48.905 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Feb 01, 2005; price: 187.99", + "x": 18.060638276122912, + "y": 153.0025, + "y2": 200, + "defined": true, + "height": 46.9975 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Mar 01, 2005; price: 180.51", + "x": 20.808374051888045, + "y": 154.8725, + "y2": 200, + "defined": true, + "height": 45.1275 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Apr 01, 2005; price: 220", + "x": 23.850510089342304, + "y": 145, + "y2": 200, + "defined": true, + "height": 55 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: May 01, 2005; price: 277.27", + "x": 26.790423813710056, + "y": 130.6825, + "y2": 200, + "defined": true, + "height": 69.3175 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jun 01, 2005; price: 294.15", + "x": 29.832559851164316, + "y": 126.4625, + "y2": 200, + "defined": true, + "height": 73.5375 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jul 01, 2005; price: 287.76", + "x": 32.77656246805552, + "y": 128.06000000000003, + "y2": 200, + "defined": true, + "height": 71.93999999999997 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Aug 01, 2005; price: 286", + "x": 35.818698505509786, + "y": 128.5, + "y2": 200, + "defined": true, + "height": 71.5 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Sep 01, 2005; price: 316.46", + "x": 38.86083454296404, + "y": 120.88499999999999, + "y2": 200, + "defined": true, + "height": 79.11500000000001 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Oct 01, 2005; price: 372.14", + "x": 41.80483715985525, + "y": 106.965, + "y2": 200, + "defined": true, + "height": 93.035 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Nov 01, 2005; price: 404.91", + "x": 44.85106208983297, + "y": 98.7725, + "y2": 200, + "defined": true, + "height": 101.2275 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Dec 01, 2005; price: 414.86", + "x": 47.79506470672418, + "y": 96.285, + "y2": 200, + "defined": true, + "height": 103.715 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jan 01, 2006; price: 432.66", + "x": 50.83720074417843, + "y": 91.835, + "y2": 200, + "defined": true, + "height": 108.165 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Feb 01, 2006; price: 362.62", + "x": 53.879336781632695, + "y": 109.345, + "y2": 200, + "defined": true, + "height": 90.655 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Mar 01, 2006; price: 390", + "x": 56.62707255739783, + "y": 102.49999999999999, + "y2": 200, + "defined": true, + "height": 97.50000000000001 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Apr 01, 2006; price: 417.94", + "x": 59.66920859485209, + "y": 95.515, + "y2": 200, + "defined": true, + "height": 104.485 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: May 01, 2006; price: 371.82", + "x": 62.609122319219836, + "y": 107.04500000000002, + "y2": 200, + "defined": true, + "height": 92.95499999999998 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jun 01, 2006; price: 419.33", + "x": 65.65125835667409, + "y": 95.1675, + "y2": 200, + "defined": true, + "height": 104.8325 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jul 01, 2006; price: 386.6", + "x": 68.5952609735653, + "y": 103.35000000000001, + "y2": 200, + "defined": true, + "height": 96.64999999999999 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Aug 01, 2006; price: 378.53", + "x": 71.63739701101957, + "y": 105.3675, + "y2": 200, + "defined": true, + "height": 94.6325 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Sep 01, 2006; price: 401.9", + "x": 74.67953304847383, + "y": 99.52499999999999, + "y2": 200, + "defined": true, + "height": 100.47500000000001 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Oct 01, 2006; price: 476.39", + "x": 77.62353566536504, + "y": 80.9025, + "y2": 200, + "defined": true, + "height": 119.0975 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Nov 01, 2006; price: 484.81", + "x": 80.66976059534275, + "y": 78.79750000000001, + "y2": 200, + "defined": true, + "height": 121.20249999999999 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Dec 01, 2006; price: 460.48", + "x": 83.61376321223398, + "y": 84.88, + "y2": 200, + "defined": true, + "height": 115.12 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jan 01, 2007; price: 501.5", + "x": 86.65589924968822, + "y": 74.62500000000001, + "y2": 200, + "defined": true, + "height": 125.37499999999999 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Feb 01, 2007; price: 449.45", + "x": 89.69803528714247, + "y": 87.63750000000002, + "y2": 200, + "defined": true, + "height": 112.36249999999998 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Mar 01, 2007; price: 458.16", + "x": 92.44577106290761, + "y": 85.46000000000001, + "y2": 200, + "defined": true, + "height": 114.53999999999999 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Apr 01, 2007; price: 471.38", + "x": 95.48381820783841, + "y": 82.155, + "y2": 200, + "defined": true, + "height": 117.845 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: May 01, 2007; price: 497.91", + "x": 98.42782082472962, + "y": 75.52250000000001, + "y2": 200, + "defined": true, + "height": 124.47749999999999 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jun 01, 2007; price: 522.7", + "x": 101.46995686218388, + "y": 69.32499999999999, + "y2": 200, + "defined": true, + "height": 130.675 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jul 01, 2007; price: 510", + "x": 104.4139594790751, + "y": 72.50000000000001, + "y2": 200, + "defined": true, + "height": 127.49999999999999 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Aug 01, 2007; price: 515.25", + "x": 107.45609551652934, + "y": 71.1875, + "y2": 200, + "defined": true, + "height": 128.8125 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Sep 01, 2007; price: 567.27", + "x": 110.4982315539836, + "y": 58.182500000000005, + "y2": 200, + "defined": true, + "height": 141.8175 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Oct 01, 2007; price: 707", + "x": 113.44223417087483, + "y": 23.249999999999993, + "y2": 200, + "defined": true, + "height": 176.75 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Nov 01, 2007; price: 693", + "x": 116.48437020832907, + "y": 26.750000000000007, + "y2": 200, + "defined": true, + "height": 173.25 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Dec 01, 2007; price: 691.48", + "x": 119.43246171774375, + "y": 27.12999999999999, + "y2": 200, + "defined": true, + "height": 172.87 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jan 01, 2008; price: 564.3", + "x": 122.474597755198, + "y": 58.925000000000004, + "y2": 200, + "defined": true, + "height": 141.075 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Feb 01, 2008; price: 471.18", + "x": 125.51673379265227, + "y": 82.205, + "y2": 200, + "defined": true, + "height": 117.795 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Mar 01, 2008; price: 440.47", + "x": 128.36260298898043, + "y": 89.8825, + "y2": 200, + "defined": true, + "height": 110.1175 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Apr 01, 2008; price: 574.29", + "x": 131.40065013391123, + "y": 56.42750000000001, + "y2": 200, + "defined": true, + "height": 143.5725 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: May 01, 2008; price: 585.8", + "x": 134.34465275080245, + "y": 53.55000000000001, + "y2": 200, + "defined": true, + "height": 146.45 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jun 01, 2008; price: 526.42", + "x": 137.3867887882567, + "y": 68.39500000000001, + "y2": 200, + "defined": true, + "height": 131.605 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jul 01, 2008; price: 473.75", + "x": 140.33079140514792, + "y": 81.5625, + "y2": 200, + "defined": true, + "height": 118.4375 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Aug 01, 2008; price: 463.29", + "x": 143.37292744260216, + "y": 84.1775, + "y2": 200, + "defined": true, + "height": 115.8225 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Sep 01, 2008; price: 400.52", + "x": 146.4150634800564, + "y": 99.87000000000002, + "y2": 200, + "defined": true, + "height": 100.12999999999998 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Oct 01, 2008; price: 359.36", + "x": 149.35906609694766, + "y": 110.16, + "y2": 200, + "defined": true, + "height": 89.84 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Nov 01, 2008; price: 292.96", + "x": 152.4012021344019, + "y": 126.76, + "y2": 200, + "defined": true, + "height": 73.24 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Dec 01, 2008; price: 307.65", + "x": 155.34929364381657, + "y": 123.08750000000002, + "y2": 200, + "defined": true, + "height": 76.91249999999998 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jan 01, 2009; price: 338.53", + "x": 158.39142968127084, + "y": 115.36750000000002, + "y2": 200, + "defined": true, + "height": 84.63249999999998 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Feb 01, 2009; price: 337.99", + "x": 161.4335657187251, + "y": 115.5025, + "y2": 200, + "defined": true, + "height": 84.4975 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Mar 01, 2009; price: 348.06", + "x": 164.1813014944902, + "y": 112.985, + "y2": 200, + "defined": true, + "height": 87.015 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Apr 01, 2009; price: 395.97", + "x": 167.219348639421, + "y": 101.00750000000001, + "y2": 200, + "defined": true, + "height": 98.99249999999999 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: May 01, 2009; price: 417.23", + "x": 170.16335125631224, + "y": 95.6925, + "y2": 200, + "defined": true, + "height": 104.3075 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jun 01, 2009; price: 421.59", + "x": 173.20548729376648, + "y": 94.6025, + "y2": 200, + "defined": true, + "height": 105.3975 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jul 01, 2009; price: 443.05", + "x": 176.1494899106577, + "y": 89.2375, + "y2": 200, + "defined": true, + "height": 110.7625 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Aug 01, 2009; price: 461.67", + "x": 179.19162594811195, + "y": 84.58250000000001, + "y2": 200, + "defined": true, + "height": 115.41749999999999 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Sep 01, 2009; price: 495.85", + "x": 182.2337619855662, + "y": 76.03750000000001, + "y2": 200, + "defined": true, + "height": 123.96249999999999 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Oct 01, 2009; price: 536.12", + "x": 185.17776460245742, + "y": 65.97, + "y2": 200, + "defined": true, + "height": 134.03 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Nov 01, 2009; price: 583", + "x": 188.21990063991169, + "y": 54.25, + "y2": 200, + "defined": true, + "height": 145.75 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Dec 01, 2009; price: 619.98", + "x": 191.16799214932635, + "y": 45.00500000000001, + "y2": 200, + "defined": true, + "height": 154.995 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Jan 01, 2010; price: 529.94", + "x": 194.2101281867806, + "y": 67.51499999999999, + "y2": 200, + "defined": true, + "height": 132.485 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Feb 01, 2010; price: 526.8", + "x": 197.25226422423486, + "y": 68.30000000000001, + "y2": 200, + "defined": true, + "height": 131.7 + }, + { + "opacity": 0.7, + "orient": "vertical", + "fill": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "description": "date: Mar 01, 2010; price: 560.19", + "x": 200, + "y": 59.952499999999986, + "y2": 200, + "defined": true, + "height": 140.0475 + } + ], + "marktype": "area", + "name": "layer_0_marks", + "role": "mark", + "zindex": 0 + }, + { + "clip": false, + "interactive": true, + "items": [ + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Aug 01, 2004; price: 102.37", + "x": 0, + "y": 174.4075, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Sep 01, 2004; price: 129.6", + "x": 3.0421360374542554, + "y": 167.6, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Oct 01, 2004; price: 190.64", + "x": 5.986138654345471, + "y": 152.34, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Nov 01, 2004; price: 181.98", + "x": 9.032363584323186, + "y": 154.505, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Dec 01, 2004; price: 192.79", + "x": 11.976366201214402, + "y": 151.8025, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jan 01, 2005; price: 195.62", + "x": 15.018502238668658, + "y": 151.095, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Feb 01, 2005; price: 187.99", + "x": 18.060638276122912, + "y": 153.0025, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Mar 01, 2005; price: 180.51", + "x": 20.808374051888045, + "y": 154.8725, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Apr 01, 2005; price: 220", + "x": 23.850510089342304, + "y": 145, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: May 01, 2005; price: 277.27", + "x": 26.790423813710056, + "y": 130.6825, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jun 01, 2005; price: 294.15", + "x": 29.832559851164316, + "y": 126.4625, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jul 01, 2005; price: 287.76", + "x": 32.77656246805552, + "y": 128.06000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Aug 01, 2005; price: 286", + "x": 35.818698505509786, + "y": 128.5, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Sep 01, 2005; price: 316.46", + "x": 38.86083454296404, + "y": 120.88499999999999, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Oct 01, 2005; price: 372.14", + "x": 41.80483715985525, + "y": 106.965, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Nov 01, 2005; price: 404.91", + "x": 44.85106208983297, + "y": 98.7725, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Dec 01, 2005; price: 414.86", + "x": 47.79506470672418, + "y": 96.285, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jan 01, 2006; price: 432.66", + "x": 50.83720074417843, + "y": 91.835, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Feb 01, 2006; price: 362.62", + "x": 53.879336781632695, + "y": 109.345, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Mar 01, 2006; price: 390", + "x": 56.62707255739783, + "y": 102.49999999999999, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Apr 01, 2006; price: 417.94", + "x": 59.66920859485209, + "y": 95.515, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: May 01, 2006; price: 371.82", + "x": 62.609122319219836, + "y": 107.04500000000002, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jun 01, 2006; price: 419.33", + "x": 65.65125835667409, + "y": 95.1675, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jul 01, 2006; price: 386.6", + "x": 68.5952609735653, + "y": 103.35000000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Aug 01, 2006; price: 378.53", + "x": 71.63739701101957, + "y": 105.3675, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Sep 01, 2006; price: 401.9", + "x": 74.67953304847383, + "y": 99.52499999999999, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Oct 01, 2006; price: 476.39", + "x": 77.62353566536504, + "y": 80.9025, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Nov 01, 2006; price: 484.81", + "x": 80.66976059534275, + "y": 78.79750000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Dec 01, 2006; price: 460.48", + "x": 83.61376321223398, + "y": 84.88, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jan 01, 2007; price: 501.5", + "x": 86.65589924968822, + "y": 74.62500000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Feb 01, 2007; price: 449.45", + "x": 89.69803528714247, + "y": 87.63750000000002, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Mar 01, 2007; price: 458.16", + "x": 92.44577106290761, + "y": 85.46000000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Apr 01, 2007; price: 471.38", + "x": 95.48381820783841, + "y": 82.155, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: May 01, 2007; price: 497.91", + "x": 98.42782082472962, + "y": 75.52250000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jun 01, 2007; price: 522.7", + "x": 101.46995686218388, + "y": 69.32499999999999, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jul 01, 2007; price: 510", + "x": 104.4139594790751, + "y": 72.50000000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Aug 01, 2007; price: 515.25", + "x": 107.45609551652934, + "y": 71.1875, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Sep 01, 2007; price: 567.27", + "x": 110.4982315539836, + "y": 58.182500000000005, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Oct 01, 2007; price: 707", + "x": 113.44223417087483, + "y": 23.249999999999993, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Nov 01, 2007; price: 693", + "x": 116.48437020832907, + "y": 26.750000000000007, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Dec 01, 2007; price: 691.48", + "x": 119.43246171774375, + "y": 27.12999999999999, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jan 01, 2008; price: 564.3", + "x": 122.474597755198, + "y": 58.925000000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Feb 01, 2008; price: 471.18", + "x": 125.51673379265227, + "y": 82.205, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Mar 01, 2008; price: 440.47", + "x": 128.36260298898043, + "y": 89.8825, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Apr 01, 2008; price: 574.29", + "x": 131.40065013391123, + "y": 56.42750000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: May 01, 2008; price: 585.8", + "x": 134.34465275080245, + "y": 53.55000000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jun 01, 2008; price: 526.42", + "x": 137.3867887882567, + "y": 68.39500000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jul 01, 2008; price: 473.75", + "x": 140.33079140514792, + "y": 81.5625, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Aug 01, 2008; price: 463.29", + "x": 143.37292744260216, + "y": 84.1775, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Sep 01, 2008; price: 400.52", + "x": 146.4150634800564, + "y": 99.87000000000002, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Oct 01, 2008; price: 359.36", + "x": 149.35906609694766, + "y": 110.16, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Nov 01, 2008; price: 292.96", + "x": 152.4012021344019, + "y": 126.76, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Dec 01, 2008; price: 307.65", + "x": 155.34929364381657, + "y": 123.08750000000002, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jan 01, 2009; price: 338.53", + "x": 158.39142968127084, + "y": 115.36750000000002, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Feb 01, 2009; price: 337.99", + "x": 161.4335657187251, + "y": 115.5025, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Mar 01, 2009; price: 348.06", + "x": 164.1813014944902, + "y": 112.985, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Apr 01, 2009; price: 395.97", + "x": 167.219348639421, + "y": 101.00750000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: May 01, 2009; price: 417.23", + "x": 170.16335125631224, + "y": 95.6925, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jun 01, 2009; price: 421.59", + "x": 173.20548729376648, + "y": 94.6025, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jul 01, 2009; price: 443.05", + "x": 176.1494899106577, + "y": 89.2375, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Aug 01, 2009; price: 461.67", + "x": 179.19162594811195, + "y": 84.58250000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Sep 01, 2009; price: 495.85", + "x": 182.2337619855662, + "y": 76.03750000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Oct 01, 2009; price: 536.12", + "x": 185.17776460245742, + "y": 65.97, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Nov 01, 2009; price: 583", + "x": 188.21990063991169, + "y": 54.25, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Dec 01, 2009; price: 619.98", + "x": 191.16799214932635, + "y": 45.00500000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Jan 01, 2010; price: 529.94", + "x": 194.2101281867806, + "y": 67.51499999999999, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Feb 01, 2010; price: 526.8", + "x": 197.25226422423486, + "y": 68.30000000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "darkgreen", + "description": "date: Mar 01, 2010; price: 560.19", + "x": 200, + "y": 59.952499999999986, + "defined": true + } + ], + "marktype": "line", + "name": "layer_1_marks", + "role": "mark", + "zindex": 0 + } + ], + "fill": "transparent", + "x": 0, + "y": 0, + "width": 200, + "height": 200, + "stroke": "transparent" + } + ], + "marktype": "group", + "name": "root", + "role": "frame", + "zindex": 0 + } +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-specs/gradients/area_line_with_gradient.vg.json b/sg2d-vega-test-data/vega-specs/gradients/area_line_with_gradient.vg.json new file mode 100644 index 0000000..8c974ae --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/gradients/area_line_with_gradient.vg.json @@ -0,0 +1,171 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "Google's stock price over time.", + "background": "white", + "padding": 5, + "width": 200, + "height": 200, + "style": "cell", + "encode": {"update": {"stroke": {"value": "transparent"}}}, + "data": [ + { + "name": "source_0", + "url": "data/stocks.csv", + "format": {"type": "csv", "parse": {"date": "date"}, "delimiter": ","}, + "transform": [ + {"type": "filter", "expr": "datum.symbol==='GOOG'"}, + { + "type": "impute", + "field": "price", + "groupby": [], + "key": "date", + "method": "value", + "value": 0 + }, + { + "type": "stack", + "groupby": ["date"], + "field": "price", + "sort": {"field": [], "order": []}, + "as": ["price_start", "price_end"], + "offset": "zero" + } + ] + } + ], + "marks": [ + { + "name": "layer_0_marks", + "type": "area", + "style": ["area"], + "sort": {"field": "datum[\"date\"]"}, + "from": {"data": "source_0"}, + "encode": { + "update": { + "opacity": {"value": 0.7}, + "orient": {"value": "vertical"}, + "fill": { + "value": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "gradient": "linear", + "stops": [ + {"offset": 0, "color": "white"}, + {"offset": 1, "color": "darkgreen"} + ] + } + }, + "description": { + "signal": "\"date: \" + (timeFormat(datum[\"date\"], '%b %d, %Y')) + \"; price: \" + (format(datum[\"price\"], \"\"))" + }, + "x": {"scale": "x", "field": "date"}, + "y": {"scale": "y", "field": "price_end"}, + "y2": {"scale": "y", "field": "price_start"}, + "defined": { + "signal": "isValid(datum[\"date\"]) && isFinite(+datum[\"date\"]) && isValid(datum[\"price\"]) && isFinite(+datum[\"price\"])" + } + } + } + }, + { + "name": "layer_1_marks", + "type": "line", + "style": ["line"], + "sort": {"field": "datum[\"date\"]"}, + "from": {"data": "source_0"}, + "encode": { + "update": { + "strokeWidth": {"value": 4}, + "stroke": { + "value": { + "x1": 0, + "y1": 1, + "x2": 1, + "y2": 1, + "gradient": "linear", + "stops": [ + {"offset": 0, "color": "yellow"}, + {"offset": 1, "color": "red"} + ] + } + }, + "description": { + "signal": "\"date: \" + (timeFormat(datum[\"date\"], '%b %d, %Y')) + \"; price: \" + (format(datum[\"price\"], \"\"))" + }, + "x": {"scale": "x", "field": "date"}, + "y": {"scale": "y", "field": "price_end"}, + "defined": { + "signal": "isValid(datum[\"date\"]) && isFinite(+datum[\"date\"]) && isValid(datum[\"price\"]) && isFinite(+datum[\"price\"])" + } + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "time", + "domain": {"data": "source_0", "field": "date"}, + "range": [0, {"signal": "width"}] + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "source_0", "fields": ["price_start", "price_end"]}, + "range": [{"signal": "height"}, 0], + "nice": true, + "zero": true + } + ], + "axes": [ + { + "scale": "x", + "orient": "bottom", + "gridScale": "y", + "grid": true, + "tickCount": {"signal": "ceil(width/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "y", + "orient": "left", + "gridScale": "x", + "grid": true, + "tickCount": {"signal": "ceil(height/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "x", + "orient": "bottom", + "grid": false, + "labels": false, + "labelFlush": true, + "labelOverlap": true, + "tickCount": {"signal": "ceil(width/40)"}, + "zindex": 0 + }, + { + "scale": "y", + "orient": "left", + "grid": false, + "labels": false, + "labelOverlap": true, + "tickCount": {"signal": "ceil(height/40)"}, + "zindex": 0 + } + ] +} diff --git a/sg2d-vega-test-data/vega-specs/gradients/area_with_gradient.vg.json b/sg2d-vega-test-data/vega-specs/gradients/area_with_gradient.vg.json new file mode 100644 index 0000000..270735b --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/gradients/area_with_gradient.vg.json @@ -0,0 +1,158 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "Google's stock price over time.", + "background": "white", + "padding": 5, + "width": 200, + "height": 200, + "style": "cell", + "encode": {"update": {"stroke": {"value": "transparent"}}}, + "data": [ + { + "name": "source_0", + "url": "data/stocks.csv", + "format": {"type": "csv", "parse": {"date": "date"}, "delimiter": ","}, + "transform": [ + {"type": "filter", "expr": "datum.symbol==='GOOG'"}, + { + "type": "impute", + "field": "price", + "groupby": [], + "key": "date", + "method": "value", + "value": 0 + }, + { + "type": "stack", + "groupby": ["date"], + "field": "price", + "sort": {"field": [], "order": []}, + "as": ["price_start", "price_end"], + "offset": "zero" + } + ] + } + ], + "marks": [ + { + "name": "layer_0_marks", + "type": "area", + "style": ["area"], + "sort": {"field": "datum[\"date\"]"}, + "from": {"data": "source_0"}, + "encode": { + "update": { + "opacity": {"value": 0.7}, + "orient": {"value": "vertical"}, + "fill": { + "value": { + "x1": 1, + "y1": 1, + "x2": 1, + "y2": 0, + "gradient": "linear", + "stops": [ + {"offset": 0, "color": "white"}, + {"offset": 1, "color": "darkgreen"} + ] + } + }, + "description": { + "signal": "\"date: \" + (timeFormat(datum[\"date\"], '%b %d, %Y')) + \"; price: \" + (format(datum[\"price\"], \"\"))" + }, + "x": {"scale": "x", "field": "date"}, + "y": {"scale": "y", "field": "price_end"}, + "y2": {"scale": "y", "field": "price_start"}, + "defined": { + "signal": "isValid(datum[\"date\"]) && isFinite(+datum[\"date\"]) && isValid(datum[\"price\"]) && isFinite(+datum[\"price\"])" + } + } + } + }, + { + "name": "layer_1_marks", + "type": "line", + "style": ["line"], + "sort": {"field": "datum[\"date\"]"}, + "from": {"data": "source_0"}, + "encode": { + "update": { + "stroke": {"value": "darkgreen"}, + "description": { + "signal": "\"date: \" + (timeFormat(datum[\"date\"], '%b %d, %Y')) + \"; price: \" + (format(datum[\"price\"], \"\"))" + }, + "x": {"scale": "x", "field": "date"}, + "y": {"scale": "y", "field": "price_end"}, + "defined": { + "signal": "isValid(datum[\"date\"]) && isFinite(+datum[\"date\"]) && isValid(datum[\"price\"]) && isFinite(+datum[\"price\"])" + } + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "time", + "domain": {"data": "source_0", "field": "date"}, + "range": [0, {"signal": "width"}] + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "source_0", "fields": ["price_start", "price_end"]}, + "range": [{"signal": "height"}, 0], + "nice": true, + "zero": true + } + ], + "axes": [ + { + "scale": "x", + "orient": "bottom", + "gridScale": "y", + "grid": true, + "tickCount": {"signal": "ceil(width/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "y", + "orient": "left", + "gridScale": "x", + "grid": true, + "tickCount": {"signal": "ceil(height/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "x", + "orient": "bottom", + "grid": false, + "labels": false, + "labelFlush": true, + "labelOverlap": true, + "tickCount": {"signal": "ceil(width/40)"}, + "zindex": 0 + }, + { + "scale": "y", + "orient": "left", + "grid": false, + "labels": false, + "labelOverlap": true, + "tickCount": {"signal": "ceil(height/40)"}, + "zindex": 0 + } + ] +} diff --git a/sg2d-vega/src/marks/area.rs b/sg2d-vega/src/marks/area.rs index 9625b95..d598d47 100644 --- a/sg2d-vega/src/marks/area.rs +++ b/sg2d-vega/src/marks/area.rs @@ -1,10 +1,10 @@ use crate::error::VegaSceneGraphError; use crate::marks::mark::{VegaMarkContainer, VegaMarkItem}; -use crate::marks::values::StrokeDashSpec; +use crate::marks::values::{CssColorOrGradient, StrokeDashSpec}; use serde::{Deserialize, Serialize}; use sg2d::marks::area::{AreaMark, AreaOrientation}; use sg2d::marks::mark::SceneMark; -use sg2d::marks::value::{EncodingValue, StrokeCap, StrokeJoin}; +use sg2d::marks::value::{ColorOrGradient, EncodingValue, Gradient, StrokeCap, StrokeJoin}; #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -15,11 +15,11 @@ pub struct VegaAreaItem { pub y2: Option, pub orient: Option, pub defined: Option, - pub fill: Option, + pub fill: Option, pub fill_opacity: Option, pub stroke_cap: Option, pub stroke_join: Option, - pub stroke: Option, + pub stroke: Option, pub stroke_opacity: Option, pub stroke_width: Option, pub stroke_dash: Option, @@ -38,26 +38,25 @@ impl VegaMarkContainer { // Parse stroke color let mut stroke_width = 0.0; - let mut stroke = [0.0, 0.0, 0.0, 1.0]; - let mut fill = [0.0, 0.0, 0.0, 0.0]; + let mut stroke = ColorOrGradient::Color([0.0, 0.0, 0.0, 1.0]); + let mut fill = ColorOrGradient::Color([0.0, 0.0, 0.0, 0.0]); let mut stroke_dash: Option> = None; + let mut gradients = Vec::::new(); if let Some(item) = &first { if let Some(stroke_css) = &item.stroke { - let c = csscolorparser::parse(stroke_css)?; let base_opacity = item.opacity.unwrap_or(1.0); - let stroke_opacity = c.a as f32 * item.stroke_opacity.unwrap_or(1.0) * base_opacity; - stroke = [c.r as f32, c.g as f32, c.b as f32, stroke_opacity]; + let stroke_opacity = item.stroke_opacity.unwrap_or(1.0) * base_opacity; + stroke = stroke_css.to_color_or_grad(stroke_opacity, &mut gradients)?; stroke_width = item.stroke_width.unwrap_or(1.0); } if let Some(d) = &item.stroke_dash { stroke_dash = Some(d.to_array()?.to_vec()); } if let Some(fill_css) = &item.fill { - let c = csscolorparser::parse(fill_css)?; let base_opacity = item.opacity.unwrap_or(1.0); - let fill_opacity = c.a as f32 * item.fill_opacity.unwrap_or(1.0) * base_opacity; - fill = [c.r as f32, c.g as f32, c.b as f32, fill_opacity] + let fill_opacity = item.fill_opacity.unwrap_or(1.0) * base_opacity; + fill = fill_css.to_color_or_grad(fill_opacity, &mut gradients)?; } } @@ -113,6 +112,7 @@ impl VegaMarkContainer { if defined.len() == len { mark.defined = EncodingValue::Array { values: defined }; } + mark.gradients = gradients; Ok(SceneMark::Area(mark)) } diff --git a/sg2d-vega/src/marks/line.rs b/sg2d-vega/src/marks/line.rs index dcde38e..d6f4c4f 100644 --- a/sg2d-vega/src/marks/line.rs +++ b/sg2d-vega/src/marks/line.rs @@ -1,10 +1,10 @@ use crate::error::VegaSceneGraphError; use crate::marks::mark::{VegaMarkContainer, VegaMarkItem}; -use crate::marks::values::StrokeDashSpec; +use crate::marks::values::{CssColorOrGradient, StrokeDashSpec}; use serde::{Deserialize, Serialize}; use sg2d::marks::line::LineMark; use sg2d::marks::mark::SceneMark; -use sg2d::marks::value::{EncodingValue, StrokeCap, StrokeJoin}; +use sg2d::marks::value::{ColorOrGradient, EncodingValue, Gradient, StrokeCap, StrokeJoin}; #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -16,7 +16,7 @@ pub struct VegaLineItem { pub defined: Option, pub stroke_cap: Option, pub stroke_join: Option, - pub stroke: Option, + pub stroke: Option, pub stroke_opacity: Option, pub stroke_width: Option, pub stroke_dash: Option, @@ -32,16 +32,16 @@ impl VegaMarkContainer { let stroke_width = first.and_then(|item| item.stroke_width).unwrap_or(1.0); let stroke_cap = first.and_then(|item| item.stroke_cap).unwrap_or_default(); let stroke_join = first.and_then(|item| item.stroke_join).unwrap_or_default(); + let mut gradients = Vec::::new(); // Parse stroke color - let mut stroke = [0.0, 0.0, 0.0, 1.0]; + let mut stroke = ColorOrGradient::Color([0.0, 0.0, 0.0, 1.0]); let mut stroke_dash: Option> = None; if let Some(item) = &first { if let Some(stroke_css) = &item.stroke { - let c = csscolorparser::parse(stroke_css)?; let base_opacity = item.opacity.unwrap_or(1.0); - let stroke_opacity = c.a as f32 * item.stroke_opacity.unwrap_or(1.0) * base_opacity; - stroke = [c.r as f32, c.g as f32, c.b as f32, stroke_opacity] + let stroke_opacity = item.stroke_opacity.unwrap_or(1.0) * base_opacity; + stroke = stroke_css.to_color_or_grad(stroke_opacity, &mut gradients)?; } if let Some(d) = &item.stroke_dash { stroke_dash = Some(d.to_array()?.to_vec()); @@ -55,6 +55,7 @@ impl VegaMarkContainer { stroke_cap, stroke_dash, stroke_join, + gradients, ..Default::default() }; diff --git a/sg2d-vega/src/marks/symbol.rs b/sg2d-vega/src/marks/symbol.rs index 9275045..447daf1 100644 --- a/sg2d-vega/src/marks/symbol.rs +++ b/sg2d-vega/src/marks/symbol.rs @@ -10,7 +10,7 @@ use sg2d::marks::group::{GroupBounds, SceneGroup}; use sg2d::marks::line::LineMark; use sg2d::marks::mark::SceneMark; use sg2d::marks::symbol::{SymbolMark, SymbolShape}; -use sg2d::marks::value::{EncodingValue, StrokeCap, StrokeJoin}; +use sg2d::marks::value::{ColorOrGradient, EncodingValue, StrokeCap, StrokeJoin}; #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -73,7 +73,7 @@ impl VegaMarkContainer { y: EncodingValue::Scalar { value: origin[1] + item.y, }, - stroke, + stroke: ColorOrGradient::Color(stroke), stroke_width: item.stroke_width.unwrap_or(1.0), stroke_cap: item.stroke_cap.unwrap_or_default(), stroke_join: item.stroke_join.unwrap_or_default(), diff --git a/sg2d-wgpu/src/canvas.rs b/sg2d-wgpu/src/canvas.rs index 3d01486..91f7807 100644 --- a/sg2d-wgpu/src/canvas.rs +++ b/sg2d-wgpu/src/canvas.rs @@ -15,10 +15,10 @@ use winit::window::Window; use crate::error::Sg2dWgpuError; use crate::marks::arc::ArcShader; use crate::marks::basic_mark::BasicMarkRenderer; -use crate::marks::rect::RectShader; use crate::marks::image::ImageShader; use crate::marks::instanced_mark::InstancedMarkRenderer; use crate::marks::path::PathShader; +use crate::marks::rect::RectShader; use crate::marks::rule::RuleShader; use crate::marks::symbol::SymbolShader; use crate::marks::text::TextMarkRenderer; @@ -88,7 +88,7 @@ pub trait Canvas { } fn add_path_mark(&mut self, mark: &PathMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Basic(BasicMarkRenderer::new( + self.add_mark_renderer(MarkRenderer::Texture(TextureMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), @@ -98,7 +98,7 @@ pub trait Canvas { } fn add_line_mark(&mut self, mark: &LineMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Basic(BasicMarkRenderer::new( + self.add_mark_renderer(MarkRenderer::Texture(TextureMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), @@ -108,7 +108,7 @@ pub trait Canvas { } fn add_trail_mark(&mut self, mark: &TrailMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Basic(BasicMarkRenderer::new( + self.add_mark_renderer(MarkRenderer::Texture(TextureMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), @@ -118,7 +118,7 @@ pub trait Canvas { } fn add_area_mark(&mut self, mark: &AreaMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Basic(BasicMarkRenderer::new( + self.add_mark_renderer(MarkRenderer::Texture(TextureMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), diff --git a/sg2d-wgpu/src/marks/gradient.rs b/sg2d-wgpu/src/marks/gradient.rs new file mode 100644 index 0000000..837e48b --- /dev/null +++ b/sg2d-wgpu/src/marks/gradient.rs @@ -0,0 +1,18 @@ +use crate::marks::rect::GRADIENT_TEXTURE_HEIGHT; +use sg2d::marks::value::ColorOrGradient; + +pub fn to_color_or_gradient_coord(color_or_gradient: &ColorOrGradient) -> [f32; 4] { + match color_or_gradient { + ColorOrGradient::Color(c) => *c, + ColorOrGradient::GradientIndex(grad_idx) => { + // Each gradient colorway is written to two rows, starting at texture + // y-coordinate 0. This results in 128 gradients stored in a 256x256 texture. To + // avoid interpolation artifacts, we compute the texture coordinate as the + // position between the two rows + let num_gradient_rows = GRADIENT_TEXTURE_HEIGHT as f32 / 2.0; + let grad_coord = (*grad_idx as f32 / num_gradient_rows) + + 1.0 / (GRADIENT_TEXTURE_HEIGHT as f32 * 2.0); + [-grad_coord, 0.0, 0.0, 0.0] + } + } +} diff --git a/sg2d-wgpu/src/marks/image.wgsl b/sg2d-wgpu/src/marks/image.wgsl index de293e7..ee93ba6 100644 --- a/sg2d-wgpu/src/marks/image.wgsl +++ b/sg2d-wgpu/src/marks/image.wgsl @@ -33,11 +33,13 @@ fn vs_main( // Fragment shader @group(1) @binding(0) -var t_diffuse: texture_2d; +var texture_atlas: texture_2d; @group(1) @binding(1) -var s_diffuse: sampler; +var linear_sampler: sampler; +@group(1) @binding(2) +var nearest_sampler: sampler; @fragment fn fs_main(in: VertexOutput) -> @location(0) vec4 { - return textureSample(t_diffuse, s_diffuse, in.tex_coords); + return textureSample(texture_atlas, linear_sampler, in.tex_coords); } diff --git a/sg2d-wgpu/src/marks/mod.rs b/sg2d-wgpu/src/marks/mod.rs index adfb59c..ba61ffe 100644 --- a/sg2d-wgpu/src/marks/mod.rs +++ b/sg2d-wgpu/src/marks/mod.rs @@ -1,9 +1,10 @@ pub mod arc; pub mod basic_mark; -pub mod rect; +mod gradient; pub mod image; pub mod instanced_mark; pub mod path; +pub mod rect; pub mod rule; pub mod symbol; pub mod text; diff --git a/sg2d-wgpu/src/marks/path.rs b/sg2d-wgpu/src/marks/path.rs index bb06811..08f304b 100644 --- a/sg2d-wgpu/src/marks/path.rs +++ b/sg2d-wgpu/src/marks/path.rs @@ -1,7 +1,10 @@ use crate::canvas::CanvasDimensions; use crate::error::Sg2dWgpuError; -use crate::marks::basic_mark::BasicMarkShader; +use crate::marks::gradient::to_color_or_gradient_coord; +use crate::marks::rect::build_gradients_image; +use crate::marks::texture_mark::{TextureMarkBatch, TextureMarkShader}; use itertools::izip; +use lyon::algorithms::aabb::bounding_box; use lyon::algorithms::measure::{PathMeasurements, PathSampler, SampleType}; use lyon::lyon_tessellation::{ BuffersBuilder, FillOptions, FillTessellator, FillVertex, FillVertexConstructor, StrokeOptions, @@ -15,7 +18,7 @@ use sg2d::marks::line::LineMark; use sg2d::marks::path::PathMark; use sg2d::marks::trail::TrailMark; use sg2d::marks::value::{StrokeCap, StrokeJoin}; -use wgpu::VertexBufferLayout; +use wgpu::{Extent3d, VertexBufferLayout}; #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] @@ -40,11 +43,15 @@ impl PathUniform { pub struct PathVertex { pub position: [f32; 2], pub color: [f32; 4], + pub top_left: [f32; 2], + pub bottom_right: [f32; 2], } -const VERTEX_ATTRIBUTES: [wgpu::VertexAttribute; 2] = wgpu::vertex_attr_array![ +const VERTEX_ATTRIBUTES: [wgpu::VertexAttribute; 4] = wgpu::vertex_attr_array![ 0 => Float32x2, // position 1 => Float32x4, // color + 2 => Float32x2, // top_left + 3 => Float32x2, // bottom_right ]; impl PathVertex { @@ -61,6 +68,7 @@ pub struct PathShader { verts: Vec, indices: Vec, uniform: PathUniform, + batches: Vec, shader: String, vertex_entry_point: String, fragment_entry_point: String, @@ -71,6 +79,7 @@ impl PathShader { mark: &PathMark, dimensions: CanvasDimensions, ) -> Result { + let gradients_image = build_gradients_image(&[]); let mut verts: Vec = Vec::new(); let mut indices: Vec = Vec::new(); @@ -83,6 +92,7 @@ impl PathShader { ) { // Apply transform to path let path = path.clone().transformed(transform); + let bbox = bounding_box(&path); // Create vertex/index buffer builder let mut buffers: VertexBuffers = VertexBuffers::new(); @@ -91,6 +101,8 @@ impl PathShader { VertexPositions { fill: *fill, stroke: *stroke, + top_left: bbox.min.to_array(), + bottom_right: bbox.max.to_array(), }, ); @@ -124,10 +136,15 @@ impl PathShader { indices.extend(buffers.indices.into_iter().map(|i| i + index_offset)); } + let indices_range = 0..indices.len() as u32; Ok(Self { verts, indices, uniform: PathUniform::new(dimensions), + batches: vec![TextureMarkBatch { + indices_range, + image: image::DynamicImage::ImageRgba8(gradients_image), + }], shader: include_str!("path.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -138,6 +155,9 @@ impl PathShader { mark: &AreaMark, dimensions: CanvasDimensions, ) -> Result { + // Handle gradients: + let gradients_image = build_gradients_image(&mark.gradients); + let mut path_builder = lyon::path::Path::builder().with_svg(); let mut tail: Vec<(f32, f32)> = Vec::new(); @@ -197,14 +217,17 @@ impl PathShader { close_area(&mut path_builder, &mut tail); let path = path_builder.build(); + let bbox = bounding_box(&path); // Create vertex/index buffer builder let mut buffers: VertexBuffers = VertexBuffers::new(); let mut buffers_builder = BuffersBuilder::new( &mut buffers, VertexPositions { - fill: mark.fill, - stroke: mark.stroke, + fill: to_color_or_gradient_coord(&mark.fill), + stroke: to_color_or_gradient_coord(&mark.stroke), + top_left: bbox.min.to_array(), + bottom_right: bbox.max.to_array(), }, ); @@ -232,10 +255,15 @@ impl PathShader { stroke_tessellator.tessellate_path(&path, &stroke_options, &mut buffers_builder)?; } + let indices_range = 0..buffers.indices.len() as u32; Ok(Self { verts: buffers.vertices, indices: buffers.indices, uniform: PathUniform::new(dimensions), + batches: vec![TextureMarkBatch { + indices_range, + image: image::DynamicImage::ImageRgba8(gradients_image), + }], shader: include_str!("path.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -246,6 +274,7 @@ impl PathShader { mark: &LineMark, dimensions: CanvasDimensions, ) -> Result { + let gradients_image = build_gradients_image(&mark.gradients); let mut defined_paths: Vec = Vec::new(); // Build path for each defined line segment @@ -329,13 +358,16 @@ impl PathShader { let mut indices: Vec = Vec::new(); for path in &defined_paths { + let bbox = bounding_box(path); // Create vertex/index buffer builder let mut buffers: VertexBuffers = VertexBuffers::new(); let mut buffers_builder = BuffersBuilder::new( &mut buffers, VertexPositions { fill: [0.0, 0.0, 0.0, 0.0], - stroke: mark.stroke, + stroke: to_color_or_gradient_coord(&mark.stroke), + top_left: bbox.min.to_array(), + bottom_right: bbox.max.to_array(), }, ); @@ -361,10 +393,15 @@ impl PathShader { indices.extend(buffers.indices.into_iter().map(|i| i + index_offset)); } + let indices_range = 0..indices.len() as u32; Ok(Self { verts, indices, uniform: PathUniform::new(dimensions), + batches: vec![TextureMarkBatch { + indices_range, + image: image::DynamicImage::ImageRgba8(gradients_image), + }], shader: include_str!("path.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -375,6 +412,8 @@ impl PathShader { mark: &TrailMark, dimensions: CanvasDimensions, ) -> Result { + let gradients_image = build_gradients_image(&[]); + let size_idx: AttributeIndex = 0; let mut path_builder = lyon::path::Path::builder_with_attributes(1); let mut path_len = 0; @@ -407,6 +446,7 @@ impl PathShader { path_builder.end(false); let path = path_builder.build(); + let bbox = bounding_box(&path); // Create vertex/index buffer builder let mut buffers: VertexBuffers = VertexBuffers::new(); @@ -415,6 +455,8 @@ impl PathShader { VertexPositions { fill: [0.0, 0.0, 0.0, 0.0], stroke: mark.stroke, + top_left: bbox.min.to_array(), + bottom_right: bbox.max.to_array(), }, ); @@ -427,10 +469,15 @@ impl PathShader { .with_variable_line_width(size_idx); stroke_tessellator.tessellate_path(&path, &stroke_options, &mut buffers_builder)?; + let indices_range = 0..buffers.indices.len() as u32; Ok(Self { verts: buffers.vertices, indices: buffers.indices, uniform: PathUniform::new(dimensions), + batches: vec![TextureMarkBatch { + indices_range, + image: image::DynamicImage::ImageRgba8(gradients_image), + }], shader: include_str!("path.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -438,7 +485,7 @@ impl PathShader { } } -impl BasicMarkShader for PathShader { +impl TextureMarkShader for PathShader { type Vertex = PathVertex; type Uniform = PathUniform; @@ -454,6 +501,18 @@ impl BasicMarkShader for PathShader { self.uniform } + fn batches(&self) -> &[TextureMarkBatch] { + self.batches.as_slice() + } + + fn texture_size(&self) -> Extent3d { + Extent3d { + width: self.batches[0].image.width(), + height: self.batches[0].image.height(), + depth_or_array_layers: 1, + } + } + fn shader(&self) -> &str { self.shader.as_str() } @@ -474,6 +533,8 @@ impl BasicMarkShader for PathShader { pub struct VertexPositions { fill: [f32; 4], stroke: [f32; 4], + top_left: [f32; 2], + bottom_right: [f32; 2], } impl FillVertexConstructor for VertexPositions { @@ -481,6 +542,8 @@ impl FillVertexConstructor for VertexPositions { PathVertex { position: [vertex.position().x, vertex.position().y], color: self.fill, + top_left: self.top_left, + bottom_right: self.bottom_right, } } } @@ -490,6 +553,8 @@ impl StrokeVertexConstructor for VertexPositions { PathVertex { position: [vertex.position().x, vertex.position().y], color: self.stroke, + top_left: self.top_left, + bottom_right: self.bottom_right, } } } diff --git a/sg2d-wgpu/src/marks/path.wgsl b/sg2d-wgpu/src/marks/path.wgsl index c2a01dd..1b9171b 100644 --- a/sg2d-wgpu/src/marks/path.wgsl +++ b/sg2d-wgpu/src/marks/path.wgsl @@ -10,11 +10,15 @@ var chart_uniforms: ChartUniform; struct VertexInput { @location(0) position: vec2, @location(1) color: vec4, + @location(2) top_left: vec2, + @location(3) bottom_right: vec2, }; struct VertexOutput { @builtin(position) clip_position: vec4, @location(0) color: vec4, + @location(1) top_left: vec2, + @location(2) bottom_right: vec2, } // Vertex shader @@ -30,11 +34,75 @@ struct VertexOutput { out.clip_position = vec4(x, y, 0.0, 1.0); out.color = model.color; + out.top_left = model.top_left * chart_uniforms.scale; + out.bottom_right = model.bottom_right * chart_uniforms.scale; return out; } // Fragment shader @fragment fn fs_main(in: VertexOutput) -> @location(0) vec4 { - return in.color; + return lookup_color(in.color, in.clip_position, in.top_left, in.bottom_right); + } + + // Gradient color + const GRADIENT_LINEAR = 1.0; + const GRADIENT_RADIAL = 2.0; + + const COLORWAY_LENGTH = 250.0; + const GRADIENT_TEXTURE_WIDTH = 256.0; + const GRADIENT_TEXTURE_HEIGHT = 256.0; + + @group(1) @binding(0) + var gradient_texture: texture_2d; + @group(1) @binding(1) + var linear_sampler: sampler; + @group(1) @binding(2) + var nearest_sampler: sampler; + + // Compute final color, potentially computing gradient + fn lookup_color(color: vec4, clip_position: vec4, top_left: vec2, bottom_right: vec2) -> vec4 { + if (color[0] < 0.0) { + // If the first color coordinate is negative, this indicates that we need to compute a gradient. + // The negative of this value is the y-coordinate into the gradient texture where the gradient control + // points and gradient colorway are stored. + let tex_coord_y = -color[0]; + + // Extract gradient type from fist pixel using nearest sampler (so that not interpolation is performed) + let control0 = textureSample(gradient_texture, nearest_sampler, vec2(0.0, tex_coord_y)); + let gradient_type = control0[0]; + + // Extract x/y control points from second pixel + let control1 = textureSample(gradient_texture, nearest_sampler, vec2(1.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); + let x0 = control1[0]; + let y0 = control1[1]; + let x1 = control1[2]; + let y1 = control1[3]; + + if (gradient_type == GRADIENT_LINEAR) { + // Convert fragment coordinate into coordinate normalized to rect bounding box + let frag_xy = vec2(clip_position[0], clip_position[1]); + let width_height = vec2(bottom_right[0] - top_left[0], bottom_right[1] - top_left[1]); + let norm_xy = (frag_xy - top_left) / width_height; + + let p0 = vec2(x0, y0); + let p1 = vec2(x1, y1); + let control_dist = distance(p0, p1); + let projected_dist = dot(norm_xy - p0, p1 - p0) / control_dist; + let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; + let tex_coord_x = clamp(projected_dist / control_dist, 0.0, 1.0) * COLORWAY_LENGTH / GRADIENT_TEXTURE_WIDTH + col_offset / GRADIENT_TEXTURE_WIDTH; + + return textureSample(gradient_texture, linear_sampler, vec2(tex_coord_x, tex_coord_y)); + } else { + // Extract additional radius gradient control points from third pixel + let control2 = textureSample(gradient_texture, nearest_sampler, vec2(2.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); + let r0 = control2[0]; + let r1 = control2[1]; + + // TODO: compute radial gradinet + return vec4(1.0, 0.0, 0.0, 1.0); + } + } else { + return color; + } } \ No newline at end of file diff --git a/sg2d-wgpu/src/marks/rect.rs b/sg2d-wgpu/src/marks/rect.rs index e0fd28f..0989a5d 100644 --- a/sg2d-wgpu/src/marks/rect.rs +++ b/sg2d-wgpu/src/marks/rect.rs @@ -1,18 +1,19 @@ use crate::canvas::CanvasDimensions; +use crate::marks::gradient::to_color_or_gradient_coord; use crate::marks::texture_instanced_mark::{InstancedTextureMarkBatch, TextureInstancedMarkShader}; use colorgrad::Color; use image::Rgba; use itertools::izip; use sg2d::marks::rect::RectMark; -use sg2d::marks::value::{ColorOrGradient, Gradient}; +use sg2d::marks::value::Gradient; use wgpu::{Extent3d, VertexBufferLayout}; -const GRADIENT_LINEAR: f32 = 1.0; -const GRADIENT_RADIAL: f32 = 2.0; +pub const GRADIENT_LINEAR: f32 = 1.0; +pub const GRADIENT_RADIAL: f32 = 2.0; -const COLORWAY_LENGTH: u32 = 250; -const GRADIENT_TEXTURE_WIDTH: u32 = 256; -const GRADIENT_TEXTURE_HEIGHT: u32 = 256; +pub const COLORWAY_LENGTH: u32 = 250; +pub const GRADIENT_TEXTURE_WIDTH: u32 = 256; +pub const GRADIENT_TEXTURE_HEIGHT: u32 = 256; #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] @@ -74,116 +75,104 @@ const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 7] = wgpu::vertex_attr_array! 7 => Float32, // corner_radius ]; -impl RectInstance { - pub fn from_spec(mark: &RectMark) -> (Vec, image::RgbaImage) { - let mut instances: Vec = Vec::new(); - let mut img = image::RgbaImage::new(GRADIENT_TEXTURE_WIDTH, GRADIENT_TEXTURE_HEIGHT); - - // Write gradients - assert!( - mark.gradients.len() < (GRADIENT_TEXTURE_HEIGHT / 2) as usize, - "Exceeded max number of unique gradients" - ); - - for (pos, grad) in mark.gradients.iter().enumerate() { - let row0 = (pos * 2) as u32; - - // Build gradient colorway using colorgrad - let s = grad.stops(); - let mut binding = colorgrad::CustomGradient::new(); - let offsets = s.iter().map(|stop| stop.offset as f64).collect::>(); - let colors = s - .iter() - .map(|stop| { - Color::new( - stop.color[0] as f64, - stop.color[1] as f64, - stop.color[2] as f64, - stop.color[3] as f64, - ) - }) - .collect::>(); - - let builder = binding.domain(offsets.as_slice()).colors(colors.as_slice()); - let b = builder.build().unwrap(); - - // Fill leading pixels with start color so that linear interpolation doesn't pick - // up the empty pixels between control pixels and gradient pixels - let start_color = Rgba::from(b.at(0.0).to_rgba8()); - let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; - for i in 0..col_offset { - img.put_pixel(i, row0, start_color); - img.put_pixel(i, row0 + 1, start_color); - } - - // Store 250-bin colorway in pixels 6 through 255 - for i in 0..COLORWAY_LENGTH { - let p = (i as f64) / (COLORWAY_LENGTH as f64 - 1.0); - let c = b.at(p).to_rgba8(); +pub fn build_gradients_image(gradients: &[Gradient]) -> image::RgbaImage { + // Write gradients + assert!( + gradients.len() < (GRADIENT_TEXTURE_HEIGHT / 2) as usize, + "Exceeded max number of unique gradients" + ); + + let mut img = image::RgbaImage::new(GRADIENT_TEXTURE_WIDTH, GRADIENT_TEXTURE_HEIGHT); + for (pos, grad) in gradients.iter().enumerate() { + let row0 = (pos * 2) as u32; + + // Build gradient colorway using colorgrad + let s = grad.stops(); + let mut binding = colorgrad::CustomGradient::new(); + let offsets = s.iter().map(|stop| stop.offset as f64).collect::>(); + let colors = s + .iter() + .map(|stop| { + Color::new( + stop.color[0] as f64, + stop.color[1] as f64, + stop.color[2] as f64, + stop.color[3] as f64, + ) + }) + .collect::>(); + + let builder = binding.domain(offsets.as_slice()).colors(colors.as_slice()); + let b = builder.build().unwrap(); + + // Fill leading pixels with start color so that linear interpolation doesn't pick + // up the empty pixels between control pixels and gradient pixels + let start_color = Rgba::from(b.at(0.0).to_rgba8()); + let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; + for i in 0..col_offset { + img.put_pixel(i, row0, start_color); + img.put_pixel(i, row0 + 1, start_color); + } - // Write color to row0 and row0 + 1 - img.put_pixel(i + col_offset, row0, Rgba::from(c)); - img.put_pixel(i + col_offset, row0 + 1, Rgba::from(c)); - } + // Store 250-bin colorway in pixels 6 through 255 + for i in 0..COLORWAY_LENGTH { + let p = (i as f64) / (COLORWAY_LENGTH as f64 - 1.0); + let c = b.at(p).to_rgba8(); - // We encode the gradient control points in the first two or three pixels of the texture - match grad { - Gradient::LinearGradient(grad) => { - // Write gradient type to column 0 - let control_color0 = Rgba::from([(GRADIENT_LINEAR * 255.0) as u8, 0, 0, 0]); - img.put_pixel(0, row0, control_color0); - img.put_pixel(0, row0 + 1, control_color0); - - // Write x/y control points to column 1 - let control_color1 = Rgba::from([ - (grad.x0 * 255.0) as u8, - (grad.y0 * 255.0) as u8, - (grad.x1 * 255.0) as u8, - (grad.y1 * 255.0) as u8, - ]); - img.put_pixel(1, row0, control_color1); - img.put_pixel(1, row0 + 1, control_color1); - } - Gradient::RadialGradient(grad) => { - // Write gradient type to column 0 - let control_color0 = Rgba::from([(GRADIENT_RADIAL * 255.0) as u8, 0, 0, 0]); - img.put_pixel(0, row0, control_color0); - img.put_pixel(0, row0 + 1, control_color0); - - // Write x/y control points to column 1 - let control_color1 = Rgba::from([ - (grad.x0 * 255.0) as u8, - (grad.y0 * 255.0) as u8, - (grad.x1 * 255.0) as u8, - (grad.y1 * 255.0) as u8, - ]); - img.put_pixel(1, row0, control_color1); - img.put_pixel(1, row0 + 1, control_color1); - - // Write radius control points to column 2 - let control_color2 = - Rgba::from([(grad.r0 * 255.0) as u8, (grad.r1 * 255.0) as u8, 0, 0]); - img.put_pixel(2, row0, control_color2); - img.put_pixel(2, row0 + 1, control_color2); - } - }; + // Write color to row0 and row0 + 1 + img.put_pixel(i + col_offset, row0, Rgba::from(c)); + img.put_pixel(i + col_offset, row0 + 1, Rgba::from(c)); } - // Helper to compute color array - let compute_color = |color_or_gradient: &ColorOrGradient| -> [f32; 4] { - match color_or_gradient { - ColorOrGradient::Color(c) => *c, - ColorOrGradient::GradientIndex(grad_idx) => { - // Each gradient colorway is written to two rows, starting at texture - // y-coordinate 0. This results in 128 gradients stored in a 256x256 texture. To - // avoid interpolation artifacts, we compute the texture coordinate as the - // position between the two rows - let grad_coord = - (*grad_idx as f32 / 128.0) + 1.0 / (GRADIENT_TEXTURE_HEIGHT as f32 * 2.0); - [-grad_coord, 0.0, 0.0, 0.0] - } + // We encode the gradient control points in the first two or three pixels of the texture + match grad { + Gradient::LinearGradient(grad) => { + // Write gradient type to column 0 + let control_color0 = Rgba::from([(GRADIENT_LINEAR * 255.0) as u8, 0, 0, 0]); + img.put_pixel(0, row0, control_color0); + img.put_pixel(0, row0 + 1, control_color0); + + // Write x/y control points to column 1 + let control_color1 = Rgba::from([ + (grad.x0 * 255.0) as u8, + (grad.y0 * 255.0) as u8, + (grad.x1 * 255.0) as u8, + (grad.y1 * 255.0) as u8, + ]); + img.put_pixel(1, row0, control_color1); + img.put_pixel(1, row0 + 1, control_color1); + } + Gradient::RadialGradient(grad) => { + // Write gradient type to column 0 + let control_color0 = Rgba::from([(GRADIENT_RADIAL * 255.0) as u8, 0, 0, 0]); + img.put_pixel(0, row0, control_color0); + img.put_pixel(0, row0 + 1, control_color0); + + // Write x/y control points to column 1 + let control_color1 = Rgba::from([ + (grad.x0 * 255.0) as u8, + (grad.y0 * 255.0) as u8, + (grad.x1 * 255.0) as u8, + (grad.y1 * 255.0) as u8, + ]); + img.put_pixel(1, row0, control_color1); + img.put_pixel(1, row0 + 1, control_color1); + + // Write radius control points to column 2 + let control_color2 = + Rgba::from([(grad.r0 * 255.0) as u8, (grad.r1 * 255.0) as u8, 0, 0]); + img.put_pixel(2, row0, control_color2); + img.put_pixel(2, row0 + 1, control_color2); } }; + } + img +} + +impl RectInstance { + pub fn from_spec(mark: &RectMark) -> (Vec, image::RgbaImage) { + let mut instances: Vec = Vec::new(); + let img = build_gradients_image(&mark.gradients); for (x, y, width, height, fill, stroke, stroke_width, corner_radius) in izip!( mark.x_iter(), @@ -195,14 +184,12 @@ impl RectInstance { mark.stroke_width_iter(), mark.corner_radius_iter(), ) { - let fill = compute_color(fill); - let stroke = compute_color(stroke); instances.push(RectInstance { position: [*x, *y], width: *width, height: *height, - fill, - stroke, + fill: to_color_or_gradient_coord(&fill), + stroke: to_color_or_gradient_coord(&stroke), stroke_width: *stroke_width, corner_radius: *corner_radius, }) diff --git a/sg2d-wgpu/src/marks/rect.wgsl b/sg2d-wgpu/src/marks/rect.wgsl index 0f1ec9f..7444976 100644 --- a/sg2d-wgpu/src/marks/rect.wgsl +++ b/sg2d-wgpu/src/marks/rect.wgsl @@ -1,11 +1,4 @@ // Vertex shader -const GRADIENT_LINEAR = 1.0; -const GRADIENT_RADIAL = 2.0; - -const COLORWAY_LENGTH = 250.0; -const GRADIENT_TEXTURE_WIDTH = 256.0; -const GRADIENT_TEXTURE_HEIGHT = 256.0; - struct ChartUniform { size: vec2, scale: f32, @@ -177,6 +170,13 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { } // Gradient color +const GRADIENT_LINEAR = 1.0; +const GRADIENT_RADIAL = 2.0; + +const COLORWAY_LENGTH = 250.0; +const GRADIENT_TEXTURE_WIDTH = 256.0; +const GRADIENT_TEXTURE_HEIGHT = 256.0; + @group(1) @binding(0) var gradient_texture: texture_2d; @group(1) @binding(1) diff --git a/sg2d-wgpu/src/marks/texture_mark.rs b/sg2d-wgpu/src/marks/texture_mark.rs index bb0f965..eac818c 100644 --- a/sg2d-wgpu/src/marks/texture_mark.rs +++ b/sg2d-wgpu/src/marks/texture_mark.rs @@ -99,13 +99,23 @@ impl TextureMarkRenderer { let texture_view = texture.create_view(&wgpu::TextureViewDescriptor::default()); // Create sampler - let sampler = device.create_sampler(&wgpu::SamplerDescriptor { + let linear_sampler = device.create_sampler(&wgpu::SamplerDescriptor { address_mode_u: wgpu::AddressMode::ClampToEdge, address_mode_v: wgpu::AddressMode::ClampToEdge, address_mode_w: wgpu::AddressMode::ClampToEdge, - mag_filter: mark_shader.mag_filter(), - min_filter: mark_shader.min_filter(), - mipmap_filter: mark_shader.mipmap_filter(), + mag_filter: wgpu::FilterMode::Linear, + min_filter: wgpu::FilterMode::Linear, + mipmap_filter: wgpu::FilterMode::Nearest, + ..Default::default() + }); + + let nearest_sampler = device.create_sampler(&wgpu::SamplerDescriptor { + address_mode_u: wgpu::AddressMode::ClampToEdge, + address_mode_v: wgpu::AddressMode::ClampToEdge, + address_mode_w: wgpu::AddressMode::ClampToEdge, + mag_filter: wgpu::FilterMode::Nearest, + min_filter: wgpu::FilterMode::Nearest, + mipmap_filter: wgpu::FilterMode::Nearest, ..Default::default() }); @@ -131,6 +141,12 @@ impl TextureMarkRenderer { ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering), count: None, }, + wgpu::BindGroupLayoutEntry { + binding: 2, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering), + count: None, + }, ], label: Some("texture_bind_group_layout"), }); @@ -144,7 +160,11 @@ impl TextureMarkRenderer { }, wgpu::BindGroupEntry { binding: 1, - resource: wgpu::BindingResource::Sampler(&sampler), + resource: wgpu::BindingResource::Sampler(&linear_sampler), + }, + wgpu::BindGroupEntry { + binding: 2, + resource: wgpu::BindingResource::Sampler(&nearest_sampler), }, ], label: Some("texture_bind_group"), diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index 5d9adf7..207594d 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -113,6 +113,8 @@ mod test_image_baselines { case("gradients", "default_gradient_bars_rounded_stroke", 0.0015), case("gradients", "residuals_colorscale", 0.0015), case("gradients", "stroke_rect_gradient", 0.002), + case("gradients", "area_with_gradient", 0.001), + case("gradients", "area_line_with_gradient", 0.001), )] fn test_image_baseline(category: &str, spec_name: &str, tolerance: f64) { let specs_dir = format!( diff --git a/sg2d/src/marks/area.rs b/sg2d/src/marks/area.rs index a9115a7..c79bcf8 100644 --- a/sg2d/src/marks/area.rs +++ b/sg2d/src/marks/area.rs @@ -1,4 +1,4 @@ -use crate::marks::value::{EncodingValue, StrokeCap, StrokeJoin}; +use crate::marks::value::{ColorOrGradient, EncodingValue, Gradient, StrokeCap, StrokeJoin}; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] @@ -8,13 +8,14 @@ pub struct AreaMark { pub clip: bool, pub len: u32, pub orientation: AreaOrientation, + pub gradients: Vec, pub x: EncodingValue, pub y: EncodingValue, pub x2: EncodingValue, pub y2: EncodingValue, pub defined: EncodingValue, - pub fill: [f32; 4], - pub stroke: [f32; 4], + pub fill: ColorOrGradient, + pub stroke: ColorOrGradient, pub stroke_width: f32, pub stroke_cap: StrokeCap, pub stroke_join: StrokeJoin, @@ -50,13 +51,14 @@ impl Default for AreaMark { clip: true, len: 1, orientation: Default::default(), + gradients: vec![], x: EncodingValue::Scalar { value: 0.0 }, y: EncodingValue::Scalar { value: 0.0 }, x2: EncodingValue::Scalar { value: 0.0 }, y2: EncodingValue::Scalar { value: 0.0 }, defined: EncodingValue::Scalar { value: true }, - fill: [0.0, 0.0, 0.0, 0.0], - stroke: [0.0, 0.0, 0.0, 0.0], + fill: ColorOrGradient::Color([0.0, 0.0, 0.0, 0.0]), + stroke: ColorOrGradient::Color([0.0, 0.0, 0.0, 0.0]), stroke_width: 1.0, stroke_cap: Default::default(), stroke_join: Default::default(), diff --git a/sg2d/src/marks/line.rs b/sg2d/src/marks/line.rs index 2774728..34e886e 100644 --- a/sg2d/src/marks/line.rs +++ b/sg2d/src/marks/line.rs @@ -1,4 +1,4 @@ -use crate::marks::value::{EncodingValue, StrokeCap, StrokeJoin}; +use crate::marks::value::{ColorOrGradient, EncodingValue, Gradient, StrokeCap, StrokeJoin}; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] @@ -7,10 +7,11 @@ pub struct LineMark { pub name: String, pub clip: bool, pub len: u32, + pub gradients: Vec, pub x: EncodingValue, pub y: EncodingValue, pub defined: EncodingValue, - pub stroke: [f32; 4], + pub stroke: ColorOrGradient, pub stroke_width: f32, pub stroke_cap: StrokeCap, pub stroke_join: StrokeJoin, @@ -37,10 +38,11 @@ impl Default for LineMark { name: "line_mark".to_string(), clip: true, len: 1, + gradients: vec![], x: EncodingValue::Scalar { value: 0.0 }, y: EncodingValue::Scalar { value: 0.0 }, defined: EncodingValue::Scalar { value: true }, - stroke: [0.0, 0.0, 0.0, 1.0], + stroke: ColorOrGradient::Color([0.0, 0.0, 0.0, 1.0]), stroke_width: 1.0, stroke_cap: Default::default(), stroke_join: Default::default(), From dd6a101930692640140b095d8dc9c393e105c918 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 16:30:37 -0500 Subject: [PATCH 16/27] Add gradient support to trail and path marks --- .../gradients/path_with_stroke_gradients.png | Bin 0 -> 179223 bytes .../path_with_stroke_gradients.sg.json | 167 ++ .../gradients/trail_gradient.png | Bin 0 -> 78763 bytes .../gradients/trail_gradient.sg.json | 2418 +++++++++++++++++ .../path_with_stroke_gradients.vg.json | 127 + .../gradients/trail_gradient.vg.json | 95 + sg2d-vega/src/marks/path.rs | 29 +- sg2d-vega/src/marks/shape.rs | 29 +- sg2d-vega/src/marks/trail.rs | 14 +- sg2d-wgpu/src/marks/path.rs | 10 +- sg2d-wgpu/tests/test_image_baselines.rs | 4 + sg2d/src/marks/path.rs | 16 +- sg2d/src/marks/trail.rs | 8 +- 13 files changed, 2870 insertions(+), 47 deletions(-) create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/path_with_stroke_gradients.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/path_with_stroke_gradients.sg.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/trail_gradient.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/trail_gradient.sg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/path_with_stroke_gradients.vg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/trail_gradient.vg.json diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/path_with_stroke_gradients.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/path_with_stroke_gradients.png new file mode 100644 index 0000000000000000000000000000000000000000..7fcd2cb82bc251d3cc189a5535e55ec65c484922 GIT binary patch literal 179223 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

A7@7_(5=x&ivz1r*@|xm^z=laKO!-N|gH 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 o@=OUoGhdU8_5UYIolN@SA, pub scale_y: Option, pub opacity: Option, - pub fill: Option, + pub fill: Option, pub fill_opacity: Option, - pub stroke: Option, + pub stroke: Option, pub stroke_opacity: Option, pub stroke_width: Option, pub angle: Option, @@ -61,10 +62,11 @@ impl VegaMarkContainer { // Init vector for each encoding channel let mut path_str = Vec::::new(); - let mut fill = Vec::<[f32; 4]>::new(); - let mut stroke = Vec::<[f32; 4]>::new(); + let mut fill = Vec::::new(); + let mut stroke = Vec::::new(); let mut transform = Vec::::new(); let mut zindex = Vec::::new(); + let mut gradients = Vec::::new(); for item in &self.items { if let Some(v) = &item.path { @@ -72,15 +74,13 @@ impl VegaMarkContainer { } let base_opacity = item.opacity.unwrap_or(1.0); - if let Some(c) = &item.fill { - let c = csscolorparser::parse(c)?; - let fill_opacity = c.a as f32 * item.fill_opacity.unwrap_or(1.0) * base_opacity; - fill.push([c.r as f32, c.g as f32, c.b as f32, fill_opacity]) + if let Some(v) = &item.fill { + let fill_opacity = item.fill_opacity.unwrap_or(1.0) * base_opacity; + fill.push(v.to_color_or_grad(fill_opacity, &mut gradients)?); } - if let Some(c) = &item.stroke { - let c = csscolorparser::parse(c)?; - let stroke_opacity = c.a as f32 * item.stroke_opacity.unwrap_or(1.0) * base_opacity; - stroke.push([c.r as f32, c.g as f32, c.b as f32, stroke_opacity]) + if let Some(v) = &item.stroke { + let stroke_opacity = item.stroke_opacity.unwrap_or(1.0) * base_opacity; + stroke.push(v.to_color_or_grad(stroke_opacity, &mut gradients)?); } // Build transform @@ -144,6 +144,9 @@ impl VegaMarkContainer { mark.path = EncodingValue::Array { values: paths }; } + // Add gradients + mark.gradients = gradients; + Ok(SceneMark::Path(mark)) } } diff --git a/sg2d-vega/src/marks/shape.rs b/sg2d-vega/src/marks/shape.rs index 642181b..22a3f39 100644 --- a/sg2d-vega/src/marks/shape.rs +++ b/sg2d-vega/src/marks/shape.rs @@ -1,10 +1,11 @@ use crate::error::VegaSceneGraphError; use crate::marks::mark::{VegaMarkContainer, VegaMarkItem}; use crate::marks::symbol::parse_svg_path; +use crate::marks::values::CssColorOrGradient; use serde::{Deserialize, Serialize}; use sg2d::marks::mark::SceneMark; use sg2d::marks::path::{PathMark, PathTransform}; -use sg2d::marks::value::{EncodingValue, StrokeCap, StrokeJoin}; +use sg2d::marks::value::{ColorOrGradient, EncodingValue, Gradient, StrokeCap, StrokeJoin}; use std::collections::HashSet; #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] @@ -16,9 +17,9 @@ pub struct VegaShapeItem { pub stroke_cap: Option, pub stroke_join: Option, pub opacity: Option, - pub fill: Option, + pub fill: Option, pub fill_opacity: Option, - pub stroke: Option, + pub stroke: Option, pub stroke_opacity: Option, pub stroke_width: Option, pub zindex: Option, @@ -56,24 +57,23 @@ impl VegaMarkContainer { // Init vector for each encoding channel let mut path_str = Vec::::new(); - let mut fill = Vec::<[f32; 4]>::new(); - let mut stroke = Vec::<[f32; 4]>::new(); + let mut fill = Vec::::new(); + let mut stroke = Vec::::new(); let mut transform = Vec::::new(); let mut zindex = Vec::::new(); + let mut gradients = Vec::::new(); for item in &self.items { path_str.push(item.shape.clone()); let base_opacity = item.opacity.unwrap_or(1.0); - if let Some(c) = &item.fill { - let c = csscolorparser::parse(c)?; - let fill_opacity = c.a as f32 * item.fill_opacity.unwrap_or(1.0) * base_opacity; - fill.push([c.r as f32, c.g as f32, c.b as f32, fill_opacity]) + if let Some(v) = &item.fill { + let fill_opacity = item.fill_opacity.unwrap_or(1.0) * base_opacity; + fill.push(v.to_color_or_grad(fill_opacity, &mut gradients)?); } - if let Some(c) = &item.stroke { - let c = csscolorparser::parse(c)?; - let stroke_opacity = c.a as f32 * item.stroke_opacity.unwrap_or(1.0) * base_opacity; - stroke.push([c.r as f32, c.g as f32, c.b as f32, stroke_opacity]) + if let Some(v) = &item.stroke { + let stroke_opacity = item.stroke_opacity.unwrap_or(1.0) * base_opacity; + stroke.push(v.to_color_or_grad(stroke_opacity, &mut gradients)?); } // Build transform @@ -128,6 +128,9 @@ impl VegaMarkContainer { mark.path = EncodingValue::Array { values: paths }; } + // Add gradients + mark.gradients = gradients; + Ok(SceneMark::Path(mark)) } } diff --git a/sg2d-vega/src/marks/trail.rs b/sg2d-vega/src/marks/trail.rs index 7937ac9..50dc16c 100644 --- a/sg2d-vega/src/marks/trail.rs +++ b/sg2d-vega/src/marks/trail.rs @@ -1,9 +1,10 @@ use crate::error::VegaSceneGraphError; use crate::marks::mark::{VegaMarkContainer, VegaMarkItem}; +use crate::marks::values::CssColorOrGradient; use serde::{Deserialize, Serialize}; use sg2d::marks::mark::SceneMark; use sg2d::marks::trail::TrailMark; -use sg2d::marks::value::EncodingValue; +use sg2d::marks::value::{ColorOrGradient, EncodingValue, Gradient}; #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -12,7 +13,7 @@ pub struct VegaTrailItem { pub y: f32, pub defined: Option, pub size: Option, - pub fill: Option, + pub fill: Option, pub fill_opacity: Option, pub opacity: Option, } @@ -23,20 +24,21 @@ impl VegaMarkContainer { pub fn to_scene_graph(&self, origin: [f32; 2]) -> Result { // Get shape of first item and use that for all items for now let first = self.items.first(); + let mut gradients = Vec::::new(); // Parse stroke color (Note, vega uses "fill" for the trail, but we use stroke - let mut stroke = [0.0, 0.0, 0.0, 1.0]; + let mut stroke = ColorOrGradient::Color([0.0, 0.0, 0.0, 1.0]); if let Some(item) = &first { if let Some(stroke_css) = &item.fill { - let c = csscolorparser::parse(stroke_css)?; let base_opacity = item.opacity.unwrap_or(1.0); - let stroke_opacity = c.a as f32 * item.fill_opacity.unwrap_or(1.0) * base_opacity; - stroke = [c.r as f32, c.g as f32, c.b as f32, stroke_opacity] + let stroke_opacity = item.fill_opacity.unwrap_or(1.0) * base_opacity; + stroke = stroke_css.to_color_or_grad(stroke_opacity, &mut gradients)?; } } let mut mark = TrailMark { clip: self.clip, + gradients, stroke, ..Default::default() }; diff --git a/sg2d-wgpu/src/marks/path.rs b/sg2d-wgpu/src/marks/path.rs index 08f304b..8ee70c5 100644 --- a/sg2d-wgpu/src/marks/path.rs +++ b/sg2d-wgpu/src/marks/path.rs @@ -79,7 +79,7 @@ impl PathShader { mark: &PathMark, dimensions: CanvasDimensions, ) -> Result { - let gradients_image = build_gradients_image(&[]); + let gradients_image = build_gradients_image(&mark.gradients); let mut verts: Vec = Vec::new(); let mut indices: Vec = Vec::new(); @@ -99,8 +99,8 @@ impl PathShader { let mut builder = BuffersBuilder::new( &mut buffers, VertexPositions { - fill: *fill, - stroke: *stroke, + fill: to_color_or_gradient_coord(fill), + stroke: to_color_or_gradient_coord(stroke), top_left: bbox.min.to_array(), bottom_right: bbox.max.to_array(), }, @@ -412,7 +412,7 @@ impl PathShader { mark: &TrailMark, dimensions: CanvasDimensions, ) -> Result { - let gradients_image = build_gradients_image(&[]); + let gradients_image = build_gradients_image(&mark.gradients); let size_idx: AttributeIndex = 0; let mut path_builder = lyon::path::Path::builder_with_attributes(1); @@ -454,7 +454,7 @@ impl PathShader { &mut buffers, VertexPositions { fill: [0.0, 0.0, 0.0, 0.0], - stroke: mark.stroke, + stroke: to_color_or_gradient_coord(&mark.stroke), top_left: bbox.min.to_array(), bottom_right: bbox.max.to_array(), }, diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index 207594d..f32f3ff 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -115,6 +115,10 @@ mod test_image_baselines { case("gradients", "stroke_rect_gradient", 0.002), case("gradients", "area_with_gradient", 0.001), case("gradients", "area_line_with_gradient", 0.001), + case("gradients", "trail_gradient", 0.001), + + // vl-convert/resvg messes up scaled paths with strokes + case("gradients", "path_with_stroke_gradients", 0.5), )] fn test_image_baseline(category: &str, spec_name: &str, tolerance: f64) { let specs_dir = format!( diff --git a/sg2d/src/marks/path.rs b/sg2d/src/marks/path.rs index 9a746e8..a8ca9ba 100644 --- a/sg2d/src/marks/path.rs +++ b/sg2d/src/marks/path.rs @@ -1,4 +1,4 @@ -use crate::marks::value::{EncodingValue, StrokeCap, StrokeJoin}; +use crate::marks::value::{ColorOrGradient, EncodingValue, Gradient, StrokeCap, StrokeJoin}; use lyon_path::geom::euclid::{Transform2D, UnknownUnit}; use serde::{Deserialize, Serialize}; @@ -10,12 +10,13 @@ pub struct PathMark { pub name: String, pub clip: bool, pub len: u32, + pub gradients: Vec, pub stroke_cap: StrokeCap, pub stroke_join: StrokeJoin, pub stroke_width: Option, pub path: EncodingValue, - pub fill: EncodingValue<[f32; 4]>, - pub stroke: EncodingValue<[f32; 4]>, + pub fill: EncodingValue, + pub stroke: EncodingValue, pub transform: EncodingValue, pub indices: Option>, } @@ -24,11 +25,11 @@ impl PathMark { pub fn path_iter(&self) -> Box + '_> { self.path.as_iter(self.len as usize, self.indices.as_ref()) } - pub fn fill_iter(&self) -> Box + '_> { + pub fn fill_iter(&self) -> Box + '_> { self.fill.as_iter(self.len as usize, self.indices.as_ref()) } - pub fn stroke_iter(&self) -> Box + '_> { + pub fn stroke_iter(&self) -> Box + '_> { self.stroke .as_iter(self.len as usize, self.indices.as_ref()) } @@ -44,6 +45,7 @@ impl Default for PathMark { name: "rule_mark".to_string(), clip: true, len: 1, + gradients: vec![], stroke_cap: StrokeCap::Butt, stroke_join: StrokeJoin::Miter, stroke_width: Some(0.0), @@ -51,10 +53,10 @@ impl Default for PathMark { value: lyon_path::Path::default(), }, fill: EncodingValue::Scalar { - value: [0.0, 0.0, 0.0, 0.0], + value: ColorOrGradient::Color([0.0, 0.0, 0.0, 0.0]), }, stroke: EncodingValue::Scalar { - value: [0.0, 0.0, 0.0, 0.0], + value: ColorOrGradient::Color([0.0, 0.0, 0.0, 0.0]), }, transform: EncodingValue::Scalar { value: PathTransform::identity(), diff --git a/sg2d/src/marks/trail.rs b/sg2d/src/marks/trail.rs index 9d4a8ab..ab2cd83 100644 --- a/sg2d/src/marks/trail.rs +++ b/sg2d/src/marks/trail.rs @@ -1,4 +1,4 @@ -use crate::marks::value::EncodingValue; +use crate::marks::value::{ColorOrGradient, EncodingValue, Gradient}; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] @@ -7,7 +7,8 @@ pub struct TrailMark { pub name: String, pub clip: bool, pub len: u32, - pub stroke: [f32; 4], + pub gradients: Vec, + pub stroke: ColorOrGradient, pub x: EncodingValue, pub y: EncodingValue, pub size: EncodingValue, @@ -42,7 +43,8 @@ impl Default for TrailMark { y: EncodingValue::Scalar { value: 0.0 }, size: EncodingValue::Scalar { value: 1.0 }, defined: EncodingValue::Scalar { value: true }, - stroke: [0.0, 0.0, 0.0, 1.0], + stroke: ColorOrGradient::Color([0.0, 0.0, 0.0, 1.0]), + gradients: vec![], } } } From ab7764a7cc104d28c09c412f5f015abc1b191053 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 17:21:00 -0500 Subject: [PATCH 17/27] Support rules with gradients --- .../gradients/rules_with_gradients.png | Bin 0 -> 47837 bytes .../gradients/rules_with_gradients.sg.json | 137 ++++++++++++ .../gradients/rules_with_gradients.vg.json | 100 +++++++++ sg2d-vega/src/marks/rect.rs | 1 + sg2d-vega/src/marks/rule.rs | 20 +- sg2d-wgpu/src/canvas.rs | 14 +- sg2d-wgpu/src/marks/rect.rs | 4 +- sg2d-wgpu/src/marks/rule.rs | 209 ++++++++++-------- sg2d-wgpu/src/marks/rule.wgsl | 77 ++++++- sg2d-wgpu/tests/test_image_baselines.rs | 1 + sg2d/src/marks/rule.rs | 10 +- 11 files changed, 453 insertions(+), 120 deletions(-) create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/rules_with_gradients.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/rules_with_gradients.sg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/rules_with_gradients.vg.json diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/rules_with_gradients.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/rules_with_gradients.png new file mode 100644 index 0000000000000000000000000000000000000000..37f3ec3be27a5f45f31320a8ff58eb8229083eb6 GIT binary patch literal 47837 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 { mark.indices = Some(indices); } + // Add gradients mark.gradients = gradients; Ok(SceneMark::Rect(mark)) diff --git a/sg2d-vega/src/marks/rule.rs b/sg2d-vega/src/marks/rule.rs index 7617705..dcc464f 100644 --- a/sg2d-vega/src/marks/rule.rs +++ b/sg2d-vega/src/marks/rule.rs @@ -1,10 +1,10 @@ use crate::error::VegaSceneGraphError; use crate::marks::mark::{VegaMarkContainer, VegaMarkItem}; -use crate::marks::values::StrokeDashSpec; +use crate::marks::values::{CssColorOrGradient, StrokeDashSpec}; use serde::{Deserialize, Serialize}; use sg2d::marks::mark::SceneMark; use sg2d::marks::rule::RuleMark; -use sg2d::marks::value::{EncodingValue, StrokeCap}; +use sg2d::marks::value::{ColorOrGradient, EncodingValue, Gradient, StrokeCap}; #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -13,7 +13,7 @@ pub struct VegaRuleItem { pub y: f32, pub x2: Option, pub y2: Option, - pub stroke: Option, + pub stroke: Option, pub stroke_width: Option, pub stroke_cap: Option, pub stroke_opacity: Option, @@ -40,11 +40,12 @@ impl VegaMarkContainer { let mut y0 = Vec::::new(); let mut x1 = Vec::::new(); let mut y1 = Vec::::new(); - let mut stroke = Vec::<[f32; 4]>::new(); + let mut stroke = Vec::::new(); let mut stroke_width = Vec::::new(); let mut stroke_cap = Vec::::new(); let mut stroke_dash = Vec::>::new(); let mut zindex = Vec::::new(); + let mut gradients = Vec::::new(); // For each item, append explicit values to corresponding vector for item in &self.items { @@ -53,11 +54,9 @@ impl VegaMarkContainer { x1.push(item.x2.unwrap_or(item.x) + origin[0]); y1.push(item.y2.unwrap_or(item.y) + origin[1]); - if let Some(s) = &item.stroke { - let c = csscolorparser::parse(s)?; - let opacity = - c.a as f32 * item.stroke_opacity.unwrap_or(1.0) * item.opacity.unwrap_or(1.0); - stroke.push([c.r as f32, c.g as f32, c.b as f32, opacity]); + if let Some(v) = &item.stroke { + let opacity = item.stroke_opacity.unwrap_or(1.0) * item.opacity.unwrap_or(1.0); + stroke.push(v.to_color_or_grad(opacity, &mut gradients)?); } if let Some(s) = item.stroke_width { @@ -115,6 +114,9 @@ impl VegaMarkContainer { mark.indices = Some(indices); } + // Add gradients + mark.gradients = gradients; + Ok(SceneMark::Rule(mark)) } } diff --git a/sg2d-wgpu/src/canvas.rs b/sg2d-wgpu/src/canvas.rs index 91f7807..8c061ff 100644 --- a/sg2d-wgpu/src/canvas.rs +++ b/sg2d-wgpu/src/canvas.rs @@ -150,12 +150,14 @@ pub trait Canvas { } fn add_rule_mark(&mut self, mark: &RuleMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( - self.device(), - self.texture_format(), - self.sample_count(), - Box::new(RuleShader::from_rule_mark(mark, self.dimensions())), - ))); + self.add_mark_renderer(MarkRenderer::TextureInstanced( + TextureInstancedMarkRenderer::new( + self.device(), + self.texture_format(), + self.sample_count(), + Box::new(RuleShader::from_rule_mark(mark, self.dimensions())), + ), + )); Ok(()) } diff --git a/sg2d-wgpu/src/marks/rect.rs b/sg2d-wgpu/src/marks/rect.rs index 0989a5d..b9f6696 100644 --- a/sg2d-wgpu/src/marks/rect.rs +++ b/sg2d-wgpu/src/marks/rect.rs @@ -238,8 +238,8 @@ impl RectShader { instances, batches, texture_size: Extent3d { - width: 256, - height: 256, + width: GRADIENT_TEXTURE_WIDTH, + height: GRADIENT_TEXTURE_HEIGHT, depth_or_array_layers: 1, }, uniform: RectUniform::new(dimensions), diff --git a/sg2d-wgpu/src/marks/rule.rs b/sg2d-wgpu/src/marks/rule.rs index ba0ad0f..46787c2 100644 --- a/sg2d-wgpu/src/marks/rule.rs +++ b/sg2d-wgpu/src/marks/rule.rs @@ -1,9 +1,11 @@ use crate::canvas::CanvasDimensions; -use crate::marks::instanced_mark::InstancedMarkShader; +use crate::marks::gradient::to_color_or_gradient_coord; +use crate::marks::rect::{build_gradients_image, GRADIENT_TEXTURE_HEIGHT, GRADIENT_TEXTURE_WIDTH}; +use crate::marks::texture_instanced_mark::{InstancedTextureMarkBatch, TextureInstancedMarkShader}; use itertools::izip; use sg2d::marks::rule::RuleMark; use sg2d::marks::value::StrokeCap; -use wgpu::VertexBufferLayout; +use wgpu::{Extent3d, VertexBufferLayout}; #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] @@ -70,115 +72,108 @@ const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 7] = wgpu::vertex_attr_array! ]; impl RuleInstance { - pub fn iter_from_spec(mark: &RuleMark) -> Box + '_> { + pub fn from_spec(mark: &RuleMark) -> (Vec, image::RgbaImage) { + let mut instances: Vec = Vec::new(); + let img = build_gradients_image(&mark.gradients); + if let Some(stroke_dash_iter) = mark.stroke_dash_iter() { // Rule has a dash specification, so we create an individual RuleInstance for each dash // in each Rule mark item. - Box::new( - izip!( - stroke_dash_iter, - mark.x0_iter(), - mark.y0_iter(), - mark.x1_iter(), - mark.y1_iter(), - mark.stroke_iter(), - mark.stroke_width_iter(), - mark.stroke_cap_iter(), - ) - .flat_map( - |(stroke_dash, x0, y0, x1, y1, stroke, stroke_width, cap)| { - // Next index into stroke_dash array - let mut dash_idx = 0; - - // Distance along line from (x0,y0) to (x1,y1) where the next dash will start - let mut start_dash_dist: f32 = 0.0; - - // Length of the line from (x0,y0) to (x1,y1) - let rule_len = ((x1 - x0).powi(2) + (y1 - y0).powi(2)).sqrt(); - - // Coponents of unit vector along (x0,y0) to (x1,y1) - let xhat = (x1 - x0) / rule_len; - let yhat = (y1 - y0) / rule_len; - - // Vector of rule instances, one for each dash segment - let mut dash_rules: Vec = Vec::new(); - - // Whether the next dash length represents a drawn dash (draw == true) - // or a gap (draw == false) - let mut draw = true; - - while start_dash_dist < rule_len { - let end_dash_dist = - if start_dash_dist + stroke_dash[dash_idx] >= rule_len { - // The final dash/gap should be truncated to the end of the rule - rule_len - } else { - // The dash/gap fits entirely in the rule - start_dash_dist + stroke_dash[dash_idx] - }; - - if draw { - let dash_x0 = x0 + xhat * start_dash_dist; - let dash_y0 = y0 + yhat * start_dash_dist; - let dash_x1 = x0 + xhat * end_dash_dist; - let dash_y1 = y0 + yhat * end_dash_dist; - - dash_rules.push(RuleInstance { - x0: dash_x0, - y0: dash_y0, - x1: dash_x1, - y1: dash_y1, - stroke: *stroke, - stroke_width: *stroke_width, - stroke_cap: match cap { - StrokeCap::Butt => STROKE_CAP_BUTT, - StrokeCap::Square => STROKE_CAP_SQUARE, - StrokeCap::Round => STROKE_CAP_ROUND, - }, - }) - } - - // update start dist for next dash/gap - start_dash_dist = end_dash_dist; - - // increment index and cycle back to start of start of dash array - dash_idx = (dash_idx + 1) % stroke_dash.len(); - - // Alternate between drawn dash and gap - draw = !draw; - } - - dash_rules - }, - ), - ) + + for (stroke_dash, x0, y0, x1, y1, stroke, stroke_width, cap) in izip!( + stroke_dash_iter, + mark.x0_iter(), + mark.y0_iter(), + mark.x1_iter(), + mark.y1_iter(), + mark.stroke_iter(), + mark.stroke_width_iter(), + mark.stroke_cap_iter(), + ) { + // Next index into stroke_dash array + let mut dash_idx = 0; + + // Distance along line from (x0,y0) to (x1,y1) where the next dash will start + let mut start_dash_dist: f32 = 0.0; + + // Length of the line from (x0,y0) to (x1,y1) + let rule_len = ((x1 - x0).powi(2) + (y1 - y0).powi(2)).sqrt(); + + // Coponents of unit vector along (x0,y0) to (x1,y1) + let xhat = (x1 - x0) / rule_len; + let yhat = (y1 - y0) / rule_len; + + // Whether the next dash length represents a drawn dash (draw == true) + // or a gap (draw == false) + let mut draw = true; + + while start_dash_dist < rule_len { + let end_dash_dist = if start_dash_dist + stroke_dash[dash_idx] >= rule_len { + // The final dash/gap should be truncated to the end of the rule + rule_len + } else { + // The dash/gap fits entirely in the rule + start_dash_dist + stroke_dash[dash_idx] + }; + + if draw { + let dash_x0 = x0 + xhat * start_dash_dist; + let dash_y0 = y0 + yhat * start_dash_dist; + let dash_x1 = x0 + xhat * end_dash_dist; + let dash_y1 = y0 + yhat * end_dash_dist; + + instances.push(RuleInstance { + x0: dash_x0, + y0: dash_y0, + x1: dash_x1, + y1: dash_y1, + stroke: to_color_or_gradient_coord(stroke), + stroke_width: *stroke_width, + stroke_cap: match cap { + StrokeCap::Butt => STROKE_CAP_BUTT, + StrokeCap::Square => STROKE_CAP_SQUARE, + StrokeCap::Round => STROKE_CAP_ROUND, + }, + }) + } + + // update start dist for next dash/gap + start_dash_dist = end_dash_dist; + + // increment index and cycle back to start of start of dash array + dash_idx = (dash_idx + 1) % stroke_dash.len(); + + // Alternate between drawn dash and gap + draw = !draw; + } + } } else { // Rule has no dash specification, so we create one RuleInstance per Rule mark item - Box::new( - izip!( - mark.x0_iter(), - mark.y0_iter(), - mark.x1_iter(), - mark.y1_iter(), - mark.stroke_iter(), - mark.stroke_width_iter(), - mark.stroke_cap_iter(), - ) - .map(|(x0, y0, x1, y1, stroke, stroke_width, cap)| RuleInstance { + for (x0, y0, x1, y1, stroke, stroke_width, cap) in izip!( + mark.x0_iter(), + mark.y0_iter(), + mark.x1_iter(), + mark.y1_iter(), + mark.stroke_iter(), + mark.stroke_width_iter(), + mark.stroke_cap_iter(), + ) { + instances.push(RuleInstance { x0: *x0, y0: *y0, x1: *x1, y1: *y1, - stroke: *stroke, + stroke: to_color_or_gradient_coord(stroke), stroke_width: *stroke_width, stroke_cap: match cap { StrokeCap::Butt => STROKE_CAP_BUTT, StrokeCap::Square => STROKE_CAP_SQUARE, StrokeCap::Round => STROKE_CAP_ROUND, }, - }), - ) + }) + } } + (instances, img) } } @@ -187,6 +182,8 @@ pub struct RuleShader { indices: Vec, instances: Vec, uniform: RuleUniform, + batches: Vec, + texture_size: Extent3d, shader: String, vertex_entry_point: String, fragment_entry_point: String, @@ -194,7 +191,11 @@ pub struct RuleShader { impl RuleShader { pub fn from_rule_mark(mark: &RuleMark, dimensions: CanvasDimensions) -> Self { - let instances = RuleInstance::iter_from_spec(mark).collect::>(); + let (instances, gradient_image) = RuleInstance::from_spec(mark); + let batches = vec![InstancedTextureMarkBatch { + instances_range: 0..instances.len() as u32, + image: image::DynamicImage::ImageRgba8(gradient_image), + }]; Self { verts: vec![ RuleVertex { @@ -213,6 +214,12 @@ impl RuleShader { indices: vec![0, 1, 2, 0, 2, 3], instances, uniform: RuleUniform::new(dimensions), + batches, + texture_size: Extent3d { + width: GRADIENT_TEXTURE_WIDTH, + height: GRADIENT_TEXTURE_HEIGHT, + depth_or_array_layers: 1, + }, shader: include_str!("rule.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -220,7 +227,7 @@ impl RuleShader { } } -impl InstancedMarkShader for RuleShader { +impl TextureInstancedMarkShader for RuleShader { type Instance = RuleInstance; type Vertex = RuleVertex; type Uniform = RuleUniform; @@ -241,6 +248,14 @@ impl InstancedMarkShader for RuleShader { self.uniform } + fn batches(&self) -> &[InstancedTextureMarkBatch] { + self.batches.as_slice() + } + + fn texture_size(&self) -> Extent3d { + self.texture_size + } + fn shader(&self) -> &str { self.shader.as_str() } diff --git a/sg2d-wgpu/src/marks/rule.wgsl b/sg2d-wgpu/src/marks/rule.wgsl index 051e444..e77344a 100644 --- a/sg2d-wgpu/src/marks/rule.wgsl +++ b/sg2d-wgpu/src/marks/rule.wgsl @@ -96,12 +96,23 @@ fn vs_main( // Fragment shader @fragment fn fs_main(in: VertexOutput) -> @location(0) vec4 { + + let top_left = vec2( + min(in.p0[0], in.p1[0]), + min(in.p0[1], in.p1[1]), + ); + let bottom_right = vec2( + max(in.p0[0], in.p1[0]), + max(in.p0[1], in.p1[1]), + ); + let color = lookup_color(in.color, in.clip_position, top_left, bottom_right); + let should_antialias = in.radius > 0.0 || (in.p0[0] != in.p1[0] && in.p0[1] != in.p1[1]); if (!should_antialias) { // This is a butt or square cap and fully vertical or horizontal // vertex boundary matches desired rule area and we don't need to do any // anti-aliasing. - return in.color; + return color; } let frag_pos = vec2(in.clip_position[0], in.clip_position[1]); @@ -141,7 +152,69 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { let buffer = chart_uniforms.scale / 2.0; let alpha_factor = 1.0 - smoothstep(in.stroke_half_width - buffer, in.stroke_half_width + buffer, dist); - var adjusted_color = in.color; + var adjusted_color = color; adjusted_color[3] *= alpha_factor; return adjusted_color; } + +// Gradient color +const GRADIENT_LINEAR = 1.0; +const GRADIENT_RADIAL = 2.0; + +const COLORWAY_LENGTH = 250.0; +const GRADIENT_TEXTURE_WIDTH = 256.0; +const GRADIENT_TEXTURE_HEIGHT = 256.0; + +@group(1) @binding(0) +var gradient_texture: texture_2d; +@group(1) @binding(1) +var linear_sampler: sampler; +@group(1) @binding(2) +var nearest_sampler: sampler; + +// Compute final color, potentially computing gradient +fn lookup_color(color: vec4, clip_position: vec4, top_left: vec2, bottom_right: vec2) -> vec4 { + if (color[0] < 0.0) { + // If the first color coordinate is negative, this indicates that we need to compute a gradient. + // The negative of this value is the y-coordinate into the gradient texture where the gradient control + // points and gradient colorway are stored. + let tex_coord_y = -color[0]; + + // Extract gradient type from fist pixel using nearest sampler (so that not interpolation is performed) + let control0 = textureSample(gradient_texture, nearest_sampler, vec2(0.0, tex_coord_y)); + let gradient_type = control0[0]; + + // Extract x/y control points from second pixel + let control1 = textureSample(gradient_texture, nearest_sampler, vec2(1.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); + let x0 = control1[0]; + let y0 = control1[1]; + let x1 = control1[2]; + let y1 = control1[3]; + + if (gradient_type == GRADIENT_LINEAR) { + // Convert fragment coordinate into coordinate normalized to rect bounding box + let frag_xy = vec2(clip_position[0], clip_position[1]); + let width_height = vec2(bottom_right[0] - top_left[0], bottom_right[1] - top_left[1]); + let norm_xy = (frag_xy - top_left) / width_height; + + let p0 = vec2(x0, y0); + let p1 = vec2(x1, y1); + let control_dist = distance(p0, p1); + let projected_dist = dot(norm_xy - p0, p1 - p0) / control_dist; + let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; + let tex_coord_x = clamp(projected_dist / control_dist, 0.0, 1.0) * COLORWAY_LENGTH / GRADIENT_TEXTURE_WIDTH + col_offset / GRADIENT_TEXTURE_WIDTH; + + return textureSample(gradient_texture, linear_sampler, vec2(tex_coord_x, tex_coord_y)); + } else { + // Extract additional radius gradient control points from third pixel + let control2 = textureSample(gradient_texture, nearest_sampler, vec2(2.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); + let r0 = control2[0]; + let r1 = control2[1]; + + // TODO: compute radial gradinet + return vec4(1.0, 0.0, 0.0, 1.0); + } + } else { + return color; + } +} \ No newline at end of file diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index f32f3ff..492d2b1 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -119,6 +119,7 @@ mod test_image_baselines { // vl-convert/resvg messes up scaled paths with strokes case("gradients", "path_with_stroke_gradients", 0.5), + case("gradients", "rules_with_gradients", 0.004), // Slight difference in bounding box for square caps )] fn test_image_baseline(category: &str, spec_name: &str, tolerance: f64) { let specs_dir = format!( diff --git a/sg2d/src/marks/rule.rs b/sg2d/src/marks/rule.rs index 432cac6..376dbac 100644 --- a/sg2d/src/marks/rule.rs +++ b/sg2d/src/marks/rule.rs @@ -1,4 +1,4 @@ -use crate::marks::value::{EncodingValue, StrokeCap}; +use crate::marks::value::{ColorOrGradient, EncodingValue, Gradient, StrokeCap}; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] @@ -7,12 +7,13 @@ pub struct RuleMark { pub name: String, pub clip: bool, pub len: u32, + pub gradients: Vec, pub stroke_dash: Option>>, pub x0: EncodingValue, pub y0: EncodingValue, pub x1: EncodingValue, pub y1: EncodingValue, - pub stroke: EncodingValue<[f32; 4]>, + pub stroke: EncodingValue, pub stroke_width: EncodingValue, pub stroke_cap: EncodingValue, pub indices: Option>, @@ -31,7 +32,7 @@ impl RuleMark { pub fn y1_iter(&self) -> Box + '_> { self.y1.as_iter(self.len as usize, self.indices.as_ref()) } - pub fn stroke_iter(&self) -> Box + '_> { + pub fn stroke_iter(&self) -> Box + '_> { self.stroke .as_iter(self.len as usize, self.indices.as_ref()) } @@ -58,13 +59,14 @@ impl Default for RuleMark { name: "rule_mark".to_string(), clip: true, len: 1, + gradients: vec![], stroke_dash: None, x0: EncodingValue::Scalar { value: 0.0 }, y0: EncodingValue::Scalar { value: 0.0 }, x1: EncodingValue::Scalar { value: 0.0 }, y1: EncodingValue::Scalar { value: 0.0 }, stroke: EncodingValue::Scalar { - value: [0.0, 0.0, 0.0, 1.0], + value: ColorOrGradient::Color([0.0, 0.0, 0.0, 1.0]), }, stroke_width: EncodingValue::Scalar { value: 1.0 }, stroke_cap: EncodingValue::Scalar { From 5a1ad7de8844c4af5a2db267e56971e6a19e2b9a Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 18:48:37 -0500 Subject: [PATCH 18/27] Add gradient support for symbol marks --- .../symbol_circles_gradient_stroke.png | Bin 0 -> 172521 bytes .../symbol_circles_gradient_stroke.sg.json | 2534 +++++++++++++++++ .../gradients/symbol_cross_gradient.png | Bin 0 -> 165117 bytes .../gradients/symbol_cross_gradient.sg.json | 2534 +++++++++++++++++ .../symbol_circles_gradient_stroke.vg.json | 147 + .../gradients/symbol_cross_gradient.vg.json | 147 + sg2d-vega/src/marks/symbol.rs | 42 +- sg2d-wgpu/src/canvas.rs | 14 +- sg2d-wgpu/src/marks/symbol.rs | 54 +- sg2d-wgpu/src/marks/symbol.wgsl | 120 +- sg2d-wgpu/tests/test_image_baselines.rs | 2 + sg2d/src/marks/symbol.rs | 18 +- 12 files changed, 5543 insertions(+), 69 deletions(-) create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_circles_gradient_stroke.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_circles_gradient_stroke.sg.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_cross_gradient.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_cross_gradient.sg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/symbol_circles_gradient_stroke.vg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/symbol_cross_gradient.vg.json diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_circles_gradient_stroke.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_circles_gradient_stroke.png new file mode 100644 index 0000000000000000000000000000000000000000..3e29c829e90a8190a9b641a3843b2aab0ba72423 GIT binary patch literal 172521 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 literal 0 HcmV?d00001 diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_circles_gradient_stroke.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_circles_gradient_stroke.sg.json new file mode 100644 index 0000000..dceb950 --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_circles_gradient_stroke.sg.json @@ -0,0 +1,2534 @@ +{ + "width": 410, + "height": 410, + "origin": [ + 5, + 5 + ], + "scenegraph": { + "clip": false, + "interactive": true, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": true, + "items": [ + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 111.11111111111111, + "y": 140, + "size": 43.23353293413174, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 200, + "y": 300, + "size": 873.3173652694611, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 288.88888888888886, + "y": 60.00000000000001, + "size": 1444, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 333.33333333333337, + "y": 20.000000000000018, + "size": 925.1976047904193, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 244.44444444444446, + "y": 60.00000000000001, + "size": 674.4431137724551, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 66.66666666666666, + "y": 20.000000000000018, + "size": 25.940119760479043, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 288.88888888888886, + "y": 179.99999999999997, + "size": 250.75449101796409, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 200, + "y": 260, + "size": 864.6706586826347, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 288.88888888888886, + "y": 100, + "size": 856.0239520958085, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 111.11111111111111, + "y": 340, + "size": 198.874251497006, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 288.88888888888886, + "y": 20.000000000000018, + "size": 1132.7185628742513, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 244.44444444444446, + "y": 340, + "size": 250.75449101796409, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 244.44444444444446, + "y": 179.99999999999997, + "size": 1132.7185628742513, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 155.55555555555557, + "y": 340, + "size": 657.1497005988024, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 244.44444444444446, + "y": 220.00000000000003, + "size": 1089.4850299401196, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 244.44444444444446, + "y": 300, + "size": 518.8023952095808, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 200, + "y": 179.99999999999997, + "size": 380.4550898203593, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 111.11111111111111, + "y": 100, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 244.44444444444446, + "y": 20.000000000000018, + "size": 207.52095808383234, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 200, + "y": 140, + "size": 233.46107784431138, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 200, + "y": 100, + "size": 69.17365269461078, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 244.44444444444446, + "y": 140, + "size": 1124.0718562874251, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 288.88888888888886, + "y": 140, + "size": 734.9700598802395, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 244.44444444444446, + "y": 260, + "size": 622.5628742514971, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 200, + "y": 60.00000000000001, + "size": 86.46706586826348, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 111.11111111111111, + "y": 20.000000000000018, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 111.11111111111111, + "y": 300, + "size": 95.11377245508983, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 155.55555555555557, + "y": 220.00000000000003, + "size": 77.82035928143713, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 200, + "y": 340, + "size": 786.8502994011975, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 200, + "y": 220.00000000000003, + "size": 613.9161676646706, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 155.55555555555557, + "y": 179.99999999999997, + "size": 34.58682634730539, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 333.33333333333337, + "y": 100, + "size": 121.05389221556885, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 244.44444444444446, + "y": 100, + "size": 916.5508982035929, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 333.33333333333337, + "y": 260, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 333.33333333333337, + "y": 60.00000000000001, + "size": 311.28143712574854, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 155.55555555555557, + "y": 100, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 200, + "y": 20.000000000000018, + "size": 69.17365269461078, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 155.55555555555557, + "y": 300, + "size": 345.8682634730539, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 155.55555555555557, + "y": 380, + "size": 371.8083832335329, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 200, + "y": 380, + "size": 250.75449101796409, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 377.77777777777777, + "y": 20.000000000000018, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 155.55555555555557, + "y": 260, + "size": 190.22754491017966, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 288.88888888888886, + "y": 220.00000000000003, + "size": 138.34730538922156, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 111.11111111111111, + "y": 380, + "size": 155.64071856287427, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 66.66666666666666, + "y": 340, + "size": 69.17365269461078, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 377.77777777777777, + "y": 60.00000000000001, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 155.55555555555557, + "y": 20.000000000000018, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 66.66666666666666, + "y": 140, + "size": 25.940119760479043, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 288.88888888888886, + "y": 300, + "size": 51.880239520958085, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 333.33333333333337, + "y": 340, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 66.66666666666666, + "y": 380, + "size": 121.05389221556885, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 155.55555555555557, + "y": 140, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 288.88888888888886, + "y": 260, + "size": 121.05389221556885, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 333.33333333333337, + "y": 140, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 288.88888888888886, + "y": 340, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 22.22222222222222, + "y": 380, + "size": 25.940119760479043, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 244.44444444444446, + "y": 380, + "size": 25.940119760479043, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 155.55555555555557, + "y": 60.00000000000001, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 333.33333333333337, + "y": 220.00000000000003, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 111.11111111111111, + "y": 260, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 333.33333333333337, + "y": 179.99999999999997, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 66.66666666666666, + "y": 300, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 66.66666666666666, + "y": 260, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "x1": 0.9, + "y1": 0.7, + "x2": 0.7, + "y2": 0.1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "stroke": { + "x1": 0.2, + "y1": 1, + "x2": 0.9, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "strokeWidth": 3, + "x": 66.66666666666666, + "y": 60.00000000000001, + "size": 8.646706586826348, + "shape": "circle" + } + ], + "marktype": "symbol", + "name": "marks", + "role": "mark", + "zindex": 0 + } + ], + "fill": "transparent", + "stroke": "transparent", + "x": 0, + "y": 0, + "width": 400, + "height": 400 + } + ], + "marktype": "group", + "name": "root", + "role": "frame", + "zindex": 0 + } +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_cross_gradient.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_cross_gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..da142f013e24c49287505420b014c97eb6f195d5 GIT binary patch literal 165117 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, + pub fill: Option, pub opacity: Option, pub fill_opacity: Option, pub size: Option, pub shape: Option, - pub stroke: Option, + pub stroke: Option, pub stroke_width: Option, pub stroke_cap: Option, pub stroke_join: Option, @@ -50,15 +50,14 @@ impl VegaMarkContainer { // stroke symbols are converted to a group of lines let mut line_marks: Vec = Vec::new(); for item in &self.items { + let mut gradients = Vec::::new(); let width = item.size.unwrap_or(100.0).sqrt(); let stroke = if let Some(c) = &item.stroke { - let c = csscolorparser::parse(c)?; let base_opacity = item.opacity.unwrap_or(1.0); - let stroke_opacity = - c.a as f32 * item.stroke_opacity.unwrap_or(1.0) * base_opacity; - [c.r as f32, c.g as f32, c.b as f32, stroke_opacity] + let stroke_opacity = item.stroke_opacity.unwrap_or(1.0) * base_opacity; + c.to_color_or_grad(stroke_opacity, &mut gradients)? } else { - [0.0, 0.0, 0.0, 1.0] + ColorOrGradient::Color([0.0, 0.0, 0.0, 0.0]) }; let mark = LineMark { name: "".to_string(), @@ -73,7 +72,7 @@ impl VegaMarkContainer { y: EncodingValue::Scalar { value: origin[1] + item.y, }, - stroke: ColorOrGradient::Color(stroke), + stroke, stroke_width: item.stroke_width.unwrap_or(1.0), stroke_cap: item.stroke_cap.unwrap_or_default(), stroke_join: item.stroke_join.unwrap_or_default(), @@ -82,6 +81,7 @@ impl VegaMarkContainer { .clone() .map(|d| Ok::, VegaSceneGraphError>(d.to_array()?.to_vec())) .transpose()?, + gradients, ..Default::default() }; line_marks.push(SceneMark::Line(mark)); @@ -120,11 +120,12 @@ impl VegaMarkContainer { // Init vector for each encoding channel let mut x = Vec::::new(); let mut y = Vec::::new(); - let mut fill = Vec::<[f32; 4]>::new(); + let mut fill = Vec::::new(); let mut size = Vec::::new(); - let mut stroke = Vec::<[f32; 4]>::new(); + let mut stroke = Vec::::new(); let mut angle = Vec::::new(); let mut zindex = Vec::::new(); + let mut gradients = Vec::::new(); let mut shape_strings = Vec::::new(); let mut shape_index = Vec::::new(); @@ -135,20 +136,18 @@ impl VegaMarkContainer { y.push(item.y + origin[1]); let base_opacity = item.opacity.unwrap_or(1.0); - if let Some(c) = &item.fill { - let c = csscolorparser::parse(c)?; - let fill_opacity = c.a as f32 * item.fill_opacity.unwrap_or(1.0) * base_opacity; - fill.push([c.r as f32, c.g as f32, c.b as f32, fill_opacity]) + if let Some(v) = &item.fill { + let fill_opacity = item.fill_opacity.unwrap_or(1.0) * base_opacity; + fill.push(v.to_color_or_grad(fill_opacity, &mut gradients)?); } if let Some(s) = item.size { size.push(s); } - if let Some(c) = &item.stroke { - let c = csscolorparser::parse(c)?; - let stroke_opacity = c.a as f32 * item.stroke_opacity.unwrap_or(1.0) * base_opacity; - stroke.push([c.r as f32, c.g as f32, c.b as f32, stroke_opacity]) + if let Some(v) = &item.stroke { + let stroke_opacity = item.stroke_opacity.unwrap_or(1.0) * base_opacity; + stroke.push(v.to_color_or_grad(stroke_opacity, &mut gradients)?); } if let Some(v) = item.angle { angle.push(v); @@ -206,6 +205,9 @@ impl VegaMarkContainer { .collect::, VegaSceneGraphError>>()?; } + // Add gradients + mark.gradients = gradients; + Ok(SceneMark::Symbol(mark)) } } diff --git a/sg2d-wgpu/src/canvas.rs b/sg2d-wgpu/src/canvas.rs index 8c061ff..16f0562 100644 --- a/sg2d-wgpu/src/canvas.rs +++ b/sg2d-wgpu/src/canvas.rs @@ -128,12 +128,14 @@ pub trait Canvas { } fn add_symbol_mark(&mut self, mark: &SymbolMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( - self.device(), - self.texture_format(), - self.sample_count(), - Box::new(SymbolShader::from_symbol_mark(mark, self.dimensions())?), - ))); + self.add_mark_renderer(MarkRenderer::TextureInstanced( + TextureInstancedMarkRenderer::new( + self.device(), + self.texture_format(), + self.sample_count(), + Box::new(SymbolShader::from_symbol_mark(mark, self.dimensions())?), + ), + )); Ok(()) } diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index 06fecb0..836a4ce 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -1,6 +1,8 @@ use crate::canvas::CanvasDimensions; use crate::error::Sg2dWgpuError; -use crate::marks::instanced_mark::InstancedMarkShader; +use crate::marks::gradient::to_color_or_gradient_coord; +use crate::marks::rect::{build_gradients_image, GRADIENT_TEXTURE_HEIGHT, GRADIENT_TEXTURE_WIDTH}; +use crate::marks::texture_instanced_mark::{InstancedTextureMarkBatch, TextureInstancedMarkShader}; use itertools::izip; use lyon::lyon_tessellation::{ BuffersBuilder, FillVertex, FillVertexConstructor, StrokeVertex, StrokeVertexConstructor, @@ -8,7 +10,7 @@ use lyon::lyon_tessellation::{ use lyon::tessellation::geometry_builder::VertexBuffers; use lyon::tessellation::{FillOptions, FillTessellator, StrokeOptions, StrokeTessellator}; use sg2d::marks::symbol::{SymbolMark, SymbolShape}; -use wgpu::VertexBufferLayout; +use wgpu::{Extent3d, VertexBufferLayout}; const FILL_KIND: u32 = 0; const STROKE_KIND: u32 = 1; @@ -83,9 +85,12 @@ const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 7] = wgpu::vertex_attr_array! ]; impl SymbolInstance { - pub fn iter_from_spec(mark: &SymbolMark) -> impl Iterator + '_ { + pub fn from_spec(mark: &SymbolMark) -> (Vec, image::RgbaImage) { let stroke_width = mark.stroke_width.unwrap_or(0.0); - izip!( + let mut instances: Vec = Vec::new(); + let img = build_gradients_image(&mark.gradients); + + for (x, y, fill, size, stroke, angle, shape_index) in izip!( mark.x_iter(), mark.y_iter(), mark.fill_iter(), @@ -93,18 +98,19 @@ impl SymbolInstance { mark.stroke_iter(), mark.angle_iter(), mark.shape_index_iter(), - ) - .map( - move |(x, y, fill, size, stroke, angle, shape_index)| SymbolInstance { + ) { + instances.push(SymbolInstance { position: [*x, *y], - fill_color: *fill, - stroke_color: *stroke, + fill_color: to_color_or_gradient_coord(fill), + stroke_color: to_color_or_gradient_coord(stroke), stroke_width, size: *size, angle: *angle, shape_index: (*shape_index) as u32, - }, - ) + }); + } + + (instances, img) } } @@ -113,6 +119,8 @@ pub struct SymbolShader { indices: Vec, instances: Vec, uniform: SymbolUniform, + batches: Vec, + texture_size: Extent3d, shader: String, vertex_entry_point: String, fragment_entry_point: String, @@ -131,7 +139,7 @@ impl SymbolShader { let shape_index = shape_index as u32; match shape { SymbolShape::Circle => { - let r = if has_stroke { 0.9 } else { 0.6 }; + let r = if has_stroke { 1.0 } else { 0.6 }; let normal: [f32; 2] = [0.0, 0.0]; let kind = CIRCLE_KIND; let index_offset = verts.len() as u16; @@ -190,12 +198,22 @@ impl SymbolShader { } } } - let instances = SymbolInstance::iter_from_spec(mark).collect::>(); + let (instances, img) = SymbolInstance::from_spec(mark); + let batches = vec![InstancedTextureMarkBatch { + instances_range: 0..instances.len() as u32, + image: image::DynamicImage::ImageRgba8(img), + }]; Ok(Self { verts, indices, instances, uniform: SymbolUniform::new(dimensions), + batches, + texture_size: Extent3d { + width: GRADIENT_TEXTURE_WIDTH, + height: GRADIENT_TEXTURE_HEIGHT, + depth_or_array_layers: 1, + }, shader: include_str!("symbol.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -203,7 +221,7 @@ impl SymbolShader { } } -impl InstancedMarkShader for SymbolShader { +impl TextureInstancedMarkShader for SymbolShader { type Instance = SymbolInstance; type Vertex = SymbolVertex; type Uniform = SymbolUniform; @@ -224,6 +242,14 @@ impl InstancedMarkShader for SymbolShader { self.uniform } + fn batches(&self) -> &[InstancedTextureMarkBatch] { + self.batches.as_slice() + } + + fn texture_size(&self) -> Extent3d { + self.texture_size + } + fn shader(&self) -> &str { self.shader.as_str() } diff --git a/sg2d-wgpu/src/marks/symbol.wgsl b/sg2d-wgpu/src/marks/symbol.wgsl index 5554330..54576be 100644 --- a/sg2d-wgpu/src/marks/symbol.wgsl +++ b/sg2d-wgpu/src/marks/symbol.wgsl @@ -38,10 +38,12 @@ struct VertexOutput { // Color of vertex when drawing geometric symbol based on a path @location(2) geom_color: vec4, + // Position and size of the shape + @location(3) center: vec2, + @location(4) radius: f32, + // Properties of circle symbol. Circles are drawn in the fragment shader, // so more info must be passed through - @location(3) circle_center: vec2, - @location(4) circle_radius: f32, @location(5) circle_fill_color: vec4, @location(6) circle_stroke_color: vec4, @location(7) circle_stroke_width: f32, @@ -113,16 +115,16 @@ fn vs_main( // Compute normalized position let normalized_pos = 2.0 * pos / chart_uniforms.size - 1.0; out.clip_position = vec4(normalized_pos, 0.0, 1.0); + } - // Compute circle center in fragment shader coordinates - out.circle_center = vec2( - instance.position[0] * chart_uniforms.scale, - instance.position[1] * chart_uniforms.scale, - ); + // Compute circle center in fragment shader coordinates + out.center = vec2( + instance.position[0] * chart_uniforms.scale, + instance.position[1] * chart_uniforms.scale, + ); - // Compute radius in fragment shader coordinates - out.circle_radius = size_scale * chart_uniforms.scale / 2.0; - } + // Compute radius in fragment shader coordinates + out.radius = size_scale * chart_uniforms.scale / 2.0; return out; } @@ -132,43 +134,119 @@ fn vs_main( fn fs_main(in: VertexOutput) -> @location(0) vec4 { if (in.draw_shape != 1.0) { discard; - } if (in.is_circle == 1.0) { + } + + let top_left = in.center - in.radius; + let bottom_right = in.center + in.radius; + if (in.is_circle == 1.0) { // Draw anti-aliased circle + let circle_stroke_color = lookup_color( + in.circle_stroke_color, in.clip_position, top_left, bottom_right + ); + let circle_fill_color = lookup_color( + in.circle_fill_color, in.clip_position, top_left, bottom_right + ); + let buffer = 0.5 * chart_uniforms.scale; - let dist = length(in.circle_center - vec2(in.clip_position[0], in.clip_position[1])); + let dist = length(in.center - vec2(in.clip_position[0], in.clip_position[1])); if (in.circle_stroke_width > 0.0) { - let inner_radius = in.circle_radius - in.circle_stroke_width * chart_uniforms.scale / 2.0; - let outer_radius = in.circle_radius + in.circle_stroke_width * chart_uniforms.scale / 2.0; + let inner_radius = in.radius - in.circle_stroke_width * chart_uniforms.scale / 2.0; + let outer_radius = in.radius + in.circle_stroke_width * chart_uniforms.scale / 2.0; if (dist > outer_radius + buffer * 2.0) { discard; } else { let outer_factor = 1.0 - smoothstep(outer_radius - buffer, outer_radius + buffer, dist); let inner_factor = 1.0 - smoothstep(inner_radius - buffer, inner_radius + buffer, dist); var mixed_color: vec4; - if (in.circle_fill_color[3] == 0.0) { + if (circle_fill_color[3] == 0.0) { // No fill, so use opacity to fade out stroke rather than interpolate color - mixed_color = in.circle_stroke_color; + mixed_color = circle_stroke_color; mixed_color[3] *= outer_factor * (1.0 - inner_factor); } else { // Has fill, interpolate opacity outside of circle and interpolate color inside - mixed_color = mix(in.circle_stroke_color, in.circle_fill_color, inner_factor); + mixed_color = mix(circle_stroke_color, circle_fill_color, inner_factor); mixed_color[3] *= outer_factor; } return mixed_color; } } else { - let alpha_factor = 1.0 - smoothstep(in.circle_radius - buffer, in.circle_radius + buffer, dist); - var mixed_color: vec4 = in.circle_fill_color; + let alpha_factor = 1.0 - smoothstep(in.radius - buffer, in.radius + buffer, dist); + var mixed_color: vec4 = circle_fill_color; mixed_color[3] *= alpha_factor; - if (dist > in.circle_radius + buffer) { + if (dist > in.radius + buffer) { discard; } else { return mixed_color; } } } else { - return in.geom_color; + return lookup_color( + in.geom_color, in.clip_position, top_left, bottom_right + ); } } + + +// Gradient color +const GRADIENT_LINEAR = 1.0; +const GRADIENT_RADIAL = 2.0; + +const COLORWAY_LENGTH = 250.0; +const GRADIENT_TEXTURE_WIDTH = 256.0; +const GRADIENT_TEXTURE_HEIGHT = 256.0; + +@group(1) @binding(0) +var gradient_texture: texture_2d; +@group(1) @binding(1) +var linear_sampler: sampler; +@group(1) @binding(2) +var nearest_sampler: sampler; + +// Compute final color, potentially computing gradient +fn lookup_color(color: vec4, clip_position: vec4, top_left: vec2, bottom_right: vec2) -> vec4 { + if (color[0] < 0.0) { + // If the first color coordinate is negative, this indicates that we need to compute a gradient. + // The negative of this value is the y-coordinate into the gradient texture where the gradient control + // points and gradient colorway are stored. + let tex_coord_y = -color[0]; + + // Extract gradient type from fist pixel using nearest sampler (so that not interpolation is performed) + let control0 = textureSample(gradient_texture, nearest_sampler, vec2(0.0, tex_coord_y)); + let gradient_type = control0[0]; + + // Extract x/y control points from second pixel + let control1 = textureSample(gradient_texture, nearest_sampler, vec2(1.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); + let x0 = control1[0]; + let y0 = control1[1]; + let x1 = control1[2]; + let y1 = control1[3]; + + if (gradient_type == GRADIENT_LINEAR) { + // Convert fragment coordinate into coordinate normalized to rect bounding box + let frag_xy = vec2(clip_position[0], clip_position[1]); + let width_height = vec2(bottom_right[0] - top_left[0], bottom_right[1] - top_left[1]); + let norm_xy = (frag_xy - top_left) / width_height; + + let p0 = vec2(x0, y0); + let p1 = vec2(x1, y1); + let control_dist = distance(p0, p1); + let projected_dist = dot(norm_xy - p0, p1 - p0) / control_dist; + let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; + let tex_coord_x = clamp(projected_dist / control_dist, 0.0, 1.0) * COLORWAY_LENGTH / GRADIENT_TEXTURE_WIDTH + col_offset / GRADIENT_TEXTURE_WIDTH; + + return textureSample(gradient_texture, linear_sampler, vec2(tex_coord_x, tex_coord_y)); + } else { + // Extract additional radius gradient control points from third pixel + let control2 = textureSample(gradient_texture, nearest_sampler, vec2(2.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); + let r0 = control2[0]; + let r1 = control2[1]; + + // TODO: compute radial gradinet + return vec4(1.0, 0.0, 0.0, 1.0); + } + } else { + return color; + } +} \ No newline at end of file diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index 492d2b1..3af1c2b 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -120,6 +120,8 @@ mod test_image_baselines { // vl-convert/resvg messes up scaled paths with strokes case("gradients", "path_with_stroke_gradients", 0.5), case("gradients", "rules_with_gradients", 0.004), // Slight difference in bounding box for square caps + case("gradients", "symbol_cross_gradient", 0.001), + case("gradients", "symbol_circles_gradient_stroke", 0.001), )] fn test_image_baseline(category: &str, spec_name: &str, tolerance: f64) { let specs_dir = format!( diff --git a/sg2d/src/marks/symbol.rs b/sg2d/src/marks/symbol.rs index dacb81b..8792ec0 100644 --- a/sg2d/src/marks/symbol.rs +++ b/sg2d/src/marks/symbol.rs @@ -1,4 +1,4 @@ -use crate::marks::value::EncodingValue; +use crate::marks::value::{ColorOrGradient, EncodingValue, Gradient}; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] @@ -6,15 +6,16 @@ use serde::{Deserialize, Serialize}; pub struct SymbolMark { pub name: String, pub clip: bool, + pub len: u32, + pub gradients: Vec, pub shapes: Vec, pub stroke_width: Option, - pub len: u32, pub shape_index: EncodingValue, pub x: EncodingValue, pub y: EncodingValue, - pub fill: EncodingValue<[f32; 4]>, + pub fill: EncodingValue, pub size: EncodingValue, - pub stroke: EncodingValue<[f32; 4]>, + pub stroke: EncodingValue, pub angle: EncodingValue, pub indices: Option>, } @@ -28,14 +29,14 @@ impl SymbolMark { self.y.as_iter(self.len as usize, self.indices.as_ref()) } - pub fn fill_iter(&self) -> Box + '_> { + pub fn fill_iter(&self) -> Box + '_> { self.fill.as_iter(self.len as usize, self.indices.as_ref()) } pub fn size_iter(&self) -> Box + '_> { self.size.as_iter(self.len as usize, self.indices.as_ref()) } - pub fn stroke_iter(&self) -> Box + '_> { + pub fn stroke_iter(&self) -> Box + '_> { self.stroke .as_iter(self.len as usize, self.indices.as_ref()) } @@ -60,14 +61,15 @@ impl Default for SymbolMark { y: EncodingValue::Scalar { value: 0.0 }, shape_index: EncodingValue::Scalar { value: 0 }, fill: EncodingValue::Scalar { - value: [0.0, 0.0, 0.0, 0.0], + value: ColorOrGradient::Color([0.0, 0.0, 0.0, 0.0]), }, size: EncodingValue::Scalar { value: 20.0 }, stroke: EncodingValue::Scalar { - value: [0.0, 0.0, 0.0, 0.0], + value: ColorOrGradient::Color([0.0, 0.0, 0.0, 0.0]), }, angle: EncodingValue::Scalar { value: 0.0 }, indices: None, + gradients: vec![], } } } From ff7868b59f39d711d176f685aa5565c8602ae47c Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 20:01:22 -0500 Subject: [PATCH 19/27] Add gradient support to arc mark --- .../gradients/arc_gradient.png | Bin 0 -> 37529 bytes .../gradients/arc_gradient.sg.json | 153 ++++++++++++++++++ .../vega-specs/gradients/arc_gradient.vg.json | 98 +++++++++++ sg2d-vega/src/marks/arc.rs | 31 ++-- sg2d-wgpu/src/canvas.rs | 14 +- sg2d-wgpu/src/marks/arc.rs | 125 ++++++++------ sg2d-wgpu/src/marks/arc.wgsl | 73 ++++++++- sg2d-wgpu/tests/test_image_baselines.rs | 3 + sg2d/src/marks/arc.rs | 16 +- 9 files changed, 433 insertions(+), 80 deletions(-) create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/arc_gradient.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/arc_gradient.sg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/arc_gradient.vg.json diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/arc_gradient.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/arc_gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..9cd8f2770e358c48bf454988c256557370e7ce1f GIT binary patch literal 37529 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 z%0D-FH}6)wsJ~cp!>?c@Na=)LG#JspCR{0QtQFanuM)0Hty3Hd`rVYJO2Klg7-7b` zKJBjf(ttAc4tkqW?sa5t2EbZl|rdncqO?8WHJiqMzx@#Oqw9u?(8Yq&$~NKI?wy@ zK10yotr52vJ?_vyZ#qYPn##MSv~z1i+#>*ZjG0ALWdx5IA8QO-eZOVVbv0PgbAZXr z`x^+Y@C1#(`n5T1bbxe+1+(x(N;;6DzHPxjtq#3KeWMdynNM%3_#(4m(JX;4IZT8i zPyjAsF*0(D5kn?@CxpaF4+j+HPgYTwpqrpDH+hF&-m{Zewqkqj3MDEH+|3a52l6m8 zy1Y_*e~?(00I^X}igm82BmG)PN0Q$QiN(@~#|t};MM_5M|^{;NbCE}aV~8;>a4>C>Ixm@G@=y;WOUS@1_R8__q` zxf4&-xPbQbYfAq4zN05v3aI{qgKimsY@Ud0(%ZmjLwp*sZ>x`lUQzVLGK0uE=F9T} zd%3GEaG)nwxNiN@iSBe-9~)D>oS8&&j0JxEn<1uZMBCK|4F(TLS;qs4+V42ItX28X z)1_S5QxzeX#Ri>-e$<)QLH!85NS)?ll$>7pyaJ+tnC`+}w0l~bE$YEy{66C19HuPkQ>mCSgX zv0b#)FbWj)Rhf#h4tivO%M0}F8BY#!GrC|@knuqfAbKES5?r2jkhiP?V;QgP*||)# zb$8FW3C!1v3vOjbv}MEwK+rf8@20|eTVsIh5WJeIO%dPZ#uv6Rsn&^KFaOM6P}Ze% zrzh7I-aISO1W7&E=#@Rl_-&0ILOZOO966C#OWAvd>}Ha!qa@Fvxj0L6!Mogv-=i$1 zjKyp$G67B3tut9h2>c|o=}P}%4Gw^g-^ARUS0^}IC0(~|V|g^w7ajUwiKqg!m0+1C zq+bxUmP&u>Yy_hLc9zMp&edEkmv0I-)a_9ni4e=8_^yU~P7peu#dwJN5(-4X+9>!P zQ4z-69T2cGGprJSIL(eWe2JR+MD!sYkI{z)O7|uRsf}2erz>7L)H)&A4zQD~LhY!K zv4$nW&KzM#yS&`rI!waSkWnjDA+^tA1a!2% z^Jqk;JQj-g0+Q*~Ihd2qYYSb6iF@y@RByD3IHU_*hGrGEj{;PsCp$$Qw^PXMQZro=ihM}R5^D*AlKQ0qh=qb~$(#ZX=H2SUzplu-_vY*J5OMuIHbnO+2?qlokV zjmLOafv>0+!fM(*)n!?qmo|uc|Kg_pi$v)!odx`D0tD*9IZ(jl7a$w*ZiQcQr*!CJ zAOC`2t5{3YOM7;@XM`kdIrn7VQiCBO|BxtZ9CScQ-d*J+X2t|Jjq*2ETE)v!uUS9` zdi)rLh??ndlwzM0{jtfnwX^BdiKuJV0a74_wxxX~t7{N#>0Yv`5}m9&WZK6V9%_d@ za%L&Q1nL@;X=`H^!ZEC3ul$S3Ag^lhvI_pe38^IFaG?|-C-fAiv<1P^$FqZ#;>hpk zS&!!ouVQ?otl$2fo9eJwP zSB2V0=u~k2*5SqmS!OI2i9!&@fNf#@ex>pPKv0iJFNlb<=}lHK)_~oa4M6=IiGHKv ziFkv;x}r}Oc$3zNPziXw;9_O*5{ZkyvCb-H^6FENF_0v12LXyOuQ@C7`#l*uJ+^y6 zTxb>2Wyfz}h6XVs=RtoRaQiQuk3evOb?bf&xreLig_{%EM-G`#tUh|rfa5;~K z8n%B!z0steJ{^-AT7s-UtZQq2-*?R6qex7ve=MUBTL?~0WP!K(Q49fCKk5d9gXEI*p@ zvSU1Td4L}cyA_JjA0%oHP-Kw2i{vQN3TfmNE5uv0Y--!^0N>^jBt7XU5bn;Udvc+< zIo)Ypoq_V`Dyi{)4hld&<;L)!GIosdv;uOfn7>%qX>wHdVr8|!SdE=!a2<@C?#XGC z`zG=_CMJL89|?IvvQ?T)#2E2yt!dY$tnB}5Z7(J!B#S@B8+3OblQH4`a6$j`!k$ITUj#1l@_##{QJG_y;#c~Hf##Q(eR~$UXL|ElUO8WdZ z}QKZb?xXB9k!8R%)GNQ1xaaLHnIl{}RiH9^(x@y@{6UGc^fWloS6ZTi;o! z&X{Bk3-L?!i7iK}$&!h@(6I0K1hd^rB{&c%P zP9TilyGg}db1U%hHbzH$FO*MjxYr4A--?WbOyqbyL=}P7NXwXE$i8Aql+;uZ+gZTY zJWuGup);M~aV4BxQ7yFziN0T3>kLs4cvr`ik9#trU{h_2UK#FrmZqEU1yTK8(M^hSiMSYPH4-VvnUTlrx9urvhUT~{>^}E$$=*fJw zkYBcf(yYM2sW_BHF^5-i7hJ(SzL!I_Z>cp5L=1ohmbysu|VE1VMyN3Pm>@gP2q9^C9b+7Nwm8EtH^$TE1 zOfU>ifdh4lCHzu*^=a{tjn|?} zZ%7l(&QxlZ;3j#r1y-EphfQ}g)Vf`Pks%&>kmZ7HLm&zIE@k^@n7|0WMP*p!IyxaO z4uF=XUnL;S>v$jSru#7EV!qY@3c>X!fP$1~pus8x(7O!Kn=(b4aVE;dIvxKc1;Vl_ z^Yz_RRb7c6;S7uO|wS&Q2{+N&*)vc&>=;%66-j$x@yWmtisw*pKUpT9{s8E zAsk{HImD@vNah{(bnx)`9W-aAd6q3_e5`RJ(p45r!4si{4b-Wauj{DsvGPq3??HR{ z=@|{Jb}x9ycAm(0tOE41PQcZT5g$~Go~k6mWc47l*@t}J@#)&Rl9|v}4znO+k>O&W>0y*oYQVXkkWPa3+VuihS` zp6GGSr|XRisea&k{$Z8lg?8EPIi;JH`YV2cc?pl#)bPIcZlc0~V*)UOgwq!6NQimP zT%S%idR&#oB;1`Op4`Xp?6$N%N;jTVLVt&efmDZ8|FJKZ*_?19R$HnY3JEm>1b!)0j{3Ov47l zy~u2S)|)U)VxM&h=Y`BetRWlYbqklC)ZKC4Sa4^<|G4IskUxB})FVJ$>HN0eBdvI* z?eKS&HUEPIJ@2u-vx}i*r&?5{m7j^d za;Vf}!8-NnX~O^W%uWl~gD?~LJAwNHUG&?2{X@&^m>t{t+%7#mu1+Sz&AKuo4W=4D z+SWW~Me?1-i`i-Gn_C@DM4kH&EizB5a!zB;ZTd0ap84jC`&aQE3s&nomTZ|6`C8K- zJk^V`NE>G4%@sbo!|6xiNGv5{YO=Qb`lb(hQD zoKMf5;;B4caVPfX@56Ew%zxCP-$reV?=K8XRh}qe)^)$#d_7(Jwve0Vw}}0xxVRP zr98N!CHH{nhLZXB3v%&Owt6?aC+Ea`RKffnaN(|T$Etge%8l5#FfTR;2>nxb6Pn{0 zeLQJuUC!8J8%0}SUVn&-4_)i2O%$!&UON(3UJMLYn`O$4=aC8Vv?GEWq59Fep2{Zs zYRPq5#_iw4xsq;KUezkunJQ*|V$jx0N5k_k{uZapyof>+-TXG%#b6YNDm2o|#oy3h zp7SokQF^lLf!hOsGkF7h0AQ5a{SVH&M)GI19rCYlxaWWP#-^bR@86;Rg11IDD%~Q# z&YZH<5IrIK>MW#o32lQ3VUMPvHg=}dndr_L`MEtqf;)p`zw{i>zptv*1j}XjE2aKk zH~tV{&)==lAJ;S$i;ZNZ$qU$RCqAdiWskpvGJ1_@>-jxczatLok-Y$x^R4WhCN4FI z?@sJnsp)V(5q)-Ch1+{N>Ax{TabG>s*}FR_{6ODMDhXoLVWW$xI-c{cjxF zJQew;6VuZo52iZ{bDGO*JG8QY*~DLRSa7O%q;HESGloP?*jeMPhn6Gi#}!on`?NNj zIWUF3GE$fP*pfMtK98+gPVN(WLY4g3lm`{Y(QS-DbI@@Q&M@PYz2y`;?BEy}JB0bt zkmkU!mHk_Gr3$l7hGlAHul$P`neG{x9IEl#tPszFBISO8et%?3a_q;@on`R9R}hvW zrF*2U$x?mt2ci#Ea^*k+`zp0`6du$sRPi_~xF(31&0~6k?oj$0FlP-@kg&a=0T(cA zYk+ZA93O@S44~ZX_;6a&#mx9Xk#Am$I=)l1k5T^f*p*TZt2o~|WuCS+0{i%d{W+r4 zW+&fjD(hCyZW-MrYxOH^_0#4?Tn+U390?zUR37P|p8Tz*9+vX-ujnym3YrQ9hPBt( zd3Bt-=2jP=M&jHxnH=5)n+&|#&s~g{4LU)69HDSNaCa76@z2WCjbdNgGo04i@{idS z+>R%memGLae1rC*sB|+{dN+rs7bkT*#Yge6vxr`CUu8#K^pP@C()v58hW4Hui+N@U z3h-29dYw#4vOxjtgeaYsnphaJr8)bR0O8BJjF*1ZngzMW?yx@%%L z(Np@H#q`?PmbJ0FsLNeRMt>q9i84AY@ zH6TqebZ&vp%gZ*(MmSM7zDN}oC_ndb*2#Z!bh+dPwKZN!=QT_IK;mW69tn`7l{KVG z3lrtB-SYL@H&m(IpDdlzPGqbmb3}jQeO(<@-7Ph?-S5xxTYX0aVbY~hM9)CmP|rZy z@R;lbEIForLY{8!?_G6cY;q;#my~uMboOt7dzMjQOX)%?BHyztPU>Xq0Amtm`ozd` zxp#b9AC5tJYtItu!VTAQ(2MiiYFul&rAmMA=33@!qt}eprm0{u{tZWZVz&<<51g>+ zUdo|}n=8Z-k5?RrX{N>WZ_HG8`D7|OgSI9p|7z+D(`L&K=#=xB6~@QW%p6MPLzNnz zfIKGxd4XNBkUas0d!o?V4DT;iP%S~1(KI=ctx389B5NG=$Sks^^Hs@H0AfccM|F;N ziaj2uQ$7^@^_jGBiC999+s1rvIp4zY3`&1ymb7=4v}D@$o70r#B4au3znVqn=#Hw7 zPUAlkRl~hGkxY_)0Bp3#RG5USe?f~y{rYx!~UKm}KDf_ex@9de>gTg~} zp-K=_Hjnu_B}$yqbX?kh9MZwtvcmm#(mv=ZIL5?d^9M65fazJ9-n)dVSr$vfDgb#; zIX4;2r94ft4sE_6cRe|=11y=C zs9H^QQ;l~z`jT|T4Zn4o+e-`q`Jg<)j)G)x?G7t7*C+Ac{MDWL>5Cm`#iV2vUuRL{ zH4VgyiPOgbKtyRoq3HdobInehLCb5sJK)gzPKX(5Gv+1g~h^6?wcSYC1t^ zTnb2$j(q0!r{QHIWA(%C>+5oRKg)<6(zzs%&hbGR;74lD-tO}LX&-JWGOq+F9Z9W@ zmoc9=OJ)xAEr$UsMtbYB(;wm0PBA$DTpt+)%{ocXMRDYBJn8Y?2#fPBq;8!(4qk9{<1{@=P!kfWF)kn@kf#QSKRd)vGH z9sm1!`_LZRIF5hm39yB$Br6m3{ukQB@<#k!yvqjiK1;>w55#4GR9_&}a^P>GyMP+o z9dOI0OK(6aV3@Pt_fgXn96`kOgCgwug1Sq)=`17~T2hmDk^0eW9bgjKbS*kbSRZy5 zJ`;r*fnigCq1s)W+_zMqUP|JXnWx_Dmti%wYHE1qIiLWTixh zP?-v-P(Jga`0;zA_Qzz-ZgG}p7ch6HzfsO?UpT)>Fl z8ly;ye`%e4mdt_V!Fz0+Y+Xl4Mg`+4FD#AuuR>gG(nW7-@KjtcT4GZXSK9=4V@KW^ zRv2D7UbIkKJKs?__$dD^qAQzvlS*Xp5$}q1iM6RY8b1y4w_B9 zL==2ElNd8sG0RXJu>qcNuPCJ9Xq??(m=MXvUIOycZoRjQY7{a#{0ketgZJ2ec+5oH zLWq4y@Ja9y-p}RjXEuCTvgNauL62(J|I$3FV9xgK8-8d`yAv@T8exgf!JE90Uo?!K z^69Y37rwRm)8fDFIq9-`e#w>{Ex%jlReglopzmEh=0W`Y^SbLBYuqk|Rlu9jq_Y{6 zjJoJ&6I9CldHNdmH@J^*Jn6D#ei1%5oBd43lkIL-Zg&;04DUMns4~Pg)EJo4o~%>^ z;)k)yf*%%bBP+E(6K>Nba{743SE`wHiFbXO(d-+*M^E~boyF-Y2fuIe58zp*hbz8Y z#(zh&M|IjMYSTP@vv*%YN^9##r>5d8@cQgH80ucrb0;h9AAji|7cJV^b}GbmegDZ2 zSN-+_6N<{`|763w_n$u2{LXleu@R3_MThJ%VrTNVtCpx5mN~T+XSrTk^1$#{7nvsv zPiA7ei^pilipy=>rSA-nTLUW=y7Rw3v8LI3V_M?uqH5SyarU#8-&GEVH(&g>0iogp z{_)1ZKVbjHld?f!&E($?6m*=OUl@{>Qm8u`iAQQqYL?v26ed9!Yd%3ioV;=9f(1h< zW}6{#str8+uJ4sTI0pHj8ownbsapt{yzQq0|6o9C$Z^ew8KepdjcN9@kb>KlB{IWx z@AilB5sy~j{omjYBIL-8rwqXqZ7-9CTybf z-^o$EJuCRCtn8jm{(_pL=W5E%)u3Vgrs_SR0|%H7@wM^w#m1j%TeVHB7`|I((#4lK zQ%!m>-1{?LNBby)u}&#?Fr)3R$~T}ca>m>JX{+3V>pEO`wKmVtf0IEJ8ETZ*J*0D- ze2uGx`qmVpYVm$P2U0HRj(WoFXU`yB1DwL0#Wo@+$egK72u*%SFzqjanLsLVNj_|V$b+@ zC)@bl@v7-g?7ts%vPN{+tL7Viw<=4MR$-8D`={!_27Tb+`0Ck3BGv0Y-Dex`Ptq~% zw~gC3KM*vC`DtszeH3-!vZ|hwtwGfpZB)KpM$}C6yKBosg#G)(Rj0~k3H9Hmv{F+! zA=_`Cr+{wJ&Q03X@Wx|p>e{xNoP1YpcfS0i@UhxXRonS6DkH$9OC`M(=+k>v+wG^_ zM5mC=jUc!yA{#z5Aa4*mw7Fhh&L2N1tw~(Hs^L+zouNt>>fO9LV}(`0iK;$O66$ zb1Dpwaep4JjjdiC{x?;4v?iqg+T_h%_gdT>dm8t&%t-ch&q`H)pytR@0C{IaZ!G_BjT|QqK&pjMg=>=rT zV}8^Eyq^JC6!j01RY^aQ+eVaNpZ}HL0c{SsDKOGNmR!P(s*u}20RXpzK^n{L{)GG= z)(^qo1dgq&IVJp*$8oKybV^R`x85OPcHv*OosV8nBmGudWgv+<28<_HHLTqsZxzi^ zD>OlNr8xODSMzZ_{;QADd(s!Q%-YK!FHy5T^yK$eS4 z+iO6+!qP}c=5VDKoMsms0oLtuf<@*C{xT>CSs)Cekwq$Q#MCzW_3o6^W*72gMqgPK z^AYA~7=Y*l8@BI|wl3;r4g46ddJM|TELmKq39km*>wa6ZEPII*273KW?)QL=?(98^*n0fruImw@8K`RwVc!2r_3Bzx{&Fym~Z-Ejfb)Mgn zFnhtcn$l~P_LH8=Ig*zw)YSCQ=W~b1Z4B0U?4l1P)w=MOUFWrPdFVT_tWRPtkNnYE zmxg?u|NQzkUeBOXsBM$^@kU`s5f~G`TxU(*$Ys zm%N8L^-Ve2u3W=LI)!sqqV}A)nnu~Wj>dETyTDzcHnT-RSdWG{L6*a^i?vyt0Bytl zyDa%;QX?W7c8N7B8q;wO7Dv0pjMZp;g?lsfS2LQ9i&~HCM2;*BQs2vM>l3N71zI7$<6;I>V&5BNu{sSw;U(UzA+^lS)-OwM$& z(6bg!&v?-@6(fY}!V6vQ>$U&_KjXFuV3C#BsCF#TNA!wQJF?~Xsk0CVK_E>!n|2h< zikZN_gaN5R9RNE3>^M)(@4Ho0q2S-kAG|qwwC4ioQ4p+ri^)8hHau4Hmm_>*H{j4{j*)jwUhR}*zh)08i3%hw5@Hy9ldb!rvl zOp}G*mEKS|1yzEt zoXL^YXyYU^{g@+Js)id*tqi*)b~)p)d8liNeVDRX@z4Ww{t7A0py|X97h$lc>l@Y(2YVE-t3%OB9Cp$CO+hPbK{o(q5l zSP3_wJ=QnZkU+)r9u^4I1==2sZZnv4g>pe^Vs!I0MV3*%ie2YGjKt;w=#Z-VLYW147_p6s)OZe1Ukx9_lF}pggja zbA10O*v)HwBznBnHAY`-Afz-LL3%C7MqFwi)>c`3m|w9RIB9U*Xh(pyxZRM26O1Ov z{$Y4WtdC$c#v&s;o5e!5u!B;EHLE1zB(yPLD41g7s6m2uw}**_g_4(?7N}p^Y;0Pg z6F~PCvBaDdTRMUF$)REh>d&MzHC=dhs_E|Hk{crEMjkK> z44TPeox-9X-aHSm%fd!k@fEjy*B+X+D8yylwXDNr+=alLSyE z@iLqBBSfP-Ku{m3_yu^X|Gx(H?ERsvI{(z#aIG{ zRKcyixX3*s?#FS4mT0B)Fd8JQgxE|6wnbt!OuxvnOwNt+MelqPW7M7H@J~v2i(SY7&!AfSf+$|pLhw}mkx+WS`6R; z0Nboq?&Xk&h@Ye{EE>Y~n-*^qKtL}+EXP7Ck3^-!@EkoGhDM70xAP18w-=@|rCbE< z6y}n5(f&+*f;5sxdu%~;#a|}^CYb|4$0x4>)sXX6>{TE-K5-S?u4n?Dph3767DS-^ zl$y)GBHCUqQeMxM%wZBuSJAh zgSpkgbQc3E!rg@-Fy@$Gzf>ht?v&iD;+Ki2R*{Nw;k5GmZBQUciHPglykm+4iq58J z1PLASKH~-1hI!);Tb?7AS$saS0W)A}&$! zI-5f4GOn;m8#qI-ddMqGR*!&zUX_g<2w<_IVM7&DcNB)>BzC|s7vd_S-UP7dvySs0 z9#$QWTvOk1RJJ>VKAF+V4Cca!(t?55S|!-Wsssz#CY2!0i*?4Bt_E-Flsrma&Za5XO0m1(J6)lIQOC{n6mp%w}<5?4X;Zag{YW6KO-9 zK%xe=-43H04C(>PNrJ;lfP|yC?tK8VnK9tQ0We*Hi|l)m^uEn6+|NwmOq36GExBUI zJMKWo#@$v45E9^xAaj7&{Rv?#Bc9wW3^v3y#nfz2$Hg%NM^xPAHlqkbNK!`!b4s{d63W=b0k0`60n=%36|o)aOVjRhQSAVP{Oc~CYoPe z5e7zCT8$PgL)0y9-KG0SuJ%v9{nG`h%wp4hC?6E{D@=U5yy*$8z|6;_6#zS65v-_@ zAw zJO}v-qksDxm;xYZu}LZMTO=~V6rgbwBcv*1%Aa*VOJ-)M$7GZRNLvC_j48xi1aWbR6cgCO6eWx5i`0^zg%*_E*JG37oOMv(ZQJ&871!9^4nM8G%>ERwp0Oo{lO z1McM*IhcY7_UootaE62wzc2@F#1w6jkb z7I{6$!7u^{0jd3nIzs@858o8MAW{M3ColoH1n?k)0|p_H*o(Cn*4==;ut6?_SR@Pu z5g=j$<{-lao{ag!0BEYrg_8_Z8S1JfDL|cJlMS$bxC*q45_!$!Dw zZPMEN`m)?DP(HLcNq(FLsJim(q5^&~_1V+%K+xvo%wCZ>_&3ReMF$Ica6XyMe}GNl z#tP-(CFAV~Q^Oy7#wc}$H-9$gmrE%mpM2J(cY_VJ`NObH5!08I=&-u^SB zfypw+hDalNykB!>Z)U_A2)YSrhiQ<&6yTf^+xjM$0&nT^e{l>Bw+WSHCU7w>W5X$y zP9m8xQCjX8pr(cZ?N5e3q?g}_SX0<>xNvuJtTDOuk0vj2&fa@0gx*^t#?y_PbhWdI z7v&5ENn`LF1HOU{wM+vMl1hGOuFnE-j+r=CYdKU#LicU1fWwmbXgQcIz)z5jLCD22tsqP;tHWcm zUqeXe#KcK=2>RSqB?CpAV*#8`rHV*njk;Doq;wwtOOyuIrAQuTl7^{ZMFK$L(b*WC zm<{n*PiqD%4FV&C_Cw9kdC`0Ps{C3+y(Z{75jBRp6TADQ$)Rgf<0EmE{YRgncP4Qg zBte9{!HN=B5+g{;{>0X^u!$Z)41OXhAo&U!Q$>kQpiRxX%m)yFgO%i^L`SX}sGT2c zBW-TbeDyh@3p)7q&L7r<>c z=|Ej2ktr(Z+a_k!LO~w>DKp*p2G?o0eVmLB0=oh!EBPb@ux)Dai@ zuxT_4nWQkmy*kS)4$!Lr98H2799tlLnCnaDMszPOfc=p^N_rHV+7Ee->Cze2SNWP6`!UldP%cvh0I_dy6 zdRm0S1G!O;a+|UQU0LTlbevAV|g6-Ajo&=ob6vp6GR%Zs>Ef5OEV@U&CV4T$G8$77oZq&JXa}`Oe4le zGGWv`;?t44!?$C<^OdaypgZL%LP5{y(E*z<47B)yyVmbkW2#JNs z3A_eit2XLkpt3GQ0Zk;Ya}G_go)08E5U z5=}QjY!_b#Z(^E>wIDYk7O2FLibv4UY0rHlIrCkzZD9g$y&*MsVt5d=e50pgLl^Mf z_!Hg(+zRWdOwTt#`M-X?;Y%tZNRtaq)jvBK;j1P-u7_TK?fkY`UnWxv z|DQaY^Wx;)y}!y*zNdT7uw;NEIL3noAB0HEtasMB3J%U42GWv=i7}tX{?V^_1M4+uy*qP=SimAvYwAx@TOo*D(pmO5 zqtUq;&;TL8q(v-SMRH_vz3^BwKw>OwYHeVvJS?FJ5e39iWz>GYf~TmU*V2>C?HuPj z7ICy8bCRI)#pX1lO!w-R18ebXHBDh5#@H-9j=m2h!rnabeH_}D16mAkF`^`i)<&hM z#m*RS*h_s*T@ENH3sBw-(%pp_IMdsn#711+di6v9wYnetD=?WN#4Tdk0C7vGM+|OR z_Kb7N5F5f@2BZi3W@~E@Iiq#?>&*83R}bkZ%6O21?;-fqWZ$H^zt^R$i|$>F@?`;( zC7$4+T>JyZj4pcMTFFIniNZkUM6UH0!1#=BGs*|sNoGP)t?jHa1Y$7}UeqMsJi^Mh zHt=O>E$%|IqeY_0qUVUPjV$RvZj+=XD0>3$B-=6HrWw%b$>#bg^m3WB*lrKdj<4No z45?;%7n?g>p3&h%+=uCDY(>iAX*g5@x^vV|oz)vod(o54$vQj>b}JBzu_M{~fd_(^ zDc^>B+j5Zt>z}wVhAl^(T*Tx@D)BQl^!3EqY0|-fe1Mr0Astd69Z2mIhn=4foGv>18O z6!dwy0y;O6ZM=QJ1?_^6X^Q8C2THRFN3=1D?#svmau>oChq%g=NtS3^toua*lEh4_ z=_SSqR7F;6R__t51)whE0v_rib{X$F-#o=PE`)i-1mWl|kV~?>8MFwJ^RT6TbQfUc z%q>Vcv}X)+fbtjhnv*bpV&9_9kZ&AQ43Oc zpcM*H_Xh8;{3`vLci22}`P3h{`>2u3Q+P>U+EmamPSAV#%&p&Bd>A|QhnR>F3)T%- zI+OTrz`si)=Qj-6820(%z(4xHU3a(0(cu*~~WzOOUJ z0_5|#IFLx3M5e(2p0jIQGHq7_l2kMm7k`+=k zn7`X1!zHuCSoUnIAFmxJJRsHS`Rfa!6F}_57oul0^_dV6GPmeG(q?;={rrX?hxk&{%Y~iO)Zxw~!S#&TwHji6hp1 zxJi*BGPZoV7RmvF#vev)W1R4{~mr5@FZ4;E_9q`+v@hl=eu6X*nW%GO!_1Uq~lrW zEzKUdwjp?jSLN%nq`A*j+=G6&oE zctWC~F&;jNi@J`rDY3{^V)&)P_1wvsEu=o5a=$m;H0DxdDW#Jx zjr(c~2|RI#N2XkHN-kYY+Pcg0R15Knaa%?;Zl*3kNV!67fYU9C<2yKy4Vt$*QtRYS&a4Ti0nU!En^ z`KxA#wSWOq{K9lRoA5h3o0^89^B06qm+Cgis;R#}x*%;fOxx~|m=nzo0O4ysIq?*~ zv~ZN@@izF5&j&C?$9|nI`(ZVoenM%1kvAL3d-Y%IQ_nRYB4GymT z!k7~0?Q^}7@XL9}n2*L8kjgJ+7~MWix|hn<-;sS+U~oE>CaZj6+70B#jU~OjM>$cf zz9qT4q|gHtxvQay01N;)D4;b+xr>!v#OuQkmHk+Hs8 z7P5QIrFptYpA)G{F?<4}X!x~Y(15#~IYNp)tscJWx)0K&-|~K#;ds7pZtSL8A0vfuEHT`4@{T*Yk3%v|PLr_w`ayyh+NDC`YV?9HXOl}G*h zKDX>(4|%5|;_zZ>9(3a2_sWtlm%%2qmm@bdgh#wqo;f{Mb))dG@{@1+A3Xk}w0M%t zka*y*B;}t>%)w}2P?>Y#9skfRD#(r~{HiOWDX*};=bKo16-<5?O!FxCB}j3}gPAyQ zsm%V>-x`2>RXJG}e!HBDtf z+E3O$Fnu!#%AbFl^qwF8)?|m~D+~Te`M%^~m8c45Db?ibJMj4Qa!9tcwVymO!uk5O zCCZcTqN<;d*MjtN*;s#-THJfLs7)ch_M%BE){IRK={_ZHJ%n3081jV+C}r_!!sI6% zn@sTK(4JH6zK2FSyS?*8^UAQ%9G7~GI!jb#IY_ADdAF(~{hz$N2WBPMZwY{-QD-sM zI5PhYedY^pUu}g6+9+SsNrFiG+Rh0!(9ZWsgC{)mbrX=w9wI#&Y4NXKW_yESz53li z8)@liry;$cdqNRU6@%rkW{}%-&1yuk5 literal 0 HcmV?d00001 diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/arc_gradient.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/arc_gradient.sg.json new file mode 100644 index 0000000..92b3685 --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/arc_gradient.sg.json @@ -0,0 +1,153 @@ +{ + "width": 210, + "height": 210, + "origin": [ + 5, + 5 + ], + "scenegraph": { + "clip": false, + "interactive": true, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": true, + "items": [ + { + "x": 100, + "y": 100, + "outerRadius": 80, + "innerRadius": 20, + "startAngle": 5, + "endAngle": 7, + "fill": { + "x1": 0, + "y1": 1, + "x2": 1, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 0.4, + "color": "yellow" + }, + { + "offset": 0.6, + "color": "darkgreen" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "fillOpacity": 0.6, + "stroke": { + "x1": 0, + "y1": 0, + "x2": 1, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "orange" + }, + { + "offset": 0.4, + "color": "orange" + }, + { + "offset": 0.6, + "color": "purple" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "strokeWidth": 4 + }, + { + "x": 100, + "y": 100, + "outerRadius": 80, + "innerRadius": 20, + "startAngle": 8, + "endAngle": 9, + "fill": { + "x1": 0, + "y1": 0, + "x2": 1, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "orange" + }, + { + "offset": 0.4, + "color": "orange" + }, + { + "offset": 0.6, + "color": "purple" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "fillOpacity": 0.6, + "stroke": { + "x1": 0, + "y1": 1, + "x2": 1, + "y2": 1, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 0.4, + "color": "yellow" + }, + { + "offset": 0.6, + "color": "darkgreen" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "strokeWidth": 4 + } + ], + "marktype": "arc", + "name": "marks", + "role": "mark", + "zindex": 0 + } + ], + "fill": "transparent", + "x": 0, + "y": 0, + "width": 200, + "height": 200 + } + ], + "marktype": "group", + "name": "root", + "role": "frame", + "zindex": 0 + } +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-specs/gradients/arc_gradient.vg.json b/sg2d-vega-test-data/vega-specs/gradients/arc_gradient.vg.json new file mode 100644 index 0000000..78db2b2 --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/gradients/arc_gradient.vg.json @@ -0,0 +1,98 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "A simple pie chart with embedded data.", + "background": "white", + "padding": 5, + "width": 200, + "height": 200, + "style": "view", + "data": [ + { + "name": "data_0", + "values": [ + { + "startAngle": 5, + "endAngle": 7, + "fill": { + "x1": 0, + "y1": 1, + "x2": 1, + "y2": 1, + "gradient": "linear", + "stops": [ + {"offset": 0, "color": "yellow"}, + {"offset": 0.4, "color": "yellow"}, + {"offset": 0.6, "color": "darkgreen"}, + {"offset": 1, "color": "darkgreen"} + ] + }, + "stroke": { + "x1": 0, + "y1": 0, + "x2": 1, + "y2": 1, + "gradient": "linear", + "stops": [ + {"offset": 0, "color": "orange"}, + {"offset": 0.4, "color": "orange"}, + {"offset": 0.6, "color": "purple"}, + {"offset": 1, "color": "purple"} + ] + } + }, + { + "startAngle": 8, + "endAngle": 9, + "fill": { + "x1": 0, + "y1": 0, + "x2": 1, + "y2": 1, + "gradient": "linear", + "stops": [ + {"offset": 0, "color": "orange"}, + {"offset": 0.4, "color": "orange"}, + {"offset": 0.6, "color": "purple"}, + {"offset": 1, "color": "purple"} + ] + }, + "stroke": { + "x1": 0, + "y1": 1, + "x2": 1, + "y2": 1, + "gradient": "linear", + "stops": [ + {"offset": 0, "color": "yellow"}, + {"offset": 0.4, "color": "yellow"}, + {"offset": 0.6, "color": "darkgreen"}, + {"offset": 1, "color": "darkgreen"} + ] + } + } + ] + } + ], + "marks": [ + { + "name": "marks", + "type": "arc", + "from": {"data": "data_0"}, + "style": ["arc"], + "encode": { + "update": { + "x": {"value": 100}, + "y": {"value": 100}, + "outerRadius": {"value": 80}, + "innerRadius": {"value": 20}, + "startAngle": {"field": "startAngle"}, + "endAngle": {"field": "endAngle"}, + "fill": {"field": "fill"}, + "fillOpacity": {"value": 0.6}, + "stroke": {"field": "stroke"}, + "strokeWidth": {"value": 4} + } + } + } + ] +} diff --git a/sg2d-vega/src/marks/arc.rs b/sg2d-vega/src/marks/arc.rs index efa721d..918a353 100644 --- a/sg2d-vega/src/marks/arc.rs +++ b/sg2d-vega/src/marks/arc.rs @@ -1,9 +1,10 @@ use crate::error::VegaSceneGraphError; use crate::marks::mark::{VegaMarkContainer, VegaMarkItem}; +use crate::marks::values::CssColorOrGradient; use serde::{Deserialize, Serialize}; use sg2d::marks::arc::ArcMark; use sg2d::marks::mark::SceneMark; -use sg2d::marks::value::EncodingValue; +use sg2d::marks::value::{ColorOrGradient, EncodingValue, Gradient}; #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -16,9 +17,9 @@ pub struct VegaArcItem { pub inner_radius: Option, // default 0.0 pub pad_angle: Option, // default 0.0 pub corner_radius: Option, // default 0.0 - pub fill: Option, + pub fill: Option, pub fill_opacity: Option, // default 1.0 - pub stroke: Option, + pub stroke: Option, pub stroke_width: Option, // default 0.0 pub stroke_opacity: Option, // default 1.0 pub opacity: Option, @@ -47,10 +48,11 @@ impl VegaMarkContainer { let mut inner_radius = Vec::::new(); let mut pad_angle = Vec::::new(); let mut corner_radius = Vec::::new(); - let mut fill = Vec::<[f32; 4]>::new(); - let mut stroke = Vec::<[f32; 4]>::new(); + let mut fill = Vec::::new(); + let mut stroke = Vec::::new(); let mut stroke_width = Vec::::new(); let mut zindex = Vec::::new(); + let mut gradients = Vec::::new(); // For each item, append explicit values to corresponding vector for item in &self.items { @@ -75,17 +77,13 @@ impl VegaMarkContainer { if let Some(s) = item.corner_radius { corner_radius.push(s); } - if let Some(s) = &item.fill { - let c = csscolorparser::parse(s)?; - let opacity = - c.a as f32 * item.fill_opacity.unwrap_or(1.0) * item.opacity.unwrap_or(1.0); - fill.push([c.r as f32, c.g as f32, c.b as f32, opacity]); + if let Some(v) = &item.fill { + let opacity = item.fill_opacity.unwrap_or(1.0) * item.opacity.unwrap_or(1.0); + fill.push(v.to_color_or_grad(opacity, &mut gradients)?); } - if let Some(s) = &item.stroke { - let c = csscolorparser::parse(s)?; - let opacity = - c.a as f32 * item.stroke_opacity.unwrap_or(1.0) * item.opacity.unwrap_or(1.0); - stroke.push([c.r as f32, c.g as f32, c.b as f32, opacity]); + if let Some(v) = &item.stroke { + let opacity = item.stroke_opacity.unwrap_or(1.0) * item.opacity.unwrap_or(1.0); + stroke.push(v.to_color_or_grad(opacity, &mut gradients)?); } if let Some(s) = item.stroke_width { stroke_width.push(s); @@ -148,6 +146,9 @@ impl VegaMarkContainer { mark.indices = Some(indices); } + // Add gradients + mark.gradients = gradients; + Ok(SceneMark::Arc(mark)) } } diff --git a/sg2d-wgpu/src/canvas.rs b/sg2d-wgpu/src/canvas.rs index 16f0562..eaba6a0 100644 --- a/sg2d-wgpu/src/canvas.rs +++ b/sg2d-wgpu/src/canvas.rs @@ -78,12 +78,14 @@ pub trait Canvas { fn sample_count(&self) -> u32; fn add_arc_mark(&mut self, mark: &ArcMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( - self.device(), - self.texture_format(), - self.sample_count(), - Box::new(ArcShader::from_arc_mark(mark, self.dimensions())), - ))); + self.add_mark_renderer(MarkRenderer::TextureInstanced( + TextureInstancedMarkRenderer::new( + self.device(), + self.texture_format(), + self.sample_count(), + Box::new(ArcShader::from_arc_mark(mark, self.dimensions())), + ), + )); Ok(()) } diff --git a/sg2d-wgpu/src/marks/arc.rs b/sg2d-wgpu/src/marks/arc.rs index 414f150..18f516b 100644 --- a/sg2d-wgpu/src/marks/arc.rs +++ b/sg2d-wgpu/src/marks/arc.rs @@ -1,10 +1,12 @@ use crate::canvas::CanvasDimensions; -use crate::marks::instanced_mark::InstancedMarkShader; +use crate::marks::gradient::to_color_or_gradient_coord; +use crate::marks::rect::{build_gradients_image, GRADIENT_TEXTURE_HEIGHT, GRADIENT_TEXTURE_WIDTH}; +use crate::marks::texture_instanced_mark::{InstancedTextureMarkBatch, TextureInstancedMarkShader}; use itertools::izip; use sg2d::marks::arc::ArcMark; use std::f32::consts::TAU; use std::mem; -use wgpu::VertexBufferLayout; +use wgpu::{Extent3d, VertexBufferLayout}; #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] @@ -75,8 +77,23 @@ const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 10] = wgpu::vertex_attr_array ]; impl ArcInstance { - pub fn iter_from_spec(mark: &ArcMark) -> impl Iterator + '_ { - izip!( + pub fn from_spec(mark: &ArcMark) -> (Vec, image::RgbaImage) { + let mut instances: Vec = Vec::new(); + let img = build_gradients_image(&mark.gradients); + + for ( + x, + y, + start_angle, + end_angle, + outer_radius, + inner_radius, + pad_angle, + corner_radius, + fill, + stroke, + stroke_width, + ) in izip!( mark.x_iter(), mark.y_iter(), mark.start_angle_iter(), @@ -88,52 +105,39 @@ impl ArcInstance { mark.fill_iter(), mark.stroke_iter(), mark.stroke_width_iter(), - ) - .map( - |( - x, - y, + ) { + // Normalize start and end angles so that start is in [0, TAU) + let mut start_angle = *start_angle; + let mut end_angle = *end_angle; + if end_angle < start_angle { + mem::swap(&mut start_angle, &mut end_angle); + } + while start_angle < 0.0 { + start_angle += TAU; + end_angle += TAU; + } + while start_angle >= TAU { + start_angle -= TAU; + end_angle -= TAU; + } + + instances.push(ArcInstance { + position: [*x, *y], start_angle, end_angle, - outer_radius, - inner_radius, - pad_angle, - corner_radius, - fill, - stroke, - stroke_width, - )| { - // Normalize start and end angles so that start is in [0, TAU) - let mut start_angle = *start_angle; - let mut end_angle = *end_angle; - if end_angle < start_angle { - mem::swap(&mut start_angle, &mut end_angle); - } - while start_angle < 0.0 { - start_angle += TAU; - end_angle += TAU; - } - while start_angle >= TAU { - start_angle -= TAU; - end_angle -= TAU; - } - - ArcInstance { - position: [*x, *y], - start_angle, - end_angle, - // start_angle: *start_angle, - // end_angle: *end_angle, - outer_radius: outer_radius.max(*inner_radius), - inner_radius: inner_radius.min(*outer_radius), - pad_angle: *pad_angle, - corner_radius: *corner_radius, - fill: *fill, - stroke: *stroke, - stroke_width: *stroke_width, - } - }, - ) + // start_angle: *start_angle, + // end_angle: *end_angle, + outer_radius: outer_radius.max(*inner_radius), + inner_radius: inner_radius.min(*outer_radius), + pad_angle: *pad_angle, + corner_radius: *corner_radius, + fill: to_color_or_gradient_coord(fill), + stroke: to_color_or_gradient_coord(stroke), + stroke_width: *stroke_width, + }); + } + + (instances, img) } } @@ -142,6 +146,8 @@ pub struct ArcShader { indices: Vec, instances: Vec, uniform: ArcUniform, + batches: Vec, + texture_size: Extent3d, shader: String, vertex_entry_point: String, fragment_entry_point: String, @@ -149,7 +155,12 @@ pub struct ArcShader { impl ArcShader { pub fn from_arc_mark(mark: &ArcMark, dimensions: CanvasDimensions) -> Self { - let instances = ArcInstance::iter_from_spec(mark).collect::>(); + let (instances, img) = ArcInstance::from_spec(mark); + let batches = vec![InstancedTextureMarkBatch { + instances_range: 0..instances.len() as u32, + image: image::DynamicImage::ImageRgba8(img), + }]; + Self { verts: vec![ ArcVertex { @@ -168,6 +179,12 @@ impl ArcShader { indices: vec![0, 1, 2, 0, 2, 3], instances, uniform: ArcUniform::new(dimensions), + batches, + texture_size: Extent3d { + width: GRADIENT_TEXTURE_WIDTH, + height: GRADIENT_TEXTURE_HEIGHT, + depth_or_array_layers: 1, + }, shader: include_str!("arc.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -175,7 +192,7 @@ impl ArcShader { } } -impl InstancedMarkShader for ArcShader { +impl TextureInstancedMarkShader for ArcShader { type Instance = ArcInstance; type Vertex = ArcVertex; type Uniform = ArcUniform; @@ -196,6 +213,14 @@ impl InstancedMarkShader for ArcShader { self.uniform } + fn batches(&self) -> &[InstancedTextureMarkBatch] { + self.batches.as_slice() + } + + fn texture_size(&self) -> Extent3d { + self.texture_size + } + fn shader(&self) -> &str { self.shader.as_str() } diff --git a/sg2d-wgpu/src/marks/arc.wgsl b/sg2d-wgpu/src/marks/arc.wgsl index 37dfb6c..3a44e46 100644 --- a/sg2d-wgpu/src/marks/arc.wgsl +++ b/sg2d-wgpu/src/marks/arc.wgsl @@ -90,6 +90,11 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { let inner_stroke_radius = inner_radius - half_stroke; let mid_radius = (outer_radius + inner_radius) / 2.0; + let top_left = scaled_center - outer_radius; + let bottom_right = scaled_center + outer_radius; + let fill = lookup_color(in.fill, in.clip_position, top_left, bottom_right); + let stroke = lookup_color(in.stroke, in.clip_position, top_left, bottom_right); + // Compute position of fragment relative to arc center let frag_pos = vec2(in.clip_position[0], in.clip_position[1]); let relative_frag = frag_pos - scaled_center; @@ -178,11 +183,75 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { var mixed_color: vec4; if (in.stroke_width > 0.0) { - mixed_color = mix(in.stroke, in.fill, min(radius_mix_factor, angle_mix_factor)); + mixed_color = mix(stroke, fill, min(radius_mix_factor, angle_mix_factor)); } else { - mixed_color = in.fill; + mixed_color = fill; } mixed_color[3] *= min(radius_alpha_factor, angle_alpha_factor); return mixed_color; } + + + +// Gradient color +const GRADIENT_LINEAR = 1.0; +const GRADIENT_RADIAL = 2.0; + +const COLORWAY_LENGTH = 250.0; +const GRADIENT_TEXTURE_WIDTH = 256.0; +const GRADIENT_TEXTURE_HEIGHT = 256.0; + +@group(1) @binding(0) +var gradient_texture: texture_2d; +@group(1) @binding(1) +var linear_sampler: sampler; +@group(1) @binding(2) +var nearest_sampler: sampler; + +// Compute final color, potentially computing gradient +fn lookup_color(color: vec4, clip_position: vec4, top_left: vec2, bottom_right: vec2) -> vec4 { + if (color[0] < 0.0) { + // If the first color coordinate is negative, this indicates that we need to compute a gradient. + // The negative of this value is the y-coordinate into the gradient texture where the gradient control + // points and gradient colorway are stored. + let tex_coord_y = -color[0]; + + // Extract gradient type from fist pixel using nearest sampler (so that not interpolation is performed) + let control0 = textureSample(gradient_texture, nearest_sampler, vec2(0.0, tex_coord_y)); + let gradient_type = control0[0]; + + // Extract x/y control points from second pixel + let control1 = textureSample(gradient_texture, nearest_sampler, vec2(1.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); + let x0 = control1[0]; + let y0 = control1[1]; + let x1 = control1[2]; + let y1 = control1[3]; + + if (gradient_type == GRADIENT_LINEAR) { + // Convert fragment coordinate into coordinate normalized to rect bounding box + let frag_xy = vec2(clip_position[0], clip_position[1]); + let width_height = vec2(bottom_right[0] - top_left[0], bottom_right[1] - top_left[1]); + let norm_xy = (frag_xy - top_left) / width_height; + + let p0 = vec2(x0, y0); + let p1 = vec2(x1, y1); + let control_dist = distance(p0, p1); + let projected_dist = dot(norm_xy - p0, p1 - p0) / control_dist; + let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; + let tex_coord_x = clamp(projected_dist / control_dist, 0.0, 1.0) * COLORWAY_LENGTH / GRADIENT_TEXTURE_WIDTH + col_offset / GRADIENT_TEXTURE_WIDTH; + + return textureSample(gradient_texture, linear_sampler, vec2(tex_coord_x, tex_coord_y)); + } else { + // Extract additional radius gradient control points from third pixel + let control2 = textureSample(gradient_texture, nearest_sampler, vec2(2.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); + let r0 = control2[0]; + let r1 = control2[1]; + + // TODO: compute radial gradinet + return vec4(1.0, 0.0, 0.0, 1.0); + } + } else { + return color; + } +} \ No newline at end of file diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index 3af1c2b..8c1771a 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -122,6 +122,9 @@ mod test_image_baselines { case("gradients", "rules_with_gradients", 0.004), // Slight difference in bounding box for square caps case("gradients", "symbol_cross_gradient", 0.001), case("gradients", "symbol_circles_gradient_stroke", 0.001), + + // Our gradient bounding box for arc marks is the full circle, not the bounding box around the arc wedge + case("gradients", "arc_gradient", 0.1), )] fn test_image_baseline(category: &str, spec_name: &str, tolerance: f64) { let specs_dir = format!( diff --git a/sg2d/src/marks/arc.rs b/sg2d/src/marks/arc.rs index f4fd5d1..f857386 100644 --- a/sg2d/src/marks/arc.rs +++ b/sg2d/src/marks/arc.rs @@ -1,4 +1,4 @@ -use crate::marks::value::EncodingValue; +use crate::marks::value::{ColorOrGradient, EncodingValue, Gradient}; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] @@ -7,6 +7,7 @@ pub struct ArcMark { pub name: String, pub clip: bool, pub len: u32, + pub gradients: Vec, pub x: EncodingValue, pub y: EncodingValue, pub start_angle: EncodingValue, @@ -15,8 +16,8 @@ pub struct ArcMark { pub inner_radius: EncodingValue, pub pad_angle: EncodingValue, pub corner_radius: EncodingValue, - pub fill: EncodingValue<[f32; 4]>, - pub stroke: EncodingValue<[f32; 4]>, + pub fill: EncodingValue, + pub stroke: EncodingValue, pub stroke_width: EncodingValue, pub indices: Option>, } @@ -52,10 +53,10 @@ impl ArcMark { self.corner_radius .as_iter(self.len as usize, self.indices.as_ref()) } - pub fn fill_iter(&self) -> Box + '_> { + pub fn fill_iter(&self) -> Box + '_> { self.fill.as_iter(self.len as usize, self.indices.as_ref()) } - pub fn stroke_iter(&self) -> Box + '_> { + pub fn stroke_iter(&self) -> Box + '_> { self.stroke .as_iter(self.len as usize, self.indices.as_ref()) } @@ -71,6 +72,7 @@ impl Default for ArcMark { name: "arc_mark".to_string(), clip: true, len: 1, + gradients: vec![], x: EncodingValue::Scalar { value: 0.0 }, y: EncodingValue::Scalar { value: 0.0 }, start_angle: EncodingValue::Scalar { value: 0.0 }, @@ -80,10 +82,10 @@ impl Default for ArcMark { pad_angle: EncodingValue::Scalar { value: 0.0 }, corner_radius: EncodingValue::Scalar { value: 0.0 }, fill: EncodingValue::Scalar { - value: [0.0, 0.0, 0.0, 1.0], + value: ColorOrGradient::Color([0.0, 0.0, 0.0, 1.0]), }, stroke: EncodingValue::Scalar { - value: [0.0, 0.0, 0.0, 0.0], + value: ColorOrGradient::Color([0.0, 0.0, 0.0, 0.0]), }, stroke_width: EncodingValue::Scalar { value: 0.0 }, indices: None, From 0f490f84d7f03ca47565e96bcf2069f84376e506 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 20:11:09 -0500 Subject: [PATCH 20/27] Remove non-textured renderers --- sg2d-wgpu/src/canvas.rs | 40 ------ sg2d-wgpu/src/marks/basic_mark.rs | 180 ------------------------ sg2d-wgpu/src/marks/instanced_mark.rs | 188 -------------------------- sg2d-wgpu/src/marks/mod.rs | 4 +- 4 files changed, 1 insertion(+), 411 deletions(-) delete mode 100644 sg2d-wgpu/src/marks/basic_mark.rs delete mode 100644 sg2d-wgpu/src/marks/instanced_mark.rs diff --git a/sg2d-wgpu/src/canvas.rs b/sg2d-wgpu/src/canvas.rs index eaba6a0..0dc8ddc 100644 --- a/sg2d-wgpu/src/canvas.rs +++ b/sg2d-wgpu/src/canvas.rs @@ -14,9 +14,7 @@ use winit::window::Window; use crate::error::Sg2dWgpuError; use crate::marks::arc::ArcShader; -use crate::marks::basic_mark::BasicMarkRenderer; use crate::marks::image::ImageShader; -use crate::marks::instanced_mark::InstancedMarkRenderer; use crate::marks::path::PathShader; use crate::marks::rect::RectShader; use crate::marks::rule::RuleShader; @@ -36,8 +34,6 @@ use sg2d::{ }; pub enum MarkRenderer { - Basic(BasicMarkRenderer), - Instanced(InstancedMarkRenderer), Texture(TextureMarkRenderer), TextureInstanced(TextureInstancedMarkRenderer), Text(TextMarkRenderer), @@ -460,20 +456,6 @@ impl WindowCanvas { for mark in &mut self.marks { let command = match mark { - MarkRenderer::Basic(renderer) => { - if self.sample_count > 1 { - renderer.render(&self.device, &self.multisampled_framebuffer, Some(&view)) - } else { - renderer.render(&self.device, &view, None) - } - } - MarkRenderer::Instanced(renderer) => { - if self.sample_count > 1 { - renderer.render(&self.device, &self.multisampled_framebuffer, Some(&view)) - } else { - renderer.render(&self.device, &view, None) - } - } MarkRenderer::Texture(renderer) => { if self.sample_count > 1 { renderer.render(&self.device, &self.multisampled_framebuffer, Some(&view)) @@ -643,28 +625,6 @@ impl PngCanvas { for mark in &mut self.marks { let command = match mark { - MarkRenderer::Basic(renderer) => { - if self.sample_count > 1 { - renderer.render( - &self.device, - &self.multisampled_framebuffer, - Some(&self.texture_view), - ) - } else { - renderer.render(&self.device, &self.texture_view, None) - } - } - MarkRenderer::Instanced(mark) => { - if self.sample_count > 1 { - mark.render( - &self.device, - &self.multisampled_framebuffer, - Some(&self.texture_view), - ) - } else { - mark.render(&self.device, &self.texture_view, None) - } - } MarkRenderer::Texture(renderer) => { if self.sample_count > 1 { renderer.render( diff --git a/sg2d-wgpu/src/marks/basic_mark.rs b/sg2d-wgpu/src/marks/basic_mark.rs deleted file mode 100644 index d8d7788..0000000 --- a/sg2d-wgpu/src/marks/basic_mark.rs +++ /dev/null @@ -1,180 +0,0 @@ -use wgpu::util::DeviceExt; -use wgpu::{CommandBuffer, Device, TextureFormat, TextureView}; - -pub trait BasicMarkShader { - type Vertex: bytemuck::Pod + bytemuck::Zeroable; - type Uniform: bytemuck::Pod + bytemuck::Zeroable; - - fn verts(&self) -> &[Self::Vertex]; - fn indices(&self) -> &[u16]; - fn uniform(&self) -> Self::Uniform; - fn shader(&self) -> &str; - fn vertex_entry_point(&self) -> &str; - fn fragment_entry_point(&self) -> &str; - fn vertex_desc(&self) -> wgpu::VertexBufferLayout<'static>; -} - -pub struct BasicMarkRenderer { - render_pipeline: wgpu::RenderPipeline, - vertex_buffer: wgpu::Buffer, - index_buffer: wgpu::Buffer, - num_indices: u32, - uniform_bind_group: wgpu::BindGroup, -} - -impl BasicMarkRenderer { - pub fn new( - device: &Device, - texture_format: TextureFormat, - sample_count: u32, - mark_shader: Box>, - ) -> Self - where - V: bytemuck::Pod + bytemuck::Zeroable, - U: bytemuck::Pod + bytemuck::Zeroable, - { - // Uniforms - let uniform_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("Uniform Buffer"), - contents: bytemuck::cast_slice(&[mark_shader.uniform()]), - usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, - }); - - let uniform_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { - entries: &[wgpu::BindGroupLayoutEntry { - binding: 0, - visibility: wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT, - ty: wgpu::BindingType::Buffer { - ty: wgpu::BufferBindingType::Uniform, - has_dynamic_offset: false, - min_binding_size: None, - }, - count: None, - }], - label: Some("chart_uniform_layout"), - }); - - let uniform_bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { - layout: &uniform_layout, - entries: &[wgpu::BindGroupEntry { - binding: 0, - resource: uniform_buffer.as_entire_binding(), - }], - label: Some("uniform_bind_group"), - }); - - let _render_pipeline_layout = - device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { - label: Some("Render Pipeline Layout"), - bind_group_layouts: &[&uniform_layout], - push_constant_ranges: &[], - }); - - // Shaders - let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor { - label: Some("Shader"), - source: wgpu::ShaderSource::Wgsl(mark_shader.shader().into()), - }); - - let render_pipeline_layout = - device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { - label: Some("Render Pipeline Layout"), - bind_group_layouts: &[&uniform_layout], - push_constant_ranges: &[], - }); - - let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { - label: Some("Render Pipeline"), - layout: Some(&render_pipeline_layout), - vertex: wgpu::VertexState { - module: &shader, - entry_point: mark_shader.vertex_entry_point(), - buffers: &[mark_shader.vertex_desc()], - }, - fragment: Some(wgpu::FragmentState { - module: &shader, - entry_point: mark_shader.fragment_entry_point(), - targets: &[Some(wgpu::ColorTargetState { - format: texture_format, - blend: Some(wgpu::BlendState::ALPHA_BLENDING), - write_mask: wgpu::ColorWrites::ALL, - })], - }), - primitive: wgpu::PrimitiveState { - topology: wgpu::PrimitiveTopology::TriangleList, - strip_index_format: None, - front_face: wgpu::FrontFace::Ccw, - cull_mode: Some(wgpu::Face::Back), - polygon_mode: wgpu::PolygonMode::Fill, - unclipped_depth: false, - conservative: false, - }, - depth_stencil: None, - multisample: wgpu::MultisampleState { - count: sample_count, - mask: !0, - alpha_to_coverage_enabled: false, - }, - multiview: None, - }); - - let verts = mark_shader.verts(); - let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("Vertex Buffer"), - contents: bytemuck::cast_slice(verts), - usage: wgpu::BufferUsages::VERTEX, - }); - - let indices = mark_shader.indices(); - let index_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("Index Buffer"), - contents: bytemuck::cast_slice(indices), - usage: wgpu::BufferUsages::INDEX, - }); - let num_indices = indices.len() as u32; - - Self { - render_pipeline, - vertex_buffer, - index_buffer, - num_indices, - uniform_bind_group, - } - } - - pub fn render( - &self, - device: &Device, - texture_view: &TextureView, - resolve_target: Option<&TextureView>, - ) -> CommandBuffer { - let mut mark_encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor { - label: Some("Mark Render Encoder"), - }); - - { - let mut render_pass = mark_encoder.begin_render_pass(&wgpu::RenderPassDescriptor { - label: Some("Mark Render Pass"), - color_attachments: &[Some(wgpu::RenderPassColorAttachment { - view: texture_view, - resolve_target, - ops: wgpu::Operations { - load: wgpu::LoadOp::Load, - store: wgpu::StoreOp::Store, - }, - })], - depth_stencil_attachment: None, - occlusion_query_set: None, - timestamp_writes: None, - }); - - render_pass.set_pipeline(&self.render_pipeline); - render_pass.set_bind_group(0, &self.uniform_bind_group, &[]); - render_pass.set_vertex_buffer(0, self.vertex_buffer.slice(..)); - render_pass.set_index_buffer(self.index_buffer.slice(..), wgpu::IndexFormat::Uint16); - render_pass.draw_indexed(0..self.num_indices, 0, 0..1); - } - - mark_encoder.finish() - } -} diff --git a/sg2d-wgpu/src/marks/instanced_mark.rs b/sg2d-wgpu/src/marks/instanced_mark.rs deleted file mode 100644 index 946deea..0000000 --- a/sg2d-wgpu/src/marks/instanced_mark.rs +++ /dev/null @@ -1,188 +0,0 @@ -use wgpu::util::DeviceExt; -use wgpu::{CommandBuffer, Device, TextureFormat, TextureView}; - -pub trait InstancedMarkShader { - type Instance: bytemuck::Pod + bytemuck::Zeroable; - type Vertex: bytemuck::Pod + bytemuck::Zeroable; - type Uniform: bytemuck::Pod + bytemuck::Zeroable; - - fn verts(&self) -> &[Self::Vertex]; - fn indices(&self) -> &[u16]; - fn instances(&self) -> &[Self::Instance]; - fn uniform(&self) -> Self::Uniform; - fn shader(&self) -> &str; - fn vertex_entry_point(&self) -> &str; - fn fragment_entry_point(&self) -> &str; - fn instance_desc(&self) -> wgpu::VertexBufferLayout<'static>; - fn vertex_desc(&self) -> wgpu::VertexBufferLayout<'static>; -} - -pub struct InstancedMarkRenderer { - render_pipeline: wgpu::RenderPipeline, - vertex_buffer: wgpu::Buffer, - index_buffer: wgpu::Buffer, - num_indices: u32, - instance_buffer: wgpu::Buffer, - num_instances: u32, - uniform_bind_group: wgpu::BindGroup, -} - -impl InstancedMarkRenderer { - pub fn new( - device: &Device, - texture_format: TextureFormat, - sample_count: u32, - mark_shader: Box>, - ) -> Self - where - I: bytemuck::Pod + bytemuck::Zeroable, - V: bytemuck::Pod + bytemuck::Zeroable, - U: bytemuck::Pod + bytemuck::Zeroable, - { - // Uniforms - let uniform_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("Uniform Buffer"), - contents: bytemuck::cast_slice(&[mark_shader.uniform()]), - usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, - }); - - let uniform_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { - entries: &[wgpu::BindGroupLayoutEntry { - binding: 0, - visibility: wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT, - ty: wgpu::BindingType::Buffer { - ty: wgpu::BufferBindingType::Uniform, - has_dynamic_offset: false, - min_binding_size: None, - }, - count: None, - }], - label: Some("chart_uniform_layout"), - }); - - let uniform_bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { - layout: &uniform_layout, - entries: &[wgpu::BindGroupEntry { - binding: 0, - resource: uniform_buffer.as_entire_binding(), - }], - label: Some("uniform_bind_group"), - }); - - // Shaders - let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor { - label: Some("Shader"), - source: wgpu::ShaderSource::Wgsl(mark_shader.shader().into()), - }); - - let render_pipeline_layout = - device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { - label: Some("Render Pipeline Layout"), - bind_group_layouts: &[&uniform_layout], - push_constant_ranges: &[], - }); - - let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { - label: Some("Render Pipeline"), - layout: Some(&render_pipeline_layout), - vertex: wgpu::VertexState { - module: &shader, - entry_point: mark_shader.vertex_entry_point(), - buffers: &[mark_shader.vertex_desc(), mark_shader.instance_desc()], - }, - fragment: Some(wgpu::FragmentState { - module: &shader, - entry_point: mark_shader.fragment_entry_point(), - targets: &[Some(wgpu::ColorTargetState { - format: texture_format, - blend: Some(wgpu::BlendState::ALPHA_BLENDING), - write_mask: wgpu::ColorWrites::ALL, - })], - }), - primitive: wgpu::PrimitiveState { - topology: wgpu::PrimitiveTopology::TriangleList, - strip_index_format: None, - front_face: wgpu::FrontFace::Ccw, - cull_mode: Some(wgpu::Face::Back), - polygon_mode: wgpu::PolygonMode::Fill, - unclipped_depth: false, - conservative: false, - }, - depth_stencil: None, - multisample: wgpu::MultisampleState { - count: sample_count, - mask: !0, - alpha_to_coverage_enabled: false, - }, - multiview: None, - }); - - let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("Vertex Buffer"), - contents: bytemuck::cast_slice(mark_shader.verts()), - usage: wgpu::BufferUsages::VERTEX, - }); - - let index_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("Index Buffer"), - contents: bytemuck::cast_slice(mark_shader.indices()), - usage: wgpu::BufferUsages::INDEX, - }); - let num_indices = mark_shader.indices().len() as u32; - - let instances = mark_shader.instances(); - let instance_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("Instance Buffer"), - contents: bytemuck::cast_slice(instances), - usage: wgpu::BufferUsages::VERTEX, - }); - let num_instances = instances.len() as u32; - - Self { - render_pipeline, - vertex_buffer, - index_buffer, - num_indices, - instance_buffer, - num_instances, - uniform_bind_group, - } - } - - pub fn render( - &self, - device: &Device, - texture_view: &TextureView, - resolve_target: Option<&TextureView>, - ) -> CommandBuffer { - let mut mark_encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor { - label: Some("Mark Render Encoder"), - }); - - { - let mut render_pass = mark_encoder.begin_render_pass(&wgpu::RenderPassDescriptor { - label: Some("Mark Render Pass"), - color_attachments: &[Some(wgpu::RenderPassColorAttachment { - view: texture_view, - resolve_target, - ops: wgpu::Operations { - load: wgpu::LoadOp::Load, - store: wgpu::StoreOp::Store, - }, - })], - depth_stencil_attachment: None, - occlusion_query_set: None, - timestamp_writes: None, - }); - - render_pass.set_pipeline(&self.render_pipeline); - render_pass.set_bind_group(0, &self.uniform_bind_group, &[]); - render_pass.set_vertex_buffer(0, self.vertex_buffer.slice(..)); - render_pass.set_vertex_buffer(1, self.instance_buffer.slice(..)); - render_pass.set_index_buffer(self.index_buffer.slice(..), wgpu::IndexFormat::Uint16); - render_pass.draw_indexed(0..self.num_indices, 0, 0..self.num_instances); - } - - mark_encoder.finish() - } -} diff --git a/sg2d-wgpu/src/marks/mod.rs b/sg2d-wgpu/src/marks/mod.rs index ba61ffe..dbef087 100644 --- a/sg2d-wgpu/src/marks/mod.rs +++ b/sg2d-wgpu/src/marks/mod.rs @@ -1,8 +1,6 @@ pub mod arc; -pub mod basic_mark; -mod gradient; +pub mod gradient; pub mod image; -pub mod instanced_mark; pub mod path; pub mod rect; pub mod rule; From 71d5e77e28b27744395807aaa4c7370be0cb74ff Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 20:19:49 -0500 Subject: [PATCH 21/27] Rename mark renderers --- sg2d-wgpu/src/canvas.rs | 42 +++++++++---------- sg2d-wgpu/src/marks/arc.rs | 10 ++--- .../marks/{texture_mark.rs => basic_mark.rs} | 14 +++---- sg2d-wgpu/src/marks/image.rs | 14 +++---- ...re_instanced_mark.rs => instanced_mark.rs} | 14 +++---- sg2d-wgpu/src/marks/mod.rs | 4 +- sg2d-wgpu/src/marks/path.rs | 16 +++---- sg2d-wgpu/src/marks/rect.rs | 10 ++--- sg2d-wgpu/src/marks/rule.rs | 10 ++--- sg2d-wgpu/src/marks/symbol.rs | 10 ++--- 10 files changed, 72 insertions(+), 72 deletions(-) rename sg2d-wgpu/src/marks/{texture_mark.rs => basic_mark.rs} (97%) rename sg2d-wgpu/src/marks/{texture_instanced_mark.rs => instanced_mark.rs} (97%) diff --git a/sg2d-wgpu/src/canvas.rs b/sg2d-wgpu/src/canvas.rs index 0dc8ddc..78be383 100644 --- a/sg2d-wgpu/src/canvas.rs +++ b/sg2d-wgpu/src/canvas.rs @@ -20,8 +20,8 @@ use crate::marks::rect::RectShader; use crate::marks::rule::RuleShader; use crate::marks::symbol::SymbolShader; use crate::marks::text::TextMarkRenderer; -use crate::marks::texture_instanced_mark::TextureInstancedMarkRenderer; -use crate::marks::texture_mark::TextureMarkRenderer; +use crate::marks::instanced_mark::InstancedMarkRenderer; +use crate::marks::basic_mark::BasicMarkRenderer; use sg2d::marks::arc::ArcMark; use sg2d::marks::area::AreaMark; use sg2d::marks::image::ImageMark; @@ -34,8 +34,8 @@ use sg2d::{ }; pub enum MarkRenderer { - Texture(TextureMarkRenderer), - TextureInstanced(TextureInstancedMarkRenderer), + Basic(BasicMarkRenderer), + Instanced(InstancedMarkRenderer), Text(TextMarkRenderer), } @@ -74,8 +74,8 @@ pub trait Canvas { fn sample_count(&self) -> u32; fn add_arc_mark(&mut self, mark: &ArcMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::TextureInstanced( - TextureInstancedMarkRenderer::new( + self.add_mark_renderer(MarkRenderer::Instanced( + InstancedMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), @@ -86,7 +86,7 @@ pub trait Canvas { } fn add_path_mark(&mut self, mark: &PathMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Texture(TextureMarkRenderer::new( + self.add_mark_renderer(MarkRenderer::Basic(BasicMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), @@ -96,7 +96,7 @@ pub trait Canvas { } fn add_line_mark(&mut self, mark: &LineMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Texture(TextureMarkRenderer::new( + self.add_mark_renderer(MarkRenderer::Basic(BasicMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), @@ -106,7 +106,7 @@ pub trait Canvas { } fn add_trail_mark(&mut self, mark: &TrailMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Texture(TextureMarkRenderer::new( + self.add_mark_renderer(MarkRenderer::Basic(BasicMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), @@ -116,7 +116,7 @@ pub trait Canvas { } fn add_area_mark(&mut self, mark: &AreaMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Texture(TextureMarkRenderer::new( + self.add_mark_renderer(MarkRenderer::Basic(BasicMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), @@ -126,8 +126,8 @@ pub trait Canvas { } fn add_symbol_mark(&mut self, mark: &SymbolMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::TextureInstanced( - TextureInstancedMarkRenderer::new( + self.add_mark_renderer(MarkRenderer::Instanced( + InstancedMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), @@ -138,8 +138,8 @@ pub trait Canvas { } fn add_rect_mark(&mut self, mark: &RectMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::TextureInstanced( - TextureInstancedMarkRenderer::new( + self.add_mark_renderer(MarkRenderer::Instanced( + InstancedMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), @@ -150,8 +150,8 @@ pub trait Canvas { } fn add_rule_mark(&mut self, mark: &RuleMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::TextureInstanced( - TextureInstancedMarkRenderer::new( + self.add_mark_renderer(MarkRenderer::Instanced( + InstancedMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), @@ -174,7 +174,7 @@ pub trait Canvas { } fn add_image_mark(&mut self, mark: &ImageMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Texture(TextureMarkRenderer::new( + self.add_mark_renderer(MarkRenderer::Basic(BasicMarkRenderer::new( self.device(), self.texture_format(), self.sample_count(), @@ -456,14 +456,14 @@ impl WindowCanvas { for mark in &mut self.marks { let command = match mark { - MarkRenderer::Texture(renderer) => { + MarkRenderer::Basic(renderer) => { if self.sample_count > 1 { renderer.render(&self.device, &self.multisampled_framebuffer, Some(&view)) } else { renderer.render(&self.device, &view, None) } } - MarkRenderer::TextureInstanced(renderer) => { + MarkRenderer::Instanced(renderer) => { if self.sample_count > 1 { renderer.render(&self.device, &self.multisampled_framebuffer, Some(&view)) } else { @@ -625,7 +625,7 @@ impl PngCanvas { for mark in &mut self.marks { let command = match mark { - MarkRenderer::Texture(renderer) => { + MarkRenderer::Basic(renderer) => { if self.sample_count > 1 { renderer.render( &self.device, @@ -636,7 +636,7 @@ impl PngCanvas { renderer.render(&self.device, &self.texture_view, None) } } - MarkRenderer::TextureInstanced(renderer) => { + MarkRenderer::Instanced(renderer) => { if self.sample_count > 1 { renderer.render( &self.device, diff --git a/sg2d-wgpu/src/marks/arc.rs b/sg2d-wgpu/src/marks/arc.rs index 18f516b..40239d6 100644 --- a/sg2d-wgpu/src/marks/arc.rs +++ b/sg2d-wgpu/src/marks/arc.rs @@ -1,7 +1,7 @@ use crate::canvas::CanvasDimensions; use crate::marks::gradient::to_color_or_gradient_coord; use crate::marks::rect::{build_gradients_image, GRADIENT_TEXTURE_HEIGHT, GRADIENT_TEXTURE_WIDTH}; -use crate::marks::texture_instanced_mark::{InstancedTextureMarkBatch, TextureInstancedMarkShader}; +use crate::marks::instanced_mark::{InstancedMarkBatch, InstancedMarkShader}; use itertools::izip; use sg2d::marks::arc::ArcMark; use std::f32::consts::TAU; @@ -146,7 +146,7 @@ pub struct ArcShader { indices: Vec, instances: Vec, uniform: ArcUniform, - batches: Vec, + batches: Vec, texture_size: Extent3d, shader: String, vertex_entry_point: String, @@ -156,7 +156,7 @@ pub struct ArcShader { impl ArcShader { pub fn from_arc_mark(mark: &ArcMark, dimensions: CanvasDimensions) -> Self { let (instances, img) = ArcInstance::from_spec(mark); - let batches = vec![InstancedTextureMarkBatch { + let batches = vec![InstancedMarkBatch { instances_range: 0..instances.len() as u32, image: image::DynamicImage::ImageRgba8(img), }]; @@ -192,7 +192,7 @@ impl ArcShader { } } -impl TextureInstancedMarkShader for ArcShader { +impl InstancedMarkShader for ArcShader { type Instance = ArcInstance; type Vertex = ArcVertex; type Uniform = ArcUniform; @@ -213,7 +213,7 @@ impl TextureInstancedMarkShader for ArcShader { self.uniform } - fn batches(&self) -> &[InstancedTextureMarkBatch] { + fn batches(&self) -> &[InstancedMarkBatch] { self.batches.as_slice() } diff --git a/sg2d-wgpu/src/marks/texture_mark.rs b/sg2d-wgpu/src/marks/basic_mark.rs similarity index 97% rename from sg2d-wgpu/src/marks/texture_mark.rs rename to sg2d-wgpu/src/marks/basic_mark.rs index eac818c..e94cba6 100644 --- a/sg2d-wgpu/src/marks/texture_mark.rs +++ b/sg2d-wgpu/src/marks/basic_mark.rs @@ -3,19 +3,19 @@ use wgpu::util::DeviceExt; use wgpu::{CommandBuffer, Device, Extent3d, ImageDataLayout, TextureFormat, TextureView}; #[derive(Clone)] -pub struct TextureMarkBatch { +pub struct BasicMarkBatch { pub indices_range: Range, pub image: image::DynamicImage, } -pub trait TextureMarkShader { +pub trait BasicMarkShader { type Vertex: bytemuck::Pod + bytemuck::Zeroable; type Uniform: bytemuck::Pod + bytemuck::Zeroable; fn verts(&self) -> &[Self::Vertex]; fn indices(&self) -> &[u16]; fn uniform(&self) -> Self::Uniform; - fn batches(&self) -> &[TextureMarkBatch]; + fn batches(&self) -> &[BasicMarkBatch]; fn texture_size(&self) -> Extent3d; fn shader(&self) -> &str; fn vertex_entry_point(&self) -> &str; @@ -33,23 +33,23 @@ pub trait TextureMarkShader { } } -pub struct TextureMarkRenderer { +pub struct BasicMarkRenderer { render_pipeline: wgpu::RenderPipeline, vertex_buffer: wgpu::Buffer, index_buffer: wgpu::Buffer, - batches: Vec, + batches: Vec, uniform_bind_group: wgpu::BindGroup, texture: wgpu::Texture, texture_size: wgpu::Extent3d, texture_bind_group: wgpu::BindGroup, } -impl TextureMarkRenderer { +impl BasicMarkRenderer { pub fn new( device: &Device, texture_format: TextureFormat, sample_count: u32, - mark_shader: Box>, + mark_shader: Box>, ) -> Self where V: bytemuck::Pod + bytemuck::Zeroable, diff --git a/sg2d-wgpu/src/marks/image.rs b/sg2d-wgpu/src/marks/image.rs index 30f1da4..4e13481 100644 --- a/sg2d-wgpu/src/marks/image.rs +++ b/sg2d-wgpu/src/marks/image.rs @@ -1,6 +1,6 @@ use crate::canvas::CanvasDimensions; use crate::error::Sg2dWgpuError; -use crate::marks::texture_mark::{TextureMarkBatch, TextureMarkShader}; +use crate::marks::basic_mark::{BasicMarkBatch, BasicMarkShader}; use etagere::Size; use itertools::izip; use sg2d::marks::image::ImageMark; @@ -54,7 +54,7 @@ pub struct ImageShader { shader: String, vertex_entry_point: String, fragment_entry_point: String, - batches: Vec, + batches: Vec, texture_size: Extent3d, mag_filter: wgpu::FilterMode, } @@ -66,7 +66,7 @@ impl ImageShader { ) -> Result { let mut verts: Vec = Vec::new(); let mut indices: Vec = Vec::new(); - let mut batches: Vec = Vec::new(); + let mut batches: Vec = Vec::new(); let aspect = mark.aspect; // Compute texture size @@ -105,7 +105,7 @@ impl ImageShader { None => { // Current allocator is full // Add previous batch - batches.push(TextureMarkBatch { + batches.push(BasicMarkBatch { indices_range: start_index..indices.len() as u32, image: image::DynamicImage::ImageRgba8(texture_image), }); @@ -232,7 +232,7 @@ impl ImageShader { indices.push(offset + 2); indices.push(offset + 3); } - batches.push(TextureMarkBatch { + batches.push(BasicMarkBatch { indices_range: start_index..indices.len() as u32, image: image::DynamicImage::ImageRgba8(texture_image), }); @@ -255,7 +255,7 @@ impl ImageShader { } } -impl TextureMarkShader for ImageShader { +impl BasicMarkShader for ImageShader { type Vertex = ImageVertex; type Uniform = ImageUniform; @@ -287,7 +287,7 @@ impl TextureMarkShader for ImageShader { ImageVertex::desc() } - fn batches(&self) -> &[TextureMarkBatch] { + fn batches(&self) -> &[BasicMarkBatch] { self.batches.as_slice() } diff --git a/sg2d-wgpu/src/marks/texture_instanced_mark.rs b/sg2d-wgpu/src/marks/instanced_mark.rs similarity index 97% rename from sg2d-wgpu/src/marks/texture_instanced_mark.rs rename to sg2d-wgpu/src/marks/instanced_mark.rs index f9467e1..b3cc7fb 100644 --- a/sg2d-wgpu/src/marks/texture_instanced_mark.rs +++ b/sg2d-wgpu/src/marks/instanced_mark.rs @@ -3,12 +3,12 @@ use wgpu::util::DeviceExt; use wgpu::{CommandBuffer, Device, Extent3d, ImageDataLayout, TextureFormat, TextureView}; #[derive(Clone)] -pub struct InstancedTextureMarkBatch { +pub struct InstancedMarkBatch { pub instances_range: Range, pub image: image::DynamicImage, } -pub trait TextureInstancedMarkShader { +pub trait InstancedMarkShader { type Instance: bytemuck::Pod + bytemuck::Zeroable; type Vertex: bytemuck::Pod + bytemuck::Zeroable; type Uniform: bytemuck::Pod + bytemuck::Zeroable; @@ -17,7 +17,7 @@ pub trait TextureInstancedMarkShader { fn indices(&self) -> &[u16]; fn instances(&self) -> &[Self::Instance]; fn uniform(&self) -> Self::Uniform; - fn batches(&self) -> &[InstancedTextureMarkBatch]; + fn batches(&self) -> &[InstancedMarkBatch]; fn texture_size(&self) -> Extent3d; fn shader(&self) -> &str; @@ -37,25 +37,25 @@ pub trait TextureInstancedMarkShader { } } -pub struct TextureInstancedMarkRenderer { +pub struct InstancedMarkRenderer { pub render_pipeline: wgpu::RenderPipeline, pub vertex_buffer: wgpu::Buffer, pub index_buffer: wgpu::Buffer, pub num_indices: u32, pub instance_buffer: wgpu::Buffer, - pub batches: Vec, + pub batches: Vec, pub uniform_bind_group: wgpu::BindGroup, pub texture: wgpu::Texture, pub texture_size: wgpu::Extent3d, pub texture_bind_group: wgpu::BindGroup, } -impl TextureInstancedMarkRenderer { +impl InstancedMarkRenderer { pub fn new( device: &Device, texture_format: TextureFormat, sample_count: u32, - mark_shader: Box>, + mark_shader: Box>, ) -> Self where I: bytemuck::Pod + bytemuck::Zeroable, diff --git a/sg2d-wgpu/src/marks/mod.rs b/sg2d-wgpu/src/marks/mod.rs index dbef087..8c2a183 100644 --- a/sg2d-wgpu/src/marks/mod.rs +++ b/sg2d-wgpu/src/marks/mod.rs @@ -6,5 +6,5 @@ pub mod rect; pub mod rule; pub mod symbol; pub mod text; -pub mod texture_instanced_mark; -pub mod texture_mark; +pub mod instanced_mark; +pub mod basic_mark; diff --git a/sg2d-wgpu/src/marks/path.rs b/sg2d-wgpu/src/marks/path.rs index 8ee70c5..0d55a5e 100644 --- a/sg2d-wgpu/src/marks/path.rs +++ b/sg2d-wgpu/src/marks/path.rs @@ -2,7 +2,7 @@ use crate::canvas::CanvasDimensions; use crate::error::Sg2dWgpuError; use crate::marks::gradient::to_color_or_gradient_coord; use crate::marks::rect::build_gradients_image; -use crate::marks::texture_mark::{TextureMarkBatch, TextureMarkShader}; +use crate::marks::basic_mark::{BasicMarkBatch, BasicMarkShader}; use itertools::izip; use lyon::algorithms::aabb::bounding_box; use lyon::algorithms::measure::{PathMeasurements, PathSampler, SampleType}; @@ -68,7 +68,7 @@ pub struct PathShader { verts: Vec, indices: Vec, uniform: PathUniform, - batches: Vec, + batches: Vec, shader: String, vertex_entry_point: String, fragment_entry_point: String, @@ -141,7 +141,7 @@ impl PathShader { verts, indices, uniform: PathUniform::new(dimensions), - batches: vec![TextureMarkBatch { + batches: vec![BasicMarkBatch { indices_range, image: image::DynamicImage::ImageRgba8(gradients_image), }], @@ -260,7 +260,7 @@ impl PathShader { verts: buffers.vertices, indices: buffers.indices, uniform: PathUniform::new(dimensions), - batches: vec![TextureMarkBatch { + batches: vec![BasicMarkBatch { indices_range, image: image::DynamicImage::ImageRgba8(gradients_image), }], @@ -398,7 +398,7 @@ impl PathShader { verts, indices, uniform: PathUniform::new(dimensions), - batches: vec![TextureMarkBatch { + batches: vec![BasicMarkBatch { indices_range, image: image::DynamicImage::ImageRgba8(gradients_image), }], @@ -474,7 +474,7 @@ impl PathShader { verts: buffers.vertices, indices: buffers.indices, uniform: PathUniform::new(dimensions), - batches: vec![TextureMarkBatch { + batches: vec![BasicMarkBatch { indices_range, image: image::DynamicImage::ImageRgba8(gradients_image), }], @@ -485,7 +485,7 @@ impl PathShader { } } -impl TextureMarkShader for PathShader { +impl BasicMarkShader for PathShader { type Vertex = PathVertex; type Uniform = PathUniform; @@ -501,7 +501,7 @@ impl TextureMarkShader for PathShader { self.uniform } - fn batches(&self) -> &[TextureMarkBatch] { + fn batches(&self) -> &[BasicMarkBatch] { self.batches.as_slice() } diff --git a/sg2d-wgpu/src/marks/rect.rs b/sg2d-wgpu/src/marks/rect.rs index b9f6696..42d714c 100644 --- a/sg2d-wgpu/src/marks/rect.rs +++ b/sg2d-wgpu/src/marks/rect.rs @@ -1,6 +1,6 @@ use crate::canvas::CanvasDimensions; use crate::marks::gradient::to_color_or_gradient_coord; -use crate::marks::texture_instanced_mark::{InstancedTextureMarkBatch, TextureInstancedMarkShader}; +use crate::marks::instanced_mark::{InstancedMarkBatch, InstancedMarkShader}; use colorgrad::Color; use image::Rgba; use itertools::izip; @@ -203,7 +203,7 @@ pub struct RectShader { indices: Vec, instances: Vec, uniform: RectUniform, - batches: Vec, + batches: Vec, texture_size: Extent3d, shader: String, vertex_entry_point: String, @@ -214,7 +214,7 @@ impl RectShader { pub fn from_rect_mark(mark: &RectMark, dimensions: CanvasDimensions) -> Self { let (instances, img) = RectInstance::from_spec(mark); - let batches = vec![InstancedTextureMarkBatch { + let batches = vec![InstancedMarkBatch { instances_range: 0..instances.len() as u32, image: image::DynamicImage::ImageRgba8(img), }]; @@ -250,7 +250,7 @@ impl RectShader { } } -impl TextureInstancedMarkShader for RectShader { +impl InstancedMarkShader for RectShader { type Instance = RectInstance; type Vertex = RectVertex; type Uniform = RectUniform; @@ -271,7 +271,7 @@ impl TextureInstancedMarkShader for RectShader { self.uniform } - fn batches(&self) -> &[InstancedTextureMarkBatch] { + fn batches(&self) -> &[InstancedMarkBatch] { self.batches.as_slice() } diff --git a/sg2d-wgpu/src/marks/rule.rs b/sg2d-wgpu/src/marks/rule.rs index 46787c2..2ea22c1 100644 --- a/sg2d-wgpu/src/marks/rule.rs +++ b/sg2d-wgpu/src/marks/rule.rs @@ -1,7 +1,7 @@ use crate::canvas::CanvasDimensions; use crate::marks::gradient::to_color_or_gradient_coord; use crate::marks::rect::{build_gradients_image, GRADIENT_TEXTURE_HEIGHT, GRADIENT_TEXTURE_WIDTH}; -use crate::marks::texture_instanced_mark::{InstancedTextureMarkBatch, TextureInstancedMarkShader}; +use crate::marks::instanced_mark::{InstancedMarkBatch, InstancedMarkShader}; use itertools::izip; use sg2d::marks::rule::RuleMark; use sg2d::marks::value::StrokeCap; @@ -182,7 +182,7 @@ pub struct RuleShader { indices: Vec, instances: Vec, uniform: RuleUniform, - batches: Vec, + batches: Vec, texture_size: Extent3d, shader: String, vertex_entry_point: String, @@ -192,7 +192,7 @@ pub struct RuleShader { impl RuleShader { pub fn from_rule_mark(mark: &RuleMark, dimensions: CanvasDimensions) -> Self { let (instances, gradient_image) = RuleInstance::from_spec(mark); - let batches = vec![InstancedTextureMarkBatch { + let batches = vec![InstancedMarkBatch { instances_range: 0..instances.len() as u32, image: image::DynamicImage::ImageRgba8(gradient_image), }]; @@ -227,7 +227,7 @@ impl RuleShader { } } -impl TextureInstancedMarkShader for RuleShader { +impl InstancedMarkShader for RuleShader { type Instance = RuleInstance; type Vertex = RuleVertex; type Uniform = RuleUniform; @@ -248,7 +248,7 @@ impl TextureInstancedMarkShader for RuleShader { self.uniform } - fn batches(&self) -> &[InstancedTextureMarkBatch] { + fn batches(&self) -> &[InstancedMarkBatch] { self.batches.as_slice() } diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index 836a4ce..5da425b 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -2,7 +2,7 @@ use crate::canvas::CanvasDimensions; use crate::error::Sg2dWgpuError; use crate::marks::gradient::to_color_or_gradient_coord; use crate::marks::rect::{build_gradients_image, GRADIENT_TEXTURE_HEIGHT, GRADIENT_TEXTURE_WIDTH}; -use crate::marks::texture_instanced_mark::{InstancedTextureMarkBatch, TextureInstancedMarkShader}; +use crate::marks::instanced_mark::{InstancedMarkBatch, InstancedMarkShader}; use itertools::izip; use lyon::lyon_tessellation::{ BuffersBuilder, FillVertex, FillVertexConstructor, StrokeVertex, StrokeVertexConstructor, @@ -119,7 +119,7 @@ pub struct SymbolShader { indices: Vec, instances: Vec, uniform: SymbolUniform, - batches: Vec, + batches: Vec, texture_size: Extent3d, shader: String, vertex_entry_point: String, @@ -199,7 +199,7 @@ impl SymbolShader { } } let (instances, img) = SymbolInstance::from_spec(mark); - let batches = vec![InstancedTextureMarkBatch { + let batches = vec![InstancedMarkBatch { instances_range: 0..instances.len() as u32, image: image::DynamicImage::ImageRgba8(img), }]; @@ -221,7 +221,7 @@ impl SymbolShader { } } -impl TextureInstancedMarkShader for SymbolShader { +impl InstancedMarkShader for SymbolShader { type Instance = SymbolInstance; type Vertex = SymbolVertex; type Uniform = SymbolUniform; @@ -242,7 +242,7 @@ impl TextureInstancedMarkShader for SymbolShader { self.uniform } - fn batches(&self) -> &[InstancedTextureMarkBatch] { + fn batches(&self) -> &[InstancedMarkBatch] { self.batches.as_slice() } From 338debff883f6a73ba6ec634d016372d8cb82602 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 26 Jan 2024 20:28:19 -0500 Subject: [PATCH 22/27] Fix image smooth --- sg2d-wgpu/src/canvas.rs | 60 ++++++++++++--------------- sg2d-wgpu/src/marks/arc.rs | 2 +- sg2d-wgpu/src/marks/basic_mark.rs | 10 ----- sg2d-wgpu/src/marks/image.rs | 20 +++------ sg2d-wgpu/src/marks/image.wgsl | 8 +++- sg2d-wgpu/src/marks/instanced_mark.rs | 10 ----- sg2d-wgpu/src/marks/mod.rs | 4 +- sg2d-wgpu/src/marks/path.rs | 2 +- sg2d-wgpu/src/marks/rule.rs | 2 +- sg2d-wgpu/src/marks/symbol.rs | 2 +- 10 files changed, 43 insertions(+), 77 deletions(-) diff --git a/sg2d-wgpu/src/canvas.rs b/sg2d-wgpu/src/canvas.rs index 78be383..01dec8f 100644 --- a/sg2d-wgpu/src/canvas.rs +++ b/sg2d-wgpu/src/canvas.rs @@ -14,14 +14,14 @@ use winit::window::Window; use crate::error::Sg2dWgpuError; use crate::marks::arc::ArcShader; +use crate::marks::basic_mark::BasicMarkRenderer; use crate::marks::image::ImageShader; +use crate::marks::instanced_mark::InstancedMarkRenderer; use crate::marks::path::PathShader; use crate::marks::rect::RectShader; use crate::marks::rule::RuleShader; use crate::marks::symbol::SymbolShader; use crate::marks::text::TextMarkRenderer; -use crate::marks::instanced_mark::InstancedMarkRenderer; -use crate::marks::basic_mark::BasicMarkRenderer; use sg2d::marks::arc::ArcMark; use sg2d::marks::area::AreaMark; use sg2d::marks::image::ImageMark; @@ -74,14 +74,12 @@ pub trait Canvas { fn sample_count(&self) -> u32; fn add_arc_mark(&mut self, mark: &ArcMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Instanced( - InstancedMarkRenderer::new( - self.device(), - self.texture_format(), - self.sample_count(), - Box::new(ArcShader::from_arc_mark(mark, self.dimensions())), - ), - )); + self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( + self.device(), + self.texture_format(), + self.sample_count(), + Box::new(ArcShader::from_arc_mark(mark, self.dimensions())), + ))); Ok(()) } @@ -126,38 +124,32 @@ pub trait Canvas { } fn add_symbol_mark(&mut self, mark: &SymbolMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Instanced( - InstancedMarkRenderer::new( - self.device(), - self.texture_format(), - self.sample_count(), - Box::new(SymbolShader::from_symbol_mark(mark, self.dimensions())?), - ), - )); + self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( + self.device(), + self.texture_format(), + self.sample_count(), + Box::new(SymbolShader::from_symbol_mark(mark, self.dimensions())?), + ))); Ok(()) } fn add_rect_mark(&mut self, mark: &RectMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Instanced( - InstancedMarkRenderer::new( - self.device(), - self.texture_format(), - self.sample_count(), - Box::new(RectShader::from_rect_mark(mark, self.dimensions())), - ), - )); + self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( + self.device(), + self.texture_format(), + self.sample_count(), + Box::new(RectShader::from_rect_mark(mark, self.dimensions())), + ))); Ok(()) } fn add_rule_mark(&mut self, mark: &RuleMark) -> Result<(), Sg2dWgpuError> { - self.add_mark_renderer(MarkRenderer::Instanced( - InstancedMarkRenderer::new( - self.device(), - self.texture_format(), - self.sample_count(), - Box::new(RuleShader::from_rule_mark(mark, self.dimensions())), - ), - )); + self.add_mark_renderer(MarkRenderer::Instanced(InstancedMarkRenderer::new( + self.device(), + self.texture_format(), + self.sample_count(), + Box::new(RuleShader::from_rule_mark(mark, self.dimensions())), + ))); Ok(()) } diff --git a/sg2d-wgpu/src/marks/arc.rs b/sg2d-wgpu/src/marks/arc.rs index 40239d6..7f9732f 100644 --- a/sg2d-wgpu/src/marks/arc.rs +++ b/sg2d-wgpu/src/marks/arc.rs @@ -1,7 +1,7 @@ use crate::canvas::CanvasDimensions; use crate::marks::gradient::to_color_or_gradient_coord; -use crate::marks::rect::{build_gradients_image, GRADIENT_TEXTURE_HEIGHT, GRADIENT_TEXTURE_WIDTH}; use crate::marks::instanced_mark::{InstancedMarkBatch, InstancedMarkShader}; +use crate::marks::rect::{build_gradients_image, GRADIENT_TEXTURE_HEIGHT, GRADIENT_TEXTURE_WIDTH}; use itertools::izip; use sg2d::marks::arc::ArcMark; use std::f32::consts::TAU; diff --git a/sg2d-wgpu/src/marks/basic_mark.rs b/sg2d-wgpu/src/marks/basic_mark.rs index e94cba6..cb62385 100644 --- a/sg2d-wgpu/src/marks/basic_mark.rs +++ b/sg2d-wgpu/src/marks/basic_mark.rs @@ -21,16 +21,6 @@ pub trait BasicMarkShader { fn vertex_entry_point(&self) -> &str; fn fragment_entry_point(&self) -> &str; fn vertex_desc(&self) -> wgpu::VertexBufferLayout<'static>; - - fn mag_filter(&self) -> wgpu::FilterMode { - wgpu::FilterMode::Linear - } - fn min_filter(&self) -> wgpu::FilterMode { - wgpu::FilterMode::Nearest - } - fn mipmap_filter(&self) -> wgpu::FilterMode { - wgpu::FilterMode::Nearest - } } pub struct BasicMarkRenderer { diff --git a/sg2d-wgpu/src/marks/image.rs b/sg2d-wgpu/src/marks/image.rs index 4e13481..fd27d5e 100644 --- a/sg2d-wgpu/src/marks/image.rs +++ b/sg2d-wgpu/src/marks/image.rs @@ -5,22 +5,22 @@ use etagere::Size; use itertools::izip; use sg2d::marks::image::ImageMark; use sg2d::marks::value::{ImageAlign, ImageBaseline}; -use wgpu::{Extent3d, FilterMode, VertexBufferLayout}; +use wgpu::{Extent3d, VertexBufferLayout}; #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] pub struct ImageUniform { pub size: [f32; 2], pub scale: f32, - _pad: [f32; 1], // Pad to 16 bytes + pub smooth: f32, } impl ImageUniform { - pub fn new(dimensions: CanvasDimensions) -> Self { + pub fn new(dimensions: CanvasDimensions, smooth: bool) -> Self { Self { size: dimensions.size, scale: dimensions.scale, - _pad: [0.0], + smooth: if smooth { 1.0 } else { 0.0 }, } } } @@ -56,7 +56,6 @@ pub struct ImageShader { fragment_entry_point: String, batches: Vec, texture_size: Extent3d, - mag_filter: wgpu::FilterMode, } impl ImageShader { @@ -240,17 +239,12 @@ impl ImageShader { Ok(Self { verts, indices, - uniform: ImageUniform::new(dimensions), + uniform: ImageUniform::new(dimensions, mark.smooth), batches, texture_size, shader: include_str!("image.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), - mag_filter: if mark.smooth { - wgpu::FilterMode::Linear - } else { - wgpu::FilterMode::Nearest - }, }) } } @@ -294,8 +288,4 @@ impl BasicMarkShader for ImageShader { fn texture_size(&self) -> Extent3d { self.texture_size } - - fn mag_filter(&self) -> FilterMode { - self.mag_filter - } } diff --git a/sg2d-wgpu/src/marks/image.wgsl b/sg2d-wgpu/src/marks/image.wgsl index ee93ba6..ce9fa2a 100644 --- a/sg2d-wgpu/src/marks/image.wgsl +++ b/sg2d-wgpu/src/marks/image.wgsl @@ -1,7 +1,7 @@ struct ChartUniform { size: vec2, scale: f32, - _pad: f32, // for 16 byte alignment + smooth_: f32, }; @group(0) @binding(0) @@ -41,5 +41,9 @@ var nearest_sampler: sampler; @fragment fn fs_main(in: VertexOutput) -> @location(0) vec4 { - return textureSample(texture_atlas, linear_sampler, in.tex_coords); + if (chart_uniforms.smooth_ == 1.0) { + return textureSample(texture_atlas, linear_sampler, in.tex_coords); + } else { + return textureSample(texture_atlas, nearest_sampler, in.tex_coords); + } } diff --git a/sg2d-wgpu/src/marks/instanced_mark.rs b/sg2d-wgpu/src/marks/instanced_mark.rs index b3cc7fb..5523547 100644 --- a/sg2d-wgpu/src/marks/instanced_mark.rs +++ b/sg2d-wgpu/src/marks/instanced_mark.rs @@ -25,16 +25,6 @@ pub trait InstancedMarkShader { fn fragment_entry_point(&self) -> &str; fn instance_desc(&self) -> wgpu::VertexBufferLayout<'static>; fn vertex_desc(&self) -> wgpu::VertexBufferLayout<'static>; - - fn mag_filter(&self) -> wgpu::FilterMode { - wgpu::FilterMode::Linear - } - fn min_filter(&self) -> wgpu::FilterMode { - wgpu::FilterMode::Nearest - } - fn mipmap_filter(&self) -> wgpu::FilterMode { - wgpu::FilterMode::Nearest - } } pub struct InstancedMarkRenderer { diff --git a/sg2d-wgpu/src/marks/mod.rs b/sg2d-wgpu/src/marks/mod.rs index 8c2a183..bd56aae 100644 --- a/sg2d-wgpu/src/marks/mod.rs +++ b/sg2d-wgpu/src/marks/mod.rs @@ -1,10 +1,10 @@ pub mod arc; +pub mod basic_mark; pub mod gradient; pub mod image; +pub mod instanced_mark; pub mod path; pub mod rect; pub mod rule; pub mod symbol; pub mod text; -pub mod instanced_mark; -pub mod basic_mark; diff --git a/sg2d-wgpu/src/marks/path.rs b/sg2d-wgpu/src/marks/path.rs index 0d55a5e..ee85f45 100644 --- a/sg2d-wgpu/src/marks/path.rs +++ b/sg2d-wgpu/src/marks/path.rs @@ -1,8 +1,8 @@ use crate::canvas::CanvasDimensions; use crate::error::Sg2dWgpuError; +use crate::marks::basic_mark::{BasicMarkBatch, BasicMarkShader}; use crate::marks::gradient::to_color_or_gradient_coord; use crate::marks::rect::build_gradients_image; -use crate::marks::basic_mark::{BasicMarkBatch, BasicMarkShader}; use itertools::izip; use lyon::algorithms::aabb::bounding_box; use lyon::algorithms::measure::{PathMeasurements, PathSampler, SampleType}; diff --git a/sg2d-wgpu/src/marks/rule.rs b/sg2d-wgpu/src/marks/rule.rs index 2ea22c1..fe1018c 100644 --- a/sg2d-wgpu/src/marks/rule.rs +++ b/sg2d-wgpu/src/marks/rule.rs @@ -1,7 +1,7 @@ use crate::canvas::CanvasDimensions; use crate::marks::gradient::to_color_or_gradient_coord; -use crate::marks::rect::{build_gradients_image, GRADIENT_TEXTURE_HEIGHT, GRADIENT_TEXTURE_WIDTH}; use crate::marks::instanced_mark::{InstancedMarkBatch, InstancedMarkShader}; +use crate::marks::rect::{build_gradients_image, GRADIENT_TEXTURE_HEIGHT, GRADIENT_TEXTURE_WIDTH}; use itertools::izip; use sg2d::marks::rule::RuleMark; use sg2d::marks::value::StrokeCap; diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index 5da425b..100c98e 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -1,8 +1,8 @@ use crate::canvas::CanvasDimensions; use crate::error::Sg2dWgpuError; use crate::marks::gradient::to_color_or_gradient_coord; -use crate::marks::rect::{build_gradients_image, GRADIENT_TEXTURE_HEIGHT, GRADIENT_TEXTURE_WIDTH}; use crate::marks::instanced_mark::{InstancedMarkBatch, InstancedMarkShader}; +use crate::marks::rect::{build_gradients_image, GRADIENT_TEXTURE_HEIGHT, GRADIENT_TEXTURE_WIDTH}; use itertools::izip; use lyon::lyon_tessellation::{ BuffersBuilder, FillVertex, FillVertexConstructor, StrokeVertex, StrokeVertexConstructor, From 71c7fc4467326846362e251cac0e05197a0ea9f8 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 27 Jan 2024 08:52:44 -0500 Subject: [PATCH 23/27] Size gradient texture dynamically, and don't write it if there are no gradients --- sg2d-wgpu/src/marks/arc.rs | 23 ++--- sg2d-wgpu/src/marks/basic_mark.rs | 47 ++++----- sg2d-wgpu/src/marks/gradient.rs | 125 ++++++++++++++++++++++-- sg2d-wgpu/src/marks/image.rs | 4 +- sg2d-wgpu/src/marks/instanced_mark.rs | 46 ++++----- sg2d-wgpu/src/marks/path.rs | 43 ++++---- sg2d-wgpu/src/marks/rect.rs | 122 +++-------------------- sg2d-wgpu/src/marks/rule.rs | 24 ++--- sg2d-wgpu/src/marks/symbol.rs | 25 +++-- sg2d-wgpu/tests/test_image_baselines.rs | 1 + 10 files changed, 234 insertions(+), 226 deletions(-) diff --git a/sg2d-wgpu/src/marks/arc.rs b/sg2d-wgpu/src/marks/arc.rs index 7f9732f..7dc6e67 100644 --- a/sg2d-wgpu/src/marks/arc.rs +++ b/sg2d-wgpu/src/marks/arc.rs @@ -1,7 +1,6 @@ use crate::canvas::CanvasDimensions; -use crate::marks::gradient::to_color_or_gradient_coord; +use crate::marks::gradient::{build_gradients_image, to_color_or_gradient_coord}; use crate::marks::instanced_mark::{InstancedMarkBatch, InstancedMarkShader}; -use crate::marks::rect::{build_gradients_image, GRADIENT_TEXTURE_HEIGHT, GRADIENT_TEXTURE_WIDTH}; use itertools::izip; use sg2d::marks::arc::ArcMark; use std::f32::consts::TAU; @@ -77,9 +76,9 @@ const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 10] = wgpu::vertex_attr_array ]; impl ArcInstance { - pub fn from_spec(mark: &ArcMark) -> (Vec, image::RgbaImage) { + pub fn from_spec(mark: &ArcMark) -> (Vec, Option, Extent3d) { let mut instances: Vec = Vec::new(); - let img = build_gradients_image(&mark.gradients); + let (img, texture_size) = build_gradients_image(&mark.gradients); for ( x, @@ -131,13 +130,13 @@ impl ArcInstance { inner_radius: inner_radius.min(*outer_radius), pad_angle: *pad_angle, corner_radius: *corner_radius, - fill: to_color_or_gradient_coord(fill), - stroke: to_color_or_gradient_coord(stroke), + fill: to_color_or_gradient_coord(fill, texture_size), + stroke: to_color_or_gradient_coord(stroke, texture_size), stroke_width: *stroke_width, }); } - (instances, img) + (instances, img, texture_size) } } @@ -155,10 +154,10 @@ pub struct ArcShader { impl ArcShader { pub fn from_arc_mark(mark: &ArcMark, dimensions: CanvasDimensions) -> Self { - let (instances, img) = ArcInstance::from_spec(mark); + let (instances, img, texture_size) = ArcInstance::from_spec(mark); let batches = vec![InstancedMarkBatch { instances_range: 0..instances.len() as u32, - image: image::DynamicImage::ImageRgba8(img), + image: img, }]; Self { @@ -180,11 +179,7 @@ impl ArcShader { instances, uniform: ArcUniform::new(dimensions), batches, - texture_size: Extent3d { - width: GRADIENT_TEXTURE_WIDTH, - height: GRADIENT_TEXTURE_HEIGHT, - depth_or_array_layers: 1, - }, + texture_size, shader: include_str!("arc.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), diff --git a/sg2d-wgpu/src/marks/basic_mark.rs b/sg2d-wgpu/src/marks/basic_mark.rs index cb62385..c292b1e 100644 --- a/sg2d-wgpu/src/marks/basic_mark.rs +++ b/sg2d-wgpu/src/marks/basic_mark.rs @@ -5,7 +5,7 @@ use wgpu::{CommandBuffer, Device, Extent3d, ImageDataLayout, TextureFormat, Text #[derive(Clone)] pub struct BasicMarkBatch { pub indices_range: Range, - pub image: image::DynamicImage, + pub image: Option, } pub trait BasicMarkShader { @@ -243,28 +243,31 @@ impl BasicMarkRenderer { }); for batch in self.batches.iter() { - let temp_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("Temp Buffer"), - contents: batch.image.to_rgba8().as_raw(), - usage: wgpu::BufferUsages::COPY_SRC, - }); - mark_encoder.copy_buffer_to_texture( - wgpu::ImageCopyBuffer { - buffer: &temp_buffer, - layout: ImageDataLayout { - offset: 0, - bytes_per_row: Some(4 * self.texture_size.width), - rows_per_image: Some(self.texture_size.height), + // Write image to texture + if let Some(img) = &batch.image { + let temp_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { + label: Some("Temp Buffer"), + contents: img.to_rgba8().as_raw(), + usage: wgpu::BufferUsages::COPY_SRC, + }); + mark_encoder.copy_buffer_to_texture( + wgpu::ImageCopyBuffer { + buffer: &temp_buffer, + layout: ImageDataLayout { + offset: 0, + bytes_per_row: Some(4 * self.texture_size.width), + rows_per_image: Some(self.texture_size.height), + }, }, - }, - wgpu::ImageCopyTexture { - texture: &self.texture, - mip_level: 0, - origin: wgpu::Origin3d::ZERO, - aspect: wgpu::TextureAspect::All, - }, - self.texture_size, - ); + wgpu::ImageCopyTexture { + texture: &self.texture, + mip_level: 0, + origin: wgpu::Origin3d::ZERO, + aspect: wgpu::TextureAspect::All, + }, + self.texture_size, + ); + } { let mut render_pass = mark_encoder.begin_render_pass(&wgpu::RenderPassDescriptor { diff --git a/sg2d-wgpu/src/marks/gradient.rs b/sg2d-wgpu/src/marks/gradient.rs index 837e48b..53b74b6 100644 --- a/sg2d-wgpu/src/marks/gradient.rs +++ b/sg2d-wgpu/src/marks/gradient.rs @@ -1,7 +1,15 @@ -use crate::marks::rect::GRADIENT_TEXTURE_HEIGHT; -use sg2d::marks::value::ColorOrGradient; +use crate::marks::rect::{ + COLORWAY_LENGTH, GRADIENT_LINEAR, GRADIENT_RADIAL, GRADIENT_TEXTURE_WIDTH, +}; +use colorgrad::Color; +use image::{DynamicImage, Rgba}; +use sg2d::marks::value::{ColorOrGradient, Gradient}; +use wgpu::Extent3d; -pub fn to_color_or_gradient_coord(color_or_gradient: &ColorOrGradient) -> [f32; 4] { +pub fn to_color_or_gradient_coord( + color_or_gradient: &ColorOrGradient, + texture_size: Extent3d, +) -> [f32; 4] { match color_or_gradient { ColorOrGradient::Color(c) => *c, ColorOrGradient::GradientIndex(grad_idx) => { @@ -9,10 +17,115 @@ pub fn to_color_or_gradient_coord(color_or_gradient: &ColorOrGradient) -> [f32; // y-coordinate 0. This results in 128 gradients stored in a 256x256 texture. To // avoid interpolation artifacts, we compute the texture coordinate as the // position between the two rows - let num_gradient_rows = GRADIENT_TEXTURE_HEIGHT as f32 / 2.0; - let grad_coord = (*grad_idx as f32 / num_gradient_rows) - + 1.0 / (GRADIENT_TEXTURE_HEIGHT as f32 * 2.0); + let num_gradient_rows = texture_size.height as f32 / 2.0; + let grad_coord = + (*grad_idx as f32 / num_gradient_rows) + 1.0 / (texture_size.height as f32 * 2.0); [-grad_coord, 0.0, 0.0, 0.0] } } } + +pub fn build_gradients_image(gradients: &[Gradient]) -> (Option, Extent3d) { + if gradients.is_empty() { + return (None, Extent3d::default()); + } + + // Write gradients + let limits = wgpu::Limits::downlevel_webgl2_defaults(); + assert!( + gradients.len() < (limits.max_texture_dimension_2d / 2) as usize, + "Exceeded max number of unique gradients" + ); + + let texture_size = Extent3d { + width: GRADIENT_TEXTURE_WIDTH, + height: (gradients.len() * 2) as u32, + depth_or_array_layers: 1, + }; + + let mut img = image::RgbaImage::new(texture_size.width, texture_size.height); + for (pos, grad) in gradients.iter().enumerate() { + let row0 = (pos * 2) as u32; + + // Build gradient colorway using colorgrad + let s = grad.stops(); + let mut binding = colorgrad::CustomGradient::new(); + let offsets = s.iter().map(|stop| stop.offset as f64).collect::>(); + let colors = s + .iter() + .map(|stop| { + Color::new( + stop.color[0] as f64, + stop.color[1] as f64, + stop.color[2] as f64, + stop.color[3] as f64, + ) + }) + .collect::>(); + + let builder = binding.domain(offsets.as_slice()).colors(colors.as_slice()); + let b = builder.build().unwrap(); + + // Fill leading pixels with start color so that linear interpolation doesn't pick + // up the empty pixels between control pixels and gradient pixels + let start_color = Rgba::from(b.at(0.0).to_rgba8()); + let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; + for i in 0..col_offset { + img.put_pixel(i, row0, start_color); + img.put_pixel(i, row0 + 1, start_color); + } + + // Store 250-bin colorway in pixels 6 through 255 + for i in 0..COLORWAY_LENGTH { + let p = (i as f64) / (COLORWAY_LENGTH as f64 - 1.0); + let c = b.at(p).to_rgba8(); + + // Write color to row0 and row0 + 1 + img.put_pixel(i + col_offset, row0, Rgba::from(c)); + img.put_pixel(i + col_offset, row0 + 1, Rgba::from(c)); + } + + // We encode the gradient control points in the first two or three pixels of the texture + match grad { + Gradient::LinearGradient(grad) => { + // Write gradient type to column 0 + let control_color0 = Rgba::from([(GRADIENT_LINEAR * 255.0) as u8, 0, 0, 0]); + img.put_pixel(0, row0, control_color0); + img.put_pixel(0, row0 + 1, control_color0); + + // Write x/y control points to column 1 + let control_color1 = Rgba::from([ + (grad.x0 * 255.0) as u8, + (grad.y0 * 255.0) as u8, + (grad.x1 * 255.0) as u8, + (grad.y1 * 255.0) as u8, + ]); + img.put_pixel(1, row0, control_color1); + img.put_pixel(1, row0 + 1, control_color1); + } + Gradient::RadialGradient(grad) => { + // Write gradient type to column 0 + let control_color0 = Rgba::from([(GRADIENT_RADIAL * 255.0) as u8, 0, 0, 0]); + img.put_pixel(0, row0, control_color0); + img.put_pixel(0, row0 + 1, control_color0); + + // Write x/y control points to column 1 + let control_color1 = Rgba::from([ + (grad.x0 * 255.0) as u8, + (grad.y0 * 255.0) as u8, + (grad.x1 * 255.0) as u8, + (grad.y1 * 255.0) as u8, + ]); + img.put_pixel(1, row0, control_color1); + img.put_pixel(1, row0 + 1, control_color1); + + // Write radius control points to column 2 + let control_color2 = + Rgba::from([(grad.r0 * 255.0) as u8, (grad.r1 * 255.0) as u8, 0, 0]); + img.put_pixel(2, row0, control_color2); + img.put_pixel(2, row0 + 1, control_color2); + } + }; + } + (Some(DynamicImage::ImageRgba8(img)), texture_size) +} diff --git a/sg2d-wgpu/src/marks/image.rs b/sg2d-wgpu/src/marks/image.rs index fd27d5e..9e4ffda 100644 --- a/sg2d-wgpu/src/marks/image.rs +++ b/sg2d-wgpu/src/marks/image.rs @@ -106,7 +106,7 @@ impl ImageShader { // Add previous batch batches.push(BasicMarkBatch { indices_range: start_index..indices.len() as u32, - image: image::DynamicImage::ImageRgba8(texture_image), + image: Some(image::DynamicImage::ImageRgba8(texture_image)), }); // create new allocator, new texture image, new batch @@ -233,7 +233,7 @@ impl ImageShader { } batches.push(BasicMarkBatch { indices_range: start_index..indices.len() as u32, - image: image::DynamicImage::ImageRgba8(texture_image), + image: Some(image::DynamicImage::ImageRgba8(texture_image)), }); Ok(Self { diff --git a/sg2d-wgpu/src/marks/instanced_mark.rs b/sg2d-wgpu/src/marks/instanced_mark.rs index 5523547..53cc83d 100644 --- a/sg2d-wgpu/src/marks/instanced_mark.rs +++ b/sg2d-wgpu/src/marks/instanced_mark.rs @@ -5,7 +5,7 @@ use wgpu::{CommandBuffer, Device, Extent3d, ImageDataLayout, TextureFormat, Text #[derive(Clone)] pub struct InstancedMarkBatch { pub instances_range: Range, - pub image: image::DynamicImage, + pub image: Option, } pub trait InstancedMarkShader { @@ -259,28 +259,30 @@ impl InstancedMarkRenderer { }); for batch in self.batches.iter() { - let temp_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("Temp Buffer"), - contents: batch.image.to_rgba8().as_raw(), - usage: wgpu::BufferUsages::COPY_SRC, - }); - mark_encoder.copy_buffer_to_texture( - wgpu::ImageCopyBuffer { - buffer: &temp_buffer, - layout: ImageDataLayout { - offset: 0, - bytes_per_row: Some(4 * self.texture_size.width), - rows_per_image: Some(self.texture_size.height), + if let Some(img) = &batch.image { + let temp_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { + label: Some("Temp Buffer"), + contents: img.to_rgba8().as_raw(), + usage: wgpu::BufferUsages::COPY_SRC, + }); + mark_encoder.copy_buffer_to_texture( + wgpu::ImageCopyBuffer { + buffer: &temp_buffer, + layout: ImageDataLayout { + offset: 0, + bytes_per_row: Some(4 * self.texture_size.width), + rows_per_image: Some(self.texture_size.height), + }, }, - }, - wgpu::ImageCopyTexture { - texture: &self.texture, - mip_level: 0, - origin: wgpu::Origin3d::ZERO, - aspect: wgpu::TextureAspect::All, - }, - self.texture_size, - ); + wgpu::ImageCopyTexture { + texture: &self.texture, + mip_level: 0, + origin: wgpu::Origin3d::ZERO, + aspect: wgpu::TextureAspect::All, + }, + self.texture_size, + ); + } { let mut render_pass = mark_encoder.begin_render_pass(&wgpu::RenderPassDescriptor { diff --git a/sg2d-wgpu/src/marks/path.rs b/sg2d-wgpu/src/marks/path.rs index ee85f45..e64eefe 100644 --- a/sg2d-wgpu/src/marks/path.rs +++ b/sg2d-wgpu/src/marks/path.rs @@ -1,8 +1,7 @@ use crate::canvas::CanvasDimensions; use crate::error::Sg2dWgpuError; use crate::marks::basic_mark::{BasicMarkBatch, BasicMarkShader}; -use crate::marks::gradient::to_color_or_gradient_coord; -use crate::marks::rect::build_gradients_image; +use crate::marks::gradient::{build_gradients_image, to_color_or_gradient_coord}; use itertools::izip; use lyon::algorithms::aabb::bounding_box; use lyon::algorithms::measure::{PathMeasurements, PathSampler, SampleType}; @@ -69,6 +68,7 @@ pub struct PathShader { indices: Vec, uniform: PathUniform, batches: Vec, + texture_size: Extent3d, shader: String, vertex_entry_point: String, fragment_entry_point: String, @@ -79,7 +79,8 @@ impl PathShader { mark: &PathMark, dimensions: CanvasDimensions, ) -> Result { - let gradients_image = build_gradients_image(&mark.gradients); + let (gradients_image, texture_size) = build_gradients_image(&mark.gradients); + let mut verts: Vec = Vec::new(); let mut indices: Vec = Vec::new(); @@ -99,8 +100,8 @@ impl PathShader { let mut builder = BuffersBuilder::new( &mut buffers, VertexPositions { - fill: to_color_or_gradient_coord(fill), - stroke: to_color_or_gradient_coord(stroke), + fill: to_color_or_gradient_coord(fill, texture_size), + stroke: to_color_or_gradient_coord(stroke, texture_size), top_left: bbox.min.to_array(), bottom_right: bbox.max.to_array(), }, @@ -143,8 +144,9 @@ impl PathShader { uniform: PathUniform::new(dimensions), batches: vec![BasicMarkBatch { indices_range, - image: image::DynamicImage::ImageRgba8(gradients_image), + image: gradients_image, }], + texture_size, shader: include_str!("path.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -156,7 +158,7 @@ impl PathShader { dimensions: CanvasDimensions, ) -> Result { // Handle gradients: - let gradients_image = build_gradients_image(&mark.gradients); + let (gradients_image, texture_size) = build_gradients_image(&mark.gradients); let mut path_builder = lyon::path::Path::builder().with_svg(); let mut tail: Vec<(f32, f32)> = Vec::new(); @@ -224,8 +226,8 @@ impl PathShader { let mut buffers_builder = BuffersBuilder::new( &mut buffers, VertexPositions { - fill: to_color_or_gradient_coord(&mark.fill), - stroke: to_color_or_gradient_coord(&mark.stroke), + fill: to_color_or_gradient_coord(&mark.fill, texture_size), + stroke: to_color_or_gradient_coord(&mark.stroke, texture_size), top_left: bbox.min.to_array(), bottom_right: bbox.max.to_array(), }, @@ -262,8 +264,9 @@ impl PathShader { uniform: PathUniform::new(dimensions), batches: vec![BasicMarkBatch { indices_range, - image: image::DynamicImage::ImageRgba8(gradients_image), + image: gradients_image, }], + texture_size, shader: include_str!("path.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -274,7 +277,7 @@ impl PathShader { mark: &LineMark, dimensions: CanvasDimensions, ) -> Result { - let gradients_image = build_gradients_image(&mark.gradients); + let (gradients_image, texture_size) = build_gradients_image(&mark.gradients); let mut defined_paths: Vec = Vec::new(); // Build path for each defined line segment @@ -365,7 +368,7 @@ impl PathShader { &mut buffers, VertexPositions { fill: [0.0, 0.0, 0.0, 0.0], - stroke: to_color_or_gradient_coord(&mark.stroke), + stroke: to_color_or_gradient_coord(&mark.stroke, texture_size), top_left: bbox.min.to_array(), bottom_right: bbox.max.to_array(), }, @@ -400,8 +403,9 @@ impl PathShader { uniform: PathUniform::new(dimensions), batches: vec![BasicMarkBatch { indices_range, - image: image::DynamicImage::ImageRgba8(gradients_image), + image: gradients_image, }], + texture_size, shader: include_str!("path.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -412,7 +416,7 @@ impl PathShader { mark: &TrailMark, dimensions: CanvasDimensions, ) -> Result { - let gradients_image = build_gradients_image(&mark.gradients); + let (gradients_image, texture_size) = build_gradients_image(&mark.gradients); let size_idx: AttributeIndex = 0; let mut path_builder = lyon::path::Path::builder_with_attributes(1); @@ -454,7 +458,7 @@ impl PathShader { &mut buffers, VertexPositions { fill: [0.0, 0.0, 0.0, 0.0], - stroke: to_color_or_gradient_coord(&mark.stroke), + stroke: to_color_or_gradient_coord(&mark.stroke, texture_size), top_left: bbox.min.to_array(), bottom_right: bbox.max.to_array(), }, @@ -476,8 +480,9 @@ impl PathShader { uniform: PathUniform::new(dimensions), batches: vec![BasicMarkBatch { indices_range, - image: image::DynamicImage::ImageRgba8(gradients_image), + image: gradients_image, }], + texture_size, shader: include_str!("path.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -506,11 +511,7 @@ impl BasicMarkShader for PathShader { } fn texture_size(&self) -> Extent3d { - Extent3d { - width: self.batches[0].image.width(), - height: self.batches[0].image.height(), - depth_or_array_layers: 1, - } + self.texture_size } fn shader(&self) -> &str { diff --git a/sg2d-wgpu/src/marks/rect.rs b/sg2d-wgpu/src/marks/rect.rs index 42d714c..c71644d 100644 --- a/sg2d-wgpu/src/marks/rect.rs +++ b/sg2d-wgpu/src/marks/rect.rs @@ -1,11 +1,8 @@ use crate::canvas::CanvasDimensions; -use crate::marks::gradient::to_color_or_gradient_coord; +use crate::marks::gradient::{build_gradients_image, to_color_or_gradient_coord}; use crate::marks::instanced_mark::{InstancedMarkBatch, InstancedMarkShader}; -use colorgrad::Color; -use image::Rgba; use itertools::izip; use sg2d::marks::rect::RectMark; -use sg2d::marks::value::Gradient; use wgpu::{Extent3d, VertexBufferLayout}; pub const GRADIENT_LINEAR: f32 = 1.0; @@ -13,7 +10,6 @@ pub const GRADIENT_RADIAL: f32 = 2.0; pub const COLORWAY_LENGTH: u32 = 250; pub const GRADIENT_TEXTURE_WIDTH: u32 = 256; -pub const GRADIENT_TEXTURE_HEIGHT: u32 = 256; #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] @@ -75,104 +71,12 @@ const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 7] = wgpu::vertex_attr_array! 7 => Float32, // corner_radius ]; -pub fn build_gradients_image(gradients: &[Gradient]) -> image::RgbaImage { - // Write gradients - assert!( - gradients.len() < (GRADIENT_TEXTURE_HEIGHT / 2) as usize, - "Exceeded max number of unique gradients" - ); - - let mut img = image::RgbaImage::new(GRADIENT_TEXTURE_WIDTH, GRADIENT_TEXTURE_HEIGHT); - for (pos, grad) in gradients.iter().enumerate() { - let row0 = (pos * 2) as u32; - - // Build gradient colorway using colorgrad - let s = grad.stops(); - let mut binding = colorgrad::CustomGradient::new(); - let offsets = s.iter().map(|stop| stop.offset as f64).collect::>(); - let colors = s - .iter() - .map(|stop| { - Color::new( - stop.color[0] as f64, - stop.color[1] as f64, - stop.color[2] as f64, - stop.color[3] as f64, - ) - }) - .collect::>(); - - let builder = binding.domain(offsets.as_slice()).colors(colors.as_slice()); - let b = builder.build().unwrap(); - - // Fill leading pixels with start color so that linear interpolation doesn't pick - // up the empty pixels between control pixels and gradient pixels - let start_color = Rgba::from(b.at(0.0).to_rgba8()); - let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; - for i in 0..col_offset { - img.put_pixel(i, row0, start_color); - img.put_pixel(i, row0 + 1, start_color); - } - - // Store 250-bin colorway in pixels 6 through 255 - for i in 0..COLORWAY_LENGTH { - let p = (i as f64) / (COLORWAY_LENGTH as f64 - 1.0); - let c = b.at(p).to_rgba8(); - - // Write color to row0 and row0 + 1 - img.put_pixel(i + col_offset, row0, Rgba::from(c)); - img.put_pixel(i + col_offset, row0 + 1, Rgba::from(c)); - } - - // We encode the gradient control points in the first two or three pixels of the texture - match grad { - Gradient::LinearGradient(grad) => { - // Write gradient type to column 0 - let control_color0 = Rgba::from([(GRADIENT_LINEAR * 255.0) as u8, 0, 0, 0]); - img.put_pixel(0, row0, control_color0); - img.put_pixel(0, row0 + 1, control_color0); - - // Write x/y control points to column 1 - let control_color1 = Rgba::from([ - (grad.x0 * 255.0) as u8, - (grad.y0 * 255.0) as u8, - (grad.x1 * 255.0) as u8, - (grad.y1 * 255.0) as u8, - ]); - img.put_pixel(1, row0, control_color1); - img.put_pixel(1, row0 + 1, control_color1); - } - Gradient::RadialGradient(grad) => { - // Write gradient type to column 0 - let control_color0 = Rgba::from([(GRADIENT_RADIAL * 255.0) as u8, 0, 0, 0]); - img.put_pixel(0, row0, control_color0); - img.put_pixel(0, row0 + 1, control_color0); - - // Write x/y control points to column 1 - let control_color1 = Rgba::from([ - (grad.x0 * 255.0) as u8, - (grad.y0 * 255.0) as u8, - (grad.x1 * 255.0) as u8, - (grad.y1 * 255.0) as u8, - ]); - img.put_pixel(1, row0, control_color1); - img.put_pixel(1, row0 + 1, control_color1); - - // Write radius control points to column 2 - let control_color2 = - Rgba::from([(grad.r0 * 255.0) as u8, (grad.r1 * 255.0) as u8, 0, 0]); - img.put_pixel(2, row0, control_color2); - img.put_pixel(2, row0 + 1, control_color2); - } - }; - } - img -} - impl RectInstance { - pub fn from_spec(mark: &RectMark) -> (Vec, image::RgbaImage) { + pub fn from_spec( + mark: &RectMark, + ) -> (Vec, Option, Extent3d) { let mut instances: Vec = Vec::new(); - let img = build_gradients_image(&mark.gradients); + let (img, texture_size) = build_gradients_image(&mark.gradients); for (x, y, width, height, fill, stroke, stroke_width, corner_radius) in izip!( mark.x_iter(), @@ -188,13 +92,13 @@ impl RectInstance { position: [*x, *y], width: *width, height: *height, - fill: to_color_or_gradient_coord(&fill), - stroke: to_color_or_gradient_coord(&stroke), + fill: to_color_or_gradient_coord(&fill, texture_size), + stroke: to_color_or_gradient_coord(&stroke, texture_size), stroke_width: *stroke_width, corner_radius: *corner_radius, }) } - (instances, img) + (instances, img, texture_size) } } @@ -212,11 +116,11 @@ pub struct RectShader { impl RectShader { pub fn from_rect_mark(mark: &RectMark, dimensions: CanvasDimensions) -> Self { - let (instances, img) = RectInstance::from_spec(mark); + let (instances, img, texture_size) = RectInstance::from_spec(mark); let batches = vec![InstancedMarkBatch { instances_range: 0..instances.len() as u32, - image: image::DynamicImage::ImageRgba8(img), + image: img, }]; Self { @@ -237,11 +141,7 @@ impl RectShader { indices: vec![0, 1, 2, 0, 2, 3], instances, batches, - texture_size: Extent3d { - width: GRADIENT_TEXTURE_WIDTH, - height: GRADIENT_TEXTURE_HEIGHT, - depth_or_array_layers: 1, - }, + texture_size, uniform: RectUniform::new(dimensions), shader: include_str!("rect.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), diff --git a/sg2d-wgpu/src/marks/rule.rs b/sg2d-wgpu/src/marks/rule.rs index fe1018c..95abb2d 100644 --- a/sg2d-wgpu/src/marks/rule.rs +++ b/sg2d-wgpu/src/marks/rule.rs @@ -1,7 +1,7 @@ use crate::canvas::CanvasDimensions; -use crate::marks::gradient::to_color_or_gradient_coord; +use crate::marks::gradient::{build_gradients_image, to_color_or_gradient_coord}; use crate::marks::instanced_mark::{InstancedMarkBatch, InstancedMarkShader}; -use crate::marks::rect::{build_gradients_image, GRADIENT_TEXTURE_HEIGHT, GRADIENT_TEXTURE_WIDTH}; +use image::DynamicImage; use itertools::izip; use sg2d::marks::rule::RuleMark; use sg2d::marks::value::StrokeCap; @@ -72,9 +72,9 @@ const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 7] = wgpu::vertex_attr_array! ]; impl RuleInstance { - pub fn from_spec(mark: &RuleMark) -> (Vec, image::RgbaImage) { + pub fn from_spec(mark: &RuleMark) -> (Vec, Option, Extent3d) { let mut instances: Vec = Vec::new(); - let img = build_gradients_image(&mark.gradients); + let (img, texture_size) = build_gradients_image(&mark.gradients); if let Some(stroke_dash_iter) = mark.stroke_dash_iter() { // Rule has a dash specification, so we create an individual RuleInstance for each dash @@ -127,7 +127,7 @@ impl RuleInstance { y0: dash_y0, x1: dash_x1, y1: dash_y1, - stroke: to_color_or_gradient_coord(stroke), + stroke: to_color_or_gradient_coord(stroke, texture_size), stroke_width: *stroke_width, stroke_cap: match cap { StrokeCap::Butt => STROKE_CAP_BUTT, @@ -163,7 +163,7 @@ impl RuleInstance { y0: *y0, x1: *x1, y1: *y1, - stroke: to_color_or_gradient_coord(stroke), + stroke: to_color_or_gradient_coord(stroke, texture_size), stroke_width: *stroke_width, stroke_cap: match cap { StrokeCap::Butt => STROKE_CAP_BUTT, @@ -173,7 +173,7 @@ impl RuleInstance { }) } } - (instances, img) + (instances, img, texture_size) } } @@ -191,10 +191,10 @@ pub struct RuleShader { impl RuleShader { pub fn from_rule_mark(mark: &RuleMark, dimensions: CanvasDimensions) -> Self { - let (instances, gradient_image) = RuleInstance::from_spec(mark); + let (instances, gradient_image, texture_size) = RuleInstance::from_spec(mark); let batches = vec![InstancedMarkBatch { instances_range: 0..instances.len() as u32, - image: image::DynamicImage::ImageRgba8(gradient_image), + image: gradient_image, }]; Self { verts: vec![ @@ -215,11 +215,7 @@ impl RuleShader { instances, uniform: RuleUniform::new(dimensions), batches, - texture_size: Extent3d { - width: GRADIENT_TEXTURE_WIDTH, - height: GRADIENT_TEXTURE_HEIGHT, - depth_or_array_layers: 1, - }, + texture_size, shader: include_str!("rule.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index 100c98e..aaaf189 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -1,8 +1,7 @@ use crate::canvas::CanvasDimensions; use crate::error::Sg2dWgpuError; -use crate::marks::gradient::to_color_or_gradient_coord; +use crate::marks::gradient::{build_gradients_image, to_color_or_gradient_coord}; use crate::marks::instanced_mark::{InstancedMarkBatch, InstancedMarkShader}; -use crate::marks::rect::{build_gradients_image, GRADIENT_TEXTURE_HEIGHT, GRADIENT_TEXTURE_WIDTH}; use itertools::izip; use lyon::lyon_tessellation::{ BuffersBuilder, FillVertex, FillVertexConstructor, StrokeVertex, StrokeVertexConstructor, @@ -85,10 +84,12 @@ const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 7] = wgpu::vertex_attr_array! ]; impl SymbolInstance { - pub fn from_spec(mark: &SymbolMark) -> (Vec, image::RgbaImage) { + pub fn from_spec( + mark: &SymbolMark, + ) -> (Vec, Option, Extent3d) { let stroke_width = mark.stroke_width.unwrap_or(0.0); let mut instances: Vec = Vec::new(); - let img = build_gradients_image(&mark.gradients); + let (img, texture_size) = build_gradients_image(&mark.gradients); for (x, y, fill, size, stroke, angle, shape_index) in izip!( mark.x_iter(), @@ -101,8 +102,8 @@ impl SymbolInstance { ) { instances.push(SymbolInstance { position: [*x, *y], - fill_color: to_color_or_gradient_coord(fill), - stroke_color: to_color_or_gradient_coord(stroke), + fill_color: to_color_or_gradient_coord(fill, texture_size), + stroke_color: to_color_or_gradient_coord(stroke, texture_size), stroke_width, size: *size, angle: *angle, @@ -110,7 +111,7 @@ impl SymbolInstance { }); } - (instances, img) + (instances, img, texture_size) } } @@ -198,10 +199,10 @@ impl SymbolShader { } } } - let (instances, img) = SymbolInstance::from_spec(mark); + let (instances, img, texture_size) = SymbolInstance::from_spec(mark); let batches = vec![InstancedMarkBatch { instances_range: 0..instances.len() as u32, - image: image::DynamicImage::ImageRgba8(img), + image: img, }]; Ok(Self { verts, @@ -209,11 +210,7 @@ impl SymbolShader { instances, uniform: SymbolUniform::new(dimensions), batches, - texture_size: Extent3d { - width: GRADIENT_TEXTURE_WIDTH, - height: GRADIENT_TEXTURE_HEIGHT, - depth_or_array_layers: 1, - }, + texture_size, shader: include_str!("symbol.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index 8c1771a..1097d00 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -127,6 +127,7 @@ mod test_image_baselines { case("gradients", "arc_gradient", 0.1), )] fn test_image_baseline(category: &str, spec_name: &str, tolerance: f64) { + println!("{spec_name}"); let specs_dir = format!( "{}/../sg2d-vega-test-data/vega-scenegraphs/{category}", env!("CARGO_MANIFEST_DIR") From 5d1838f65effaa11fa20b077448bbc4383024a69 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 27 Jan 2024 09:04:34 -0500 Subject: [PATCH 24/27] Move common gradient shader logic to gradient.wgsl --- sg2d-wgpu/src/marks/arc.rs | 6 +- sg2d-wgpu/src/marks/arc.wgsl | 64 ------------------ sg2d-wgpu/src/marks/gradient.wgsl | 64 ++++++++++++++++++ sg2d-wgpu/src/marks/path.rs | 24 +++++-- sg2d-wgpu/src/marks/path.wgsl | 106 +++++++----------------------- sg2d-wgpu/src/marks/rect.rs | 6 +- sg2d-wgpu/src/marks/rect.wgsl | 62 ----------------- sg2d-wgpu/src/marks/rule.rs | 6 +- sg2d-wgpu/src/marks/rule.wgsl | 62 ----------------- sg2d-wgpu/src/marks/symbol.rs | 6 +- sg2d-wgpu/src/marks/symbol.wgsl | 63 ------------------ 11 files changed, 126 insertions(+), 343 deletions(-) create mode 100644 sg2d-wgpu/src/marks/gradient.wgsl diff --git a/sg2d-wgpu/src/marks/arc.rs b/sg2d-wgpu/src/marks/arc.rs index 7dc6e67..b85e040 100644 --- a/sg2d-wgpu/src/marks/arc.rs +++ b/sg2d-wgpu/src/marks/arc.rs @@ -180,7 +180,11 @@ impl ArcShader { uniform: ArcUniform::new(dimensions), batches, texture_size, - shader: include_str!("arc.wgsl").to_string(), + shader: format!( + "{}\n{}", + include_str!("arc.wgsl").to_string(), + include_str!("gradient.wgsl").to_string() + ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), } diff --git a/sg2d-wgpu/src/marks/arc.wgsl b/sg2d-wgpu/src/marks/arc.wgsl index 3a44e46..6d7da41 100644 --- a/sg2d-wgpu/src/marks/arc.wgsl +++ b/sg2d-wgpu/src/marks/arc.wgsl @@ -191,67 +191,3 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { mixed_color[3] *= min(radius_alpha_factor, angle_alpha_factor); return mixed_color; } - - - -// Gradient color -const GRADIENT_LINEAR = 1.0; -const GRADIENT_RADIAL = 2.0; - -const COLORWAY_LENGTH = 250.0; -const GRADIENT_TEXTURE_WIDTH = 256.0; -const GRADIENT_TEXTURE_HEIGHT = 256.0; - -@group(1) @binding(0) -var gradient_texture: texture_2d; -@group(1) @binding(1) -var linear_sampler: sampler; -@group(1) @binding(2) -var nearest_sampler: sampler; - -// Compute final color, potentially computing gradient -fn lookup_color(color: vec4, clip_position: vec4, top_left: vec2, bottom_right: vec2) -> vec4 { - if (color[0] < 0.0) { - // If the first color coordinate is negative, this indicates that we need to compute a gradient. - // The negative of this value is the y-coordinate into the gradient texture where the gradient control - // points and gradient colorway are stored. - let tex_coord_y = -color[0]; - - // Extract gradient type from fist pixel using nearest sampler (so that not interpolation is performed) - let control0 = textureSample(gradient_texture, nearest_sampler, vec2(0.0, tex_coord_y)); - let gradient_type = control0[0]; - - // Extract x/y control points from second pixel - let control1 = textureSample(gradient_texture, nearest_sampler, vec2(1.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); - let x0 = control1[0]; - let y0 = control1[1]; - let x1 = control1[2]; - let y1 = control1[3]; - - if (gradient_type == GRADIENT_LINEAR) { - // Convert fragment coordinate into coordinate normalized to rect bounding box - let frag_xy = vec2(clip_position[0], clip_position[1]); - let width_height = vec2(bottom_right[0] - top_left[0], bottom_right[1] - top_left[1]); - let norm_xy = (frag_xy - top_left) / width_height; - - let p0 = vec2(x0, y0); - let p1 = vec2(x1, y1); - let control_dist = distance(p0, p1); - let projected_dist = dot(norm_xy - p0, p1 - p0) / control_dist; - let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; - let tex_coord_x = clamp(projected_dist / control_dist, 0.0, 1.0) * COLORWAY_LENGTH / GRADIENT_TEXTURE_WIDTH + col_offset / GRADIENT_TEXTURE_WIDTH; - - return textureSample(gradient_texture, linear_sampler, vec2(tex_coord_x, tex_coord_y)); - } else { - // Extract additional radius gradient control points from third pixel - let control2 = textureSample(gradient_texture, nearest_sampler, vec2(2.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); - let r0 = control2[0]; - let r1 = control2[1]; - - // TODO: compute radial gradinet - return vec4(1.0, 0.0, 0.0, 1.0); - } - } else { - return color; - } -} \ No newline at end of file diff --git a/sg2d-wgpu/src/marks/gradient.wgsl b/sg2d-wgpu/src/marks/gradient.wgsl new file mode 100644 index 0000000..68b4b91 --- /dev/null +++ b/sg2d-wgpu/src/marks/gradient.wgsl @@ -0,0 +1,64 @@ +// Gradient color logic that provides the `lookup_color` function. +// This is intended to be concatenated to the end of shader files that support +// gradients + +const GRADIENT_LINEAR = 1.0; +const GRADIENT_RADIAL = 2.0; + +const COLORWAY_LENGTH = 250.0; +const GRADIENT_TEXTURE_WIDTH = 256.0; +const GRADIENT_TEXTURE_HEIGHT = 256.0; + +@group(1) @binding(0) +var gradient_texture: texture_2d; +@group(1) @binding(1) +var linear_sampler: sampler; +@group(1) @binding(2) +var nearest_sampler: sampler; + +// Compute final color, potentially computing gradient +fn lookup_color(color: vec4, clip_position: vec4, top_left: vec2, bottom_right: vec2) -> vec4 { + if (color[0] < 0.0) { + // If the first color coordinate is negative, this indicates that we need to compute a gradient. + // The negative of this value is the y-coordinate into the gradient texture where the gradient control + // points and gradient colorway are stored. + let tex_coord_y = -color[0]; + + // Extract gradient type from fist pixel using nearest sampler (so that not interpolation is performed) + let control0 = textureSample(gradient_texture, nearest_sampler, vec2(0.0, tex_coord_y)); + let gradient_type = control0[0]; + + // Extract x/y control points from second pixel + let control1 = textureSample(gradient_texture, nearest_sampler, vec2(1.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); + let x0 = control1[0]; + let y0 = control1[1]; + let x1 = control1[2]; + let y1 = control1[3]; + + if (gradient_type == GRADIENT_LINEAR) { + // Convert fragment coordinate into coordinate normalized to rect bounding box + let frag_xy = vec2(clip_position[0], clip_position[1]); + let width_height = vec2(bottom_right[0] - top_left[0], bottom_right[1] - top_left[1]); + let norm_xy = (frag_xy - top_left) / width_height; + + let p0 = vec2(x0, y0); + let p1 = vec2(x1, y1); + let control_dist = distance(p0, p1); + let projected_dist = dot(norm_xy - p0, p1 - p0) / control_dist; + let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; + let tex_coord_x = clamp(projected_dist / control_dist, 0.0, 1.0) * COLORWAY_LENGTH / GRADIENT_TEXTURE_WIDTH + col_offset / GRADIENT_TEXTURE_WIDTH; + + return textureSample(gradient_texture, linear_sampler, vec2(tex_coord_x, tex_coord_y)); + } else { + // Extract additional radius gradient control points from third pixel + let control2 = textureSample(gradient_texture, nearest_sampler, vec2(2.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); + let r0 = control2[0]; + let r1 = control2[1]; + + // TODO: compute radial gradinet + return vec4(1.0, 0.0, 0.0, 1.0); + } + } else { + return color; + } +} \ No newline at end of file diff --git a/sg2d-wgpu/src/marks/path.rs b/sg2d-wgpu/src/marks/path.rs index e64eefe..6173565 100644 --- a/sg2d-wgpu/src/marks/path.rs +++ b/sg2d-wgpu/src/marks/path.rs @@ -147,7 +147,11 @@ impl PathShader { image: gradients_image, }], texture_size, - shader: include_str!("path.wgsl").to_string(), + shader: format!( + "{}\n{}", + include_str!("path.wgsl").to_string(), + include_str!("gradient.wgsl").to_string() + ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), }) @@ -267,7 +271,11 @@ impl PathShader { image: gradients_image, }], texture_size, - shader: include_str!("path.wgsl").to_string(), + shader: format!( + "{}\n{}", + include_str!("path.wgsl").to_string(), + include_str!("gradient.wgsl").to_string() + ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), }) @@ -406,7 +414,11 @@ impl PathShader { image: gradients_image, }], texture_size, - shader: include_str!("path.wgsl").to_string(), + shader: format!( + "{}\n{}", + include_str!("path.wgsl").to_string(), + include_str!("gradient.wgsl").to_string() + ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), }) @@ -483,7 +495,11 @@ impl PathShader { image: gradients_image, }], texture_size, - shader: include_str!("path.wgsl").to_string(), + shader: format!( + "{}\n{}", + include_str!("path.wgsl").to_string(), + include_str!("gradient.wgsl").to_string() + ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), }) diff --git a/sg2d-wgpu/src/marks/path.wgsl b/sg2d-wgpu/src/marks/path.wgsl index 1b9171b..b9a6a04 100644 --- a/sg2d-wgpu/src/marks/path.wgsl +++ b/sg2d-wgpu/src/marks/path.wgsl @@ -22,87 +22,25 @@ struct VertexOutput { } // Vertex shader - @vertex - fn vs_main( - model: VertexInput - ) -> VertexOutput { - var out: VertexOutput; - - // Compute vertex coordinates - let x = 2.0 * model.position[0] / chart_uniforms.size[0] - 1.0; - let y = 2.0 * (chart_uniforms.size[1] - model.position[1]) / chart_uniforms.size[1] - 1.0; - out.clip_position = vec4(x, y, 0.0, 1.0); - - out.color = model.color; - out.top_left = model.top_left * chart_uniforms.scale; - out.bottom_right = model.bottom_right * chart_uniforms.scale; - return out; - } - - // Fragment shader - @fragment - fn fs_main(in: VertexOutput) -> @location(0) vec4 { - return lookup_color(in.color, in.clip_position, in.top_left, in.bottom_right); - } - - // Gradient color - const GRADIENT_LINEAR = 1.0; - const GRADIENT_RADIAL = 2.0; - - const COLORWAY_LENGTH = 250.0; - const GRADIENT_TEXTURE_WIDTH = 256.0; - const GRADIENT_TEXTURE_HEIGHT = 256.0; - - @group(1) @binding(0) - var gradient_texture: texture_2d; - @group(1) @binding(1) - var linear_sampler: sampler; - @group(1) @binding(2) - var nearest_sampler: sampler; - - // Compute final color, potentially computing gradient - fn lookup_color(color: vec4, clip_position: vec4, top_left: vec2, bottom_right: vec2) -> vec4 { - if (color[0] < 0.0) { - // If the first color coordinate is negative, this indicates that we need to compute a gradient. - // The negative of this value is the y-coordinate into the gradient texture where the gradient control - // points and gradient colorway are stored. - let tex_coord_y = -color[0]; - - // Extract gradient type from fist pixel using nearest sampler (so that not interpolation is performed) - let control0 = textureSample(gradient_texture, nearest_sampler, vec2(0.0, tex_coord_y)); - let gradient_type = control0[0]; - - // Extract x/y control points from second pixel - let control1 = textureSample(gradient_texture, nearest_sampler, vec2(1.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); - let x0 = control1[0]; - let y0 = control1[1]; - let x1 = control1[2]; - let y1 = control1[3]; - - if (gradient_type == GRADIENT_LINEAR) { - // Convert fragment coordinate into coordinate normalized to rect bounding box - let frag_xy = vec2(clip_position[0], clip_position[1]); - let width_height = vec2(bottom_right[0] - top_left[0], bottom_right[1] - top_left[1]); - let norm_xy = (frag_xy - top_left) / width_height; - - let p0 = vec2(x0, y0); - let p1 = vec2(x1, y1); - let control_dist = distance(p0, p1); - let projected_dist = dot(norm_xy - p0, p1 - p0) / control_dist; - let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; - let tex_coord_x = clamp(projected_dist / control_dist, 0.0, 1.0) * COLORWAY_LENGTH / GRADIENT_TEXTURE_WIDTH + col_offset / GRADIENT_TEXTURE_WIDTH; - - return textureSample(gradient_texture, linear_sampler, vec2(tex_coord_x, tex_coord_y)); - } else { - // Extract additional radius gradient control points from third pixel - let control2 = textureSample(gradient_texture, nearest_sampler, vec2(2.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); - let r0 = control2[0]; - let r1 = control2[1]; - - // TODO: compute radial gradinet - return vec4(1.0, 0.0, 0.0, 1.0); - } - } else { - return color; - } - } \ No newline at end of file +@vertex +fn vs_main( + model: VertexInput +) -> VertexOutput { + var out: VertexOutput; + + // Compute vertex coordinates + let x = 2.0 * model.position[0] / chart_uniforms.size[0] - 1.0; + let y = 2.0 * (chart_uniforms.size[1] - model.position[1]) / chart_uniforms.size[1] - 1.0; + out.clip_position = vec4(x, y, 0.0, 1.0); + + out.color = model.color; + out.top_left = model.top_left * chart_uniforms.scale; + out.bottom_right = model.bottom_right * chart_uniforms.scale; + return out; +} + +// Fragment shader +@fragment +fn fs_main(in: VertexOutput) -> @location(0) vec4 { + return lookup_color(in.color, in.clip_position, in.top_left, in.bottom_right); +} \ No newline at end of file diff --git a/sg2d-wgpu/src/marks/rect.rs b/sg2d-wgpu/src/marks/rect.rs index c71644d..30f2d75 100644 --- a/sg2d-wgpu/src/marks/rect.rs +++ b/sg2d-wgpu/src/marks/rect.rs @@ -143,7 +143,11 @@ impl RectShader { batches, texture_size, uniform: RectUniform::new(dimensions), - shader: include_str!("rect.wgsl").to_string(), + shader: format!( + "{}\n{}", + include_str!("rect.wgsl").to_string(), + include_str!("gradient.wgsl").to_string() + ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), } diff --git a/sg2d-wgpu/src/marks/rect.wgsl b/sg2d-wgpu/src/marks/rect.wgsl index 7444976..0a6e76a 100644 --- a/sg2d-wgpu/src/marks/rect.wgsl +++ b/sg2d-wgpu/src/marks/rect.wgsl @@ -168,65 +168,3 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { } } } - -// Gradient color -const GRADIENT_LINEAR = 1.0; -const GRADIENT_RADIAL = 2.0; - -const COLORWAY_LENGTH = 250.0; -const GRADIENT_TEXTURE_WIDTH = 256.0; -const GRADIENT_TEXTURE_HEIGHT = 256.0; - -@group(1) @binding(0) -var gradient_texture: texture_2d; -@group(1) @binding(1) -var linear_sampler: sampler; -@group(1) @binding(2) -var nearest_sampler: sampler; - -// Compute final color, potentially computing gradient -fn lookup_color(color: vec4, clip_position: vec4, top_left: vec2, bottom_right: vec2) -> vec4 { - if (color[0] < 0.0) { - // If the first color coordinate is negative, this indicates that we need to compute a gradient. - // The negative of this value is the y-coordinate into the gradient texture where the gradient control - // points and gradient colorway are stored. - let tex_coord_y = -color[0]; - - // Extract gradient type from fist pixel using nearest sampler (so that not interpolation is performed) - let control0 = textureSample(gradient_texture, nearest_sampler, vec2(0.0, tex_coord_y)); - let gradient_type = control0[0]; - - // Extract x/y control points from second pixel - let control1 = textureSample(gradient_texture, nearest_sampler, vec2(1.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); - let x0 = control1[0]; - let y0 = control1[1]; - let x1 = control1[2]; - let y1 = control1[3]; - - if (gradient_type == GRADIENT_LINEAR) { - // Convert fragment coordinate into coordinate normalized to rect bounding box - let frag_xy = vec2(clip_position[0], clip_position[1]); - let width_height = vec2(bottom_right[0] - top_left[0], bottom_right[1] - top_left[1]); - let norm_xy = (frag_xy - top_left) / width_height; - - let p0 = vec2(x0, y0); - let p1 = vec2(x1, y1); - let control_dist = distance(p0, p1); - let projected_dist = dot(norm_xy - p0, p1 - p0) / control_dist; - let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; - let tex_coord_x = clamp(projected_dist / control_dist, 0.0, 1.0) * COLORWAY_LENGTH / GRADIENT_TEXTURE_WIDTH + col_offset / GRADIENT_TEXTURE_WIDTH; - - return textureSample(gradient_texture, linear_sampler, vec2(tex_coord_x, tex_coord_y)); - } else { - // Extract additional radius gradient control points from third pixel - let control2 = textureSample(gradient_texture, nearest_sampler, vec2(2.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); - let r0 = control2[0]; - let r1 = control2[1]; - - // TODO: compute radial gradinet - return vec4(1.0, 0.0, 0.0, 1.0); - } - } else { - return color; - } -} \ No newline at end of file diff --git a/sg2d-wgpu/src/marks/rule.rs b/sg2d-wgpu/src/marks/rule.rs index 95abb2d..dd219b2 100644 --- a/sg2d-wgpu/src/marks/rule.rs +++ b/sg2d-wgpu/src/marks/rule.rs @@ -216,7 +216,11 @@ impl RuleShader { uniform: RuleUniform::new(dimensions), batches, texture_size, - shader: include_str!("rule.wgsl").to_string(), + shader: format!( + "{}\n{}", + include_str!("rule.wgsl").to_string(), + include_str!("gradient.wgsl").to_string() + ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), } diff --git a/sg2d-wgpu/src/marks/rule.wgsl b/sg2d-wgpu/src/marks/rule.wgsl index e77344a..9a2b42c 100644 --- a/sg2d-wgpu/src/marks/rule.wgsl +++ b/sg2d-wgpu/src/marks/rule.wgsl @@ -156,65 +156,3 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { adjusted_color[3] *= alpha_factor; return adjusted_color; } - -// Gradient color -const GRADIENT_LINEAR = 1.0; -const GRADIENT_RADIAL = 2.0; - -const COLORWAY_LENGTH = 250.0; -const GRADIENT_TEXTURE_WIDTH = 256.0; -const GRADIENT_TEXTURE_HEIGHT = 256.0; - -@group(1) @binding(0) -var gradient_texture: texture_2d; -@group(1) @binding(1) -var linear_sampler: sampler; -@group(1) @binding(2) -var nearest_sampler: sampler; - -// Compute final color, potentially computing gradient -fn lookup_color(color: vec4, clip_position: vec4, top_left: vec2, bottom_right: vec2) -> vec4 { - if (color[0] < 0.0) { - // If the first color coordinate is negative, this indicates that we need to compute a gradient. - // The negative of this value is the y-coordinate into the gradient texture where the gradient control - // points and gradient colorway are stored. - let tex_coord_y = -color[0]; - - // Extract gradient type from fist pixel using nearest sampler (so that not interpolation is performed) - let control0 = textureSample(gradient_texture, nearest_sampler, vec2(0.0, tex_coord_y)); - let gradient_type = control0[0]; - - // Extract x/y control points from second pixel - let control1 = textureSample(gradient_texture, nearest_sampler, vec2(1.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); - let x0 = control1[0]; - let y0 = control1[1]; - let x1 = control1[2]; - let y1 = control1[3]; - - if (gradient_type == GRADIENT_LINEAR) { - // Convert fragment coordinate into coordinate normalized to rect bounding box - let frag_xy = vec2(clip_position[0], clip_position[1]); - let width_height = vec2(bottom_right[0] - top_left[0], bottom_right[1] - top_left[1]); - let norm_xy = (frag_xy - top_left) / width_height; - - let p0 = vec2(x0, y0); - let p1 = vec2(x1, y1); - let control_dist = distance(p0, p1); - let projected_dist = dot(norm_xy - p0, p1 - p0) / control_dist; - let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; - let tex_coord_x = clamp(projected_dist / control_dist, 0.0, 1.0) * COLORWAY_LENGTH / GRADIENT_TEXTURE_WIDTH + col_offset / GRADIENT_TEXTURE_WIDTH; - - return textureSample(gradient_texture, linear_sampler, vec2(tex_coord_x, tex_coord_y)); - } else { - // Extract additional radius gradient control points from third pixel - let control2 = textureSample(gradient_texture, nearest_sampler, vec2(2.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); - let r0 = control2[0]; - let r1 = control2[1]; - - // TODO: compute radial gradinet - return vec4(1.0, 0.0, 0.0, 1.0); - } - } else { - return color; - } -} \ No newline at end of file diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index aaaf189..025c9e7 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -211,7 +211,11 @@ impl SymbolShader { uniform: SymbolUniform::new(dimensions), batches, texture_size, - shader: include_str!("symbol.wgsl").to_string(), + shader: format!( + "{}\n{}", + include_str!("symbol.wgsl").to_string(), + include_str!("gradient.wgsl").to_string() + ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), }) diff --git a/sg2d-wgpu/src/marks/symbol.wgsl b/sg2d-wgpu/src/marks/symbol.wgsl index 54576be..5b3beff 100644 --- a/sg2d-wgpu/src/marks/symbol.wgsl +++ b/sg2d-wgpu/src/marks/symbol.wgsl @@ -187,66 +187,3 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { ); } } - - -// Gradient color -const GRADIENT_LINEAR = 1.0; -const GRADIENT_RADIAL = 2.0; - -const COLORWAY_LENGTH = 250.0; -const GRADIENT_TEXTURE_WIDTH = 256.0; -const GRADIENT_TEXTURE_HEIGHT = 256.0; - -@group(1) @binding(0) -var gradient_texture: texture_2d; -@group(1) @binding(1) -var linear_sampler: sampler; -@group(1) @binding(2) -var nearest_sampler: sampler; - -// Compute final color, potentially computing gradient -fn lookup_color(color: vec4, clip_position: vec4, top_left: vec2, bottom_right: vec2) -> vec4 { - if (color[0] < 0.0) { - // If the first color coordinate is negative, this indicates that we need to compute a gradient. - // The negative of this value is the y-coordinate into the gradient texture where the gradient control - // points and gradient colorway are stored. - let tex_coord_y = -color[0]; - - // Extract gradient type from fist pixel using nearest sampler (so that not interpolation is performed) - let control0 = textureSample(gradient_texture, nearest_sampler, vec2(0.0, tex_coord_y)); - let gradient_type = control0[0]; - - // Extract x/y control points from second pixel - let control1 = textureSample(gradient_texture, nearest_sampler, vec2(1.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); - let x0 = control1[0]; - let y0 = control1[1]; - let x1 = control1[2]; - let y1 = control1[3]; - - if (gradient_type == GRADIENT_LINEAR) { - // Convert fragment coordinate into coordinate normalized to rect bounding box - let frag_xy = vec2(clip_position[0], clip_position[1]); - let width_height = vec2(bottom_right[0] - top_left[0], bottom_right[1] - top_left[1]); - let norm_xy = (frag_xy - top_left) / width_height; - - let p0 = vec2(x0, y0); - let p1 = vec2(x1, y1); - let control_dist = distance(p0, p1); - let projected_dist = dot(norm_xy - p0, p1 - p0) / control_dist; - let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; - let tex_coord_x = clamp(projected_dist / control_dist, 0.0, 1.0) * COLORWAY_LENGTH / GRADIENT_TEXTURE_WIDTH + col_offset / GRADIENT_TEXTURE_WIDTH; - - return textureSample(gradient_texture, linear_sampler, vec2(tex_coord_x, tex_coord_y)); - } else { - // Extract additional radius gradient control points from third pixel - let control2 = textureSample(gradient_texture, nearest_sampler, vec2(2.0 / GRADIENT_TEXTURE_WIDTH, tex_coord_y)); - let r0 = control2[0]; - let r1 = control2[1]; - - // TODO: compute radial gradinet - return vec4(1.0, 0.0, 0.0, 1.0); - } - } else { - return color; - } -} \ No newline at end of file From 71d840d912db26c542d13dd84ad122cd2e04bd6e Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 27 Jan 2024 12:17:58 -0500 Subject: [PATCH 25/27] Update vl-convert to output gradient scenegraph values --- Cargo.lock | 8 +- sg2d-vega-test-data/Cargo.toml | 2 +- .../gradients/arc_gradient.sg.json | 4 + .../gradients/area_line_with_gradient.sg.json | 136 ++ .../gradients/area_with_gradient.sg.json | 68 + ...fault_gradient_bars_rounded_stroke.sg.json | 3 + .../diagonal_gradient_bars_rounded.sg.json | 3 + .../gradients/heatmap_with_colorbar.sg.json | 1 + .../path_with_stroke_gradients.sg.json | 6 + .../radial_concentric_gradient_bars.png | Bin 0 -> 89053 bytes .../radial_concentric_gradient_bars.sg.json | 404 ++++ .../gradients/radial_offset_gradient_bars.png | Bin 0 -> 98651 bytes .../radial_offset_gradient_bars.sg.json | 404 ++++ .../gradients/residuals_colorscale.sg.json | 1 + .../gradients/rules_with_gradients.sg.json | 3 + .../gradients/stroke_rect_gradient.sg.json | 3 + .../symbol_circles_gradient_stroke.sg.json | 128 ++ .../gradients/symbol_cross_gradient.sg.json | 128 ++ .../gradients/symbol_radial_gradient.png | Bin 0 -> 193993 bytes .../gradients/symbol_radial_gradient.sg.json | 1638 +++++++++++++++++ .../gradients/trail_gradient.sg.json | 68 + .../radial_concentric_gradient_bars.vg.json | 204 ++ .../radial_offset_gradient_bars.vg.json | 204 ++ .../gradients/symbol_radial_gradient.vg.json | 135 ++ 24 files changed, 3546 insertions(+), 5 deletions(-) create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/radial_concentric_gradient_bars.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/radial_concentric_gradient_bars.sg.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/radial_offset_gradient_bars.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/radial_offset_gradient_bars.sg.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_radial_gradient.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_radial_gradient.sg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/radial_concentric_gradient_bars.vg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/radial_offset_gradient_bars.vg.json create mode 100644 sg2d-vega-test-data/vega-specs/gradients/symbol_radial_gradient.vg.json diff --git a/Cargo.lock b/Cargo.lock index 1afb205..fc0dce7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6803,9 +6803,9 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "vl-convert-pdf" -version = "1.2.1" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a50212349f3ff58de1727c92e4de41124dbf96addaaec6d0082c250e1ce5a7" +checksum = "27b3b03b3c21586c9a5a1143e8fd1767e661a2d4b0203451a76a2811d1c74758" dependencies = [ "anyhow", "itertools 0.12.0", @@ -6821,9 +6821,9 @@ dependencies = [ [[package]] name = "vl-convert-rs" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc3c1e77e3a5836c9b0c39ac6c55cf6b7ff9f50f238527d900649dce3d7c2d7" +checksum = "36758be8de965d0337feaf633663bdb6c8bbfc5a4b0423f4924a7f2e6729447b" dependencies = [ "deno_core", "deno_emit", diff --git a/sg2d-vega-test-data/Cargo.toml b/sg2d-vega-test-data/Cargo.toml index d28d152..753f804 100644 --- a/sg2d-vega-test-data/Cargo.toml +++ b/sg2d-vega-test-data/Cargo.toml @@ -7,5 +7,5 @@ edition = "2021" [dependencies] serde_json = {workspace = true} -vl-convert-rs = "1.2.2" +vl-convert-rs = "1.2.3" pollster = "0.3" \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/arc_gradient.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/arc_gradient.sg.json index 92b3685..dc56a2f 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/gradients/arc_gradient.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/arc_gradient.sg.json @@ -27,6 +27,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -52,6 +53,7 @@ "y1": 0, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -85,6 +87,7 @@ "y1": 0, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -110,6 +113,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/area_line_with_gradient.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/area_line_with_gradient.sg.json index 7cf2046..f06d326 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/gradients/area_line_with_gradient.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/area_line_with_gradient.sg.json @@ -339,6 +339,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -365,6 +366,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -391,6 +393,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -417,6 +420,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -443,6 +447,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -469,6 +474,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -495,6 +501,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -521,6 +528,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -547,6 +555,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -573,6 +582,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -599,6 +609,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -625,6 +636,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -651,6 +663,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -677,6 +690,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -703,6 +717,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -729,6 +744,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -755,6 +771,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -781,6 +798,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -807,6 +825,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -833,6 +852,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -859,6 +879,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -885,6 +906,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -911,6 +933,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -937,6 +960,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -963,6 +987,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -989,6 +1014,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1015,6 +1041,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1041,6 +1068,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1067,6 +1095,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1093,6 +1122,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1119,6 +1149,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1145,6 +1176,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1171,6 +1203,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1197,6 +1230,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1223,6 +1257,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1249,6 +1284,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1275,6 +1311,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1301,6 +1338,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1327,6 +1365,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1353,6 +1392,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1379,6 +1419,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1405,6 +1446,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1431,6 +1473,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1457,6 +1500,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1483,6 +1527,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1509,6 +1554,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1535,6 +1581,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1561,6 +1608,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1587,6 +1635,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1613,6 +1662,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1639,6 +1689,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1665,6 +1716,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1691,6 +1743,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1717,6 +1770,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1743,6 +1797,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1769,6 +1824,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1795,6 +1851,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1821,6 +1878,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1847,6 +1905,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1873,6 +1932,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1899,6 +1959,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1925,6 +1986,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1951,6 +2013,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1977,6 +2040,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2003,6 +2067,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2029,6 +2094,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2055,6 +2121,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2081,6 +2148,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2116,6 +2184,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2139,6 +2208,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2162,6 +2232,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2185,6 +2256,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2208,6 +2280,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2231,6 +2304,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2254,6 +2328,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2277,6 +2352,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2300,6 +2376,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2323,6 +2400,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2346,6 +2424,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2369,6 +2448,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2392,6 +2472,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2415,6 +2496,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2438,6 +2520,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2461,6 +2544,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2484,6 +2568,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2507,6 +2592,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2530,6 +2616,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2553,6 +2640,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2576,6 +2664,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2599,6 +2688,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2622,6 +2712,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2645,6 +2736,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2668,6 +2760,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2691,6 +2784,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2714,6 +2808,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2737,6 +2832,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2760,6 +2856,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2783,6 +2880,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2806,6 +2904,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2829,6 +2928,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2852,6 +2952,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2875,6 +2976,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2898,6 +3000,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2921,6 +3024,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2944,6 +3048,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2967,6 +3072,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2990,6 +3096,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3013,6 +3120,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3036,6 +3144,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3059,6 +3168,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3082,6 +3192,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3105,6 +3216,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3128,6 +3240,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3151,6 +3264,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3174,6 +3288,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3197,6 +3312,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3220,6 +3336,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3243,6 +3360,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3266,6 +3384,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3289,6 +3408,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3312,6 +3432,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3335,6 +3456,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3358,6 +3480,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3381,6 +3504,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3404,6 +3528,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3427,6 +3552,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3450,6 +3576,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3473,6 +3600,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3496,6 +3624,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3519,6 +3648,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3542,6 +3672,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3565,6 +3696,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3588,6 +3720,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3611,6 +3744,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3634,6 +3768,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -3657,6 +3792,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/area_with_gradient.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/area_with_gradient.sg.json index 3e8642f..c4236d8 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/gradients/area_with_gradient.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/area_with_gradient.sg.json @@ -339,6 +339,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -365,6 +366,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -391,6 +393,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -417,6 +420,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -443,6 +447,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -469,6 +474,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -495,6 +501,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -521,6 +528,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -547,6 +555,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -573,6 +582,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -599,6 +609,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -625,6 +636,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -651,6 +663,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -677,6 +690,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -703,6 +717,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -729,6 +744,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -755,6 +771,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -781,6 +798,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -807,6 +825,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -833,6 +852,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -859,6 +879,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -885,6 +906,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -911,6 +933,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -937,6 +960,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -963,6 +987,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -989,6 +1014,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1015,6 +1041,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1041,6 +1068,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1067,6 +1095,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1093,6 +1122,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1119,6 +1149,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1145,6 +1176,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1171,6 +1203,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1197,6 +1230,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1223,6 +1257,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1249,6 +1284,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1275,6 +1311,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1301,6 +1338,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1327,6 +1365,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1353,6 +1392,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1379,6 +1419,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1405,6 +1446,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1431,6 +1473,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1457,6 +1500,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1483,6 +1527,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1509,6 +1554,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1535,6 +1581,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1561,6 +1608,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1587,6 +1635,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1613,6 +1662,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1639,6 +1689,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1665,6 +1716,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1691,6 +1743,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1717,6 +1770,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1743,6 +1797,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1769,6 +1824,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1795,6 +1851,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1821,6 +1878,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1847,6 +1905,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1873,6 +1932,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1899,6 +1959,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1925,6 +1986,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1951,6 +2013,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1977,6 +2040,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2003,6 +2067,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2029,6 +2094,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2055,6 +2121,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2081,6 +2148,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/default_gradient_bars_rounded_stroke.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/default_gradient_bars_rounded_stroke.sg.json index e0c16b1..fee1446 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/gradients/default_gradient_bars_rounded_stroke.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/default_gradient_bars_rounded_stroke.sg.json @@ -279,6 +279,7 @@ }, { "fill": { + "gradient": "linear", "stops": [ { "offset": 0, @@ -303,6 +304,7 @@ }, { "fill": { + "gradient": "linear", "stops": [ { "offset": 0, @@ -331,6 +333,7 @@ }, { "fill": { + "gradient": "linear", "stops": [ { "offset": 0, diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.sg.json index 917d6a1..663591d 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/diagonal_gradient_bars_rounded.sg.json @@ -281,6 +281,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -307,6 +308,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -337,6 +339,7 @@ "y1": 0.9, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.sg.json index 720c883..0e82fa5 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/heatmap_with_colorbar.sg.json @@ -2974,6 +2974,7 @@ "stroke": "#ddd", "strokeWidth": 0, "fill": { + "gradient": "linear", "x1": 0, "y1": 1, "x2": 0, diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/path_with_stroke_gradients.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/path_with_stroke_gradients.sg.json index 694ae3e..2c5765e 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/gradients/path_with_stroke_gradients.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/path_with_stroke_gradients.sg.json @@ -26,6 +26,7 @@ "y1": 0.3, "x2": 0.9, "y2": 0.9, + "gradient": "linear", "stops": [ { "offset": 0, @@ -48,6 +49,7 @@ "y1": 1, "x2": 0.8, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -72,6 +74,7 @@ "y1": 0.3, "x2": 0.8, "y2": 0.6, + "gradient": "linear", "stops": [ { "offset": 0, @@ -90,6 +93,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -114,6 +118,7 @@ "y1": 1, "x2": 0.8, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -132,6 +137,7 @@ "y1": 1, "x2": 0.8, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/radial_concentric_gradient_bars.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/radial_concentric_gradient_bars.png new file mode 100644 index 0000000000000000000000000000000000000000..762a1c1a59dde8ab9b63855a160b66196127951b GIT binary patch literal 89053 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 literal 0 HcmV?d00001 diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/radial_concentric_gradient_bars.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/radial_concentric_gradient_bars.sg.json new file mode 100644 index 0000000..efc966f --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/radial_concentric_gradient_bars.sg.json @@ -0,0 +1,404 @@ +{ + "width": 316, + "height": 217, + "origin": [ + 11, + 6 + ], + "scenegraph": { + "clip": false, + "interactive": true, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 200, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 160, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 120, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 80, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 40, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 0, + "x2": 300 + } + ], + "marktype": "rule", + "role": "axis-grid", + "zindex": 0 + } + ], + "orient": "left", + "offset": 0, + "x": 0.5, + "y": 0.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0, + "aria": false + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 30 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 90 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 150 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 210 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 270 + } + ], + "marktype": "rule", + "role": "axis-tick", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "x": 0, + "x2": 300, + "y": 0 + } + ], + "marktype": "rule", + "role": "axis-domain", + "zindex": 0 + } + ], + "orient": "bottom", + "offset": 0, + "x": 0.5, + "y": 200.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 200, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 160, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 120, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 80, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 40, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "x": 0, + "x2": -5 + } + ], + "marktype": "rule", + "role": "axis-tick", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "x": 0, + "y": 200, + "y2": 0 + } + ], + "marktype": "rule", + "role": "axis-domain", + "zindex": 0 + } + ], + "orient": "left", + "offset": 0, + "x": 0.5, + "y": 0.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0 + }, + { + "clip": false, + "interactive": true, + "items": [ + { + "fill": "blue", + "cornerRadius": 10, + "ariaRoleDescription": "bar", + "description": "a: A; b: 28", + "x": 3, + "width": 54, + "y": 144, + "y2": 200, + "height": 56 + }, + { + "fill": { + "gradient": "radial", + "x1": 0.5, + "y1": 0.5, + "x2": 0.5, + "y2": 0.5, + "r1": 0, + "r2": 0.5, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "cornerRadius": 10, + "ariaRoleDescription": "bar", + "description": "a: B; b: 55", + "x": 63, + "width": 54, + "y": 89.99999999999999, + "y2": 200, + "height": 110.00000000000001 + }, + { + "fill": { + "gradient": "radial", + "x1": 0.5, + "y1": 0.4, + "x2": 0.5, + "y2": 0.4, + "r1": 0.15, + "r2": 0.4, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 0.4, + "color": "purple" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "cornerRadius": 10, + "ariaRoleDescription": "bar", + "description": "a: C; b: 43", + "x": 123, + "width": 54, + "y": 114.00000000000001, + "y2": 200, + "height": 85.99999999999999 + }, + { + "fill": { + "gradient": "radial", + "x1": 0.2, + "y1": 0.2, + "x2": 0.2, + "y2": 0.2, + "r1": 0, + "r2": 0.4, + "stops": [ + { + "offset": 0, + "color": "rgb(128, 128, 128)" + }, + { + "offset": 0.4, + "color": "rgba(128, 128, 128, 0.3)" + }, + { + "offset": 1, + "color": "deeppink" + } + ] + }, + "cornerRadius": 10, + "ariaRoleDescription": "bar", + "description": "a: D; b: 91", + "x": 183, + "width": 54, + "y": 17.999999999999993, + "y2": 200, + "height": 182 + }, + { + "fill": "black", + "cornerRadius": 10, + "ariaRoleDescription": "bar", + "description": "a: E; b: 81", + "x": 243, + "width": 54, + "y": 37.999999999999986, + "y2": 200, + "height": 162 + } + ], + "marktype": "rect", + "name": "marks", + "role": "mark", + "zindex": 0 + } + ], + "fill": "transparent", + "x": 0, + "y": 0, + "width": 300, + "height": 200, + "stroke": "transparent" + } + ], + "marktype": "group", + "name": "root", + "role": "frame", + "zindex": 0 + } +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/radial_offset_gradient_bars.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/radial_offset_gradient_bars.png new file mode 100644 index 0000000000000000000000000000000000000000..6c53a555c9b1e5f690e57b46b4b99bfe9323ab54 GIT binary patch literal 98651 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 literal 0 HcmV?d00001 diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/radial_offset_gradient_bars.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/radial_offset_gradient_bars.sg.json new file mode 100644 index 0000000..e4433b6 --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/radial_offset_gradient_bars.sg.json @@ -0,0 +1,404 @@ +{ + "width": 316, + "height": 217, + "origin": [ + 11, + 6 + ], + "scenegraph": { + "clip": false, + "interactive": true, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 200, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 160, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 120, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 80, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 40, + "x2": 300 + }, + { + "opacity": 1, + "stroke": "#ddd", + "strokeWidth": 1, + "x": 0, + "y": 0, + "x2": 300 + } + ], + "marktype": "rule", + "role": "axis-grid", + "zindex": 0 + } + ], + "orient": "left", + "offset": 0, + "x": 0.5, + "y": 0.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0, + "aria": false + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 30 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 90 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 150 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 210 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "y2": 5, + "x": 270 + } + ], + "marktype": "rule", + "role": "axis-tick", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "x": 0, + "x2": 300, + "y": 0 + } + ], + "marktype": "rule", + "role": "axis-domain", + "zindex": 0 + } + ], + "orient": "bottom", + "offset": 0, + "x": 0.5, + "y": 200.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 200, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 160, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 120, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 80, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 40, + "x": 0, + "x2": -5 + }, + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "y": 0, + "x": 0, + "x2": -5 + } + ], + "marktype": "rule", + "role": "axis-tick", + "zindex": 0 + }, + { + "clip": false, + "interactive": false, + "items": [ + { + "opacity": 1, + "stroke": "#888", + "strokeWidth": 1, + "x": 0, + "y": 200, + "y2": 0 + } + ], + "marktype": "rule", + "role": "axis-domain", + "zindex": 0 + } + ], + "orient": "left", + "offset": 0, + "x": 0.5, + "y": 0.5 + } + ], + "marktype": "group", + "role": "axis", + "zindex": 0 + }, + { + "clip": false, + "interactive": true, + "items": [ + { + "fill": "blue", + "cornerRadius": 10, + "ariaRoleDescription": "bar", + "description": "a: A; b: 28", + "x": 3, + "width": 54, + "y": 144, + "y2": 200, + "height": 56 + }, + { + "fill": { + "gradient": "radial", + "x1": 0.5, + "y1": 0.2, + "x2": 0.5, + "y2": 0.6, + "r1": 0, + "r2": 0.5, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + }, + "cornerRadius": 10, + "ariaRoleDescription": "bar", + "description": "a: B; b: 55", + "x": 63, + "width": 54, + "y": 89.99999999999999, + "y2": 200, + "height": 110.00000000000001 + }, + { + "fill": { + "gradient": "radial", + "x1": 0.6, + "y1": 0.4, + "x2": 0.5, + "y2": 0.6, + "r1": 0.1, + "r2": 0.4, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 0.4, + "color": "purple" + }, + { + "offset": 1, + "color": "crimson" + } + ] + }, + "cornerRadius": 10, + "ariaRoleDescription": "bar", + "description": "a: C; b: 43", + "x": 123, + "width": 54, + "y": 114.00000000000001, + "y2": 200, + "height": 85.99999999999999 + }, + { + "fill": { + "gradient": "radial", + "x1": 0.2, + "y1": 0.4, + "x2": 0.5, + "y2": 0.6, + "r1": 0, + "r2": 0.4, + "stops": [ + { + "offset": 0, + "color": "rgb(128, 128, 128)" + }, + { + "offset": 0.4, + "color": "rgba(128, 128, 128, 0.3)" + }, + { + "offset": 1, + "color": "deeppink" + } + ] + }, + "cornerRadius": 10, + "ariaRoleDescription": "bar", + "description": "a: D; b: 91", + "x": 183, + "width": 54, + "y": 17.999999999999993, + "y2": 200, + "height": 182 + }, + { + "fill": "black", + "cornerRadius": 10, + "ariaRoleDescription": "bar", + "description": "a: E; b: 81", + "x": 243, + "width": 54, + "y": 37.999999999999986, + "y2": 200, + "height": 162 + } + ], + "marktype": "rect", + "name": "marks", + "role": "mark", + "zindex": 0 + } + ], + "fill": "transparent", + "x": 0, + "y": 0, + "width": 300, + "height": 200, + "stroke": "transparent" + } + ], + "marktype": "group", + "name": "root", + "role": "frame", + "zindex": 0 + } +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/residuals_colorscale.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/residuals_colorscale.sg.json index ce86395..2418d2b 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/gradients/residuals_colorscale.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/residuals_colorscale.sg.json @@ -36138,6 +36138,7 @@ "stroke": "#ddd", "strokeWidth": 0, "fill": { + "gradient": "linear", "x1": 0, "y1": 0, "x2": 1, diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/rules_with_gradients.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/rules_with_gradients.sg.json index 5606384..f270457 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/gradients/rules_with_gradients.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/rules_with_gradients.sg.json @@ -22,6 +22,7 @@ "y1": 1, "x2": 1, "y2": 0, + "gradient": "linear", "stops": [ { "offset": 0, @@ -55,6 +56,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -88,6 +90,7 @@ "y1": 0, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/stroke_rect_gradient.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/stroke_rect_gradient.sg.json index d8268b2..16c355b 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/gradients/stroke_rect_gradient.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/stroke_rect_gradient.sg.json @@ -282,6 +282,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -309,6 +310,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -340,6 +342,7 @@ "y1": 0.9, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_circles_gradient_stroke.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_circles_gradient_stroke.sg.json index dceb950..ce26e63 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_circles_gradient_stroke.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_circles_gradient_stroke.sg.json @@ -21,6 +21,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -37,6 +38,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -60,6 +62,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -76,6 +79,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -99,6 +103,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -115,6 +120,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -138,6 +144,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -154,6 +161,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -177,6 +185,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -193,6 +202,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -216,6 +226,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -232,6 +243,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -255,6 +267,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -271,6 +284,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -294,6 +308,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -310,6 +325,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -333,6 +349,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -349,6 +366,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -372,6 +390,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -388,6 +407,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -411,6 +431,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -427,6 +448,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -450,6 +472,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -466,6 +489,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -489,6 +513,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -505,6 +530,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -528,6 +554,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -544,6 +571,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -567,6 +595,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -583,6 +612,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -606,6 +636,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -622,6 +653,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -645,6 +677,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -661,6 +694,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -684,6 +718,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -700,6 +735,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -723,6 +759,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -739,6 +776,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -762,6 +800,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -778,6 +817,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -801,6 +841,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -817,6 +858,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -840,6 +882,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -856,6 +899,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -879,6 +923,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -895,6 +940,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -918,6 +964,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -934,6 +981,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -957,6 +1005,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -973,6 +1022,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -996,6 +1046,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1012,6 +1063,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1035,6 +1087,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1051,6 +1104,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1074,6 +1128,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1090,6 +1145,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1113,6 +1169,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1129,6 +1186,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1152,6 +1210,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1168,6 +1227,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1191,6 +1251,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1207,6 +1268,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1230,6 +1292,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1246,6 +1309,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1269,6 +1333,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1285,6 +1350,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1308,6 +1374,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1324,6 +1391,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1347,6 +1415,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1363,6 +1432,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1386,6 +1456,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1402,6 +1473,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1425,6 +1497,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1441,6 +1514,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1464,6 +1538,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1480,6 +1555,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1503,6 +1579,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1519,6 +1596,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1542,6 +1620,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1558,6 +1637,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1581,6 +1661,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1597,6 +1678,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1620,6 +1702,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1636,6 +1719,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1659,6 +1743,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1675,6 +1760,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1698,6 +1784,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1714,6 +1801,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1737,6 +1825,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1753,6 +1842,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1776,6 +1866,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1792,6 +1883,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1815,6 +1907,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1831,6 +1924,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1854,6 +1948,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1870,6 +1965,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1893,6 +1989,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1909,6 +2006,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1932,6 +2030,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1948,6 +2047,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1971,6 +2071,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1987,6 +2088,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2010,6 +2112,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2026,6 +2129,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2049,6 +2153,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2065,6 +2170,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2088,6 +2194,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2104,6 +2211,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2127,6 +2235,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2143,6 +2252,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2166,6 +2276,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2182,6 +2293,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2205,6 +2317,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2221,6 +2334,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2244,6 +2358,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2260,6 +2375,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2283,6 +2399,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2299,6 +2416,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2322,6 +2440,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2338,6 +2457,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2361,6 +2481,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2377,6 +2498,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2400,6 +2522,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2416,6 +2539,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2439,6 +2563,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2455,6 +2580,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2478,6 +2604,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2494,6 +2621,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_cross_gradient.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_cross_gradient.sg.json index c90437e..72bcd32 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_cross_gradient.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_cross_gradient.sg.json @@ -21,6 +21,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -37,6 +38,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -60,6 +62,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -76,6 +79,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -99,6 +103,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -115,6 +120,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -138,6 +144,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -154,6 +161,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -177,6 +185,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -193,6 +202,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -216,6 +226,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -232,6 +243,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -255,6 +267,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -271,6 +284,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -294,6 +308,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -310,6 +325,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -333,6 +349,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -349,6 +366,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -372,6 +390,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -388,6 +407,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -411,6 +431,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -427,6 +448,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -450,6 +472,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -466,6 +489,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -489,6 +513,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -505,6 +530,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -528,6 +554,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -544,6 +571,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -567,6 +595,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -583,6 +612,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -606,6 +636,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -622,6 +653,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -645,6 +677,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -661,6 +694,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -684,6 +718,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -700,6 +735,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -723,6 +759,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -739,6 +776,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -762,6 +800,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -778,6 +817,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -801,6 +841,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -817,6 +858,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -840,6 +882,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -856,6 +899,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -879,6 +923,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -895,6 +940,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -918,6 +964,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -934,6 +981,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -957,6 +1005,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -973,6 +1022,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -996,6 +1046,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1012,6 +1063,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1035,6 +1087,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1051,6 +1104,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1074,6 +1128,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1090,6 +1145,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1113,6 +1169,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1129,6 +1186,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1152,6 +1210,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1168,6 +1227,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1191,6 +1251,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1207,6 +1268,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1230,6 +1292,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1246,6 +1309,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1269,6 +1333,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1285,6 +1350,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1308,6 +1374,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1324,6 +1391,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1347,6 +1415,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1363,6 +1432,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1386,6 +1456,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1402,6 +1473,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1425,6 +1497,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1441,6 +1514,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1464,6 +1538,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1480,6 +1555,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1503,6 +1579,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1519,6 +1596,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1542,6 +1620,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1558,6 +1637,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1581,6 +1661,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1597,6 +1678,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1620,6 +1702,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1636,6 +1719,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1659,6 +1743,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1675,6 +1760,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1698,6 +1784,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1714,6 +1801,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1737,6 +1825,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1753,6 +1842,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1776,6 +1866,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1792,6 +1883,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1815,6 +1907,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1831,6 +1924,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1854,6 +1948,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1870,6 +1965,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1893,6 +1989,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1909,6 +2006,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1932,6 +2030,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1948,6 +2047,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1971,6 +2071,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1987,6 +2088,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2010,6 +2112,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2026,6 +2129,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2049,6 +2153,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2065,6 +2170,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2088,6 +2194,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2104,6 +2211,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2127,6 +2235,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2143,6 +2252,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2166,6 +2276,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2182,6 +2293,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2205,6 +2317,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2221,6 +2334,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2244,6 +2358,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2260,6 +2375,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2283,6 +2399,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2299,6 +2416,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2322,6 +2440,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2338,6 +2457,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2361,6 +2481,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2377,6 +2498,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2400,6 +2522,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2416,6 +2539,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2439,6 +2563,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2455,6 +2580,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2478,6 +2604,7 @@ "y1": 0.7, "x2": 0.7, "y2": 0.1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2494,6 +2621,7 @@ "y1": 1, "x2": 0.9, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_radial_gradient.png b/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_radial_gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..625489d2b5df713dba0a721fa2ab2e05969338ca GIT binary patch literal 193993 zcmd4)d0Z1$`v#2TQgNx`Qj3ZbtqZnRQ#TMn;#R4(LakNWB1B6IRlta-Y$2(l;)b!J zBC@2`M^ULpi?T={A_yV^Ra8WT0D&N&gb*MLN#?!JnaP6f^ZdU5{NB%7Foc9=X3n{n z>)x(8{I#3w@SziiT3A>NU;V|(Z!9bZEI|JT4}w<$clw3Ek0Cq0_&(UeV%Qk;ub;)a z#Bmn=yCYVwT=s2fzqfV$PE1>Ua@y+AN3X_byRKa6>+8F51N;|){!>2s|Hps3&_{cC zpriQuu3EKne|AFr(DJW*JwkSegt(WZLw@x~Ktk&EJFQnu4@BgNz~E;aJiK-rAG$?W ze+Bmat5m&mS$b)ozuNtbaCwlPW&T;I*EM3xDtq(Kf=?xSCs#|&j);!UrTtXB$#g{Y zOec%_|K`bcPdtA7_zSVvkIUuf%BpH>ef|B9UT@2UE7un-HD48CeMrr2Yf-nS=surN z^A(lcu1e?b=P5h?WE8G%j~r^F8;t*DUg>2^$Dy;SS`ml$!>q8S9I5xGfuZa&S!v)Ge+7_eDB}SX?o`zdj zEz(u1|Dvnr9jw_K=Muiv_T`dO^Sj?4dVb`|uLloYKKc4*F}PgeBFYVYHsPw8B|APi6(7y-Zo&XI-}NmEZG=tRv;t@;gP|anX}pj@jI? z`FiZS{s+Du1)sip^3uus=UR*lh|1fV2%leA`qPZ(i4fo-0tL)?D#F6sm z+sxkEYNEZa?pKB?ic!ZRdRSri7|wf}E>7q6szgojhK+megKNs#hdn*^JobaBEz(JJ z{a^GlA6oBs-tw``-=duxr-0}U`_)|9h^SnmSH!1lPSG1QM=KQ*?&Iyw4Y%Ba*KS&oa@;Xk`sn*K-?s~6 z?aF$co7p3hJ|u2vEFb>a(Zf>q2=7;m-V+cSLHP!cB^Kr?skd^B==qc-KginKK9ZFl zK3{X)?#|>pledkWerUqwLo@fn2~Qh*q9FLQ7lroY(Aj?F+u-}x^zAcJrg@%R-%xz( ziafJENV{A)j4kzxoIz6@rsWg6865){cjF@4KJ zcX^GopR@Avo2^oI9e5q}&9KMst&6(6?9|c?D+hkEe9Fi#`tO})5fIfcDiDjnR&=_a z4aGmL+4-gM>nnYxc5X8*ESaG?%BUm$VD+Z6Bo&O7im-QG1T6{A*+>`ZElcsw2mP(^$=~3mENA^ zB%FPbek%9tJIh<(lrMhx$FM&Jee%(lzkl>m{{xekjy~i!Kh80RJm*p@64O#ZC_YAC zTh~u5nwB!HsIfRdR-N3lMBBvFPp5Z(L%&bFC+f`>l|Z$L~cO7_Q{Uvi| zcaK*{)@$CU5(FBwWk1y-PpQ%Ov86HDxM?qs_~Pi=$^HakkiUioY0c%NLH`to7JusjV*7DZP-+Z1NTy=c4jZI*H_Qjhb zm5@a^*EYPZ-ABykC_}h$ya**vvQQSe)~(!az29lPj9yc~aQyysA7$x~)kqr`;A4Xq zaXzfxX!jYOCw-n=TIII-IDDZGZ#=8LS4Qu+D(kw+ZgSvE2bJ$@O%HfCZ(v5dy2yWX zerk2GY}W3LAb&|49{%}t@0amozw|id0@p_#bpn=>5BeK~r1(r`JlZ;}Kkzsg>rfGv zL3?}HzZbvwOpS(L?H6!1%LlOY-Pr>Kip7F_Vi$vmWt7`-{q$f41&i8GNY{}~J!TqQ`P{3mKPX9RA8l{|}AvT&7+jpH=#*TkZ?P$F3?JeZ@E2| z+``_Rs$O|nzSH{V)AQ(9h;9o&Ly&oegAM{cM29?ZVqinn`))oq4w3~(1J|Dx1n$@RUp;ycc}OZmjTK-Q7xY!f&b7?mwc5X}wIf+~IP33(xh8o$ z6rxK{eHsQb43{2x{?Smdm)F5w?ppQ~RP&=h1`Y+yv`FuVYyevCp!t;Sf&^pPg%y8X zXgZhk@XH7!X}{b$f0OY>5mV#vSHz7HVx_3ZUsUKS(zzKc-x#Jn}eIJ0t zY`Eec`H4XOmmtqoHTAW0((ZLv6kjHJv`dMHw($0@qsQR{K1V0uO|HhDa8C1Pfh>|{`p_Js ztC_Yp^BzJElovn>J{MdhDeYjOk#hh2ix2Drl6Sl%NXx0c0d)`T@n_dLuqVqj*JTfh z4{Q{}U6%3hN`H*Ka~alP&L`w4Y=8~%rCbDP0`^4MZudi8h;$1k2V{_YSnI|Uw~*l3 zOaQUl4QH|SEG&j=I%mH?|5zXe@ZAmSFtM*XbX;V1T+}}F&<;MD*!GE3#MUjUjB`x6z>hP z1%^$+PY!OWQ>2vpC9cxjg-R+pKG)Ux{-HNxtS@Z;_Ri;^n5}<2DRsi)Nf`$U#!wz} zDD1~(oAR@Zkl4r?4Pj<*$SvHTVqDx3hCy_)X!fSAvdw+($=f+aX4>6stD7 z)Y9BDUSB@?C4TUt&PVu-H6^dGR|Z3YfE6|q$bF{+zNGX7djNwm1o2paj3M^hSSFC1 zm6V+_ZRcGhM6K-N%jkwf-`_w_PkuwWcCFAir>(kruLoGbR+Jns& zg^#Q$Tx9zIf&86cl28b2VXEng_X0cyZt%%+>2#tkH0GNUgz+BZG1|?MnnZ0fK=4KtUL| z4g*4SL&n?u#NZcnM&$O9Pt4AdG;-)<<+p1pJ5#tsiu3DbRt=&xvrm^NbM4b&#)JG~ z;W6zU5~FYY$n!xe{l~B`XG4V1um5Tb90-+?x3ErY)rHkYz=T-#Eb1)pAor>1}7}V_yAO zrethbTL#DfdX{v8o}Lvd|0rV5qxXQn7R>Q#rK+7aqcaeYA>zMGxv>WX7~7v&Ij_}HqH0W zcdM#Ddwg#APlC5M1J-P>$vjUu?-~;ZgYxxi?-a8L{+#|;A0E8fz9=zrKA@PUpAQCXyf4Gnr52k=a{-;(`ue5=_ zReVNXyulFNIxi1Q5Et^D+ubvJUizyAyY$*H+wh7N>c-CET?u%((Mpr2XulXlfKsGfa?KUkBu9J3UEl_bsnI=`H_P^Ll7X=2&U~9U~l{H>kT4=?Y+^u{ryW@;exNQ zc)>>ftqSBMcxVrKG%7?Yg<87Tm}EG?>esJf!DEnY;Dt9> zUToXK&i6q0fnjm~g0X{AsF;vM-bTxco>YYYF&t$2)_HP`@dmW5@^rY=4IT;Jyk>(R znx8kT9>+2sPEyw7Z6NH-tqH9;Tl6+teWzTv*gIIZFe|Lr7fuThTkgn(C-%>E13bK9 z-Zi^R-37N2$MII_>tEAUzo|y)>w}297i_y{>K!zP`Klqg9RoxsLIPx87i#o^zCZZKk^jb_XLCxZiW!_uIkf#Vyw&C9G94o z_S*QWvSXao6j(?FIJtHGSA%c6bp`3slDV_(3NQR7|K%s=iQiAUu9C*Eq%wYwGI8bb-y!zx-yV9JwrgB)gf;wi9Ts3LbI~$Oyfx*`Lwn zAC}#@2T6x7K#<3*E|YP>uYy}J*(uOw45l~0NzQ>Z);NhTf+0BaMi})V(nTa3l&Lpt z3aJ~WO~KDhJG0W$LBB_rF;Upwk3sk|$~O>gW+@{LO;VjJuU4HYSAAH!TYmi!uRQ+k zqqBkKukD=xo3sqOx_mUK$`f>uvuDOg9zO_OFmK|BW0q6%^X_UkmpVKW?PX}&7>(zx zB4-kwFD{+BXC1)lXLNWMz$=pu(6l@7J8TTL4x~~U!5M}>Pxmc<0SU_#NY!BcN8%TN z<;WFabBv)^U;V&9j0EroO+wxR%mnfsX!BGx&t#o1thk>t)eD)$+yf5mYYvT<7+Hsl z0vHF8n!I`K5PpYLo;P5_G^GY}=7hwGx)4zAqhBU%X#I1v*U0Hh>yW3Wg7!;Wz$lrc zovlmok-=hNv-SV`p}=Dgv)HS-{l}Z%fdXwaDG)K)($Z3U*Gg-_)%SACm_!Y8K*tlh z{E6_Mzp%edZY#_C@n+ps>o;_L13i@I5N1^?;&MN4WjT_fvc~G~vTYv6?Zffoph0UVuh!0n5SsgYaxefcN z6Xye2ZEX@(EYi>cR-_c|Uw$XI7QK%kH}Y5r^e-E|{nA<#;ej6^U8qULNC-pjl0p5@ z7Gqmat>`~Cm6U@aCj^CMnqOGX6j$Gll9hXjzCnm8_Qs-*tGj?X@u z`2L^D%J+K*wCNVMlCNOMSHKQ$<@apWR>kSZ3o>-!S>3~{hi5s%i)s6bNQSuE=*7TU;G;T`QtSb{80)nir+n7AwHG8Vm|3E5dRA^lP`ynLE69tStI9)$BF?pTz!HS@=nrCRf&Qm3U@K8xn4^ zjt^ybH4c?RsnmZS!!bqN`f+5x--pM5v&+elhFEdpu2t4F^m03UvsxV^6%O3_jII_& zK{cNpVeiJe5fmO3v)<-Yx7lZD{P{?sdrpN-`Dn*Ed;3dG1(_4aj~H|?YH$7K%`a%* z$*z6h_gj5N@2R@aP<`&Lz0XV}T5211i}%^+Uk|cPSARx2Qc@Lg7-**22A^uO;sz9i ztvWJ>M@Hhn59=$n;Rv!A%ryzwDN~5{(-5y1LYV(zv(e{qnhFFRSH$WoLb;7-E)nn2 zG=_12t7_%eJV?(vwI#At|< zseay5yCa&WX`wY-^@})Nlsl9a)G~X~?zbP?mk0b6I$Prsk8SvtB3)nITA#~4dt%{TY} z(u|w(1O}`BKjj9XP`QAc9HQzBsq=A>`l!mgw$YW_oTWj$`gPU3Kg6#=E+`2A>*a)8 zIhFv2i2wR35~tTtt}u@-Dz+Ko3{%8W5&q*3Ya#xFu=}46<#Dm-I zp?)jY2hK^#DOi(pZ;gB}1o7}rTMDN&1&ZOS0nc6iz1zn!k1IJcrSvK{fv&qpZ&Hft zlwmpkOrFGQaamcZQ-F6`vGzsc~?WP^fH*2(rv!G4A2RUD{(^ zj;GcsxdfE2GIUE_8dcFZ!b)c(R0jNoe)!o}ElSHPj2~|Aw*50F7eICv5TDr|f8Ubw zFW_R@*7OxGuODva-tx`K@ZG)jzTcmW0o7V}Sc0PAm9Orm?B*lu-3P*x(IO6C{t4*~ z`5ncVkTUxdvb~r0PD{i{5!XsgDdYbQF~FXi1-0g)XLLalUM2U@ZrSchV$CG+L+&Mi zckhzk5wemi*VcF0EJ0u%Tnz^EeO*lzXbAE}@CShQDPM&3~&s!g_eKnkU~#CpJC` zk>0u)v`c>|r&_6c?v#7FT+>tD5GZa5%xV=kuVFN=QFqHUyQP-FZo5-5gLm6;^Ti#< zviW&zm*%TnkuoAqDXC@T#BCS&qy_|eH;28{Zgtjg<++ab$ay_t#E8&~MZ(dtG!D(p zrD2+#?Vf!SE0?me7^g?>j}DJM<~p_H=$hkYlaRPsDs6Y{DDP((LhHEp)>B=QqMfc# zClWFj%~Y3jDUszBp|O@ZLlP>t|FygHL-fNWfi{%^H-ffBak7g_LFV%Hcf(nwtxt}0 z*PiRXxG;6itmkph|D1E}JLV5*AafvankVO;)gFQO7!j?0>i-Dz(`q%>#OH`B03h`H zcpL>!y4Fg3%7E?vHH0+1Xv`oZw1{*2Q1O}tF*GDZQ7I2+vV8uL$udMO2o<7GhDs@6 z7x}Nh;oQ>Sp)WOCC+5nhFuH;n1>7?_U8J}6JiRRXPsaZL?(UGW1B;D3AN7>9dsvr} zJicUpJ!%|zqVZ;FtpDcU{-?V$N5b+52c4~~J4<#yTUe6a!L6cc^JpEJMN5uHyL6ow z*0$x?5=A&SqkoUqd!ANO!PT?~WeGX-6k6~(^-V{Br*Ye}3+|_EYJ3%2CchuTo-69K z6Wu$S^WtdGGf}A@r`501Q{3ape%coKfs;e~XV>g{wu>clt}-;YCs)wakoWm@jWVn< zBg|utzU=c_*>Ev0$tDDpJ0e3ScjBs@w0o4*NMM_v9+mdfCOj9bjxZ zTCVa3f$9h0tNGr?UBz9$*b8cYYCAU@{ZPDI+xNHh>s3FJW)Ml`#j#*0krM_FOqxha zT=5%5IaXx&>Cae-BvI;pbX9+SiU!J2yInL%F6Tn{C?Z?ufb!lLu|w5|^v=|aq)Rr| zVsJhma&V}VV%LEuW53-$?HDS`Lh}N|I*?;Vp(`o|o3d~S*BY`S#@PFRNHI!HR6oy< zTUzxF(Dw}CmT=FcxO86;YSxGr(>Ayq;ani`n7Io!U^kpHq{J2l7dUQ&ODmfNwNjSZ+?b^L_t(y;qULk&ws9KUI^{G%u4Q(wWy;rTRSx<^ zDZ7s3sBP(lhF;#x?QT|Z2jeCz=8d`4b)Mqao?$Qi8OIWsO}-FeZxVKY)SSHIcreeY zsH!NbDUQ&@wbb5_^l}>j$1`QC-NQ%A6fIE?qi+sUHybx{Yxvmba+5eo6GJ-Vo)^a%N3F zk5Kazclh!DT8+vwO1M?rFxK?2-`fFhX1tDqU5})$3oe^GgwEkls!}Kc3(A#J?>} z2uQ5jEa@5q;gnnPj?Zq?dZxkmOHbtHBe!C6d=a65jS*(%_|B~#;l1^Oh)=9(;lI&z zS+pkZRldH3FI6x)6k)yH)hHIH3JRpf?NhTu@dvK;Vv&HbBMmC>hO)_kv3oN=ngS_3 z$_PX85G0XG9huo_0HC+O#jibEt*Q4U5qh>C%q6ZlzqqrEme^gfZKiXr` zJjdZjYaW`?!*Qzp~>3Q+0u@$&Os?kb5uYjf+nloyes(PZ#%0S8M4S zww{OU6FDP!5w9en5|2oq+@9H@GnP5eqcWSGv9|1C7ap)<*1eLH2lWK`Ire6zX-mc0 z;S2}DF?mPZm`o6CS8kW9x|OHi=F*$QNN~+lLO(mQIJZ=WB`8SsOi|wIVHkr)=S^af}=x8?4u$@z%!P%Qe z4?4qFU*y+cwJx0{?3&ea#GU)Och7zAGZnnWrB_^&8=g*e4{F$A_u>xc=){xx!O_S} z=haxg5#KJSejsaIdX1aU7k4#lA2YS12=VUQk~Q1aqmO$9A1n2@uM+NwjhSzQ#X5d1 zim?~n-kd%kY|gk#&kA-d!pW28C`=;1$zaJG(1IlgaM8Tov50nt(WunFQL6Z@y}7bp z)fsoqhqc;{Qpj?GVJ7n><`o=V#-SbzEflCk2`v=4qrJYq1ASS8q3<%0Z2CgEYSbV^ z^#oxU@jnY@RF)J=G+9Q$370+5Ub(^Yq{N(EXNXS$(}{{Kg-w^jr*^pEF+8RV*vGP}{oB`E6x#Ax)>E$y-GFmRGxb=DaJ; zVLrL7Yeh$Fm@TW^7}5ng-||lF$r{fPN1{=Y$ZZJI_sH~T_zA>B_ss4go4N%`A4ZQ4 zyUCS1oiDfN=S6u-mIa72OCPJJmMy8DsMMF{XzOYEDWZrsA?h@ddVXI~=JfKU%LMYt z>8w}M*V<9Y8$=LNZ;m{K`Q=s1 zHPHuhuor?|C)S2MsL#Oyt*^njL;OnPpjEHsmeF+gX>!8L!zs7%41G)Uxk)JU2Y77b zXa8bRPF`WlaPUYtAsGH8)8ZE&pC8s9i>4CwHyp63W+G?|ID~{EfS>;lGE9{j$to%& z{*WM34`7tBWu_W|;>Y5+45~{WsJa9_j22K}2k{7i#?s^XA63pE%h{&J1*-03$naD7 zL$ew%CDJup;$)lHc7F7vCPoR=T4nNnEOkGjm23r>jz~a-AQ7Z?ahBI4zlMSXM2^N* z01^i+|Kgs#n*>@bu~{aY!^~U*=_qj87uDbpsxag>O%YsR4Hj|ypz5_DlH0_c;kga7 za`zEOy`}fP4?1iTO=0!avI^si61T|8mgqGO`g7&#{POziX(4j%KnySr+$b$89Klp< zW9G-u!=@J5?mEV~;O9KSF;n^LnhdXohV}H$R4$SFs5Z1vsehr|`Ak&1KDqOQ+TIv( zf))3sRr9&H%!4r%HgL{5ryfV*KMHNDnD`_^STvihx8}Nd=&H5PS-KCI+GWf~z0T6e zOzHINTfmt^QiC`iS;lB_W~eI}#ch$&Hu)A>&z4Qyf2e;|sw`f*FZ5PF7Cbr}om{7i z;-v*wjDV!Tyz1m-cW))4d}A_m=dPYZQN1G;36&?JB1WiU{j@`B5<=LD5bk_4P_aw5 zHXyn7C&{BhHYpC@CH`<@(ap^qc3FTQWCBKcO+Fm3+S8%13D=n3r$Rh#DM;xJ29jP7 z-P;)mMgLDQ@vM41hQ+wa!t{Wxt*JUoweO*B8)zW3Hg@g7Gy-n6{kLYx^SIOY-BuSP zVkUE02FwgOZpbsda(Y!l-$V? zM&y3L*H!ULiO-qJ4a_1Xw@0a{7j)H6%x)S7rGyN zJxBAgP*EbB?^(%${Ku`EH(z=M?NIhZ5uJ67?sKh_Pt4$Px-LMbK^n|Z1goF1G#gyH z#xhRbFMhA;WRrTjdw6TC>Qb7xplXdD%10~_*DrA-EStkJ;=&xjrv0?$Omm#JR>I{m z&Jm-yz5fw4p)iiqmeHBRSCL_y+;Wm%vvgAW_39skb}kcDUHItb-{Y)YA;|ia{;A{Q zkb=jNt`lE{+_kDzLJlPEpnE7NEveP~<=lGE^`K-&S7LXm3 zfPW3ml<(M36f%(w9@Wv+>ZoX4KW^`S5g60;e9gDslAoDTyr-@xl%y(SDCcXc1DTyQ z?m|W3WZ5T=E#V~5yv!H(#*H?^EYRdhwrraa3)w;imh-=qv5{>hTRa++?u3hgSSKhi zihNZh=RV8ebZ2x9VCn`WZcE8rAS&<|Hu-l{G38ZS+CJ3f6h2CL-(UD%nq7HlnyYYp z&8p}MFd?qZ$5rVOqL}jDcTwe{CBLB2{D$`bW6nR-7w!y#2vzcs`q zM$Lw{G!9L*o%XL-$#lA+Bd&fx_uh%w>Tw|V zH^Y2m)rTEx{#fyOX8cyin=ap_z4W?y=SBknf@nW0^}%k34yz3P0Iy0pQB%ZjEb4eF z<9x!}S(1Q2XVA91hJt_U>qAA^S0FQ__+dySkYjOVR7n2*XkSn4Q| z)1TYI+MFYjrnqYt@H-ds?|J4t^OQ55F`>%Sv5qBQC#=#Zm}RY+Ph+qBPUo%=+Chw+ zyU^x`Jok}9OQ#HmE^2#l-q<(dMtN%Ffa>|PnSgo_ajlPPQA1@vs-X6dC-PhM=IN}c zr~$UR-(3~;715?DEbfq_N=;Pf25K!MJB)GD7Vbmz_m0_O2O0aK$g(1NvW!SZ8G8q=!U1ROdqR|9 z^0@FIswK=v_o`esk=tR(y{q}9v?TXlNvAE8?l*O_6irNRleX4cXDi^oZA;tz_QRv= zhxt0q2f+38?pElnftHIm!=VuLDSeLmcABWrKk|vcd@jFZ?xy$f=UEC%Ejy+Zx$M7x z<-Mb0hDq(DWK~#m4Ye?oeX?%Afg3Ri5I;cHdE1Yhjzd1yP#!iqS>$1vimk5vgMoUx z>gsCALI3S_>q}Cwl``~~f&3@{`jM^YXkP&Ek@5r67G}l@#-v6Lp4JcAjNM}6(O`!i zIema94^XlRx38YKh1&nI9Q|wiD#}KYsrrM3sIuBt+q*co8*mZ9o6ZrF7Va~K-l>=txHb5+rJ?5nvfN%9+yJ&n~dh;=u9 zz8{_+CBl^%ks)*RouAh>UUJyN*;y74u?p#Ydhy)&Gh_1WQD&Q7+kG^VlV8Cu=S5n1 zEU8Y-eUaKJjbN1($J)h15t!lP2hpmyy~QCMqB2wsS#E(k%F)>t+&Tw6ZK#!M$4`qU zjsw_RrVv*bD4UhJ|$aPuuv$|L^@_IT8%r$%^?Q`>Y>|(Y^?`u zkMK6PVFHRA^3PvI^mwPIr)L^UcX%XPRFN(0 z&c2~dnl8vuyzKH^vfKOc1dGN~0KetGG-mX0j`|3KkIB?GW%XB^yRL~f*Vsf#Bty1C zI|&u>o$P(mmjJpzIRYW9Eb0`529A?HP_qRyHOCbS`((2fj^S`O2m3S$~rk z`6*G6)6|wTy;7&&?HnN4LMF(BxZ%dsgNsdj84SsQr^d4xXbS5#8U?&O_y8KgO)kaL z8DwWJOwJj`RH(@^N_)~mA2-R$Q|-8?-HCSh=HcRw;p+0PD}2=z zZB37r&Do7b-%CL7tea#pjF34S!d)7&o6YEoS zT+VNaclus*K&Cje@o)(gETQG#IS>{i8YakuQg z75?CMtc2_~b#!)aY-_Cy;>er{Pc6(_&7jG9XnEOIGPgdWie?%W>+uh`$4e&Vd!m{v=(p(^P-@koTx9)YC7Yo60aQ17pd4_4XIXk@IV_$l!40q zloyAPhzi)zjM=v>fUJK%-=4jOo)W=-+fBN$dRR&pTp!>GW|z$u!hb^!ED z$FRrP?T*c6-;$fLF(G#)^Iq1P=Ch@~o4Q34%t!!;bsR|?C(4~&?%r7A3;k~h=HTI4 z)Xx3l;C?dIhT2%5q2Q~M!_Ri!uWV}zYk2G4sFF*xEX53gVn(7SYQ0d^aG&%Oe|{r{ z#Wfiow8Erh!wfX(?AHxIgN1|pPn&WWCJXOw#d8I~F95@=)KncF?nbcz8ipo^I?;?0 z3G%?MB;qd@)A>1NaGeM93uUY{)Wkb{;<DA3B zQ*xV?iqrh=)57PE{pG)3vs{PgbWp+R5tuqM07ns;M0Q+%oEFG^yimxQ=*hoFaWmm9OwhkA#dr8iq4^WfgI0K*0b8x1ydXK1 zhKBS>VFGc2!DSqeVR(gRv?<>V)4hI0Y1)EfeqDM5OCmZFXuC_gjQv2f0y?*FGd!3z zA-V4`ylk98hfy6A0fJubU%qk(kTakGZNPWrbhcrHAJoYR5AfEKI)tzSPA(uc2QzsM zQhMhVvEqubDj{dQhfZKl5W)SA2&gxjy=vRN&ek|dy0a^r&s8l%Sp;B%kSs{Xo$ndf zw>NoYGn=L}yQiy*ncCI*jOw$jjv?&+Fa-(&$bRGmZV$4=2;RK(_`?c(rqT2vW{j^# zVZMXWhnj!7L6HQ^kH?eda5V@ogLfiH0#I4bG>DDk0n#=j56W>B<&R;>L7bDs?jP zBp&-Hz+)f5&xj$W?(kH-YwvF~^{CvIHMxiF7;lT63wiY~g=c)4#uYV;TQTCz?ImZt zJ8!jb)#@~|u!_pa^)Ax+E(blrFM2c(``p$0-Ro(&YFg-6Z?I%A!Hega(cC_TKJcsv z$xHw}@05!Jd^U5S1(egx5QI@ z)K2$a<)+}_#OXQS!UwY}#rINr_~d*w?5<%P(nyg2{14k;NzrK__)5;Wqw!HlQ_LHK z`WXx-KndxtmRmbzyBs?9XFio?)YDqJm!Tj5On<@DDVW%pWx2M)i8;;t7WuBUfa zX+u;`dFpSs>)JiTKK4FBHYg!d0yLQqxnmkwbi+9q2@$}|I3LX$mxAYS5mN^cKTu2o zV8l_)#yDzfUZ6?&FK#$E-=RbPRzi8N%aLGbFQPtxNaIETHwEyRz*zXV zD_1W46|;;0jzJ{|T>B+iKmMAYOlA8~#vi^wosii=3PlyId?fT%=8hUC?;?lDW(T>r z1y`XpRz!I1!3->s5Ue0kq>fIKo0#ZYC;&xrjrd{|k5Ycf3cIaNn1GOr**buEhYSuk zL+{k%9l>L&x|wxXiS?#tcgTQO|{&_FVpzo_HB=EvufbHorlCAOZs z>qy*p!hryX@v0+3Os+cO1DS~ko{aXxalC;n2n8=BTN1Uo9tPKW|9L-z~WV#vqK|lps`Ykm3fyxrc4A#{e!!c+r_r zA)Y79yX#JLx+@sP3~fH6V;M`nOjuRraDg-@m@|i@1fp0+NOwQ9->;!=U{=x9B7cvo z(0KaT5GrGmChVCQVok8OPU4-!>uuyot`f0*MfpJnCqJWe3BP-Zu%$i$tO#fis(6qg zAH{UBuK$MfBgw?Y$jOIG3ew^+g%fBpcqU}bP=ah)Uk)FnRfx@JMnr|JI9L8QQS4L> zY$u3FE?T6ERrHHA9Y-B(#Cc#2i6LZ%OtelJx`$ zuYRWfkiWR$hg?Z?Zd9tiyf01LJX$x0c3(|fQtor92#=y;)NgGxlR(z>`Q<}U6Zl}C z1wz~w{U4eD!^IPe}YkHW#A&g#oJ7*TP zj9%nGK3pDzbC_=lOu@+VV&m0ee1Y9N>hpqYL~$L+iuO7uu2OxuvOZSS5&KWxnl6n% zu6fnzkkN6YWeWmhMpcA3&2%)NO+ywiIXVw`V|;8zga4T~#YIQN4=5n%d*1V0YFnkP83)=G#JqIWTf$CS44`XiK_}xfh3+3 z9~DcwY?7qp91!7b%7MVJ2)+A~p!3ojZPf_+~0O!jg$b{7zIeE^Qd*gshX$s{xG5Ep^KO}clN~51W=U`>Hva+Ehx2FUMzTWG5 zDLwOeobleB*W((0lT1B4!CclzVmRav5Ih=;_)6X%^nUtH3cW+uDz+OGfeIK&R9@(e zvSB<3(Z33Th_d?=Ei1TaQb=^T5CuD9K3gCH3$VJ=ER| z&TY06MYmngKAx&)_95{k`tdvG^6v@QN(cE-t%Xx-d`yrZ;^Y_29-%k1(JcYCp4+Oa3_ z0(gzj%?MQ7Po@Q4K8i3$_;1|G)Rs0nY zN`mz)mUIFwBQcC!+sw74bqCSz11)3M3PwR3w>B1EDc$5$G%3uIE9zEmI(C!|l#2^!-E!J}G`2w~`}i^L-$=C;YQ9RH=n`?xBf&c+ z<}XYX1|o$%bLr%P4UXfFK|qIG3NnI;pcCipGVBxu74D5)YZAdMz3FufY8XiHox88N zH=&kOwO*#;==F!W<^JBva}#TV3$`XnUuK?hn>63|(E^{Y2j>vYWph}W^!r8c5j#{? zpQe8(tf|hK#8Qu775f9X7x2(p^(B(a&wU*%Iz-nt&>Nrm3JO;!X%B}t4WbYtPz&xI z3G|DImUJ9t-V&vZkXm^Qt%B7(V2JYw~a9b#fbCbNLA3n37Yel;*og z^Fy=ZA{;Rn>$iR6huer~1JpNZnz@|Uz1%}-&1Ibrs-`*ywG4!o^oqr$tKCKq-Ji*y zJ8t8jndQo$+GfYDDel!_6EbKuWu7^5Px%a1?+jsOM2_`ITxMKj#)omImAKN|p3Q?Q zlo&Fu+H!RpL+hWcIhOL*hK$gAN$#63i0hVlS~ZkiaQgoE8lb5ydet>f>J)6-{n}N& zO`zB&d{dJ9DNfk^lcv^VN%WR+h%A@I;#CC{0tu_9r{@<9K>w?u4KNF=Nh;z0_o;zj zMJj8YTUNU_BuBK@16wSN(*(>vJ{3+fATTfpLip`jO&{8JUv{0FP>Pq%(^M&fog(7b z#LbZ>h|~$%mvr3(t}>2W#MJAU^JG%zQ2FLNuREr%KX@-a-LZ4jfB{V_xA^-UwR^kd zFjNnuUGfTHUYoEVU4MjLhLCi}PP%d@B0(lDz9Ux$hFPniS-_j4Na4ncwGwgTZ%18s z=Ie($&$KPLvhzrmbR=l#(0>YT+^TeBUxoqpVVYuYY`UFrE|lgIU`AAtz~Qqz-50W?#>i%{kF zO-G8{dCfsKJc&z9kt_F+tKvLOeLitf&^|=x%y_R)%xi@SQ(W5CyBux*v1rYk+=0AS zTMSo8%F)r_1VD9_^9PY;nlylbjo)NMCO>5yX4-ILLfE|_jcKCSX<3*S6u6dG^xcUQ z$Q#tpXGrH~$z<)44V8k2F*Pw5%8~SHnA;Sah*|F!f))-+xryCw=6Il+$s7;6`X&cIH=*$&(l8ILDmcZJDr4beDG z%zSApUXsjwEa*U})wy*Y4=cVyU)1r9tS4PoSjBWK@o)0SiS&PqGH^NucsjumA@D(6 zWuNfLoCFmDC&o?17`EOc(nZ$QE-OH$NpR4N^y(^cz?M^yA665=jI&f)U4p1_EF_6N zP?8wOJ`f|}c8m}bxbRHbmX zjGF6)`MXK-Zj?bW1{Y+y%9yaiT!&wAt`m;6>iMAe1)10uYI)Xia3LIBhTm0DI;= zvT{2bhkz6+(%n9kD8ll8>Q3N5(>mRQY?nr{NHbC{@O7`r=;y%5{p zS)Y3EogeKNx{?@d?=uFau^j;tCQ7xtl2g8N-x9X1nDt6&Bdm53+RzlmwEQ)qt~Cl# zRYGo0!cGb8)q@qjR%D`?N^g-oYq<8IF{4etDqJ@a(31HjDoRI5KC>JX z)Rd^p3eflGcdg|Yc;@7LB98Z*ugx%v-c^Ni9ngqXTv zUOx!j5Z^AI0Z5p@b<|GhW~t+x8y{QMmx$_1!m8pTzt?A|4_RpkC+nl!n>XmL;*2pa zWaBMEwLeH)8WMPYd8R+;9~3_=V8E|=0Qw=#g4x4Sn#IH)j`GDu%26tzN7e;#I&W5q zM`vb=%W)hjflqtSEcob#<{WqKVwt>0mRIOy<1BsRleuNj07C-#laD?^MBuZ)R*)^@ z5IN$`ho_EB5)0-kc-WKv7s#2eX$p5Iywo&0A zJ#HiqHZb}2U;U~ahhiu$vp!vo{c0!o{MJ-4koLW{QTo4^uJ<&T;j8 zweyLhEp6#;O`tjKt|#*3X8E1JzM*)7{MiK$!5M7OW#W}CTO z4NIOUljk|>J#5Qu=;E_fkqPI<$uJ%fn2&_95WKI(1|*V0oNPWS+|n4)D{IPUNb=Q} zdA&3BDdCdJFdsKv?Z@71c>|JQD7~QSI(f}hgRQAy7JJm)XK{mUn_M4bmRMBz z$F+Wp0Zfg5l;aWA)HLR3vfG+6YTia);A;uFwjJX}nDND4{MZqxpq) z9Io}7lVrm&kPcAgs3*_`0CRpgxeFZ@mk&YnCS)I=YX~fv$&4BLbZ|?>JJmSD+_pK5 zw~^Dkvszv)tWU|ALL)w=l@kkHU0q-8uJlTD4m%lZ=e`qyk1x&5c!}`Q1?IuHFilCv z>rz*8do`$fSILNm^jQy8-qH^P-_>}Z;gliBpF&yXYE_tG6zn% zLnkB8Bl4MtJec1bEYx>sNb#V^qp4XOpwc!gpi_pzuta3C7Tqoa^)aDb9Z8akAQ`Fz zU4oVqvRVms62xo%&iWvZe5hKPbDm2Ub!JJL=iNR`yyetebN147dRkKu(XlAGqtWiO zrh*ce*FUR!orvUTHyX~Zuk5%g=(;M@Cx~2F-5Xi=7glb{2X{Eqd>z-Y>#`#!tJf4y z4IPL^DiOO09-AXun#kK2;F{mk&%fvo%+!z$L`?{&jz`hHlk52Iu;d0wIgfA@D2E7& zqB&2aJH>BRJwYx3s?XA!t6?cohnuP86PJErDakPsIJ5?^PoL&pR73!%!@yN%L=cKg zYsRvRc?S<-1)!D^D1Ip}WZd&XzGGNb?P5_`Tjaeq`BuJetCp3Pon7L`Zt&|^E0(Vn zs^r$q_4)Z>DsBCnr<0^VkFYp6*L6-z+#*JDb5K(dZcNCjWG``PUC%gD85&brcQrM+ zkLtGMcCHbfM7n_|LzOx%2!i3~NQCxl=scCs}L(QHq#fB=HxOvXiQl0(--JBI0d z5Ty$A>!xpm2ia>;6s$tJ*noRcw#M2k1XfF-Rx)ygKVfU%)zkl+_K)@x4;}pR-n+fILxkNGPqOwwY(0r!y z8nXy7oC4Z0Pi^T^!e2>ji!5{HmYu%V;$x`C75K9#f-M-N!{o|TPdzH7UqNK^&}EJC znBb(4I|gS=b$G(Gy>Td#9F&B1OOnE7;`I^g+m^%xZkLMDAS#)a^J12Kf;(rp8{G}= zXkZ*q>BFXuUq>zla3S`p1_(iRGs8$ozXr(unl+>$2x}y_KsJGrT`&?RL8gWeP&+gE zI_?ETD~4LBw9+>YVFE!Uy;icMHi~FL9V%@(Puha=vur|Z?zh316i6NpC+57$-IqMW2zNHORu?Hwf?#KcxktK!huS^Zt+P6Byp2YbK_pEf z%wih`Sjm9~0A#2k2jv6+@*XhJ9pGkOyyksrFrWD#n>iC^Ky75VC` z0^KM2R2|S>%$2EqWyKM*#YYzl43izmmh@SA19>~xW^7|HdNUvybdwa^YEM$^BQZdA z)pt-C0!`qt&A8kR9m()IIjDyFgw3C(40o5XXo?JNu~<8Vh}EHc=m>P%1f@mWBR{oE zcmJE!g(VU})uGUy7{q|o4jdk>K8$aq9^SeTvB@?);I$Qn$h+5!W<(J9pTJN8bYsgqj9|Ce6Oha1(H6- z2$jg#2NZhLWH4XQuwa0YsK<>`7#Mdk-T&d;rwII*&%^X-gT-u0g%!~$ia4HTjb1C$ zClXujn-ka%ds241DVQrQl0Mqw3*TMUP9*7eurEK9+&`TZuAuE9guV*WxI0?^V=X#1dICTXt003 zKEeV`l8XQ-)TL*LfEdy~gf00Gg+tYjM>4j9Y{jl7+VX9~4+6}d#@tx8;-Dj;%EEO(Un@J%RJICR9S+XaE5e2$vC&6p2-+`vD;r zYPjhNo}vDy&KduwonN?QM9zt@jCkZbU!M}15fbXqO84;Yc~mkFhVp>V0GJl5ZjOg( zUaT7H;e26V2TulkfQGy9GQoHrn(taPZ{l#^=s@F`KsYmkr0ei#NzH82dY$?P+9sx( z;DTtqZ)dKoC)ZhTMRU&)bdI#WwP1U5NRJj5jO@hUqAS zwIyH0fseNlrzn zIbEspvk|m>|HSa&FnZRyYWg;d6Cgx0U>scRL_}!wuW;*lL=Vp~taBO>7uoH>T_}>r zi}L(;36`NJhrzRx=G!0z zZs1?}VtrVy%2jk02Xl<-H7>8GhxJC(CRhEq3I|ct4J!--#prG*6t@>S@=fVH`dc)C zjIfa5Z_y|PHF%B#dNQsf5jzf-(Ch&K9z4^7fsFy~82%E2Aj3_c3=U zRBzod?<9B4f7~0m`#d-;9@3wa_4Ay2&K1oAdflL%)Wp6*5^N;l2BflBuyVM?t4A=# zv%$wOXN_k#Va}QwxgLQ=uJi7~IH&C~c*=C<%yqxhy*kk`7+PP%rka_~Cdnz}cx7a9 zWmD1!@nN4zTc4otJg_X=FHGH5w*ba_fEJ*~a%1+a9(ubXzs5@8$yIuy3=fg&t!wg5 za@FTg4SQ4OLz(q##0d=3!eH6oCRg>KJ1`hcKKWj2OFFuV$2|HM9~J$C!(xEYefQR= z;b6luC&n9WK?wre@Rz_uJpsLFF!hdde^(e+XKR3{0q8}ve&L!5ep#yUX==wPiR;&x zNeYJ-_?9>*k3r%sgmm#>lliPD&evi6r_2N%wtxwFD$h+Bbd#BX*Pv7E0Hj&N;RuPR z-gOAn&?Ghs5?Lj;{9@&u0=ia1?-0L5hCp4Hq1g;Wl4T7~_W^?m;$gRwe(E-dq6{JJ zKPM%{bJt4i6Mq*LzB7yMN)mM=CI@T?Or#F=o9ja6=tj`H=hE+6vx}{v>DI}VUgAbQ zYJ8mGd`|h2OLu#f%`y;`~2EmAjJ3wGb!G8=wlX&Uc z1j)9aen8r7*lf5kkEy23CS}Da7Svxt42HY`+&lseT&{(Qv=lnO%uBGxn$erUDB)gW z>YJF-G2*vl!kU|$z*m~|{2fn#d4G-OpbrEvLOMvh3>&%^94(poAQM$a*k+7=sJP!~ z0}#af-(U{jCO_;|4j|Dx?Qx->2DB|%wU-tC%ic& z?4_4GG$)6c;#XpjOgBeX+Rl@8YOKN{k1u&W&dK5JjorErfn5o3+Xs+wp+sUBrr+Jw zeki|pggVBF6SbZdafC(WvYLr=co1tX^X*#o*Dj|xeeJ|^EDp$Oz#XemDE1HGXuWcD z=t0b*4q`Ez0yqC6788Kjz#stz0eZ(;fB^M)^s;Y@&gq(5i1=Jhs^}a|_kz|`>QI}A zQ38g1Cb&=CZ_nII82$p6ACOp319vDK8`_V&VaHmshC+7qW3zz*F)Fw+(3Mj$nc1tR z=*tWVQYgvZ9!f&NMdd$l8$;CC29-<=EzxB(PVuw7M;VFrNF)LhUm{^J+6_$CR{nA1 zmLJ?;R-E(-6EX2s-rXAvARsjO3gG6LZ}`pd2D4cpaUi-J!WyU2iZ_(+kvDvvtE(0z zIc?95@)wBC;4$4TRuSWfXp*k!GzVzte{+%vW8=8$xaOa|r9VS=2oV^d7{ic{nK)^Z z+?Unk`~Oh)?qN}uTjRf`g=UI}loVw&R4UUkPlz0*ot3*y%5M7_70RTh=5bU~W@MPj zOz{w4T9SfHiih0(k@lW`Nr z_p;I5E6+Uly4QJq7Vg?P>D;m*r)`$HZl-#B{9;vL5ocS*FyD|XXMDzJD@%(iFKyT- z$??hCIQzFt7wR8Y4*|%|Y=v$=$W{pcE5XCCv^_0BpP&hOw%@uJI;a{{YKeqKeK`cj0*zTsS;wOjqyI+nhA0~G;Cze5J?2N zl~8?2XJeT2=hWs0YvsT_%1V5YWeDcmgB1_z?>^y~K9Ln;;(X%3xD%43(!&gU{k-$1 z-o4)-X=k=b=^24XkCV>B|6SbwzXkiOXhKk^G*!kMeWVVb#jtbU9)Gd(UW}-sLKLmu zYCR7osB-qXD{dV$Yr%S=eb#vXXhhJ6ZG zHz*8mpWb#eF)vu$hi5VHuH{tQr(_5#`!5JEToFK)GfnoCry`o`fuucksh_K}^t31j z+1N+l#_n;wieu2%5;Y=@{14#-nrLFSReJnmHqND9v0Dng)8fn);HP%>nu<-^?nw+L z8%SJZGNFwwFI!Y_n?`Eo2;t*@`zTHnhpTKAs*=C}LqBH@0Ke_Mb+#s5iO=MS-HZ*) z8bQ1wY6Gbh?jeApqGpIn-rE666Ig!`0yF!h2;ziQd8qwhaSbbhV}YKXF3Dc810J6c3Lf`xsYzNCL2 z7*5(Y&5l!XG2&~s#C|#Dm5n1+w&#@fQK~P>9qRJN$r|J2i=Y-Ctut*-O$>>sUBUZ2 zIzbz~+&nTTOdBt|vdYo9%3zZ^Y}Fg{1_B{bB#W1F3S}>dI_Kri3F2%$Fw8gfN^#QB zhWxw*8;whYLb|?Rj!;j8iK`Q?UCE{YLbQ0oWkUK)xXe*^CEZZ3Da@9ZXPczOtHgz? z^hJDok>X03|DO=4_mt2Wl5%50cs78;)nXKw4LuZJB9R2M9E6KPid>k2hD0niz3#*s zqf1d5-Ptye+B`K;@|)`)N@J4hK(KH}a4oMSMyZaO<~ka}Ju4jfWK_;XaAYK$QT@ zhcJ}pxe08(UM@Vdb_ZNJSfaIKJ1?hW)w^=AcPjm`#ZLRqY}QN`s{IRD+k?_a#rFItXWz6~ z>rkF!9}jw398u;Rl`ThH87h5&r=P&P+~dC%mqsNH6m+c?6c$NZi#Ffg*R+WLXp!jW zBGvO;)3vm^hP(xv>wf_H?4QE`Nw#V02K7=1TmCrmLF@+z@#0&Y z>V&aG96WXR7W`k8 z6^U;3AEgO)MJU@=sgg;KL{(BDE(LHm2h3H?IYALxaYj5xz!D8M=Oiwp;t7!PvRB@F zs>*Ab8w>lQAqCm%MwUVuKBj>Ni6?6Jq-9>y@Va!?V=8-~Q&sZrrPJE9i0(9DLrla0 z|Je3t+N~`K7h1}7_3f$)>4@@;`@HxOryS zD54pcWFE5_7K=y|i})trRJ)JF>?=)kMMgY67O^)=qFpE|JzDW!ubejf5#AwekjmbM z`vwTJ9sE1YJRsr>wo<;pQYaXt1(GTAf&c5a`M4a2gtY&gs7jU@hKV0!i$@7evjln4 zLlueNRx}p!a=tE_5)esBeN3GK0v9G`p;>m8fy3}mh=*x|XJg?v$h8>S4+qO|fXFj% z37<&21J=9Uts7XSfZx(Y82t^6eW}@pTp6u-yUXAIi*U}Q!nx;Z)37-3CqX#fG`i&g zq$6;As8kPqL0e4Lw}M@P6j(qqLmixr?k53b5yU#0`#Q{qjeag{weB6eW4SAn*ImM^ zcZF7c^B;@V*C7h%80EXnR=7T;jI*h|fAa;ifNoAGzob2D$q90dso+b)T_vQ582hFU z=-w%=GR5t+ieZp)vj!b)Zjp6&if{Ughd_8EC`8@4Dm^WswZt&1NV6+#+nKawVWW|j zEWR>b`8m&##B0RR03_0;EV50rH(Wl+v)?6V9B8<(edM<-H6!55UwX^u@&(AjJp(y7 zc(yZPss?@QxOuBmF&5$}w7!Q`cQXXGc7fJ)pxp9Rd2OodVXA1ya>46RE`x=PpcZKn zja2Jk3vFI=)67*!)0Xb5t6 zpk)qviJ;{MJHQDxfOZs9Nn{qxdT%aIp{*E*tU>X6LKbOawlI5(rZCD;7G;>mHBGa} z!+4bKHKjdJnGt^{^mlOoG2ND*QDAubtadu4VrfZ@)H877&F-PSu!j#?(;#$&+qwY7 z@FrGUKq3LGS9e)B6&z3+exon?oZYIHP0w}aN7=7NZ5*y>^jA!fAC?!FD6g0N4tU_z z;b){p5zR7a)OI;;ThFbPBx@WeHI1%bOth1r=uFsH#n%)zU72VLwTYW55+@4uD+LfV zIRrO9(k=~-`0BRk$mH`EGS<*cT*yG4#`X@Vu%U}GPdzK^10zV0e4?P{&QkaurO z%(@IUlyrd)IUbPG!WqBgzKtbk6u&h9T(%@Ga!~mg`(;bNmfH`@8;0`@!>#4U?GW5lo5z?9|MHi=$qJQQ7xSzjKHyL z8Xdazs~-8BHM)FQ%(ZSwc0toj*cdnk^1P1~UyO}`1`Q}t0m%Ap``*Ta2_+^-8FCCe z>|;?QmJSTAz6^;R9L4ohX#DhpBtFk_fs&n zgo1^$`%o&!jO!>|vP#-T@fW5WkCq&XqldZ;-X`?ZVCJX3#4;_@(h;<|bY_KK)_9u- z7qErfy*74>;TP6=GNMExV-zK*5?~K9)3xMj(4#CIu=LP>j8p9Z6h@{2VYW4VL;8NH zTtUA%>Rs$+A%gVxt;aMbA<>5i-n99jN?Sv`DMxC^SuAyQy7M)XX!SPNDaLG4VS=65 zxE34ItFY7(*KA;}0VpBR(uU^To%JGnducPksFA+d7l4&S6e~z1YceJ2*^Xbb8~a4m z_POwQZ&q02%Zdk+6r;Ey(su$r;#@z-4L@w#+OCaJ>SBcFDnv7x)fq4n0NTl4p~+Ek z{3P{H$>U2}&WPG3!ZJ!gm4dPQM*02V1-DWCfQH0{D3nH=oFmyWU68O#;Aj^#x{d(! zR$4nhwsXE^u(Tie{MZ(qSs3Jd9q936U`cL?@V3IdDM+)A0n>N?tU?dT^5% z;UFD#XwjfyB{A72gafGga`#IS zi}ov6G}4lfng)PGv;iFXsPI4po5GGg0J3BjLtSTJ(=?$1XTr#F1Dyiu5fV^~#+WzS zKH~Y!Ybk-UP|1{q=@wnrHJ|VU!J)2|)tikYupcC)^gGzT%`V`^TLt`P!1h4*Guz+< z9iq@aFZr`{A6OPvhk*(TpuwyH0~=1K%j>K5)8PdJ!>`DCo(UP?%h)tge!9-!KupL|#n5JOV z0#4j8?T)m&i?K2AoA!YArZl;0MP|oWK?Y6RL7wxVwM6cSRO=i3r}1V1&6xm!nLIe0 zJoZn4Q3h}+_Vp1w4!}9-4IufN&t?E7m}w0nEnInDhx+Oonin`nN9CG+Ufk&#Dj&+ zGn2rpE$15LhL2>1kHq&@C5~_%&UAKUnO@;`z9P=o4?#~9`>xMYOdO6+J>i@pm>1`H zfc8RyIWRvk*!um8KlbhW&o_pe&-UQ0WsvPO>>M2a8x<~^s2&j%c&GFaNUVfzEYqo7 zsPXMlA})8fmRl}oTV7X-9A$W;v6PyyGG;n$quPKyw zf{Ikd)x`_18iMrmq_%mZd6EoQiLz;}au?t62fuOV$kG(%`VbY3 zv$6!Gcz|j5c3%h5M?+hl$$cd&yy=cp@CzyJm1(c%S6kmwT8fn4;ZECTubvQzdLgiM zxy14FzMn)xd)n#$a!m1IuY&GP06sZ3a7s zc%z)VD=b$lYOyM2mDMhaZCWHW6scyX&T+oPR6&W`L$n&k7-+(Pum!yPU^q>t#xsMO zDbf-FDthxLa|n{X@miWCQuv@PN_*$$g-;yh%hRow&E2m%yW(AktXDF8&iR~Kl-+Cg zx}@rlHmo>zuKqaRcHDYM*F9pqL0WS=vuj3d+i`w!>W$R@(siF?X**fa42MU$g{j*E z#L;;PZzZK_qamYa3?-R5V{|hJX=i4Z-9uwDNqn@gA&ZyHOBAWDXXVb#^0Gi@ z(~z*uhJV6j2{uwPR}c}WNIvwYBh#A*0|Qj+!%aj!JJ4hS_Lj~LI=jcLqlm(w1UBTa zksRSHQcpuS3>|!Led{#=Ci%%VPHCT~%)m&hN%{qjTsDv4>&94LPaJ#p6gENOmb0y7 ze-(%u;`pFf8Ae6O04Eg>NcqCGeFtx zySe#jywLbwm zO%6;hl4a}@ml?Nk5CcgDXsPjWyPxdLRSy>l+s>e0PZJBxm4+eQD{0cZX(oOh4j)^; zjdBfFe`a{1ASv>nI#bSs;sd(FZu^JU(O*v+;HOh%5``FI1b z{YS`ze`hQpRSuIx7jdRMUBpbI|Ao=k6Ul=5^JlZ)`&ZpBt~5`hM6@HzLJ+A22e;q&ff#ftuOeba95B;Ng@I!5`ZRVcXNQ7J5M?w@Z#jhuM_*I z9BHc3$=TJwHs(3Cyrvq>!y1vSE|H9JFc$`xh+g1YxH5#pK=71qY;1qB`3EEv$+5i( zKPH1jFis7;)fqUM&frdQ?wAY#d(VneaRzaj$!a_H-ptrAW<#Sqz!Yu2uW^oa-CieH zXSyk#5t<%K9dr_&lX2w9FzVm?sdwPa!36?O_Zuc^b5HbOKMyCvHJ0x<#xEtC?R!#@ zoVTlSq38I6OcUeslv_fc5k9r)?! zioW$G;>}I=tAIELBsjQt$Nntr-}AOZ5t3# zw=iNmaI(B<)v_jBIbu!mbqtD)7ccSD=15_K2pavqDBa)+p-jO5;Kwk$1(Ru%p+<%% z;Va1NSSOcqeWjK>tGr_zM?bFGc{JPfiz&KCau8XgB(Oq% z5O8=ANZTOqnf!DN_nt+Zcwbz_l0O`nkdVdx7)OX$(6n$GjsW*eYqRDGTra?0!xKU& z1_B091|+E{UT;2UxAN>E+0~l|xQ2zdt&Y-`#7Ne?NVuqQKAc%!c1dL#TX zM5X?d*~DtOXb(|q&#HI$I==C3>hg&i?IDmq*p}~kcbZ~_|{w5J- z1b)G|Dq0sDMWi`3w{OX0;K!p#leJv--qOp*G_ISl_)_|`>n;GqonOXF55_m=rmE9H zIpMA?CSE1pEsb4}LkYSA2%`l2@XhPM+ox1~!bLM=0HYaKeBePd!u(fIGov`bx_Ypf z9@Qawpr7G%7C>g+d6L&8{T)C^s=7sd!y@a(#MwbBgUE<5VSb{WIMBvs<3e7^$ z?I;Kjr}~Jbwn^Xs@fQO9;K~eT5T=AGN~9HeLIkDi&GKeuT^3>@k}|yyvQ7-zL+dH4 zz@X-v)e2jVD%5qmO{X(G;JO}UT+%)-Z>s=A&BHGcQVV+|#t$Z{_uVj@2mw9rlsL@Q zhCf3s`=eZg)s5kroli~_K7x%H%3U0ng3~pNx{+UNbaB;IgIZyt^d;JJnU(D z={(2I93JLjEa&fM8>XvF(-n6jbDwuDQ8vaXcj_Ep>Kf-41;a6&LsB=n?Fe|LVc_3D zc7Q}nG|vx%cb5?L<3V4$<7@;v(w#k&O-sg-NtT5$e+l*m2X)d%;UMfVex7r)%r!rv z?O;T*y!)}de*S}W{ehauTNRmPsGht+QX)IwaNaOW5@!k)!D#mva@%>i7Te7hMA9>(?W3lKW=hAtewfmIJS4Gn+_7QBJ|3eMJi znPH;LK2iMVJn>*x&4Tufh8^#7@)xK;{=5+D9xnC(;Jh+~Y69vetSNAp0lk_ZM`Bls zn<_rU62qA{=FRfObqw^)d9jj<<&P?a$D$;G5slM%J6-Ds4H{(mBh@uSX$@5#P7;J= zB#nvqD(Rb~--gGmTXWEMDt9H`he~&({?Y? zlIli@sQBN|S@#WD{lHzp-=lO9cj*z)4y2m|=@qCUFwiGB%a^{yQUL)v zKK0JxiKnNg-G`&1#9Cl3dhJvI=ar>dp@+jr8lehMSu38MESA{Bg{vE+IehE4{JME6 z-8`#JWlPAkd=s=86pYbV0!xKcR1>CO?CLnDxIRhwtU!NAa5)AR@*!OgCargp?jw?C zUDC;ad^Fa4^gEY2V_tc{d{WazP&7qR;jTyG@d;-UP$bEUB2kQ~@uK9zt6FE@CD{>g zzY*WCgZF5MRn{;hIO2=!99>)G;Wkv5BwS`RCngZt#SXM!2Wt^X_`LJ=??GQ99tg;p z9?za`_8|Nfcso5-d@%0_v!3KW8WR9nJ21j9&~hQlIol~8xodk)`=xz=nfU$eSs)}h zCV5YHa?RJdrt4wG)u|0PZy&>o6Lr66dI7%q_#X!MB1j#A33aotFs_&nIkt=gs@Yb* z#ja;6OanEJf%YiVK9yyk__f4#WsQW9U$?kBpwKB^8WRsr5hBu4x&A@L=tZGf~SeYCPa ziwwdTd@muZ0q+Eu^TaAc`jaK+f-|yov}JoKr}h}nbjDTWOGQo<6PQ5r><^gGu~ogOZ-qev&1F(W3+*hJ(nMtopgQ;0!!ifh zt%ihVO-a0~KHl_;y!)5Gf@IPK&P#%(994IYsAGL<)7K6}_~M#UZ`3#td;5cjh08XW zd=ZZ;EgKVDeI;1z3f99i_`UY1t)G3CUlP{3LTEPW7LW_gf}Uu$fCOVKpO#|xpephP zpwkUuh(V;tdb0P2(4VNEMOoV(2$Z`<=saQb->}V`Zn-Y7{|m0=FU@3QAC^DhZc0y9 zZOBPB3vK4_6W%U5HYH-Oe~$kiSn5QCW_&-;zj#Y9CM3G+_X(*SPWeH3;xw*x8@D(+ zu{_(LD&RV9aSeNP_C1Q*kB>5>H%19Qb9@9zkK$P&f*!mj*kw5w?jXR3S!g(5T`}gQ z92myKVX)2A)gjXjlnt|4_Ze69Sq<0FP?dQDNk>n4-!@KNv((va%}=$zdHO?s-h6XS z{_@AmiC%;yMFhF?92^k}#+hXMBHJYAHk(|OznpU=TC9!MAK+RKz`~%L9Q)0%N4CuT zljouX(K-6bt!zI-!aKV2kRTW`ghCMqqu{+B#_jXW@_z#LIAd2|z}(^+gC;5u-yRbO zRP$nE6=+?tNE{NSY%3;%P)~xmc-OfuBiA&OZ=7jYb6`>CZ^EY+a59?e8tc{-jKG(- z>NViOt}bf~$-I?$)p+NCCP$y3u!ZJ^5_}pe3B;$V%F^T7bW2L+<|F}rhhX`^X-07T zE1(zA=VJ9Dm|OTFz4}6_`2|>F?m;e+x--Gg5Z*Eqg(EYXMuoiW&Ny*lcH%Pv=XpUH z9?2U$j$}0;Qf07Oq^?ddr_F>HN};qg3ISR zKSJS$EAY%OFQSnq&j@dv!m<%-O~J;9Ehk7pDDpE)hUS&Lq6A5Mf^jLw zu@qGlcc^Dp7VHi;u5`~@VUi=hc31l|nEs?i06?RlmU{8|7Xf(~ z$3}Dy{q;Ha{H`ed3XOh+q9#-|h9E7yH;|ol`q^5eTzeh8A3UL;xVP+{%(X7KQb%i zQy;sriEG+jA?(ZRKFhm~=cXfDqrn8=JN?BKsMghJQZX1UGinGsZG;}WWb999ZK@8$+zu>jv~9`jHObH};2mM$Tt5w7)TA3L3O}BL zp#%y6@Nruk1EShxH{>a*>p7~D98(D29)c4lc&%JNcqLMobV@4)_CkRk`PW1hbC0Lh zA3u>+zw1J8)R+__E&_}=AWQ+Gn!aL+Xj#P9Dvc#!YtE7gSgm}-*Y?nNc|t-uzV{~( z!kkLjJd7=))=rsyi=@#k-8pYV*a3gDpyAMkoeSp_yfFa2!qd}U*irWdcjFa5;hMx( zvdcF#*MIhPw&-MbU9Q@dD?C~u8bjX9XFcAGv`Meu4@f6XLxto~g(Y2O@pnGfIrsi} zb%&qtiAiIWpFIBH{?eqtln>5MO!0~Fj|tnP+f$vmF*rCwxjk4|6I?qX_R$3Lx5qv{ z9=jJGU-i7Fz6x?w-+KQn!A!U3=vGRlvfSM8X$LorzJLGzQuw~Zf)?m&eR$u^3xE6` z&h`V`xF=?sNTQVEEi<$+L)T;343*bJ?^7ZEOQ*`W$J3x_JI$W*J`FxVMMZeO7jgl* zH9p=t1@HW#|0_zj^bfQL(3q~$?uin=7+W&yj&6%_E z$eE9?)U2!e%AU<{`>m( zWR~~Dl}U*&9JuhTq&Z%aBy$>MO@7jLKj`0?RW&iRWX$Q2r+-*j^zQUoe_VO^^~|+L z{8uF&%F`y@Nxsfko6{79lT^>>ECIS}FpO2T@$sFPiJp-0`;f*gx)!pVjx@|25 z0A_5Rez@@G?*FX2JDDhH%y7Q}+wfS1G@7}%a-nZji>#0v;CNAHIU~D<)5rh*SDh<8 zFK@20{iHHQ?szP3{2;V2uPdN%?)AABPA^WPxpHtS&{VIywms{7*5=c^B2E*>_$=4_ zthhBx{Hmb)gn%ep{!?D^B~1rq zdcWnc`4wDI-1!Z(JJHpSzL}ElN7XU9#zf*!_l&>knQFZlJ`Mz=Qjt!CYjs6HJiqd>7aXYZO(;lE}5(GOB-QDrNSd*H_NfqV? z5)HD@%UE`EJNIyGd+ZO)j!}Y3wiD~hX2JG1$iP5PhG%zB-)C`g&?H=_(w{N?82_OY zjtL_O>o-*h{dgZp_shGF$m>z1T2u|7*%TF3O1~s&!ZrU_HJ`)Z2^4L1#T5Id*=8wB zuz2{wDa8wmvW)v2Tw|R~UnhRNO7aScwq|>2I@b!dGg*_FrwMPkYrIR6ZjkC;0;xm- z!zEqD;6V{mGV4cxljKgjQ7SBU-z?Xz3YHv-PRxmJJgMwFX;IY%NsU1wm08GBCw8_k z4$es-<)BNr4GtN7So|R=0s2>=BXaJ<9=>XMF-zMa^1J=Ia2 zYEa!@CGB2iO4k_E6<3Z2e~)zlHZh4SCOzC*Aa8Bj$u8w#QQYn|W@Ib0@K*Ob_O>0) zL!|i_mckM%KhDdZIIr9 zHcbTr#m*SQO3+Q#<*{`;Vz-xDelM?;9`lvTe4C4Tj!$B>4`(9S57(l)*}$|ch^09q zv;C&RNXB?(sV<+`U*QUe0z}MS&69OjCkg{CKV7H6Cgsp?$| zWNWYfqogNz+T#%&$1SZ~>pEw!r6JYziL=|^b)@22#rM#)#tf;_HcLigu+@S|5cT_V zYSZt1t1t)4F7;!Jd4r&s_hdT?_f!7mM8EdsYuD~W*GKc5w<+1{o8a=*p64i%qno}( zc8vFuX4;w3LuAReXjp2?_VqF8Omnc`i z(^WfU-5Ij_Z@G$T&^twtV{D5f4sPJE#GWa%yA@MCJNM^1&`Nj~aMJ~bA zR%k!Lw&>ZTQY`0^VA)8ASxVL#2)sQbUN!D;F|F1)S1a-!kAW6+=(i@VB<$;VQ%j@_Ykcg)Z+TZO0TATQ5)oylIJn!bhOyl#h zrpDNVz8^~Z!B4KDluEe4-md^@&unG_6Rw%1q^?iv=vZTBez2RyvFmND>yw`cKmA^^ zD#kG;M}DS+YcJ$(d@?lb_Kg>tW^<;CpF5j85}skh{}9x!7jKu$5|D~1O)~@Ac_k zAZ_LGJOMM{z;v*o{l&C9)^K2}GXHT1b+;B}YR49l_00o4sT4-ot+G|NU-V4!o$y*L-|LY}Wl3`1N-+6AsX(P<=oYu^anITd+`KJ#9d1a_gG~7Ln8bv$V|he0I%Nf39m8w|w4d-T`-0 zH0h&-A5X}-`zZ3r(|ki{uRr$fH-71J;HWX}FidL(_DTP>6$X1qr{b%@9x(DKst=t5 zljMol%AJqP0s9^8IO**#`qE|amYQLT{K80RNMRcEZ@PQ+34n=E*qDnABCQ;n`0q8? z@z`%LHMZ+oI4+!9!5}L5I*$lX{+uX)%;cknRk2HUu{v$fMOlF4 zVc?kqvc;q0bE}uwyE#s>R$^Zd)4ba^QRUlM9e-52VitcFz9zs)BVnwk{1Yufd9EV7 zkkH*tOegf|^alY0kLVzHKv{V42&RWJ=G{k1`c$#)82`M6JyIaB!C+bx^NTk4lBPCS z*_10xH4A;6p^0~Vq|ckhCE<#Wrbrl3LF)3`OmC>a_pmz19Nd6pKuto=D5K4xCjak# zu+;=whrBcuss%3rL(T2}@m`}%%+bPhJG8{yI;YAHws!>UhjI-=?NU81!wb`nEdLlv z1gBdrSew#CccT**oxa#K3Uu3B-uZXln=kJypCX%2Cv5z~VMrqzZY@HinQ!90%kKrh z0@jgeI%eDj#^`!ot|hcwGKWQ!3Cv-U#(Wqq={b2pR6YA%pSU!CWC|ZY{@Gr0%$34( zw(y!%k!zDbYF;lZ@$78__kzziEB}6LbcYix7_xu(l$?(UXg3q z@?pTMAs6QqTeoIzo8KrXcTG+eH7vJ$7iD`vT{lL(9kM=t-kLJr_5-JToYL4wbs&4S zU@mDR?x3$72b*xl3Hs-m87FVr!FxE(g>eS-Z=D8}`Oj;B5$M@&jfM;jEOuJc6$*d% zRmq>>_w~F8ezYHTl|iHt;Ad#e}7xeWTh)eC38hO z+jY*Acu7rs(-L3xx6I_<9M8+a_r&~ZC>T<=tb>C>@Eh!uAUxb763GijVBP0-F7}=-1y@os%d;5r$hhK=>OD|rJF*i3$B>VJ+ z#?%egKxg+JX{qaJUB@9^{uy3a;XaOZ)A`di%S=b+kH{KvBefii$-kn1o1apA0VaN* z*_FHf?(yM3{6y&IfJo&U%PX0iG}B)?4kzlhQMWr@n3OH_86 zm{P~NvrFMGA`n@e^)89GPYV@X$n$k{_!^`IW^uV$pUiP4D;6n-yNwBJ^gxZ0p)oHL z1A3PHDQjYw$={prU3vpOTipM_dPN@fME{JwDvx=APq>nWzB!C$;1e1e@`=4UN+mGJ z%xS8kynwE$&PfD*%Yh=vOM$Hl6wrjV_j1-A%87j6FB%|sAI5%Q^oe)%wsse% z+8a{6PFea5-*K1Um@TzsU;M0VD7W)jZUNfM&3C20%DR7+)g#N`1I{VY#b|Me+Lo(H zKj~br>=>Z>M&tTI)7*JFF+7F$aCT_0?l)2CMAP!PAD>yj4)g^G7P1}ZB;*6A%-(&G z-#jzo(M;&{>z?i8TJA(S{>Rz6&-GPBjd%%jT^=GY-hJggihvq2g4v<}0TT`o-{Z%= zz)e8#G-ee%&JgA8pg#Ot_wyve_q_cfkGdfGfj7-HM5#|u?hj799o(q8Wy>wMZE_}* znf{e7e-okC%xF5u28c-v;~B9M1J0cHpRyy84|h-5I32uZR*=bp4m)Fc z^V0*@09Sb9)ZYLFa_Pb{(WYYK)dP)I!fco_8bLHgEvcqXo}p9G5viI1%?|I<3Lzvh zZ3fD!kU-c7uOVP^ub};_El458Moc1DNw(#J#j*N1xb7ugUXmziN^Wrp_+jlXMg@O=sh@g8+&1V_%p>H`X6G7B`P& z-Brh3zEa~OUTb^bX?$5)42#L7Iq?Za@p-(}v71d3K%;pSEo&?ug2_iAVyr&~*`S}{ zPnmcdLxz_V|1oYI3_#)j5|7`EsY=h;czq(5xQBkhLxVfbTx@!~!wr+>sjh~KOGEWb zIbBO(oaozV;qcg2dF)q7f`|;a^*ZG-WPjrZcsnVWezWcUsQH+U%) zb{_`o6flE`jGl9$_-3NXerVe*Jqo*Go#{ zTIB)HaDgjO+>|AmsOns=Dwvn6o_7Y$8#KDED?GpzpW3`uXZvVMz~Y8qq_X(L^!Ubl z-Qos^TJNa5xG4#MIq|jtl_^b?Cx};-YGqwQM0=KGiw9_I{WT>y)%qzJl7`g_B8=m+ z0ygc{`i7L&Xt24;lF&o_PK+Ge zUj&GnDq^o-40BHRnK ztj4ZW+1;-fX*I<8b2f40oy#J=BjYkXsc+oMiZ!liQVj=_c*QoU)@DLRk6q9Sn?o+z zt<8=Qfxb4lwsLaO?5(EPwr;pz=lQr4K${s&ls|-6E&xk|`XQzwJ|AQ%rECmpp%hzt zZT4x$WT#%>+V3SyZJ8ba4KhRsj1l4+lf=*YCOVQf8;1miD4O>txY}dettS&0?{vFw z-2i37fD4Z`O(^KrdSCmp2z?`Of0EKUH^jR8;AnN+wOnaD*KEHVZnwx>v*ost@)Ded ziv#MRL!)&ZmTazH#4-JnA-S`90k3;TR=}3Mw^Qeo7SGH4BsaUM_H>^v-Gf!G(}_L* zEp~VE1J(U;n(4Gu0xuYFV z2|C{r6ckDAMJCl#fTK4O{dPD6Q6IaK9H)iX-5`)y&KjAQu@{+Smg+lmfy&o-^rWK zYOH5Pe~UHbS#o)`+3}Keo~w%2{EIXlTG8dT(aP3nizVJB46q(bZP=BTvpvDt9njuw z%DG_Uwm11nTKs0)hOV+6=68<-4W_snsd`Fo>4DisV#$H*Cb#WMf!?8PBsXz}24v)>gGl_RkuHyfc z(+F}dv-;goZzwdo{xqBTtCyd-67)yZ$IIh(P%B7-a%z^njI}!>{*(W=kWqp9I!=Z` z&-nJeB)0^@&$0%Y+A5PoAqtmG$a^a>*6NXvj}5S*?A>*8(;8X#8gW^(c#tb5_s;Uz zy%h@WOi}BOfD&T(6nSOyfuRQ8)4-~Av1f~0E1!GktCFufkIy{04`mCn(Q~BvM*D$d zrg^WHb3;I=K+u%6SN-(CQFeaW%;0tJ5vUG9 zjj0c>yN^Bk!3XQ~{o96BR#t!S&VJFN3ds}nsIRaO$TW!HI4D$8Ux!_}j4AYt}gkGsu%(bvH7+>A0{oH1=Rowef|m8y+kLwRB!k zxw55u@+|rNPd07-hwA>Z7a=F&I}d_1qN~z=opSnvO#bH2>d+Plu*2dP4f}G9NQ$bz2%4Yk)GSf+^>twYtAe-U6 z2uv}m&KR-5C-F6%={s}Xk+ciDl5hLNS9OGTA-dAuz;}(8n-9Z&*u+X`qu$rlN3HGi zDetbZah_@#64SN55oK^6@FJ{Bc&0aSEpoG0q6c_Ca8P?_tzJEMP!FEe-Est@5PYS3 zX%kH^dsR*T4rB2bW#!yx1-agyt?%T!I_=SO;*8Jfq>LoTw?~Y5E3L*xgmYv7=wWm~;Q`QTq zw%N|?ZF$ksxu+fb)5j^iwV8D`8~|oE&h0K!d+>^&qUv0S4tZLFtPC|S9;N|7gs--?XavwF1al?{vfyf006&h_+N@{ zEtKU4A9YMDi=9)l$Q7Zp4$>7{d9%xNa&P1SCVy#ayE6J7FM#%*kV$CovIh1?cPL zSi{9Ux4RRA6ii61lx&&Bn2&@})GhkK5Hrs^HyXXoGB=_^fCkTMnRp8U_iZ z{El`NY5+hk#9tsFU?%N};UaAtIDvv#Q`)fsz7g!@Erx6b`&`8D`Ae;ghzzE78Os(m z#`(O?HD6cmBfjhddZsy1-E3GTv#nC7=gW&QzNcJ9WPWa1_77DJY{Y$O`)%;_fzGvK zJJ1;^pz&_Oa9HyLX`$*(?SmvO4>a|uE@vua;aAZ`fStU;G--R9>7>SV@8G=&_PN@lA)U6|y}V=wPKsuK5WnYl5kFjSo_W(<|2fF4}ewL44Zjkei+(|Eb?|>(@cj0-^NCoWGZL z@7F1(Fs5I!*id4&PfN94F47O@JBC9K!*n`%*3D@o!Bd;YxxOpjEHb2R+oXm(PwGkM zaz}N!0}${&(#zeSmX;{5mKXzch5+v_SIfFq+aLM4UY6$=F1bS@rsW2H4_$irhCv;Z zHDACXLY;hc5j&)eUG&j7BF+qZk=b9Uw$oL8o+ccOim-Ev4W3XadWwPM6KA0KrdcvX zV4NtpDm`wNYRt{m<_zt(vtsu^T;z4^1Pa79l0o-I52_tFL@-?k14qCKg;6GU92>P1 z3}gQVpv4q2Sfj=~lP8@GizzHeRrWCiHLJRRQg!E~>2XxTmJJuWo|zRT_j`GN6?9loCL{X$uj3K@$D$-FqqZk7B7kpALi)=)zsB! zx@s<3O8i6z)74*Ei$h=&;Fj1uqbeuDf;U__)RH?>C9L3X?j9Ir3g>l&Lm??wW6Kpg zk`luOM+Ngq=z%H`&xH z7%<~q@e=DCXRX}%c~V5j5BBKp2Xe5QiQzAN^y#wMqwt>E)`Fwxd|1sHB6!~ZXOw*~WM#d$ z6Vj}BQA_+%YiML_Li0IbU_Dk0o!RT!%ZKkF-c!)#7*Q14{DQ``T$AUTAT`HJi$ay{ zp~iL}-2$RfNi!QgDfiM;roWkRW0+1%Y!oM01ejtYU@M&QCq@l$rlhyby$hXaGPcbO zTIh@%G7Va=~Yz0(H~z>rN-f6TSa1M z)}bun^Qp^@ZRoY}PKxlws0QWzMDewG(taFMe@>q3E!at}AD5T3aowh`=yf6Pu-8sv zXuf8!vn(HlQ7JF={d_!J8Ju=y^c}-dbN3f52j>S(9q~4p4}_wL4KnBs6>8+p%mMPP z+xhlVeuHXmbZA7bc#bJKgwJMbL{0kK)~7 z4-Hs7++*)Ype?Gb=OY;77{N97=N9=%>imq-f)+(}%f{Q<4fV%URWm3}mSEXO{qrg) zcg#$<7iGp*=$g`;4QV(&46`lGp83pf-`_tv1DIEm z;D80tW&`%_7`w`J16k|DZX98NId~U{g@Ik>gFl`UH>!#ZjqH9z%;F? zADL8M8@;Af+WM+M9_!h?ipPijwE_Z2yw4%UdLyT&M+ z6O>5;yI#<6>OlMmr{kzF4K{aAA3qgcrLIa;2fwu0M1!ipG zjd9ory#2ye9NPoWlQe8oY)4NrxmP16pOBi;adkY^GS$O!!y<>y3fhWj2{;lH@;KWEV{IIjkx@=iq8^oT>*iB;K+ zFwFY2w@l6zSK6d6m=n#3iq`rSU{|~^IkQ55P;gij3?T!NS?j*gitEJyZukZ}zTnws zg3e<*y^|RJo@Yxm)xMgCk{xE}12Zrk9W_>6$9o*(d)1~>X8o;wX(!+;33ruUnn6r2 zLAKE;Jj4*ZLl_2VtnraqnXxl>+K8S&pxj?h$m~7t|NTwiZ}i zwb_!EY+>Q_%qzzu(;nI~(>Gk&6P<7_TH8>35MqFR{k+Fzb{B=WZ&Dae=Dx=HqkAl4 z2r%45PCgUmPSW&ArXjdQQ6lF@J zPZ|Kv8-jR;DnD)$Gk7E9`XOqM zG?(McxCz5<{~17-6;yoQ82j5m$c(Z?9Y#g7@F*DJqe*TS5=}NyLqocKvvZoD>t{h> zkmNy-k#{9j)fSppel@a`zn6`H@f|RGFHm;LArPO9aB80iG-bdwJOcz{c-bjJtMXVX zikwFsinUBb;#r+GL1Il1?u-^b4KLvrzmc9G;TP9b=o*ohBq{GF87DTYzoaN%0K^h` za1+XivxWm}9wsTwtRbbqLxc5NI(ui>_QWZklD`g<=~#jLCU7hK=P_rjY(+3hBaLU%Fih&%dKJ%UUV0e4w@-)f{%c6QNxgv4iJ4!fV>n zF^8e@!b@k^nK1oG_UoYZfzH_7?|;ZWz&$&J)a4D}^$Ziay?97ZkykEOTSOT-!j#g| z`FQlw;oegXbqm(Z>I0KfKbe&d&97i~5aNfO$_zLRe>TOY48|cvWZq4B4yX{BtLy!*m}o|Oy}mP<_ed-!YX@sF1G2MaHmT8^n%hT_9u4HdIN=o z-hmVgL0Ccx0L6XEu#e%at5C*pc!FV8kvEJnock^RfKpbd>r@rRNZVtel-;$RjJ2-u zHW_(9W^xRbS;}PBfRq2OXTc0$A3c-CbRzi8zVMB~E8IT57h-d~6dz$RvEDJr*&Qz` zHEd}8KC!p?s4Df;smabD&%X1z7T+wAQ^fOyiw(Rtl1`$tf^ z0+Loq(vDME^_m7>XO}M-b}#KQqYV42q>-mxM_WYyc8#UZ9{qth5lsRbLQe+N_*j6^ zdkSGe5^ z;LP?v&v5Fqon6_poP>p1dfa@%Hk$v#KTzD34zAPdO5!!iEC>H0s(}+=_qE^S+eZLch3LB; zWBh5NqTs}NQygUzVyE*Dl8}rzpnwMhG8obnzI{#+v zmijXf3{T4#A`tqEaf*YSmw1=6CFX2n3hcPC^EcOBeOhfgr8yWWjoT9(t9tFdKFHo1 zg?vy}8xfEoLiY&41K`{FrC}??&#I={o{nfb7_lp=`;Vx4k_{ruF9|UR*gw?*SC_za zPvE?#ctw64;dr=?`L5uW&LeW`UU^-M zvZYhJEROeIU92rw2!WSAsdVmc^z!kABW*DL2?|>r9X3#>W&?W7#FR zhSJyrRO9Lg3@kssc@e)TTUwQE`d&D=qHRgh+>*H$PcQaCsM?<9BA{H&y?RPCsr=LO z+IM22mTg7A*R6Rb*ob{)@sp(+jco0)7Ubr>e(!-URSf1Q`hliZB2?%UlzNoF!*n#E>gDZw>+2 zQpW5}U-)yxfvMt#KoK$mCn>H@`g056SS)fSd1+ndn*INqhXq;#FXaD6ur6oxnp3#j z0{>Fi%id1Iaz`WIIRWT$(ks{rtgn!ERNT1!70;H#(|($mzo&Fq_1Oep|FZ)}IKD`e zK1$2_Y-gIdAgy5n-#9^35G{U-rSAdY&6{cFdhNvOdLO6{TI+Pqr4n7LG<9uLh5mcP zKh}NapRs59;)N7fHD^w*XMBHEENdKYo^ReXtNiLLdre3DPkyAZ8IzkAV>kgUD6~+3 z`0^xnL4ImJ{qXu;dgk$ z`#VG?7G{Z`(EuQ+EaqLomAq!(AcXzjLDWA1A!5DspYL=g9d)R($=oM8(Vi*cqWotcryPaI-kTh#4r$E*_-`oSVm67 z4Uk0R4ge`?-Z7DuabWcki&iUr*ZiL`yv|5ofh*dqPT)ofuMUI%%e;IvUR~^TMx1+p zkgxB3wYmxCS8?U;%~Z(@uCtz-GM?O;_r2f2ZAWXl^Hp8v6kUNW-?q_V-v$YDh#8@` zkl{NsZaC0v0Ql95*0+E<3p4Im;_}2Y5Xq3dbJ3PmZM0=LKmc8PF=^)V1#+Tfm&{%# zYsi+iWQTO_DZmxFy^p;~7k1b9rJgl5xvjZ$%|OUTE!>TecCHdvv(-mv#KgrXL!A z$T*#~ryqvWgk^*o$FMEiUWxxBR9M}moxQ24FUR$WQ=R}>bpnV;^Ogu%(`%wqtD)+0Htk2I5Iy!^ z;3D>e)=T2*q_xM=2ZP;vZ*#2}t?Ew8LZaic`9 zx{0oVS~o_MdMZd@7$q6VgxgHj9}8&xFr(cEmr2mmff$~7Q4`Fkb&c8QCHtbK>Cw$C zsy3V!KI!a1uJi5G@+?|$Ns)AbT(vEcCZ^e)VgRvor!N?i5u(oVo1Gn*fsQLVCAMgX z$xwz~MKZALyuE+Oc#1nHj5=z4S>lY6X12&xnXdUtTa_|B%JpSbb4{AA%y54bd^^kl zx(RovWbpz4GnL6hp{^qZ1G4M^+pQZ?>r;h~4`&&DqZ~d&eQoqsUwPG{=A()`$71(J zJ&f4Sq0vA6=zuknSt*{-eCUTxBXJ`58pruxr{dNkbBhsNG3*hky*vBM2HQj!5_?{o45M zpm}3cQTHHaxaw#^xw_=c@*EfbeCWmxC>5HVOn**)xTp-eUh{($tr8lQ9jPGILjT9Sb;Dc z9WypD^G|A#vfJfQ~p1^ zy?tEM)&KwRRa#zQk)on3)1orPG(iKm%8GZH?o+;vN@e=Sq`aDn%8;?Cq-Y9cq@-Nz zUA~RVbSVj_V^cv;0hgDc=*BfF7h@Z+>+Sn|p7VNbLwkQe-`_vKo4$PyD%oD=oacF- z=XpHtPaT=IvwM78{ZkzMQ+J(x^Ns5p8wvjEbR4)T=={YSc5<=eHGh#c{ydO{nZB|> z7s6&wq`c-GAK^Nby+^@bHsog1eYXKZ0CPo_wxLM*ph#4mpRmxGV%&RR_Q#W0+&1aX-kK_uGy@_QIaM&4%H~=~!N)e?2lz!fVJYv{Ope?T^ z*I&$yuy^?$E`doORr;3T3JzPUJ|cjq|8hp%k-8%@J`L#LT@8^`gc#-s>~j>CHAiS? zEh0G~t?aSe9n{sCt6;dlz^!ED9y0b&U?K?%b9=@797ImB$g6vw9*wXU58<8Da=V0N z3f%K9L!K#Y-Cg*q+`cEG>BkHoxXmRpX!wJ;XPZcK~K^^L&e!f|ZSIIh#&1BaL9IriE z@#CGXtsTd+y0>2q8}oq6v9^RHJx{^0*kKG6=)Kc$egy9jUL6+^aUXszDmjk#(YI)2hCI$ZUY@j`xqZ-!#ZY6%h$@xz;r9!H~GL zkXqL_rD2_~DQXjh7b_NqK<6{6gn2}9`z~Dh!sB)~f`ly(bA2M%Q2*;93N^?MPWN!4 zIAQ%C9%mR8!VvN04m4fh{A6TFxPF{pI>Hy3+AH;|wZ_$Uen+;>p55xG3Xm%-m+`3r zeg=pEou~&rbdBh**=ta2$_=Um>=2DQP&zjm7ADnbfVTvO)XjTh6xP%Zj<&}-|9XE* z7tgUVz;QpEq)}d2dFK$qg7%45`PARf8y_igHO3W}jK^Lb&wT)mpApgniIKjcG0l=& z!HcrJRV}WMO&Cu!magU4S5)0BJ=<)|E2>6K4}#=al_Vo=r6@}DXQAQ^^#COA1T6ym zdI3s~68j^5Z8ulcfnNa0UG_90LN!AUuEEA@R8{)tistFJw zXOgT$z%>L}a#fCLnEOb5J;e#twGipO5M!dinHW}=9p3RvTR1RV&=&o{2C#?p+XDIG zpE$Q5;NC3u9V$DUrVcw`GXKX^)0f-X*Q|ZGQP8$Au0t^Ehtf5?{a`91Kr0403Hohd zhmlEs4|V&G2@SC`9^7*E%ERh;;PsOCNR*(N;0`x|jXYqW26#PnBDr96k8bM$tMxjp ztvkuR1k zQRz5820ZD3l^_oupd!=tzSgI>^)_x|{^le3q&^+t6+b45+jAt7Ro0`b%NeP{d8&KY zgfU(eJgRFa8W|ipPvfeNU3-d{x+ePFRv7(c~CZ6;Qw{JrrPg ziF?Ym48jQ8vz9)4Zy`UZ`#nJ$#Y`~k$u0irx4+*~^Uc@v76j%MlY-;rG|_cZIVUsS zaofdJ4JtM=`H2pU`O52`*>0Ki^K&HMMBgpMh>gy8{FDCI9G}dQ(7WyuHoW zxgV=?f+6mcXV>%AyL`tYN#ha8_WVVP7l5h(@_C>s5hW_ZVRt?`3~6VW!y+YSCN^^~ z+DlZa<^zrDj-NTkpT&2YrK91_4r+8y@LZqq)EVX4uZfp}nO67FXo=nm45LUJqvJ$) zRzwiZ!V*Ex^2@;Y0S1IOUQCd2Cskfin@Isdt4{SsB&L%Pgn_Ionu2}^TxkC-}#7*Z_Sp*KRSWUlvB1Yh~u8WVi6rq^Lmh|4?rJCExmzrt@0Hi5aJs ztXq!~Zt%W>d>Doa(gsivNBqx|)$m4e3tTsI>e#u1!~53PUR*n6%9z2(xpJPhE~!wj zc8$??8nwl96vcBoc=u+cta>%rtT?Jh*9XgiW&PA-;m|CPT}UuHNzg_-E9;Yojoi9z z0#Pp0J(iFyfW&?5T^IZ}Da=pnoy+Sjx3=K+dF~v~- zH0`uAg=lvOTGe!g2>=Se~ter6>AjLge zfAId$2&T3A*o!VmYc2(KFO!(ml62PtNn-@u^@;NNHTR77e)R-9x~G!ti!QTw=^pEj zgG_M2ubK36&DEtJ(jZULR60gXNW;{MwQ8|>tY;9(VbJ?ucyw!87^2(~RCD)2%&IkO z41x!Zg1W}I+kuK#eX1oR-J|9;fb6KjSS}<~Dza~7P!sLpiO&(p5K;F76NY$|UnCA7 zW+8!So31nW5+g&!EWRG!nCaICSk=Uav3d50Sw3x6oL|2oz9>L+sUglRnK{ z#9CkOftT|8V_TkEcnzlcOa#s)^({Jg7S?2|&+n#6Fs`>arUQX)v$O*It|p7ke1c=1 zs=1%6*$F`PhB?ZwwYG9?{q%eR1CRcjCCV(xzaL{_MTY#a>50K0gZq-W(aG{;POzBl zz)=s`u>Y@v&DbkES&5{vSl)44>$;BsYt70nW)jwk=8elUnmhyle}i z3}e-KaQo@ta!~J=$&+S>ht)l;05mo?h_)=UecXN>5fwlPjCgNv%sFTMxowFYlib9ejI6;kl9r zLjY5^D)SC{*X&i9k|TlEUbFrE!7GZp=YSm!w5~0cE-6$kuk!y?C;v=$l>EjQmZaUT zvt#9J2dE6ys`IX8Lg>CyQ5QQx(b`>x`8`?9ByPJ`GXpW8`zf=(qBj8(QwsM+Ve{1| z-Ufs>DeEz#?wJG3jCjPx`}p#AgPF;O!}yP(^7y>!;u-PnGaa>HEwx8jlC|a`%KL@N zot5_z7Q-aCeQVDnQ=?g)4Ow&_W2fz))9w$ zEhGJXw{w%Qb5kpKWBR7Nb@O9=`JeN4t&46L&oz!0X?->ej#=|(zVSxgz5vSy3iWYQ z?T+xfX8|KszG->Y@);u$zXD7qaf`2VU#k5?YD1Q`J`31k%{h{XInb@m-1k=a%Ew)u(w=-lFB?pE8>F&h3<%t#3GFD~YUQ*xL-#;g$YR1WPK&S$z z*3^jw2VhSRNcr98*5G&y8emg|9UX$k-~NtnP3Rv#AijM0H0YIjJRG{}#8$SfE4wub zq68dwfXe?jQG+>+v55cy;E+GusGeuQXTea-$zi0&ksJ?)k8k&0E*v_uXc5tUdL&LQ z&JbzwBwg$vt@)_-qI4hhSC!Y5a@$KqWk>V>;|?EZ{+CFy=Ex!VcSGWdDY)uqh;Ux9 zpYH0&r)1-YSEyk3`~Na!_`gT2_wh_frw zwND_6D6}mA4NBPlX{j@d^hsl)!87SU8eka!UuwSAmR_)-`UT1Tc21qI%HkWB7$WKm zGcisT8^>#RT#tXy{YKv95zQO3b1Gyd2ojsH?q-aYkeQu{s_gs&sv#JP3fxl*z?t52 z4LtQL-dg-mIPFq)9^mu-*Wb!No1*R0#0??X@^Pr{tm~ihj*f_$NxJwsBm4)srxx+Z zGC3r6UhtgA9yiWHMIH-HTY4ozy%5^%l8P2#n?u%4D-diC40;|W-zEn#clP2rkdXr` zTMB~X+58V_QOJ%!oT1E@=-pbn6V=FxRMqr7Or><>UA?+j*VeoSR68L200QXL2HOjhXVpJ*CcpiJt#h%{xl5|94=~J-JdBWj1JhR1wOX@pw<>0@ zDZa=Q1>7@8!!&L2_A3JCP}Mz0Fp?2ZJ)D_P7btmNYTG9*^N%#`Se1Qy8PF2^D_8vy zw>+(4C2Wtm=b8@84L){z34T917|s*89TJ|y-~4$PW8NdbRh!!*;%=wLf2Qmhr25vi z>+_Z6)=@H5mxY!d*#iu-_qkIfhVI2gIM^&JLN6fGcRe;6~FC$?qt5A#Q>681;3tsT+(0K{R^)?$W&hVE9ob!h6H z&CmXQI*iOK&(Vg|&}iiy??<1R{$|Z`5ZaGBz`{NVRF#FXdZorN$*^$qU*a7zTP2%} z(Uxl*$H$TN(<2jIWmmF7OAm1jUvk?H^6Q%-3JzrX$3meYK3}IlEbTljz8DQI-;N(q zTu}HVx%_c$OTOJ-Ykg09xhT@M^sfDtklY!kYU+;q%`|--lNo<^<`r)Ht15e?>O<3x zv09g}Rt@Y-Q$o7w1?TezDr(S zkG15*XiNA`Cx89*xgkLHY5)HY!OJad2`!v>ozGW1+$g`yY`!ollUD{;h2>s?oGtju zDkh%?Dh(9glauvpmsN4t{7gQon}BG6Mf-QZogH@02~oxqT3cUjnd_Z1XU^Oe7gdNq zH+|*ae(_+&#>AfRvX7uIR)`Lw45^TlIf)f=XblXra&!*8O?mu!^3na6*UD zIA+t0IaaP~iV#{BWSjpCGzc1pM;eBU4wR|}`)DOIU{dA-0vJzY^f*lp+4nv{gg%^I zX%&&-`-8_X_X8;4_UV^LphmBeS?R79;sG0iHI09st(ew8JiD&@=uM8pyfRYVOvn*LAOpo@pz{1@WkT2rtAn zGka}|Z^6TNO?9c_b(;Hi{`wO^t`m!FA6Krg*exgm0@=Sdttx@Txzxl>U!y8M9KGmY zrdx|A-`l)PF1AJ(DtP(|Mbk>J84 zu>G!gUTU7{DmL2Nw2n!S&CHs+{vF`nx|SK&I%?jmx@W6H)Bu&1H^5nG{QbR^uMWuKyvSzV(t}=X~Iv=ibgd6`|DH;a$(XP=;zKnt` z2WMsNS<#deq>SaRcsz1=(Jr=!u8~@*Ehn|k>CV8@j_&HXQ-1L?xu0<6{NLsyxvnLe zf?T#uBC~@-yrhJx;5F`URp3bjJq7hJum1-rg1Bq_G{YnXVrGjcdp#2<*&Ez-OB1$o zsw}3j%B%rH0e_g_HAFY2RjH>KHTOf(xsWxO-!-5sdk8t?S)Y1T{_XY$+)3 zQP`&i704vLNVV>*8+U08pHTUFw0iv5bnL!yQe1pIwdMkE0^g^Rj=ir2@xr1W1Dhpb6#wGb8M9T*S!&i-3zd|QrEfdk%}9^1Ks>6dfzX---KJF(NJbt zl(Hv@35{b0yJsMCc9vHB5z>+5=lnJ~|6WbJ(iLx(eHj~@o*^taz&|2;k8OfNE{(_) zE6z5S(?m9CqALEQ8TQkdWhnf$2(aN0SNyP31 zT-Wn(XR#VZRwzJqF9JL;_v|47H59%(65`aOH>1q$#p;{ptG81Pr?g$C6qXFtOjmlL zI#lIzFKDBpeWhx0rJ{H`GTT1qw`z~8ErD6hM`Ze&_N!XQ(~B#ygxZH(h^uPqd3E)1 zm-)Qyv62I^h?9ib6C4Zx$)W9BoOtG+&Zu^3?M7__ilK4hz`AmGTj2~0oWj5g%c;jNjLNC;HnHv5O`@`*m#xHo?UsyoI^0qT@#nIPVqQ#n~ zW^(gSv*42+Hnr1eJJ7!8PKGI9leX*jn*d;BM`J&EShp;VA55hZ~=CKV8Q-owMy4{+x zA_rTv(}iA~#Si$_-bHy7ykvb+}yt zTC6!QUX`r2rKszVYHE)bJQV1L2pWgP9ao883)oyX`?g|J+6Da+8$WvMFW@~+IdOOK zdH{OMzTy?-NKHA$&2rOb1j23Ab#J}f6&?Fg(1PHy7yUNwtsarDkL5cAp*GhOkj$2^8M(@1+M9k5LqY$FepI-h$6^rbKIso) zrVWFwB|Kf)M+Pb@Q1BtMh}_=^j>?<(E+;?kuf%|2*T&{6S@l2ruc=#*AGt4SP1yIL zm9gtZb>F5s6{$_DwGUQxG5&F z%LHKmjGHSiOboLR7wwJ_o;xrt8t(P3R)jwL(_FagIj&h~OdP14rrR~9(F=PKS&2r5zG>;c#R-UTg zSnx&t2zba05)N*#jSSZl#m}fsf&Bp+O}oR);fZKbM@c3q&X98Q;xxBZ9yEpQt_G0> zBaR2bL?wm<@iCfY+f3-8QZ46NfREaH`!xA08~x34!%YxH+V7V-UlJbg8iBjmdp+_d ztV%;Q2jUIM^cYqeBhm(6>65^mV6}Pfz{f^AxUGbf1*=-&lP~cPrjZUNRL23MwXJs0 zr>QHQJPSCoUd-+^2d;Z~aK7SFhT^Fp)B2!NFlbFA5@+XdXNQmLTa~>`)o}Mz3~5a= zL{l?_*t{J!xE|8nU!d7}G;p>49|4!T{40H*{{7B3fn#QERaIFAah@)-Vy4F766xj9wkX>5uXOXoYg+lrP*R9O-d*aXNh!eV&9AXV_CRBdMP?adwh3Jr{ zzqA;2$Y@wb@)xS?(QyM#0@mD)X$+AVkTixJ@)EMMJgR|YH<^;4hkkLDLDC2=xbQMv zuc-9?s&jtINoCgfjym!0Re>jT5E!Cz7hZGthP-$Tn5da$T~!@{VW{893;&>AgzbAS#AS z0yr2re!m2QTU5}$^7b?Ro?ORctnri#LZc^%pDf0SrhFu%qo9Ws<-$w1*d3$0`Q&_6 zNwn*1wDGjucG?~>YRA^2$&TDqst_xpF%%v?fM z88Hlb^_FHu9##R2-QsWmH=wJUpE)`!0l7Pc%VCJki5vYMNM_M34x z>Nyv7XNg|J@c>~NDG9)3S6n!>(u5Mgz}_J7rxHKhYVnS69^`EG>v2SU!ktTX9MR?7 zv$kt3Y1&%pY0^NdUfWe4S6RE5wyS5%6J$sIga%DqM+_PVoH)SH23JA z-2Q>Yd0m-%g**4p z$*|6e(jH0(lLCpj)$+dNJ0JTtpN0f(M}k>fcQdjbT&_~lYXNzpkrdj7MLy!uhy(Z+ zIpI=I9neY;{7l60#CL{B!>|m7i$b;O%&tMCi!@arDmmgjV4pT)L-5Rc)inE1x&48> zoKV08ZRo!J$Vc)lN0$nBZ>+MJ$eZa~BZeZDONKZ*@NNtT7aVvGpuMD*{a`$E*6oqN zx+P0YmSDeN2>M0%k>y93c^pauywOm*?+@bD4+7(-{Rzzq{U^}i22>Ytar8SO-@tGKBC87oMuZ?{DEm_Acab0x6^PpM<>DCK8;{zbg+z3G{l$&vgrG8H(0eGmx zapCS9jq?Z1ut0^O_C5q&fWd>Y06hMf(I3WI)X3EpGs6k`3?fa5X^k|9*HOkhI}xhW z25oJjR$sVFHZb6n{vXsBf%jv~<0Y$%xO3gUI0SG2KBl4up@-<0Vndoc{bFky?5!BN z2Sa0me5`9a*J$IVRZ7|_o6z48;c;?0CW_DHNPDZylT;TM=H>qf%FT=j)(=e9brSe# z1g}Fc+aMgx*Uwi}B&mkT%%90Fx`Hvcugwq3K$m>>z7>AjzA^nt8G;`~SnD z;?+m0%|%J}aZ(3ZhsYE4R=g+JLJ~r?#tYh_@oMgO;X>{~ra}rIn{*eT{QlLe!fNk7 z6{f%88>iyO^EAzUwMnj{k*1r1^bA+)@_<~?V0e(^jNpcGVrO7@o|F>y3lj@~OM@h) zetn4Vnedd!hw+Me_%tb{j6FaQ8XmL#v2I)8el67g99`x=`L@@=PS8EEFgVp*7T)nk zauO6qXhQAnzOM$5{ex(r$mZ>XL5+ zzk%N@y?iMtt06<#k|Ao1;*`0TtIWGq7o!W+(fZ&d;cSMc$7FD<|83ya0igEwqnibx z+`yA0bUVO{vd(KyIu0GF2>=Q|6nkEW0s>kD-8F84o~&Q#Cn%e*6TO1O6xDT^+ zyXz^9ZLucf9_L=;z7cYG7Z4^Hw>dKVz#c7l=_DjNY{Uj0&Ql0QBpzw3Ww7ikj4JHz zPicrmT%aEUXX2wg*Q5Z;#c%>2@b+l+{k?Lfq&r%=AAIntx|Ha<=kCR7hMXM|a_?+% z{@shjnEr{d>yyp|wQD-BYd-Hnv#Pn-xXH4K*;sx_Kvw}}Ezl|u15xV(1Sr@zDdWsI zl|s7!6XDKQJgf-vsJx81L`R6$%;aRbKs-z8x}j=5xbj%7^qZu69aA(8`?$p z6EtWLX4Wb>ZvstC-~ye0^X3mM6wq5hh_|~?sfLdTNI&1U=Zr%lXHi-8K(3ylLZbo5bHJm zNgUt|0~_<0RrZe@;{z<&sSQU|mLnEf1L8VFrIpffO>CDE{m$4BAOWg;WPTvh8ul}A z-2O;c7aZ8&h)`WHipk393~|p7W{W9FtK>KB3Ua>VtO;_GG*IhF1Mx!>#?6az>x<&Q z%x~RbJfX1NAq<2VommVVS=VqDg0TkHRj-{Bk(WpIa=M-4F6-Xa>2Zay1Ke^LxXc)n z94>aWw%iWAQ!o8VXgw{gYgTnM$K9MG2b4YQW+!J;%wXJnR3vLbl9)Gc+%&{BPa>Q{ z5=uxoAr_pAuYHz0QBt=1>(mXf2NYMBa;7oY0~5$=5* zLl@#V0OMu*1lHk8FvmA8g7F*ifS4>cgz)Vz zavW`(iiL$Y7wUO8bEJkGV}`((p*Wz~Lr#3B-=>R*C4$0$A`ujc+GHBRF>4fCs$g8O zOd6`r;-=5BrT?IAe*6;_g*EI*>iDEt`^`$*N~ZSVoebgwB>)i0JR~%r=;K5B56(M| zVdgqBlNeSeHV>e`SYjqlVSUIw?UeXKqj()@ytA$iTH8r&S*)}v*0{N)@(_8VcxXI{ zCl`XLBw#$C%tD4wS!>9Jdj!QYvSh0~S>C9bWBPa{psAr#z*fBEW~ndbvrKo3qBz!1 zxxu{se=}qRYz&`_q3}%@_S~>Oz57Q^aWjHga1EU08omepGSZIOUqC%x|KXK+(UxDQ z@h+@3X-ZrpWTww#rJRHoj(&xoAemVM6e#aO9ZmKH2paG*Cd`<-ypC+Io)7im8h>GZ zd{^P!`1Z)Wyu805J9PQ-?7rfna7kZzzG<@;z!VNfgboBSBEkTqh#+`=Wm|CilfDK7 zPDy|Rw5W<_2l@+XL7Csl6zzeQlPc%*E15HkTrX-(S=v&{`av<>nn32IvRel{nh$ZE4h$#~b6#oLeif?Gu#oC3?Q0zfJfiZlRCh zHOW$f`Su)Mt3Q{WhVy_#YYGT-pGDZbgk~o>4WX$3O@W@grNnOpy`{3dU)Px0H0ig~ zmMfMkUv#e=*aV=?{A}G+{VK1CjEe^#N~RA@9T^#_OD%;(E&7{U`%SWFUiM}V_`*X(-h~N{(u5KjYnD12?Q}DOeO=*e^?(q zVKZVUAo?39D72)2TQp&mESsaWnPZJHDqD=AYIosCS43F-D0Pi5*XnD|61c`jZnXTS zc*pcic~lAz9}!aY+^{+c;>4KEulna|(VeF2=9RALKwlJ;BO!|OJWT}zLrjZ`e4iA})#kzly?oI^~1{p)}i34v4+XD8H_zhkz5dtapsPB*2S z&k3AwMOqIF4!U+{>-R)=%oUjCiX9>1SwSj?p>9B_Ex^*Rh4s&>dNu< zkxA)8XSQ809~xbLAa_&-fZ#gb{BfE5L{95!NiOfZuD}=S! z1Jkr?kl*Bv--1lPh1r!!#>>|y`U2wz5JrUafXpQ1xKa$}0Yo|CyJaF7!={~jau;u= zF>sa29?a`D@=9D0cuL;I7e9~Wu>#|jP_V4!e19HDgw@s6cQ;(0iywz@yIxC;BkWpf zsOJ>4z;&2wo5sx$+8+uV=B5iT7nK$50_eo>r=N!4Fznw@1$u5*S#iwNCD^G9vdEm{ z$rAu$PbCOj=V`}uenHbyiaY+Q(c11=+LFJ)##P&I2^}M3-Roo} zYfH~2Ug7ObPf33dft@4+{70RIZlnM)2NufAi+!DwT`9b3`?N?`a->Xc`%Yb7>m!|k zgpUQTIbLW+tI!kCz!QLmKb=ku|DULO7c8*>&Sqt?=zLp*Nt+Vy2Ev?47uJ zRbs6;yE#vh9Jq$JH-3YU4%Sy$xTH0Fy|E$$ErpA_R6XMJM-u2p_ASSHj8kWF-Z#yN zOpPhCjtIWxpLy%6c@LhQw!E{m{Ppo!g9rcq>GAG^x!kguve~7@+LNlNyw`}wO>`ty zJW8PRM~=l(FM zDpP1U5o9@WLuvR}-ubZt>}eCQOYp_SfX?UWP^QvWd+>1ZGkmuiuEFt@%bTA_GXkf{ zQ~1G$NeF*juSAdL4OZ;{uhgFWTMJw^uSLyd7ymyaF`W^gO-^ss>2g&n{>$6j+E(Y~ z=RdGz(}x@0_+T)1Q3A$0Mn)p&1^f^7suN6r%OYiAt1TXi`Jdjm;ZSAfF3)j6q zMqiZ?Pc7&A12Y5(utf+WvSTopS@c=Nza0eg5WWc;;EWi$1OzpBPhN zta0as@dfQQZ_F!x>e$PbYhRi7^uX-Ib3a`2HJ!B0sJ^nkrtg}2r}hOd68DiCFUyM- zDy}aC2#Fi;)n3u%`W* zI~OQF+V)9+UuwPFD32oumZtgK9hE>*g)2`OQ0YwXP_kMHPb6FI*rRTIp=^%fV&nL@ z|1mv>n>8?#>CW-w((*5$kh>O;R7j;F$mFo4qCV17j`SNVUy+#(%Ssn2E-Zu=RXE|i zro-kH~*VXZ&6Oxy(aaET;=>16p9ku zX#$|+;iQ9~2LR~M41v}gP#J_j&C`N{l-@20Hb~EDv&^B+4z&wO%S^;!8u8LOyg|^t zT~HD$y%1|`uRk*%YQKYkQ;uz8NNPfE8?kv%A1qmtrY)F_VA&FW;Q9|JMVwL1UIBb^0NTyeBiiD?n%p7-P5gmj5T>ryeXqJkhxed)N~o{V5>xKf*3& z&IEW8AcZh`j%%pQlP1Sn%42I2x%NcN;g4B4-sJ-6!F*|MexUO?(agdzEEEeXBrMPV z{oJzzOg^=H={aYKZ3g3i1~hbU#Rh5wINh;z`7?6p^+>39P@u&hPAe5&^*{iVKR4O;JOKM~EqEWF@w9+v2CT<1ML_J^1j3zQ ziKM^?2JcyEooo!f|8(>0z+DSBOK-P_N;wR)KEmO3c(%rFMi409 z)yX#|sVqrh^|zwenr6kuNL*pPa`O1=?wzdE|B*CnPek0kh}xrC>rq1fb-fD&@T{X_ zx$*kjJyZllL&Nx;n5h=@&Ja)%jHX$ZXegWm*k?*_YjF{~VN+NYg$rCzHh5FmP$#xV zpuM8wnN5~6fi8w$?F9#PCM(TG6;MHM>6S@jWu?VY1=|-^O|D**zB*-JRIk>QGp#3Q z4gI-q_PJ@IZL+ghE{)ab5;duWHShW^UsRZ1bBCwcAHIhB9Z^SmE&+ND4K5xUGDx6D z^%5NM|3=D!vxHUT(i>kYWnr&bh}(<6^$ zwt1?tK38WKEM3|60pSiDf7l!QUIvbR#DqmdM4ieo5fuc+4;`g2TZ^YOKb8d0>9KA5Ya}h@L zO;A5~x0JmCJz(7BJcu^XSr(H0^U!L;OM^sEcFY~z4uZObFPIPHMdxyVM3kJB$~kIF z1Wz60><%(WZ;y?=dv0;;y$e{5Dk@AeX_&=EVI6QX(S3bE9{2$Xx}wfMMDMGHAWWppb42 zIXo`lNSQSjlOaphk)^nEq;Rw=0yJxq)>6qHjwPE@do1VPg{)@XvcOHEi&thBG~W-H zd@Sh1wQr7AOwx3Z)$Y%i=Hxdo5OggdXX}NY-P`$uzXyS!wvC`=!W#8DDtm@V}p*JPk6f22EF? z-C@w3GFD~X|Jr;|=o}r{ax!u^?zyTbJUQcb^Lf7WZHYcZx;J))Whgb*foB9fsy`9= zC3fg}rWYg_cs)wyHZ!THRAy1ihh@9g%`{vu;u~*q9Jj;=KT)soEbsF!`F9E5 zVT}ttrWu01!2Az0m{9>M*pyj|z{c(GsFi(n+-r7!xBnY~7FR4dgz+E);6SCS| z&~*pDF8R`!WY!35k&)eB2==>55myzeh-JR66QWzVzzd zANA)XJTOS6gYXDJU(JfXKxdskp0`+f(8uzfPi>*bRcMyApR45kkY6ngJ*F+l?$P6! z8a6%7xHt+nWdxNB+3mqVY>~BOEdlHO4563gA76Tc)Z-7*jdt^Te#8XANUEcc@Sjt-JD<#;i<}93nAk7Z(+W6cq-e#rS<;o)kL*4QXA0arQKh zdV1v|(qBf<-xK4+c5IU%be$He!vkFZpvpNaW(041bt`shjRZU@I+l9PCS2ZS3<(ZR zohWJ~Y9bJD{d@>}uoEqp@_lWw+I3EC{0;z-c79i&)DWmB%}@@|Rccb%$Lg`bdM$EB zO9(;~@6CZgieaWeaz&CnNbtOOHWJ(1kJkM}+1Q6_ah6~L6B&F5V0Qo|dHobaT$^!Z z&R*AQWxG+8B6B{JHB~GZme4unR<6N4cpn1!qQ(UbT8s|2HK5gy+~yxwQm9@+l!&m{ z`*{|-MRb3NPh*0JGcRk#g;midtyOz&ckjX0%ha`qYkv9mj|aU1BX<|QiC!Z&6@JR0 zy-58?MvdZCxA505b+REUP_ifIZr8JbIo@Kj_G-7)+C(SYA}I5&2jK&vuouw-u^;F= z#y^MxoUB4HAi(|WRA2tjbBP?(Bll+o5-e!}-XH2j5s?UO$^Y&vFWg#v^l4dbl(I2O zM2wR8=1#tIgT&-7Nzb3z9bBHG{y|s%AQnM*MBNRY(S{6Lf>&_FJiMoDFF_`ued{WC z2&ax2D!y{Hd9BuBtGaWCz#aLX=0lq&3k(*)dAa0*+;A&Ldk~$7QPY}An}E*(zdNgE zQBE4nx#)fOK^wT1h^j$ZN0AJT#h|MO*dPVljRrL+eK}(ccrgG$C>SZ-nr|)7udC-- z>Y;1jowQ1WvdFf6h4I-QkK2nekdM+p_VI&OjK$6}>M9)fflD(;^5A8#pq-PMfJ^r# zip%v@20qRg@P6#VPozcW7svA~M&2b?e^MTbkhDe^ju~UWKn#&N6IIJmj6QZUB$fc5 zCfLQ%1e@cTZhKf>)mp7HL9A`H6&PEy$mPoe&+$$D!t-WBhB6cUGU!==N1m!a0EjbQ zaCF|ZLt4W3smMkJ=)Z^M!KoZq9{e1#kwLs520dnar%+}c48@qCRN`*<@>25q zJKtCw$lY5Rf4H)~$g&pV19`qQa*&|$w_nre&juAF{z5L@`NaDL2Y~oUT%aE29I$hl z)P&|rEK!g?c?9WVh#{N@ujx;oJTp+zLUl-ma@TGfsPNnCF6>sc9un;LF(w`NF#EvR zL8+HVvrqp5)RPZ-eLLyWIOu6ly^65Xy_kK73Ihb3G4PD^{DIieq7X@G2)&5$6k2DU z^^-dNjOhYfx}xNG=&A! z5Lgv#FSs;@F_{h%rx_jpV{kGEIygvVYxKexfM*sd7|h>6dXF<>_0b2=hLJ!DRxIRo z5my$FAVzf$xMf=j-;if34{9B|wT>H^cF4*h8reN!l z?6#*vc-!(vX?6^dNv0TmV@8zvmGjFFFwQWqC5kHcitMQq|MAn@5LHWND#87ujfX*JG*y4YF{Uy2w@S)>Y;87%kpPn3r@X!h2m3sLh^ZvgeAH5(^ z`1k2stQ$2(e@&VxPG+i={)UaS6!k62@wx-LOC^MUz>FJy5$H$b4Tzs_#JxK%6TweJ zQ4XV(h@(Y}b1+)othGW_lWvnMrOW>qXnmbT>+5=*Da~1>b-?C|mA1qJBSBXws?sMN z_YDnezg92$HC*+qz_D0RF$ds$2G_m$GV4Dh9bZId@!zn#k7P$2!PlZGLKQt+bZ8+S z%6^yz@o>|s_ww)mQSm1xp17vK%9DbNj#zpAA6|;53o2x@+SMZBW_vcsSe0J8U`@jC zfD@KsbTC0Q3v5o@c_1>vw#sse*{|UUK)}l^5(gknzufrj1?!v7knSDWYTliPGI5Vt zS>Ajbngp=Gad*)4-mYkvgbIW1s5G@y(isJ<=*$BlUnxj+&ImA7q}C_PrBN(6@j5Ur zG>AQ8ZIZA4&{qD-?r+|1_yO_&X7%;=9zlkdM^G#_!eOzkR4%bR5mtXJdTkxte&9V9 z+x5>XtpUH*-3>)^#pWVzW_rT?GRV7vUk8)%8kKRAvP&s!Op;iWL=_>TxlW!9->Rh6 zDA}6Nb=>MXt`J&x&D>o-s41`s{{fCGml<%7){|`ukp~b%2V>?!U*cx=_)G79!Cu$7 zTjB6i&Ej-@#JS*lwtDw!Zl2`TYX9m-cQ~&d%`1T>fL11!!l4)l$B5Kg@!V5{7(+y% zByYns7+-kDNOb%Bx803+sjzTB{yXnQFc94;dIT--Edk*aP1#>h@Hw9C^hgafFwj)qXFzEXh@jKoUINnm2 z;#DD7fRhen11u-~z=o6cXCj-=%;@@M{wjfL?uK(~r>qs}#xY=)x;blH&q(Yc(#!|| zMmM;Q|+BB}Q5% zykh))?B$Z4-!-=ssY-+^Bn{EhuU$`JGeC`Xy5?Yhfo&4}#cUeGrit#ovPbUNv-FX* z05q?sw|xWs-zgoLsmHQIOSVuqQiTb;?l4TY%D?@J7_o*V$F#(RwGZc%2D#1!8F^Rh zIWCc=ZHOj0cBQU_K_ek630EwD3W0Q)6M`r&{71kroKg7iqy7k<@#2~Sq7cWLlH~-z zmz&l)gbq54JG`(Lweu*St;!U0(`Z5{Cpndd+}q$QG`uK;CU%aAYz4qoVA`Bys%y|@ zHFOC~U8mX)AFDUdP8q)|G2W-3bI+Vb;ydq74(sZZKkGrTq|GX*H#zG}X4k{U0NZ-S z!$SGxL-M%SF*l+Mm_}^szl1{rO`1AG5qWfA_>@17BXEN~*LrQc?6A|#nB8{aUtnIw zT|1X%wuQT9Ne!{m^R9k;i6JenB3&|<`m6g8u%j)^yns`lEZ;CbL}7=CbZe35@)MK8EPed4*KalQxoX5Zm4RYO(w#5epDx;! zUgJ9C&%bvuexIqXY2^V@g&;Q?i2QjsQtr6@P8@?P{|O!7D+ywv(JB8KmYr#T{yzagr?D9|86=5x9g5>M$IMF@x-c-01u(!lsfsYv**XDa{)FE{Dg=;7CgVN{ zuoJ{FK#hwUufxekj)@!6KFIb?u+HR&1P7-v0b>ortpkTfBtd%@ytWrtRZB;r-i*d} zmi)#9cn?^MrE9s1v!vhJAi%m0f4VoQESRQ^8BoH;iZCa1#Gl%Q!&FuT6gs4bcEWkt92ldv!WB_~+su>OJH z2IV;X4b@`=#luRR3f&flef#YsTA%=S>^yqjf&xX4`Wy4PhtLAW+Sh^Dj=1RI`r%`a z4YkN>@}&iO;v>()8!i53Q1Flbcc6%e>m%u{zkGVmP=Lv4+;j^`+flW zBnY5S;?{AX{f8b{kn`XINA3!kz(+%3%2c9A%@sZ-j4pvKU@c^=x^|YmK`(2_%gxvG z&IzF5bH`A*ZK(L)yl-hu+kM4C?^#IR=5G7OdJ+dB(SW!R;Sv>8oCW1efOF#Aau1CV zY{xNTC#83Mn5Q%8`=dFYyD|m+`DVUq8JO@yc*}TaptVG3e@{~5E7_9I({~d#{pWwI zTak$AZ5k9ingJJkpsoCVa45__XyULcEov$?u4ay;ds`0#&5V(>?g8g8ha*8La$Fd5 zG^OC-Ob7J*d0pn<$|_0=&zG)i-5&)5#x{zKV1<3bI{t4d|Y?UJwR}PR$Q0#cPo(Z$E6qK0l zD*iokQGEG#bh-Be|)9>b;J5qS% zh~9NOBH?C)ewxfOP0@Hfe_7r%NS>o`_*kMp!DWLq2SP4kgn~4Y0Wi?g;8%z=TsNJL zV!@aLDGc7ma}8s;V1HL*DbpNCHSbKVk$%&5A(-RKDeC@L28=#^SyW(7(zQtyOaR&TD= zd)Gkz$l#PL)G4RuXP(|p`Ay49@$Lz)p8#t_dh~!_`mJ%j;Mfk628t^`Py z94=@YZn-S9d=Ox(Duoi|b(wQRq~(Rk1Np^J+1h z4j^h5z*~F7=Q^IaD^a(x>S-P;^l-{%hJ`h#q4Ylk{vTUl7c?CNdd=;CxU%taxpRai zi7C9DI10@57+b0(#T}+WpNUe);lo4RBR3*YVWj-eOq#Jkidu$O0*g}a0%uf}U=$k7 z3pr}n1dg4{DL>4CD-WUKbkrgaQ5Y(bKSR zIraIWg`OP**0xVC;MrloXV0{(~>Nc^Ji02q1IMtkv)8wA2(3g^-y>r z{+Kom?`Z*f1+bV+e2;1f8=w8NU#}e$!j2^@ghay(M7aU17WR_ExydCwpjlRjwOgVS zx$Y6>1=P&py5>NN>++3U?OcIE8w#}U#0oiLa%ds#?HeGSE_M(d9ezajIhxH3>76LK zjfMo`&@SFCUhQeUSnxGPhG`xq?n(Qs8r}eh>V=G{3jdhouYeWG$QCpcjwnZrGZtAj|U#jF=lOCx9pu{2B^0TI=}bq9LI z96*I6V`KL`+EUUooE0j2Q4>5HH-KW8F3W{WQ-xX5iGJNd&@t`soOIEFaOGgmANF1- zlW8N^X@aIfGzRcrw*o%R)3eVjTY=Ar@`47wkMsK$t!=Z?S*;|V5#Df*WaO0iwx47a z&$S);8U|@HSw0%8lT<#FfS(Z!3=^O?DXLltQVZ4`UgBvlaVIk%b|F&4KKW36s{1Q$qQ-+rjNMQCXms&oVfyJSISA(FH8L6mPkj#cAx07ZUZRw<3fau&#c*sC16*;;y5e~1X(%*b6TYPF$bjrktYSDDaAMxpZkAS2e zm{y#SN|us@?u9o2t@kXL(Xq#RZ(xF<2a;9syQPW*6wC-}O9)nx#8h{!2bJuw&z0~u z@-765ZGjzEboMKDq5d;j_hC%bxCJ+}mo-?tH?aqn#~@BM*{sv3Y$$C>bgD)VF0(9wFg^9RDMLbXRwtFI*H;*q*~m-fI!hqxM`v#oEVZ3 z@9<_=U?Q;{5q~6eVnMw&JeglnDNdrXyU7WPWRF7*HI#0G$MwxcvRq?Is95JC4RZM> zTxym+#WM`&ozL(QUb!XS?IsC5{T(Q7VG%JO2s-Fy7i@lB^@n9pSnaR;nubehL^AY+ zM=}&toG!kT-Z5X$HD9sObPMSu?0O+>m*L%;atSkq?H*2?2F&%N*Dmf$C;$D* z^L_e!J!J)kg;%6$5t6ourg*6}o?4aJ3oa;vJt46FDkx8tI#LndLWdgZ zK%YY`cpyr5G=|g2ZJ;0|l!kA^mWuntD(kZB zO&rIIEQ0i_vWeO3er;T^!i{uT2$u<)HDD9+c%IO21Ta))HL+`n_%4XtTwj=>Ei*Z(y__6YI|fmNK?1p-1BoPnHh?JK?>o_RNk8B*YT#2T7 zs1?)&fhR{&y(APBh;OCIsZp-3Zp$fwVuniF~|W>cVQ zs&k;A^9ez5sidydpt{Gm7xO!|>s;Fv_pEI%<$@iEoN>@Q0~TSX(_Gg9yOB?1q`@qT~au0V!2i%vJ{bEBb~CXmYY-TT5G+zMRRR6Yu2Cr6wa zUTZm7**Qq{z0SU0*Kq#Sps*9OzRUPIqw2LR|7U3~m=Q*z1YlY5n z`P{Zo+Lg^~;J$c3&5iDtkEz->2N?cJ>R2Intx$9=R80@jil@2!=3Xxr2RG-oM9*jZ za)d{;4c_`7vebY<&b)aza*hLUzh2=cm=NGJ3o#+QU;Q%jwh5$%v3KS@2zIt!m6iw` zMFMIz=XvR`e{)TNc&sWZRT@hTSHg845?3Y1eNv#5jc49@>Yv-+CiX_;KlB>LfS?FY zCj*l-m}-FT@?t@eWzQ~t{dWEKMT!l3X+i)d&tcvs&)ErZ&-s+J^Id82#6KhcO%B?4 z{sTk_Jp-}`5eR4fdJ}*`zaNn21MCFE`9Rpghd@v$lu3vyjr}zyO~BK)h;OBeM*yW) zUPfJ}&w0OrqQd5CRbY}ze6g&l>|=)8nTU-lZanvan^cAg19A{W0l?gWga1FkbbaYV zI5;s&{ZSwByi01KD~w}!0h-K9&&E>|F|UU?`dN-Wn^WG#TNf%nDF1*4?H)gNJ0y_s zW1&D!!wWRHs{R%)L%==(7$f&bUgcSU7E6|_dA6!ycAVTK4Wg@U0DD)6>6ol3OJm3y zDT%3RtS~L>Yx~4hP3tM*S)4RP3_yi8cUF5U?Ge$ zesBi&xNMH3tyr$t$V?iAc7O`x4|rda=!quBtbEfxfnlGx%uhNNT?> zn@iFG+sA1RtTDA^O|N`_NXm`>1^=x0!wrW+7Y;8{@TaZZ&Q19?Y?w*`L6W@rAj^m zJf}CGBv=j#wwi#$f+VQ?lhx+x>(V)=jzcd4rz5QMM;}C50m5LEXNOtE)>VVqP zsjmI#`XN#Ax$&a^iNj|@cFZ@oz+av_ilA>O^y&3^#)9q{PHUAQcU^sdf-lHWKFB~x z_oMiNO$c-=PnT-aW18Dy4O82`5OrA3-5nP4=9UR0$oniC+%%PLS81m zuQ_{j8}_D3CdjRy%P-GSb{-V$CX{(D!NjA$i-p z{yj2Qzx^NX-aoGCvhDxZG$~E-M@EIR%#_MY$xP5dmYGp`DRp}#7RoA8GL(rw;@8+T zQv3z0yb={*m6uVGE+qwJY$5^@0wF0Vu<;v_AKMtP4Ys|%$8nzT_cpBi{@kDMf8Xz; z?liA%!JX%MoX2?_uh;Wn;+-}$rHu5eTpdqb`d?-Ke}_fV&sT4|*n;?;is+&RIa=jV z4SX1RA%~B_2a%PRS9ZQSq_n_e;02HV9|KtS$}p}&WP0zvGjypcbE@TD1@nCNl2&iq zz;lw)orccnu9D(yjp}j#KKpCQ>`|k_<(uL|JO6wvurBWDsBTT6yXv0%c58yXJxOyf zDWZeXuD;p1k3eUEkHB&M(C!US_v@?gtd6ehitLKe_P#DOybgSgcyG^DC+P1k zneY6&&n2IXp4Y3lbPH^AbI zBM2gh)GT2p3o)(Jx0j^aI-P$3<`mRsOWX-Eh~D)tI^XrBWQHNHcOLJ`{@PW#PsIyq zrhzEGx2MufgM6W@S;q+X?&I0;kR&1#eB;r-?)+)mV{^-C{6^SNEbb`Y_Yhs>6f#ed zJw}42Qsv!JQ<0bXb@i71h|T@M1b>H}3pS}jh%LQo)5|FP3%(LS@1O`g7ZW*nPom8f z$~1nVv12s;Vqeujr>dw^+0)6!L#Lg~e`6zTT)#alQszZ&-8$kj1RjuOy{GOztWJ_z zYNRc6F&8-&Q&o97Tm3tPSGj%;-#Eu|TV{JA>O@{bkW&B6#W1Z$+lC33e?Fb_+0gs8 zmNWdu{OTn~Q{v4jtx4*pq-Yp3u`J?Z>ti;4bY6Azk~2fKozeP%Cbpi#b}Zp7ilB=z z?1hVG1|K~rBXE9${vCNk96wYYbKV%g(4RTTXOSQIjyTA?r7^~9imT&qS5Jytn)k1Z zF*_Id?DUDel>YkUhrR%8*On7)bvu%MfAGzT7yCA!oiyEzr+=82pQ{?mHArs8scy$r z*}m1+46G&9I+U5S2u}84MW}TYyg6fH%5D4&Sww*&g=G29&P6(Rchyxd{ZfHtsiHVQ z=|ZoSWsb}zneHE*R+Akh))^Cpruqk!oZ814kf%R0=PD22M-E z(g2EJ@tv?P_)=$aD@dxQ)1w?x`R2GVK%UyJMD>0uANZ7AD@O_uJ2IqwsvvPn;LG`$ zJCMx-1ESf&8TKZjY5-tEtQ8O@75fszY8W(PNUd03JQzB`Bkr=$q8I8^WinfbtT#f~ z8=NASbPO_mPB z6B%FOP4qLf)DZzHHspnD7qu_qy*%_by4)kw091d`iv`l#;Ucd-g*-@ZQV2m!;1@xa z5^JB1I^EOcTN<@Ze`EQjGtH8NL9u;v^gm=PpEDGmAm(CcNex?pbe7bhDg(i?KsYCK zajYO?BL-?|ggERdv(i>Gey-R7!Vj3Oc&<*&I43$hi?3V2he_0MH#xt(UDnF06<3yp z?2cL#>*DS0jaGKjm!#?*QVc=>BrPIhCynqaaNl4{)f?T1*lzleOhs(^B>rlk%(ThY z^n_$-^-fEmajDk2v~FmMvG@1b4bY#n57xq#2BPU%Dh-*EOG(V64FnI+rzRrTgfbeT zYEBvfcA~oT2_&L0pzRD-{xxT`Vf)A6sY}+HlG(lMcvQviD%_l(G0*>-vLu|uNu-I~ zJP)jh;|NG-3XRqOgIiyyV=ZJmpWvQ*fp}cO-9^XSr!RVcy8aveH!x64$G=T5_-%51 z8{telj|T>pymR9lg*Z2`r9(klG>L*QiLX&7SQA%6=DH5>k+VN_0!^^qv%UM_xgft0 z6#1(ko5DFIhzs({=O`z54SkW)y7#pET_4itu6&0@V2~h!Jte$V;elqvS=tmCMMn<6 zrefQtTxZ%o`Z9M-ls+d#JWXZuRFyOT5?aRy%g(E|&vmVjeipDK_W5<3oD7CGk%>3Z ziNGEl)*re19NvXjHvs>dute?Ed-@r`#^%HnTo7S5I~MopMkG42OZqTcag8{BmZuM>>n+dL^=k(D!IwRxVulo&UIfiLDYtSOSb5##}g>#c(x}D?~g()+F$=S#RrxoJ?)qM;TiDGEHpMF7X(wFq9mf3RKe0h18 z#1=-2b()8`#-&vi)qKo7M%uUpb5@jbWTFU@OwvXH0-0T$1VfzQ`vejP4vqx63OmS& z!Xl`>2&Y6r>z8zWxvAMiK10=GXI}3Kt_RT4P-H}|(c6|0ZE5CJ_~!Na>dWJ_|ID_t zRcNyw26x%b5*)LFd<)K}3Mo;CX5jwiP7^Uk(6dC&4ZV&@NMk>%;T9M++`<3WS(Lx^ zva4+H!}M+Kt4*qV-~x{8xtN%%Ri>7etvsW$#h%ISd6`_N@7S+XCR|`>6%=^I_ju_C z4_32+E|@$<2p{&3u#2udckY1a^ubn;d}9NF`>yElT@*T@ED)rTgiL|57~ET+*QNi< zV!gXwL4Lu-?} zr-fcv=+KwuWY|ou?;?97NG>588T-BqCpQW*2Hz|_;)HvW$#4Ln&1NiQFN0= zKJW<4hXEK6rZkQ$#%|A{26*C-hofyzJ6L-?q1RyeA!nO7(YIIK}l+#UqR$9-fLkeqSX2YUjP39U!w0CVD3jX*;a~CE2hu z=2x_`aq z8)lWnQY^V1kXIj|Uz4If0O~akX#+8XEQ6iFazAszPP=)T;-+9O9Cbu5Bg0)VkUFCy z@GR0$hFjfXaJOeg)JcU4Xa6Pmvt>s}=2YZppLnB5lI0WI?el%yN5!40wJgwbD6pk1RoKQH4ic3FwQP_Lob&57%{;~#B2egi>yQ`@ z2}(@a@stqPF&!WVLp&w5_-)||aZ{LanVeQ+A>c3IyZ-IO<3Z>ccz-2QdB`uaYZvGr z`=T^XUkp^V{s2qV;OAbZ2gKbABuPH%*ii1A*pURlk3f?n#zJ!MLZ;vjFe2wQBnDVA zuyJ$|Kw9wOMolm9=%8l+R_IBXL{3s7&f z)74Fq%2(&!I%yP2;B z4!!1YJIqgKTqE-O*Qm|sHOI2+CBY7HHg!St(4~a%hJtNaN3=!2zrl@+%${ezpp(ak zr6HiAXRiwTLgAjHhl~(+I1x8tP*iPe3M;of!Z#=KOIG^SUzMZ;NiGJpe5Lbx6LhRAZ4g|s7XODpBcd=tb zklRLa6huY|cM`I@O#Q8L!*QAZxCmw;c{A>L1DOhM*Vrow(XFY1V`U3c0W$z5PjL19 z88hpxhL^T%h8T~u6tFLyeh>ccKC^cH`}(v_ZA-YgB|O?%Er}<$`hT%^&LF=_ZZpZF zt9@W_J#ljhISk>zh@Rd-c+Ti^~`hUnfCLpF*`K_TQo&R zQIk=3%No3(Hoa2Ycl|;bg-=;Os~}i0$1evXlL~duH>-pLf5zxY7`$=(=BcTf z2j>9L8{sZ&6#!=Ns9|i zq3Fxtrv=6Q6x2AgHULw+zbqq(vgFcqT7Lp!BKIfvG9en{A9q)Qu8Ssj93 z{}%z5yGt)bteZBkcfCQ|q^ut@XLCb+H+zz8k>Vj4tmmg)g4%;zqwnf z?*Toq5AC7_C-!!wY3KhFLvRZP}))Qp;-*Oiyjh=|sh2 zwLTG9+nXl@R}0U=dZ$)LoC7Or#K{70$SeR6uya%4y`}@Lg|pxsA8~_q{>OVEYtJcu z{W#{slE5vNM>Rv88q(Y(v3jySR^QEpad_qeuc2jXOQoz`Q>T29xbG;t z&aS>S*SHuqK|-#p>9_j8<_6s^rPi!!!9i*Llgg#rZrWpOO3v}jQ6|bJdg}38l(IH zT~u(|$4(L%mVeo=aeEPt!~m%8Q!gzR`JIrvILZ(k7IwlfcmDsfHU7^}QrH^2wU!Zr zp_78r&OCLeUX?Fn%rZlykcm{p8wb$lJ+QL2tM0dg@|C{iha~bt+xb+dqb@GNyVnrF z{*s>xPe1%pt9e$S-_UFGl$FcHx?;(fnYImlW;MSeNYop&b=%7&5w~0Sy5;WH4*jHU z1_9<&dscq^c2-zSeTrngfA4W=OUukv+wM)uSY*~6J|VjL<|@Cw(K|yH`^8;rT#`7g zZu{l@B`#f>ybAbXT3tN;8~&mfkJ;d_4+r=pPBLMR^M|td&1ss3H1oHEOYhI`a7)nJ z9=t3FCLVwd0_IO(b)iv&B2G79?G6%ms7GMJXD{^7`U5RWaMy%=_pHLZV<83+@~PSsEjAqIyY$^> zznFLd6nL!kowZIl72|0&i00^j7eMS)3K}hF{%&b$3+(OC40aH4DC2IqE44i<0Ec#A zE-xSkxf&Vr%xW!vu{~t})re&dcH$)af$bgLdzL3H0j@*j+GGnYlcj1WD%o@OiNR-VC? z(YY!*GF8vX^w%mHFmyD1=($M$$CPQ3KO(*5wg2hc1MdgeiH-4z)6{X-^7CBC4|IRP zHnFT@wkxW`ly2Jo5N#o|5V$X@!bFud(V&hMqDPG84Df>EiYTOPVlQ4HW*KT2<#Q@s z-Wl~KOfH9xB4lCgyPOnMok|Z$QtQf?cdpcYn3p-}mIQr>99K3(9N zl|p#DvF~!cM7Sq8_A>D5!DvGhP4N#fA;31CS01M*j?<~~t3_qix=>kPsG@Y4W>1=X zRE_e()Nc0+x8aA=ofm2p8xO-%eP>AIaX>QVsW#^2Zakm+QA}hBCJ^ih-KLpCyY1Z@W~+TC(I%4F6pPCg1iUm2__vA z02YHKfdHC`aU63s$IgK31wKlyM!YVGt7l@_#tuBEZ^bjOi+kH-FsIg<8Ix2UJ>HfX z|A$NbM5Cy9i2_g^f52Trb_9JI(Ao@Fd4~&xZE#Ze@Hljr(PlLohI`uSd}ye`b1rRq zwXk+tSbsa8+m4MMwg>Lp5fQfSqPszoXSI3{Z9X$bU|1+9kj6Jj_2sTHVVF)pgt%}< z^HJxWx!&^IA4hIms;XKYHuaIJ7v=*UeW? z>#_^{FPdHb%gf7rH*0<^Ydf|Q5}UUK*N#BS-+yW$lA@gtWem%znIfW5#V zgW^Evig4TpQ7OO7JF_-q-L{H7aVA@mwtXNsqWx#Lo(#!ghPlgV-t6Bq)jt`ZjDFM1 zm3-?v-hvH>wHBKeRA5dxvb&Y8F)s<1C>Kh_H79Q?BU4X@XRkf6?hj%Azm*LyfnD8i z+I#EYKYJ=$Rh1G4VqqJl;x>KoYc>o_hJ zL@~QY%owpb0j4{%Vkt6CogM2;avuBIlSVcz?9ybDUIy&dfZGJkepg-RiNBOvE9I?l zt@fKV4Hb-~!hAG)=yCNeVd<^&!J9*JOW^oDmhl+ESdnD(@>_ye8aBc!1ExC=0x*K; z;7qQVb1OIeNbU-#5T%P6OS+UL^Z2Gv{ktym_oeJ3&o zih(uiL?48bTDWqr#;njZju*x*yKtuVBVgnKFA@OFcOQV-9VBdB2sva!jbC<)u);RC zKka$VK%SYbwe0XNtrc(@@uyj>;i-;p}~FXudjIMhJ72?Lp+H{S3PJ?(6> z(9wt{haQeLcB4rSdFN-^pogsw^?H19Kt!r|l7H}ei>e?>R2-#S#xpHbsEa!9zvxLe zSU!g=EtReW!P2(FO#6Gk5X(84Y6qebyW!U%;@~74(A>heCARMEr~2=HLTdDT2^m^% zC>Ey+EvJMui`6tCSAVyD_c}>^|K{}DALA#CRPJ`X8NZ)->6IBLW*0+26#iKH4?d3n zbt7PayHBqbyq|UHw~x-}Hia1_N3zY9?8Z?4w$Pk=%MCsfgO7tHsv9E&nUE7p^r_mq zt@p^?KBGrJ^r8DB?1XiWhQJCuxKq54 z_RDV3*4S@g=*O}GS>m3M`Z77crP`e6X&c2%2X}*bPhfO*U_)9Ew9xPV_o54I-jh-E ztkMi8m!b0$Y${;L95ITU`Sl!;#n3VLsKNN_s&X1EM~j&9ph-|4pX7DTtD$R8*5-(a zUR9x|q|ejvn=s}{`DgW+XCq@13QKTG0QNdg!%TqJ+@2l1_r%wPYl3iut(eUrOY$^^ zPiVM=C0ifSFsYh~WxT<+?<@S=i;@_lVwmh$iT{rFWr*0WO@}1q#?(ij4!*Is2Ob^3nKyoI3O0(AWbt!|C>74tV&O0^2V`ZWOv9w7?{C2yR>Ln1DIT&#Qt z^^BvycNjLGYC`PnRU*q`4fRAS>HdEW%Z z?hk4@c_)BNu>KNZ;kpO2ypHd@o4peaN@i+#!rlW6UhF>{5?7-5A=IsZ$z=3w-} znQteqsw#Rtcpbq+joJwAlrO6l4V2XZA>;WC!PC5|=;dLtonk0?`*9hZ*U_ ze~EJUbQti$iBwqYG(<;^=SY|6Z!kvn(RXw&4TMOfJaZwhQIhIqQ+TxnDlLK0{YgP# z04_$rAw-@XfN{U{%5w1MLL2EQW&l8VL!=a?rpp%fPqEz6SRVt|3~5|)c6?}D3c*>? z>#yzeS2Xn<@O#mt%qErFkxymw~$R?}$lsiCR<&D;GGq&AbZjY+7D$W6+YBxSd6 ziP9Va?FE;nkSZm?L{Pep0?7oZeM7ojSml3cMPkY#<)ZRat+Ud%^*kqP7!p4v(`}LgtW8kCc)~zt`PCImI!;Aj z9hhnF?a}rCOQ2*=3cZC;1Nrp`XN4~c+8y*8PW!+yz@VrDI||OulYt>ij(I9trkDy; zmSr~I_(nJJ3{~$Fsw?h7#e5<&b<8e=`C?ddB(k=6EJc$u@-})8K&_rc2E z?H*fVt-p^iz@-)_lVm4)I-ZppAI4wVAEx{Uiw7;x*pE4#{b8ptJG!K27D(AZc?f}G zDvbFCbv^z`*%R`lIRdD5rc(a3(!6`6=$W#na8vG?1yYHn`Jz!B_eAkm;qtsADWZ}T zV90A3o3`D>|DH>9w`dF3h=DGe;}1?^5>(U3bkJFdRq#7l1!Wyh*pE6O5}PT}hI{)C zm!4V%EZH#{p-7-^U9a8)DwtkR$&~;_cYyAeo94K)xSD{GSbi+w=Fpcpi(f(?31vGV z5QM`a-3Lvvk9^}w!gzDwcQ=7bmPi2*w88qcV&&ls&Cm{8c3f6<+=3re>CyciH{ZMN z2EmZ%$n0oUTjO0`bnnW*wkl;?RWzhx+sOs~n3J-rxwhE+kYu#4yDvN|Nr{2`W3jqf zq&g8t2?%$HO!N`r(j{?}z;d|n@k#rm(XnN7e!FxvdyB}u-7BqK@_FZ~^~G@>O3(im zeAG>ubUQ%dNDS(fr2^(M9IT8cCOU? zg2EJ=E(OK`^v(uBA*!Y`es@HP)j5Hx{~EID`=Ox3JX! z@-K^~O)#Gg7axL@>@}PGeR*}=_KGESJFC}k-m)dq+F!kWux}GNj!sh6I2AM<%RKX{ zJoUE%ge#rp+GPAJt}5YX{J3x5t`ToOb%r=0(cCj^PZ3S)aH|M^dsmq0XPM>s5bI4r z8uMmI`!|BbRHkX8M^^MB4kH#>0d6EQ88?pfr{R2>b+aD^D*?#;_SXGx-@*abTRh#K(K6FJ2=Rx$X0@_Kc~=tTmqoX2EQ1wJUC~a^@XD5nP8+qq`oo<+xbu-pzLV;KG4O5 zC4(P6Y|1LCczOY949^S-_u6gJu|HHxPF1(hmslTwRy{C{aM>u?~U%P*NOZ=0S3d4vj=bjKrhkUOSUv2WkG<#Bn13O zkf1|6cPSXDd4U--Z~D3>$+_YsJ&}saOvNOgpXdcvxlcR<;Nb$&4Eu*f8if6`oJ1iT z5gZSIT4KQvi;KyXc}Qv3G0Yv8GAXG*|D{|ms5n)yf^J(^XTwkAw3v&*A<5ZF)2+?d zy&WzxoD_|dsG*MZ#secCxQ@ly$uCZEax-#+M#&!d{QWpXQ3TV!B6=YWAc}zaRF+4C-vNp1kwB|I+Ws6JB){X~GJ!;F2ZY@^4DD3;q=Oc9m^e{+TiufaZ zBaj*McH`|NAW^*XEs)gK&HiHkh{y5xfggjl4znJfbQ1h95<8#4ZU0Pv(SJ{4*%&30 zp<-RQGwh~;cfBrms%~^q$YYBvl2V&xYv&W_paKbqG3igly>ltdo-!BG$iOc^8(5Uc|40ZLy*R z{n(+H&iFLHL|#B#!PbG5;r8I(O$`To53ZGl<7JU)bKz80?*@VW(>9V!1$z$tvs-1h zs5D#moJ{weLKG7d;h%FX@mAvZcpQ;#GWv1kkI-`w7#`R>&|PaTwX9H@N>xW)O}kth zz!fb?s&2o^OKaFLm;!qdrok>{zi$Z3)FAoV=&?(8VNQZ5$)XRyu2s8;Fu2HtKoLPu zIE;Rg1~CjOf?&&&a^qL>;xJKp81&nrBE+BQU~dRITqHUd^ChpLm+zQg?;7JXz5eRT z*4e8%UjhWu7xRynzIb@Me{ov(st8R^n%`GDGJO4;rucsz6_XOx$oy=S95jZRb60ry z`X9kdgo2CT0Z98SyhvC;4SLOhTN=k0+mBW6uwfnVp1U8Nj(T~sRPOq&wx@E-H-~5}}IwRVu znZD|nzL_3nrC_6ginC>mqS0MB1Bc8rJVj-=YLcg|X|&h;ywTV-!36!?Noa#3yaaMe zfn%|u={5vwTsi8E#jQt4)>ZN5EltgxncmIGRt!R%^dg3Cz%an3X50a5ZcAn1e-On@cx0Gm^ zhvmN+-%@-W|K`)=w};;wPVwXskeCpb0;WYUE*&66y~XuBLv6Fr@D6X_9Z_SDcn1Bw zS8(zL@_YBAv_&+KA@)}FyQ>OAYeQr94@?G((6q}QciZ+=V~ zDv6W%#3lMPXYsXJx7F%4_^kkEGK`lp^8{a#uC=PQt+mRY+C`UkT(vA3V}_uB~W~;__<4PjwgLJujx6$mtlZWj@qa9GqR7m^Iki;pTt7zzv3?q~2A)i2sPPRIBPFO|y28l%W;p3m2J_`h$ zfdTL8b=$|gN=yYYH3c3;^jM8@94qo2Lw=%hvF9iFj3Dbezw4y`A)s6)vwJ0WlH+?0*=K04FjVpeD=keG%+vCneeWyQ#?No7Kk+Ou{* z45VlcFWGq}=RTcd6A#9TbD1sbrqk-r<<>TNYt7kE@(zG~H;x+%0pg{R%7!e}F1hW1 zyzS(^#gTh0y^X8obueZJI3*2a=*dpzOD+)m~nIIO4=n$B@CGtY~e95uJn*L@@A*pZ& z@%vZv3j>+Efre~}KHE?KL}1G$^G>w9U5p-h`e0=Kop8mbWFEhq-(?#$N1iiqJUk}B zCw`Rr-WJV)YH@cpjbhBRj`KJQC}?6n&+rwmAlFNiR%K=RCB&|8F92Z=9{k{rj|?Wi zp!fnRFsq>ggKx9#&5M;8jEB;kt2`DJofy@?90XjBsu`hK<_lW0cL)^h!Xm}_GcN^f zJ$K@@8Bm6vNUqjnC23V@emh0a2UJhfn@$!(G`GGZstJgH9DLGPwSuua6CL02g7|?9 ziMPbGMRF~CUG#YSvzmoK6Z9YfjYIXw;~H{~2q&0U2`Fd6UKW{QPHR>bgo}0Iy&W=Z zhea@e1JR(ghK9)A&b0WJ4Da9PLnfN?I z!Br~_UXrZ3q?enL_~!8r#+;kIO2-J}@z`pNKWU1?*NMhM`IepI#FnLDixK7qnFv7% z6Nt4Q0c_D!=h8E$TXF7iaQ&oUA8~klw&`0r^OV}wtx0E2i<=T9pI2BLDq7PFX^z2t ztN@B_a)PhFqUoh)SiCz|opqY3y)zWXvpuQYTg>m)qtlw!a=h#bflY9!IoTH`OsF2= zU9`QyjSqw-rvWE*qb7kAnkcY}w3lEO6rC}a|0PTm2qd!%LMe-%_L!UoO{B>D5dpX~zWBMt`<(=j@ zVIdfyHAMEnwK1^j0!<78K!R$#T~tPgreO~mB&MJ??wQ`x`mh%>THIlj>}OVryIdrP zyez+ZwWRf?vCUHUk4umUgusCWHmsUF1&>`Pxej#h90nR^*&S%_lvf2;s(PZI%vhC% z^O_*}dzcH|{Y<%=XuwU^Dd_D~_{#&S{u-Qmj;X)P14xGeJJ+;j4IP0W2}BF}=61q` zU0+L>CuA-VwwE00YSy?8BCAXK&U(3FFVDDFbR$DDnQ@2tVu20aA?@AK#)7B}&0TbY zb3SYshZ6)nQs_^>z%{J$!>)>cEFrao)={`-xRdLh!vmqfCA~(_Z7A>*AI+%iXY&C& zE|8fS5D>t1AO2Z&6|ZwhuZqux7MqwRi`n3JFJIbp@)mEo{X-$vQ^$;4t|u4*)w=TM zX^9TF9}uZvatGxW(lS5n0J0f|x%gR&Ds_c(a~1+c%S8`nt9Q-;jG!ejs?GF-{|A;4 zt0L0=13i1n4q^?H#1%>E^rY;Fjq?!~@Tk%LAEgJ`ZRfQ4$hOMq*rLq+s`qT;UF172 zS6J^z`0483P5zwxT?iH2OUF4rXMO3<_?EM^Y3$Ltv#%W9TyqFBda zLZw0~SUZeXaDqnyX@u0cs8F1k98d{PLIz0IQT2w}RWkF5RlSL4i}y-xN2G0O8gm+L zWbh`i?=L1`!)%_hl2Ye{A_|YC z_!R_+twGyL=Vt39W$UBr3s?9x%`zR;hr$p{IvHu0nuSIOqA}riA=SMTNYDdhtO`t~ zVOt^OBoduF{%P#OY;I;DV3g4FJo#y2NSb3~h))-*j*k*Uu+!&B3~21<37*tX&o_-L z_WF3qnfpIZ7wc`A^$DJC74P!02_9EEH|I^*c@hG{-Ou-p0CO<(Lr|uJepTB?S}#*= znyU3A-*6J9;#f!6yv%)pwjCbES<>cKA3?hKWColk5@zfmp)wplMR5TH_Q1wHRA&Hu zZuCPFq3n%~0vxzOy8A?_#(I!%5nZrd?92%!Iqfs~A3y+YGTf9Inq;~r5ro|d%#=KJ zrqaW8s5DW3EiK>%Yr7x=$2g&VWhD`8vf5@SKm!@;ixEgrA;Op%&hV1>_f}|m{9J4 z$Q%`zFA5q9H0=fEU&~y{Jo0;>NCg!xw5eWLv@*E_Tr=;6(xJpKpmvdNfqsEP9jEe; z4Q-H>GE?0Rj7CTCaclSCMo@rYZW$AMekx> z?_x!Dc^qH@!o-_bfm?(1dhWp~fdGs_buI!XrcuWM$Qi?=;v+t$FMS#os4NT2njTLO z@0cydA(1-5%1TX%>eMd(7WUEQf;-R=Jvqw_W&{&wy|Qb@0s;X;-2t*R@Ejr)g_Hg} zP6L_%hJ{r4++gS4#NdhoNdA9GzNoOKSG3O6^v(r_P@cLm?~jW8ZnZJy=n5U7VrI@2kH2`rlxCT(Zd#%F z+|~MrYb%pbVQ#5t3|IAp$1KQu!t1lHLYNWq?T!cc{JL@#q+Jy?k};A-RYTp`?Up{d z{Hn~Rc+nshHlf3X@uKhpmUDN49=bJJhy%%31K_g1C)Oa&@TRK z7ZBk-X!k9znjcg*u2%1MWsbVGOR`)=a@UrIp$XCZ%Tm52=p0b{vx-N&F6ekRLivKA zMsE%h-&j5UhBf;pzi|bwJDkz;&jL6cMC#?VIQAe-SBR6@xsw2c5>*yM$RhYu?^(we ztNS0`KQ@5_MTgz~x!6}0XKyAuXaRfGYwQ=*H zQw$ajXP$F9b3zq?U*r%K#7{&~2Jl~Q`)FNKUCa(o)wX)M?rJb-s&@)?$Ay>As+JUG zZc#mnwuo+cLrhx#)WaD#b8IEdP=~3R^|?`oyeeaFmdcc+sLNDN!|I!49GfLudHSzi z#c!%-Y7#=Lr-g#}A88Pv>qb}4J$Q3fKKS*uBVdaplk~`VTRM;$Ro+DC{mZ}_OW#>p zTdkzAHb(CziL_r~!8Z+$oM@l>RW6qz>3R8_cSemSa@9}h z0@|Y>Mm$jJvv&@0;iZ#g7*D}p7jh-N`ZM<*>^vx{w&dm*ujE+*_3JhL>n&G3Eu-Zf z)&J43&>uQkkmENI5Kt`INLkk?&D#4OoVxT?!V|-7VqZ8sSi={N9>HP1$Z-eIny%W> zn_}84W5$H^&JujhWU8A_YZB@Ow_C?Yh(?i_@Mk}`umBQ|*LWjxj)7L+BMHa8t1o{l zER2mRi<+l8tTnZ28@>tY_=cRvQmzHT?5eQ*S8v$egnu0#lw2c4=C=OgH5%LiwR z{?ILTgi(}@zf>q3JE$9roLdU0W`eVrKe3EvrMh ztUN28snUC@@=tp7KWp=hK3p9$WtFw^xsbt{6|6lR5E6EZfDrwl(9V$k z4?*zYrtsqFq!w^oWR@yGe$fG!Ag2=s!)AU3pQr;hqpA}h^I=Z-v^T>PDzobDNq^JH zoc4g8#+$41o(!&zI2%(o`{3$vV6}nt^3Iupt63gt zDDxo@xfHH0!)${#qher%%3FI(TLP|r;>}tJKV+4V1s4)?-o5A6=Wl|D0~i*yz#eyh zna7!U01g2F9?E=C<(QT$8v;~phdq_Fn}YdG!7)`GD;;>sE^yBckHs`BgQw0BtnEL& z@G|@q)(UL*$f~3&b9$2T(!|Fsy~UhXn>=dzDxWFf4@^yF@33uE1t>+1iA+WmnGR5eyz_bib@q@cvE?WXwVpT z#_v1&_d&wKU(dcd1Hcf}-4Dl{qW9QiP6>%D<_*>x9&`i(Mxs6tr9S-_?r;YvqVVQ& z<$3X(c4N6gQWl(N3yv(6sjr0c`qtV3Ej1r@4$g%z|3dAtNejWxPBCfg*PTU762Lbs z2;T^BOJ18U=r!14{B6PfbR4;e{ggpkxf~1{gqQ2`9))35h^gy_F)8?)i=#<SI7QV>uDSvj9r}gI_DV z3-}0tO#uTi6W-N7W{n*Q&t&Jzfn;g$g*he!yogG1gMgK>6~-$&rv+RFK=)S@h`e%| z(|s3x*7Z0ORQFl!7KP(<67-_Q9r+L|5}(RQ6nxTCYnZZyxL+onN3>t%$hPF!c;@-!@b{>&4 zYI%EWNPlb2y$9pY28SFn{u#IJ-r(xZ>vIcl?F`<$KD!X_ANYY-gtO5i{QZ~$+hx4T zzzR;d0N@A)FEE$`abwZF1zbSbUSK@DvtGa5)wWpK?x{>nO8fuvQ*XRqV9U`uA}OyDk}-}|etXggd@$L|L>OL3jB)&fyOL-Ya+4&Nf4iB; zx(5pU(^S!Y0$rHI8V37m09;Vc*xn!%s-BSUx;RMEUg5pwTS81=LkVw>~@R%uz z!kt0{Xhe3kg?81QD{%U0d6MssCfI$gKh1Sd+p`}fwr-$R(al@n_H**$VV5??~jLfyy^iWMOxnHA!Ix@r`0ws zQ)`#i00^eSR3E0BDjA$A>M@Gv3C%}@CGRp~q3KECwK=@F4QgAOI=w!utM`y5evH5p zB)A^MG({Q4%5`Jc^(&5)&hku7Ygi$){g*v z@t(tdX3ufplA~!3&8#rRt)I$|EtB@%)Yxt+ioz9Rm{h;s52Y^FzaqDrt)w}w zIktuf+ilGhocK^3VO!{7{7e-GSSkb4R}( zfX0H!&|s*Iev!C4=q*c9F~rN;w;9XJqQQ&h(sEZGm)WkFqN$GOX>?OGmpc{ZojOTj zqWEs&wrZ&Cy8E|`zm35wds=f%S#iz97#hcZm=0*6tD6Wb61Un%F%c!O?;viS#UNHU z329+3M_ui$``YVL-*StYZ&{pOw{2Wd-d4W(FdxP_{^6!GYkSRgrm;Tfh7PS)whpQG z3{L(=Yd)(58z0Mwa9bLl^d7(2OEu&b^Jnmq0~yvkRnfg(OODA*C9;Maa|BHp5`D(S zdz$tqDx$~8EjQ%X<)Uu6?#JxdM+1k>XXsl5u`g=Op_-Beb@Ng%wMoVYEshXz=juOP>)krsA{1__P8nPSOJR%_r`BAQr94zCCHywdVl-0ncva*9K?7-;iNJ zdPTEqHv5XI#*GO))Ku4@m1<+NCM7C1BdSSq*uA{&a_;(ApH;&2AMW3A7~;r2q|uJ8 z=h9B>_hceEI%uG6J-jl_aveH}_a7sjed`VX8GC`!Ta@fc2uO>v{fed2m`M@2L*BOB zctAq?F}j7!d^(!u%3~Vt)#13gFuUoc~LWVVtI5nWpnQQGa#( zLfmsOFi>%)RPm&2+u&-1FF9{E^#_sL@|&)H4us<19Y2oE0EjAF2?V`?-tcVjhU4FK z+p#PbxPVv85jTIR${&(64H8pMRE593-P;$cw|`n2~I-RvD1cF{@N@B9z;p@&J{iQx3+fMn*O z?D}|jrrsY$H>XQX$0ZFrlk+C95e*;d(DP#djXXsF>;cps@*ScdlsMwv8TA0jtw1qE z5GaoB4}D*-Gc~x)M&ldD-F5~z{kNNK4&U_6ZO1M<-I_gZ-jPSJ5Qk{tJu9y?Rf0?c@ZHLU)D5{RNNY6OtP- z%HAggC9c*xuKE`N9SOJUn#`%iQOSlvAJKdO`P}w{lEE>k5ea`?bnyf6N7UlJ8WZv@ z+ukCTW4ghh1PEJ;@*;o%awiy{ka)EU3#B1LCq>;+qPa-rE@x&-V{1-EpRCpFbN3Nq zkJlc!@TYizVy6mh>tyY~Psw%rLQqRG_7t>6rp|a6+<0KdaGKP^X%4VrfLJTGJ^q)h z&XM2Y&lW~j-vY-}9xVX8nfW>x6xV`Vx z|ATL9&j@Hj5H%Y6&Ddiqz0UDIg{zy;U@(s1*23a~o%0Sa1Z}5EDm3jEHtYn|tVz{W z;NMk{)9l;RFy5nY%w|na*}(W(l2t=F=Y;x$&o;lFefRB2>DS?=CWsBVO7U+yW(%RM z;u1G){CtT%N7aCs`u{t|l4OrDy3^QjL8VM8OISG&HDJCjANr@dp-jCi(-v9-NV}ee zN6S}DlO=DDjQmPy%NMq72r+Nq-UCrGb=s8b6CcnD^4b&c|GMZbeAh();06xk#y!uD zeB}bTRw_rD^B*RR zo)pnIzAchpo+^vkPDpK+2&oO$1ju=CVFUf;;S)cMPXcbzv`3)#f`8*X4DnnTrucrx9>ugoK^2l2OGL(!Qvz_8wwC*9 zTUrIS)|mY%(GQ;)lo}6$ONy}DkodpUHFhE-a>9XFVNnO4Up7arJAfHeG#OqOai?PsJmbwjNMp4`bMKB1W@R_u(Znn!FDWHss;x*5wD9qGsjo8;~ z=x9po;S2uzS(;;66@m6omqGLM&zR-QKY%(E*E9N+|0_*fp)L%3NB$+P^b@(pR4KE) z17u)pnZ`2SP6l>YA;XtS#TFZ%;&CcCrKkwn|O_o}p z8lWnfBfc@G*9^d2OH|zNtJAN9E9=60C)pml@9YmlwE)qE15=T$hitD}!l>Xh59r~> z1|$n-Swk!47!_DRmGiZ7Hup|zaIUb`qK>i2V>*3A;Sr_+_vpTz(v5~b(pvCryZ+fm zyu8-DGigM`M$)ok$1=#@qX@6O+_v`83d5Tk+nb6?_q<7@J;;sRwt7YF*l{&ebv4s) zCQ)A4SZLOPSR6U4oJ<#TPV7Ci4NF?wp<)2Ll0t84 zZNAw4t`>|$LqX6hsIYZaL}ye>JpFgrzJuY+Yfr4D{TmRYAju3mfnY7~zq;e4`P0S& zZxhQLc?+e!%pzOkSIlLerI3ft8>^!~G!jJSvNE2yp4a4Xn$jBt%xKY-h8z(u)7*l4s37;|icou~w}+5Kb8zLZ$q3VrgB z_S&uT$LO^P*^?VmtU((4=oPRR;6cOe1YgG>rt3{UwM=d%V`8kA2GH;K(-#CmH;c4M4VFH?fq=dZZU~uh2UtR@gHy!RuISX&G zNCz^d)p`BFSsD2>8< z8i&up9)dFt#WPqXkeb4%JFxD;tCHNw;2MNGaI#MoLE>@BYO)iCJuAr*lJxo!!z%DI z9~2q9;ujDwJ@c-1Xh2(<$B*)o$MxN^a#E@_G7vi*Nu(MRvt&JiIRIzb11)@CkI+&hSD>Fba~LfC&_02rAfz zhzuMoCX{7JCKMukgT+n&OKJw(XsjliKr3G$Yr+v`YHw<`S(YS2ch8n&2|TM(RqV`= zH&Jn5uNCYch;RU)AdGbOu|fX-1x4Y0GIw3592>2S4SFEM(7&F)!SpD)+wI{g|u z0vni1J~3%NAKFs3hn$al7n1pxfynah)6eV%t<`+2WgO2L(nTmMG{s)ldtUk%<(3zT zMr^J_Bj#oK(@WQ(HFhWts`o&u9q}*X%egTX)Z-(ZS>E*Jnlh8`W1S`(`bk*oDQff7 zspMafHrf^Ni6(iG-G_wzI)f93;q*!P{{ZGmAqcWGOd_CV}zp zO}EjrOAf|i&U9d(&dZK{x^E3Mtx++VUXnTfrUd>`##L!DsE&G>uXr`Cw9NL4)qmn0 zmI}vy-geMeSFH6+ox~L`7db4YK zx1L{yj^$ppa8RuXjN_5Zi;k+b6W8HEz~YnuM*+740SeXt^WZ-7gEPSif;$dqqCyq8 zDPo%zRLkDn*vpi}8|#bR;%~X>yETSx#M8CkZP+&@b4pjMN7YaJGp73`b;?!gQl?MZ z4#OMrsI1N|(aM;{o$zGZ>vY&v*TpfhIRR69jr zQ@p<}-lS?-;NQ9+x-Ml&a*9CVH;kaj8j#-mZUEv7e8$SRKP3Y3r@tRff=eX7_Jgf3 z(f#=5{hs!nO`KbH%ZGD-;VLnvtX7$RvdlDDG|&#i!KUQpXXcG`9W=P;_az1V0Y;(M zarPxPNQU`nKxK$ND@e*61GkAW(uw{;P?{tyfY^e0G1hw|mwCEgUVkr`J4D`$z-rSn z{(+Lgs*7720XBk-&XC5bA-e&NM<#Jg9GY8m*kd~##^)#M!jsFL)T?*3zxN+9#+aMMNT4(qx z?+}N-Q~ML4SW%n^COj;#46RVhXwB3yWBa%7^s~BGMBnQUYz4!oC9n_YUnt7LRpWUt zh)2Ms2}uAs8ewjZD3>lr;*ADFl+v^ZIRL2J680DRRFdeLss z_RrH6p5oZEIe=?}{D z(ONcv1qAAscOT4Yw=BW0%CE<S4oS2&Zs`p((F>4!X!F(hs1Z2)lS@#6&yH zi$h9NJB9OT8VGBWESvi+d3IZd#0*U{)Sd|JCR3}*uv|8@-155{GgkPc&wnt8lBK3W z6#Tq)m>4WI@vz~|+5RzsTPy&`4mal>pS~#g2f`c8Gs&D#GH}^+zNb3+uv9X|zi~Bx zH#0un(gM8~xqgkJR-KD1FPt!n!3_Rti`XCB@>+ zgD-Mm-z&@Ei@+4)7vM(XI9^BSv}wMd9U^{sW|or&FiI2e z<7LyiwTIRgJ6LOkri-5(cl}$J`0vRMR!!$HU1&LBAz25=7l4EYpBwPBd2tH6>B+WF zrn7rDTWWsdHK#C^l#A?x3HIS=$2tN0*qR`!_LR8E^Ne@wX|o+@gfOtT&|F8Lj1RM3 zd>}KT6CYRVnGB9QMm$B>x~C5g)%pHl(KR3OL&Bj8!ct}p-+Gc?mLa*EVVGBtixHo= z*5PFa9!-iSnep)GhbSiLFAIdVuGXBE@Vx+N##~{+msAtDoaX)5m8}am{Hk^MmnAn6=f>FMsCwlNf8-lLn3F0lQ&1kUN%EZuXV&cc@n%<-O?LI&cY}_Hb=IOrzmMdl+j-V99*mVhov2f>y?JbxK-wj+ zc4j+f%CbZgf1so_fYdP<)NS}zBVCI=m#BB)w7PP%^hOyTv6M?d^=PNH{xu-)R~jPq zukgBGf!qLzH@f2Nvt$C}G5JS^&%g!0Ly=Tdwhe#?!F7?q#p7}u$EDHSG6U#hbY3ur z1tafJoAVM1b-*7h9PJgYaSBshe8*zh5(-cwQgY@<1;{W^_0o0&R&OXH?5FPN^Th#7 zNU*eo-(ejmGkh;A_7)d;>&5q$NzESyJzmKDT4}3PHji}=-=FrA&zqqOm?K*IfOP;Z zpXJ^>nCq=SQy|lQ&*}PJXsQy=Cp-^FFe?f9&lxXZbXki{-x=&L*2N}-oI71bA0`ES zf#e-eq0z`(8VVpBYHI9;p>T``Rh{bGo?2nCA<2#IJ`V%~n|8{qLlqsl$~{#JOdpq4 zR0uvwdOlPA#sOe8-WyQ_YV(?!j(|XExw&XgNPzGqPR|FN!W407O4g-INJs}<(iq!8Q9H-)+o+tw5F>0~F+LqO-7?+pCT$tB-3; zC7OoPqrO&g4@{TIvRWYrBi6c!^Htm)O-{6Eq9j23ZtoVuL-)kHKkruO_ZH1{oVU3D zEN^V_jBXiO*FG}-R<>YqIE>mkNImsQr>6#DU7FCI)-{#aJyqV)bxi)5;cLXBevO;- zEj({lO&fjv$SrW5z%)a3KVi!q;7+t3QoXFqj}R3_=$@9Ep_H@!%$={jgS5M`$#9iC ze*c|y@2tHD(9x7OqqU;JP$ z*$sFw0HQZJY8K;x=9RskW-TzfTN6y1>pG)Udu5ipvNf@>^mBpb_GR&H2L&#aKacV2 zrz;;%7gV=@8qo4^cEC>oyG~TUi4ZlwFHJ86ghchue=ip7uDKs&Ehyr4b@x=7j!10J z2Q{ALZm-M?!FG700Qn4JMc>ea_B-ZLb&I(@i>*x+)+w6-_Ul#J(l9NeaYW7iwLiWP z7&u_?;7Hj$y;rMlLP~l{Kyt*aqMJ2&Wi{F#`T8H_rgSB>Xq-jjBGj1U2wN5s{!;yw z;=sK?+!WWB=XN%AJ=~XU8$96h=IHv(Zg5c$|1X}LeavfViwBHL9YV|o7Fg;GXjk{}f62|g z#kbw%Ycc(2ZRXgfhKTQ1=3tNR$D9uq5BX%>7|*Pc(elnkUgqCYbUInD4tR6&5i4C>zv4t+*wzcsJNA=`-3ZdRkpGF)qpRx zF9KPRgjCcE(>N#d0=XgLA&JQeychjg0U;&>$DlL&YqQf--9R@VqEbB z`|#+z<`s&1Pvus>gp+<0H}Rh{8N*#aX<(4)B=;!KT*qsyjrU_YC790o7!s%qC2`X3 zh}qRe2nvcWD#NY>NTdP^o>gBXg}X?y-ad?Pdy`+*D#~x&cxP-%N(%C^9zag1JE>x% z-vgXM5K_gkOt{;faI=IT{gP_^zEI2j;!o+`Cv6ZU?%ssx91Ow;2@v7<>G@7p5%L(B zSe{D2@s0^ugYn{V;v(a(levyaZiOS5z!)VWheUU%n7e~(tKm)!+bHLjFA4Lz;NQM6 zX7m2V1ykp?rpxc1k&pA~z35X^qtw^vFZx(6(m00W0wE6yH;m<_r3Ba}1x)i=2qk%} zsj(CefWpFTD~OZu6dty1Kynl{U4$?bJPt`mk=sr+@SjN@3aS$EZzTu83zz)=QdZXBD4cIrnJs1WW_8oS%5nuR{wRnEIy9lGk#l zYP8Xsd~acq_lAy3RTQu2!q}O`n$0}z=A0JJxrXL!9&}S+))EUB4EqL+ih_qBUfkt& zk>Hg3LbjZ#AAG<}S{SoiVud|+6wkDeXUgLNYBQ5-dnBw*6h9wgukqGD(-vA^I5+$o z!3jV)VxkVy&kPc3{#1|R)PS$zpHse|EFqH|FR65wn5WHJg(GFus8Juus*W$%{Ix?< z*S%SFsLj!t;I+(aVc+oyBtOw7T>|5G2#*A}gbO$BEVYt~87Z}*XdOzb_!9q?V2}q- z`x4g>$%TPy9PKtvzC`GdbnQ%77@nX%1w;z-cYokOHPF2y%p7@W3}=^QsjTI<;H=DCL1 z?&1+XJzx72)+j4$^zX~M-?xgjB^+BxKy#w>`t&&2KUh*npJWDL~;(0A*_PA*5&i>) zO;e24n?;hYW^Q*gp|LvBftl)$=(5u+EY&f42%6y z%taisaZKZlT6S1mD9x}g%SfnNw*LkVpq!#OZi}0!-pzQ#-SK?*xy1S5LSf7~)s+ki zxp;L@%#M8Ux9Dwi+g4{h^wzEM5Pef&`=+9~GRRVCRIa`Bv39(VeZ0J2N8EQ%D#iJW zwC@#4VuDkoc>{+p;Juszq>-nJ1$0a&Qf?RB9(`*-*bvZX?kdqKF+~I8X;1OjT*2?s ze?~ToPkP%s#s~^RlNJW8@BNgmsrTy_!IKK>)};DF+4F2MmKJT5SLU}@b@TS) zT^~=Un`gMQs<1CxP>|hF&doXK_bUHJNf}8L;*1#Rs=($LxHZ$n0Yh;Tebuvggu9n< zKhON^Ii)?pE{iYD76dnjZV#Q;`wYBEQpZJR!b$9~dZ%BapS2-KDPY}_ly7K46Eo6e z7E7O+KP``e@z5p>cEus-Z!LW6b0n|q8;(`W0ihY!e3IL^x~^-r@i+TIDoKSpEReHs zm@jkKJ%nTKE$}b>s5?N@AWRFkd`{Xi)a#mj)1>d+VyL5UF~PW*TaT%R3zCG_G)1}E z^BpN{qXP^IB=ojHJ8)M-Ps2d~;QC1OAXdD3S0oBMbdjd-rPfJxT_aWdAmd`m7N<)R zGbL)|m_dn;?O&u*U!7xKX~_@gR1k0vHVHPqUgJXOvBM@@b$6EJgLU^$*{*6=H7css zc;PHZ?I~*UjK36`ILDq{tx~mKt*p|n43oY?)tOYgjrC{fnxX@XpwtMT4kn}E+!dM* zqZx5*wgqAV8M(HOcD9~d)cH|ezAVGEJR`n_&7uxvIYGBNG#dSPZC*Em|B%!hdt z4mvID)gqHjHbEE(^DEUzpMmr?_)stdrac=3b%)2OF4#vY93Dz(TH>8FwKyv+=|Wob za(?1+udDihVhxY{ZKRzTOwiQ?_E-*tI=0Ub!1@1t_Q1Y>Lm0vIGmsK(ze+jlVw?k@ z8F>V0_+o#{JS#2Yaa&-NtkULd&%R=B>XFAK^3UDN*-7Mqj7I1r)T3#m;m?pIgoxn9 zr?Jb1r1Oa`h+VBGi8k2US-G*%XRm#GuX&HuSSYQh$tsqNZ1dToN-}7Fa^rp-@|e3D zbY-YuB!~jgB$3`m(w09UW(UKXAkG;6R_rQB}^IvFpE_kpHb=D8A`ldGKu&I-~@Ny=b!s3FF+04a}p0F_^)bEZIShLHg2zQR+H zv`M=59oc+;`P-QygO5VWw?E>yTncZyWR!LeuIm{5k^PSYY4h!`W7Gdx>>osmKo7hP z+oF(KS|Z1)5_EA60`%04GM4;E-AI3CP&1=*LS_&=3st8mJ=^jiTRoWDKKP0Jza#a; zf-PUWm%F!gU#KkITZV&9vx&+DRA21`#)8^H==uPMNe243+I69oByDo#ZQ4l%5DwmD z^Xv9*js1{Y;KMgTR2|JXMXz_x2NZ8v@dO3no zltq#`cL;1^8+MqXUf5@W39%kyW?QOE-E-%pH9~nxEKXizq22I3s=vv>mQ3UQ5^FNK^$S5P;`z zrL($WZ<8iY>Y|oXWu(_0c!h>XSQ5#iqJsS=Pfiw@q4Og%#JJ4vm!mKD7n}~x`l8yly50G;PdWVUo33z9CAAu%Pc(l&g=L!8X{wpJO#};A? zXUNECMvJ-vx+Sz@o2SQLuasW9R26>9@uAH8ob1;%8TRMHtv6B`r5_-5KY4wFi7G2ZW{GNh65fV|l2xy~6&Q zR4Q}Z;b+NnJ4R4ZTm4i6-PEgrUM{9m+-`l1M^Sc&YXbPP@C3CBb!%+lfUdTHym zx#Y?_1>8PC1ofwAlJ2^`$0+(`I>nN~0 ztswE|!g6!$l}#IVn}p>wBHlow7<*V!Rkp}OW60MO``30Y4G{Kjh`z6QdeHG7&w92s zA5+SWY1S`ni^Cgw!nbKmw>1r~#&`9&w?rB04yT9ImBQj-yDv@yZYh;ifRJu>%~8Z0 zr3XT=)jeeS!1}f5>1o?9SQu=#;K`s$g5{eq3YQO7a-Q?c)=u%vxCgOr#d{~J#mQBI z!m5T-a9w&JPx58)G1wXS7X%52Q5G?{GWY{OAPy_*{Y?W0`9T8|-k(XYDBJUddx<@; zF_v&i9-n{&^e2x%=T3RgiGYSLq}TY?5`Gu=c6wfUdW>3HcXQ3sfSq{GW=3501w7oE z%Yg(E#~=eBroqFX#5BO3dT|3%Drxu%ArfWBxK17rn*}4`30?siG5__6coMO%sxnpc za&G5xQ+I`Z6HUmc(8-990&G*Zx0#yx<}d23)#+LD6yMdfznt{uE*RxIXEsm)3{^n& zFy-pS#T9=@8x+G0&pr!PiCUGd)>>a|e^JJfRbcz}?)jc3~h?$|Sf@$6DLhSz zf1o58CR8NL%c@ry-OQ6K3!9erlTVXEZ@2(;Ajgzj%?F^9#rR;2^w#=_qQCx?2;T>Y z2-O>cFF6tV!_eokLxK1L2HQnAAncaBeUsgq0plTbB~7LH%6z|Ko^YsgvyHF4lF8lc zs1Wr=hz~=}h^xMaF36I|Jgpx$`VrQ^SYVz9-UMmC_3>I-;d9XI|p+y#ygf*h70X?A>ScD?ujHUzdTRv8uxvQNa} z#zwswYY*+!7+d%IMX4Z^ing>8`jCk}3&3p5UM3yC?_yhy(#uM4!DMJchTQ zm(SxqlI1-5G2Q5B35BuZ#%l)i-fv=}ip`mT0J6=k>ojMtu@pri%mu_=aK_vo61^5+QkKDhIk=U&7^J5Fb3njD zNPy+-a%HbT)a@ZYPUing^w7dps2HhdEBJfr;R_vO6jjdcx)rr$Z%f7QWFEviyjoyAfJ$NtjX_mSwCRBHN%Fdqh)8&p|i}XZz13$ARw}(RvWfGPc7Q4l$PQ z9S{|gpldG%z~CRqE1Zw4t^CVplok#IDh&iXnELIdEpNo#>hV%p7Z)nu6CNaHSp*0iPNc6M(Tc5mjCC3Ebb z?5*AS%?Z!AYI*cQWJC>#`Vx&Lb^6|N4k8)4+9w4^0Foi`M#H^@q7BA3gVg@q1i*{H=Zt+2W;_H|;6i+8bOy%#GFy7dD zB2K6CanO2asIAS~b z3@IS-WI0rtjh$FZPP!C29UW8^Hw~ksi+i zt3u8JbwLM*lQXLv&MabXs8Aoe9l~EifGtX9+z@yq`0|ra@Vi6NIl-5pAVn=2(Y?WU zI|HwzafJ^#x?Hg~*Ba7Wof34|Z@yvLgDXjsp9ns0SAv^i;f56YO)lvyx0vLGAr7AO z?@EZ=F%~7|0LGC14~@$Oxr@e>8jW3J43DElmPyJoRiH^@ls0yC?W^=&s-IsYEdWPD zU5u$54{cO*(O+wP(bSy3fLhf7$dJkF_AUGU?j90{vi1Qc1}+E~mCP#~R{+}}mu2=9 zjw`s7K>)b%^99GQbUd6ZYRy*`r~(@_M#m3tH>562dN#rA8PA{^rw51G=9o=4?DZ#(jSN1-FR>WfL+2o4ORl zj{f?kZlU6J#Q~)`SJ}7|=GQw?LlbjC)gOo*FNe1`rCy+j0|{;KD<2EN!?~R*u=CL1V7XpuoU<5z^zda{(PfoJM{vDR$Q;uZCgCs9Qaw{Ns#1#*F1v=o+ac)UNeIw!_$>;-To^__!zJ0Gmk><#RVR;hpQNHgk&^U9ZX3ZJ0^ksNf) zxyS89xh?Vh=IB&+fztg`!wb0q>NshBsP$23SB}b(BX15P5--S+ekJpWCGTP93A_&m%?Cw!X<8IFziE2R!x8q ziUwBXOU8Hg@n{pCcV84_sn5!3Z4U(6rJlQd#DI7EbX)HE(%T^rN zOgSmmKpL0SJYnSKr=FPvXo0hoLAZn!UCP(!BSwZd`M7`jk2SLw9Z=;9_f|#0URM~sh0;HqS zWESyMtjBV_3X2~5K3}|l7l_W{gjsP-$5c5x(~=&gHQ!IWayT-)as0WY-I4S4pGCmO zP0a3ydDOdj)zyyY(xP*3oT`}_^XT$oYjb zmKN~%tXE;BsN<^uQ(8u8h_xwX!=rC~v=saE!=rV@Rf?vnjgRv)=k?aFnIQfxW=r(F zPr<|h{rWOuSs$z>EWdWZVC|iUMwZq0sC4)0c9Z8PDhG1R-*bL-c%X)AX3$=>_g-Hb zrDL83?)4C*7q>d|G$d8i1JbsKgLfcP0itB`0BMfq_D#IKjfD7%3A)&H4RgJN_$$<% zSH`#BsbHYz{vSn3KQ39L(ed%$F0SJ5~(1Qk`fjG z`<lH_o7m-Mn`AA7IQ6>X8HN!hv6 z*RLx`#PRC+m!$Dn+LfJ=;nwlx0lg#O2%8YH){&9atEp}U_jP4c%~ayaqSB1#l$M!w z&5P@HxLeMK2~(lS2Dk#?nL4PZE##yrLw!SUHLeOYfI&p zE%!NgZi}!iRXoz0Kfk1WhJX8mUkZ>PbG!~FTI_!A9|bpn=m7Li3W>R$gW$Co@M$Nr zg7GMI=U7voG_a+d;tOMnsRTU&ctA`pkmleamL;iZk`{qSIIITxnBJvOb0+bD`F85f z5Czc3n=zr<1mm%WNMjk-vc#+Br(iAj_Qo8XH!Uo0Y5k2Tgz+8-C!SJV#j*N)O{`xn14-}r`rk!kl zc6F7On=i56lyr^d^p2G;ln;j6H4V53``wu(!lDTzbTNCm%mdY%3K$1GP6Q<9$V>%AV< zs_eB|)zP?wJ#n7}OqlQZAHC4FOqtHja1nXA&o0L_3Gaz&H5bWCB!E3Bg!Lq?Y2JhV4EKD_i{5Z|Id5>-x#Q{cF$#uf_43_uTxrY>X%wxHn;24xQ* z0uBJ?2^A0&Qb6=q*yMx#EeM`MWCAfP+R{M|%qQY7=fAe~9P?>OT`7qKJ$#RT9M&C~ui1}}xMA}{A(nXq#8 zD)bJ?x$f1 zqlicY5@hIRUZEhLXUc=b zYx%Wq!sfbA-T%~Ny!{Fp@2wm{I@oxRaCkc@y_(X*g7C(v;oHyHH;bBrMgQj8Zt|Nu zWJ!qxM_uZoR*js6jRXXfZa)T&4pN!~efFB*z9}=NEwc7kAM1UeE=P%5p2aQZk(-b9 zVlnS9@J^VbF*&f9vNoJ6_uvE}y9yc+hc%#<9uYv;r$ru&Gopkj327*J4Q2wS2XPxX zV(U$AOPt*r2X*t=?nxu~LX~H%`tBaK9SRREs5z1{6@zvliquvr7^YJ!NskSgaf&iD ztmwm(CzQ}pH9MJTMLmtP$A@i=a`I~kng|aTHB_#w4Mmi zQwyBVIV5yO1!rq>-A$|QollF49UhlHR6H#8h-rM&yILViFMKovoZ27P%HS~quLepK zd&|AF`Z#NVB&niUSIDy$_DKx@z9zS!d!+E1b?_DKRnL3#F6BeE0}LF8f{d6yl}t=Q z#%~@1Ehz%edR}y-!jw_baJKI8S)-$g@TZF09gFHd=9kgZ29qLzD;I;sg%yI{I_%|w zErO07Rsee{@REbI1O%<&QA`jkG?rlw9T8t+n5Q2VVeHjdw%ENBv#P|tdmZ^P;R%*g z7!;F7OGkzw6^Ed4sA_yUZJq#}2GF1IhynE2q?x{SE->*ItWFdqu+A7Ceed}G<`!-fN9V?i6^)1_j3flypA)i;AURL)F zWRqdt@RAI@>jR=8)lW*DboGIyn<2M+-m8k2a_l=eEspfs+SSpD&b2`+rKQdsJh&#d zJ&J}Ef>X>)L1-(dOhDi$Q0EKL*g9t|hty?hoFQ4H$WHR%nNIRbNPUibkJJUcdEMUf z&hj?ISEXV+0k<8dUx(q$k>w_B)pXClKjWue*p~>MXsDQQHC2-al7rYr#J0234l20$ z_5-*;s}B~#0E`6fA~kKQmP$+cszXNxio8tp%N5t!cL25 zrlu+G2YQ^6r$@%#GA-i_oaIkrZ$TFaLd1Gh@%KfQxM&ZwZ=AXPlIgHa^9fnpS>S;# zM_V5@2Ai&PjBnLh%T&i5?~&8dCqd)WxZ1Do+ddZU3{RXR{Rk=w1j!&2K&l~wsQGH) zWP~>{F$YGhf5DTRO+0+4?ptfeLC0a_XE^vUbwZSENHiGK)#m3V>m;ASkj(QFH-5PH zO1$+YNm5U-ZidQ6C+bb6J^E(8ehE*z#M&KdeM43go@OdK4z!VxQyQSj6Z#@xY}=Pj zoKf~|yujWw4`S_JQ?!mdh9s3i8_3ZH$~%o$nRA*tYI2lf^_`s8r-v*DITN^R$}J$> z=T2*7;$9lOz^FuPeMOEoDZ1&5;?WtSwDb2y>=ByVE8*&&jr|%f-%NU68SD}v zdN7;{B2;+!#^CuQcdp+JmjPB>jkp5W091x2Knx7LGo)te1;H8OX?JLM9M6s4TUNHj z?!8i0wVofX&q3Ubmv)Yh{>iqBz%-Ex+%n9IrAJ zs7jW1{pRWQYuE$BxCiHx2KPB#Np1i#!&cd9p^wV6dbJFz(@*AMMBIP3Kdss5cRV4ymI8~X+;7rds zr8E(R1#AO6TAj%O+Pld_T6p^7bU)AWaX)M7Ps@xSih3mCZymeq9`C99x>6Z?ESS$d z=1hOVNsqnTOxre!7#PL)z{Zt*Gy(J{vQ67~CuBMsXeTxHC`}VdRO&fF+BwEQDy$#& z@BHCj4;2=McHwpXHS>^Mk1Yc1(c(ng+?F1nm%mv4$KtLJIF=9Oy6H+N+-dc20t<^0 z#Y6dGV=t4DfI1d7=YxU)ksv^9#3{#Aegk0#1|8V1OZzNHIcf=+Wu>jDY0o2~3MDT_R}@ZTlOG8c~qrBHriX-fVUlRA$2+u-#YK`Y+f6C#qfwbW_<7{cK*Bt-)Rz`SczYAVq33( zba{S2Koi!L4u?fI{HIm3x~_5c5r_47@cN+bbSeb878n1xXb#%^>1LeITG4jdbvIXZOrjM8D8S*M|~;$!trf@_OACvpi^{l@0?LK zozZuB2Ocku4m?Z~Cd>zexAHR}^cVmJ9JB8r*%5ht&mmit!IEK~gjr3td6ITpSbx=p z#+OM1OM*1FxRQP?r>lFE)pNYhHRScyr5^P3#()|#G^{dVIK)th1%HZ)giv(j++HLj z0#%DU#`mH2mvEgIgF|1HWr+$~;_nV&#biIP_gH&9b4UQs@K5%N3%G1UM_1*y{_S8gc&&ZI2b<(1>0AO2M-Fj)q)ucP=z6XdHHp;9#g=OwflMJak~L ztTTXMFkA?yB^<1$Z-C+*x~fs-O4e)6#&;Q0fxp@X8oM*^BTm;G?VNTW!=KyMx#EnJ z2gcDsB6B=EIRbk;iZ>2Kaliy+s_A3WT1!!fR6=g2~!rP zqDXBWU78TKLiky)VhBJKCi27It_A>WZ_{msWQ+DHGsPl02tkD<}0czQtd z*!Y``lTaeca?f0Q#sy@08)+bewoUQ6Nj?IzZyBsD*c#e_Q|a1o=kD2)IWk1e32)>W z4=PP#K#uaLdx^X<-#@0TXb#BvAPe*qE6`IM0HMCgcY+zD^_bN&Oh zr)iN$=OH>!l~h~REY4L~@>J@{s@}II-&% za){J#(D%+RHC5fA28-F0c!MIs9=uFVGTmOo{WaTe&DOmt)4gitUsyGB{)O1>741O> zF~tl_VQ>LSQ_bID>W(;31d~*(#l-Im%tt_t0~;LTGdEJ*xaQ&9Uyu4m z0Nv(A@7jgd*voaFrfM9wHLakf!~WAKUR#uDbkeZ?-f-QU%b}=(q!y6I6Z{Jv zDGWp31?rmn#?DXchwF#G@Z&b>$9FLBfF5xvDVyBp^xl>myBh<{^|x15tqz8R3benl zWuK=)#>E}ag`5s)$Q&j9+Qcww?8bxxQc+ik-Xp{| ze2P|idzroA6?x}$5UA9e$y!RK6l%B_hw(N!Plg0CoQ4>jHnNvmCc{(KNRl<*v+FPW$P>E%F zXO6*Z=U4TmvH&y(|oy_w$ znN(&#(_gjq)|h@XnEz>SsBmmc3sX#xoR)n0!8rK%kS%%Yt>=>m67a^wsU9`&Wc;3S zoxep{Vo_FD^xvwC-_l3SVQB_u&JC)2IHztGOeY@iRq3^G)0?L$G#X%h5JkQE(o6pw zHVD@4DF6t8MLZ&;U>1XipvQwB8zLtdNA6r z3-{~AfCFXKpMO8(K>WDmsNTGaH@&*tJ2>&bw!iYrJL)`@CeL&w#5`~5i3JQ_YBpp0 zkk^bzNcD>!-Y7{9Js!UQ;r4$G$9va*fCGYAK?HMDMsw=rjkp=7Rw}B_Yl3j&Apr=MEpAFWQ+>Yn)ZiTTpSYHtTq8;H^hvG6g59 zgcH5=&q*4hRQ4!ANt%$MwYgJ82^wzTwTL8hg!Z7S`yd7m&*JTwqHn(&jXMCbl!X07 zV-xTx)4-tc6d(w|5}XZI_o$$5cZF46(e$6`ciZOR#RUn2Nvha_k$xL&Jynx;(}N+{ zMU|;&#u||6kh}eFUe<5i^cQPy!Em~+2dom?4#}p*YvQ|omQ8HBn18VRb!ya6lh9O+1%7+3Z|hrVOwvrIq^fhRYA-rfP5Ru|JX2(@{;e%${B z1d2qo@SB+9!ZfizL6hu6>A(i2hMVLvT*6a;Y?;#C^(N_`I`jV$q3Zv0Z%(-^a*sFH zR1%=w9n#d9t7);C^z9uT1Mv(5z8u!?M zU~cECEAiVRTdOV#Lsc$Md$Qo+uFqU$V zVk_5JM?s&X@)qBIov%BT$=v~Tljis0xVr@>Vuk8?hECP38JYYBh0PLQoy;j}Q#7>c z-k0^hFYjzq%p}%dSR1D*%S^InYR7O*W8?`*o5R;9%wD?1`vdfgkOclGL^+VhB0(q| z6300edSj>7T4zj@tNrDZd0ovsA{}N;dAKVOCk(H%JjdAplP06IA!lLq{Hr_KZuP8M zCTsX`{*cCJz|*c;mp0G;M6)oX^{dp(+0lC+7|(l}wz@k8)HO`3+vcbML<%>ZXU^v} zUagU-zm1UngYvWR)TLp}l~Nd51moKJv3kRPewYV@)y`j@Qg9E*9#FyJmCr zv#ny?zr6#txeK%1|3~~;MVsy_;AF6@iK#IssVw7QK3v{O)h(>C1j_BF_mfscou_%E z?m|hny*^vFD>z^~ z56MK^CHb4KY0Po+<=TBA=ItSk6X7Wum7VE|-gM*j3iDfan|sb3KYrqWm?>rCe$GVm z06%nZdIL*07_#7v4)1bsy(QV8E3?Au-CDUfBa-qXfUeZLjWx$u=MDWcsd2ybW{9mm zL_4lBY=gRS5mRu6d??`7Nj)Lz-3@rEI`1;%mbhll&&C}lpRUhjj?aV!iOA0pn)F+) zcyzX{C`#U9k0cj$dP64{euxp@|L)b72JHags38lEq=QE(Ft&fp4Y@0r4Wu^gwRyP< zl2f{ts4Pp^cRiTpI*Gsk>R5b9aNZOj!K0}HlTJr&=QMeNS#<)vh0v2=;7Xi~SSRiw z>dSyH;-BH(bk_xob;0uP#mYAvX~LU{qG55iKUT{xh970KS0n|FfR8kR7a8k8e=>%OB+rj$Ln!*0&kf~Co2h?kT)cI zeH~1|VF@HKKZ881mw<&cngtw@+w?!~|3PZL&V=k)&oiGE@>RwfVUve&3g5C6$iqW8 zx(v?sN|Ej>`BK3|Hh~Dek5J}hGbV^srk`bNPASGTSYAft$Qm~92E#dl(!7u=rlGD} z#MjpZ=q7rVREevqSd``fHXY{i!p?1NOIHvFqKgVU1`)% z8HS4!YtM4#A+0X@$udb~%oZK-5a07?6=%687~C5(q&X>}yFD59=iH%^Cc-;VNUGie5*TJ2Wf+NxVC; zGbg1usQrTQ*T!We8H-hMl99zxI9Nxby~@wPHYE83NN1CaBuN5|WV(7y^sRQC2$9X`UDK-V=Q+cv?jz(`nJqEd(%)?qTHgEX{U0#rpkYxp7$IK z&2D%)q<&<0^GM@w+JzwBCO-+gYe@48jyq%Meq=@nCT#`+I2K&GA5wp)b0evl-@ask zJUD@k(e%ToWhU-@93ouk7-{X~S!cS7jRhvhLyR@f<#sm0|9;RUA{rC_=emeZW|I)S z`Y(9xUkEPwhwn-03^;^^jCSk?h3q)eLx^8sYQE?n0fWWPWTPn~D2*}ePC6sl-;TMu zMjCy0R$QA4vnpF|DW}QI?y_G2t%W^cOa~|Q1OYmS9cKn*2Qp^_64+$JV)qeYsW>x@ zP~fFC1;)$>TBKi_eC<5tf(og!NvaPM_l8-;pQLjv7dYx-aaXb6cNKTHe`j9uiHik$ z!u&2~*Qp!LFC|7ve7!5WcJj?T!PPZ2Q0-Uy#TWTz_F072|PLbT9aSE7rlSeeWW|ZGn}F#BfO+Ig4uqT zp26I%!NSTa;TW+kTU-_yZa9XMq9GMHHtcw0>qq>bbN=abUY1m6Nm8Xt98Hqe8@tB< zxDaW>exf^mEt4ZS?>RdLC?L%ogbjlVbst> zzYahzY#;_6&6(ZO)7*lTBwLCWCa`8$L$&~u2j(sGu8{X6@fo>ozttuNj`PW|6_#YI zp&$hL?pJ~DjtMQADJ3Nab`z0Z^OsHd%dy=Mw>!QOMQ5g|kZXIV{P_F=#~hfXDb5d5 zJ_^&{gfnrK>WHXr84h9qJRy+fXvq;9eXkfEhKtTx$NMQu%dDj`$A|+oKhI_I^Ws#V z`4q3QK;xEoxi9=1&KllvZQoHq#jigec0yfp##R7S(MY)o zdVg_n0M;`ITn+Utv}#EzVx;i=B6NuLY|;ZHn@i#L~K z>LbLC2m}xT%+jIr(U$;)T^=lOryv&4Cqf(e*}d!l-af6aShao*Ypufu)L<(QaRzI! z^6hNYr{Zt6>5c6KWjGJC(SD9L-M%E;wuX12!fvf-5&sa|TCP2x&MERv3;D6;vCANc zZ9tC*a!pW*=xD zIgTLrgg=s*ZNrR15ucXWw@O+{xaQBp`E5N^rU9P^N{kB7xPY%AJ*m(<0rGR09+@&Y z!o6I#xw0yzvvL01xpR%mhhxKaW8-&3$OlOR?C&~PicHb_Q#%`JG62924gv(p*iu9= zW0krM7_)RhGTJ9{SeS*nybk+S`fVZ7p?YRF@TEPPJuaXUvHPgB_o%hG%05;00WTST zC`18%iP$pVheN`~222w#+BU}6=e~P&%C>%O^v(upwuOTURbWGdEaXpXgkFzCPi?B^ zZ@DesntrZ;@CbmMk5L(>V!i5X_ zHn87?o;J*p1Iq>hJvITcF-V^_SUe<&3X!aD%$CiEIsUzC9&FJ>!9+(Kb|J4yS9);X zu)N5SQaI_p{&P_*?Ux8Y-Tc;}0o$N*$T~BptboB>KuhzPbIY3^C7 z@WMq#2ojaIJ+b6SF+)DWA{gF{u664*$S7dTkFzJ!wMXH}vg-=p1Zd74e3Y(lvfZ0! zc4wZ;_*E64;~TTYMqj(PiDcV5R&)3GDU3y%!X{El?DScz;QpYpA-Zi|U>59hbI_3T-uPp@y z@ybWGd7{VjDEx%5wbDV@1&BWIAf?ZIFlg)g_ePa~&w@|M%o?TBk?DBz}L2$2Lsz)i$0?7l~a znBne-L=;zuFIv1OB(|;*S_~q8N2uJqIB$V0vAAvHy4Jtp0)TD}L~A`rv?Ewf)+r$0 z4*IZxPS}eZP(JzUfEU9E7z6h->$I2BwTEy6$!PHKox2~kNbo12H=9@qbqS2jq#_(f ztTb`#Q~YW-jd3g!7DWh$immU6OWQQ^Al51n0<$6*MGtKEBYufy1Kxu5QFw6x?aQWt zJ4qD4AQhnf&v~d)hYjz64UaJ@by|h1d73x|a!jAu&GR?U32*b|rB;}Ku4ojWtgv@i zv`7?oNqpr&{;x%+M~=%JN5MD*yS08PJTwT|T+lT}Y(hy&FgSY@PD2ONU@Z&98RsbK2P?ORhUdNRcOqvuoN(Pkw$6P6^pZVw$CUF7 z9@cnEOz)`PBV}t>^&AiHXb#`wA%2{yKTxHdk{&Vl-n^`Q0Jn_u_CWgu-l<>W`@Fx` zuf^NKaf(o(?;|gJZMEk|9cMq%oW&X9bz%CE!of;iit_pzFa7gysHKRFZgov}>i#V` zo-~E1WZ}&4tvLoF$A0!=D7}nGMB9pr^@#`?C0ly)ikM^2gnNdeYk?vI=~*sEfubBZ z_8AMB=@cbU?FOt7u^?cwjRy-|d$pzd&C&HKujR8nR0*~)lUpWQwF@&Cs;bq1};WJ{# zXW|Nu;|@o!EL(S}advjVPIn(pIWZWI^~djj60ctP#Dpz2;P~56i4{fAZK*V zTK`BRd!g42cyLau$y2txkd~3pmH)x*@)R3AN#@n&Lq;(q3 z__D{>6GZ2qsQ(zMSH}W==68<)0L(i)hIp9sbz#2k?my3T8BW&KUp`Cvs?7ZRG4U0n zd)M5q6I|;FE8kG2vX;T9Kid?(+*E`X0?1QpAz(6uO-oG%4kpHi(CxrUb%%mdajP;u zgK3EGZ$;F*FjmAuCHnXw#@>kB&Dhq=i*2u!Xrom6C~L@XAFIFcGQTd@n*eWzr#lnN zwm*V9A&?-mGU2-*umdy#5oMA;KqE{V>|$s~j+4F|ZT6x;bT|EO<$c`Ff3+h~(=kp1 zU#iUpz%UGh*<-Euw!Ns?V4he#FAul%+@<{UF$u|gDm}?$dBW_v>8u zC@QJf4dMaDe)yl{Dc8a;*zFqGO4#ihnW@OSNMtvNGScFAr!jEqS4gCyCwU6@_$>GO zi9LHMh1z^2|^1&Qv0$AKZuyM0V=!vsVz3~G&c7~;j{ zjwV64<8W03{Qu_4YCne;MhXfJYUS~dXK{lv%U@mUI}>Sh=#8@1ZvLteuxDUGcTSB3 zP1uUG6~Mt-dv;qxy0CavB`&OLEii3x-dw?2=+%TVGQ38jWjPZM^ba741G28akA3hDk~5`E z{LCBGBkVXmgC(lejVrj%pfk!O@rwtZW&7mF%jOuP8v8%dc;F{n-qN|4n zhR2CB#ThiS&?IWrE(W)M6(yeUaaIwWheCtAGaeQr6(&}(%P?KVDPW(5<;AZk| zGbdP1tdTda;q4#e?w^k&s@9^35Q4w`G*~nMF@q7PV%V3Q=sxdC>sC;-8}Heq%?lOH z3*%Gb;@!?|j|>UFh4-3~RjO-uFNLiS&n@Zy(lRFG`PR8M+Q+v z_En(vWGbh5xWY0#KFco=82dP|;0uoSqVRms5ysl|rPGMDLAY{sWFJG!xc7NX!kb}! zU})&W^6(6VwQ|{7HaasJy)ga^U0P1Z?@W&I02`Vk^q zoalr@lhON2rgogHcbxF=hJnN`H~)osGR6wT*OLw8D?q?x`{|Q8y~*-><>?Uj;O!1>ANQDxC;1Z64kUuZTR*vUKx&*(JYn+Yr(q+O0w8U#^wH#g5qcP~YJ$hlGw|Izm z=E3&EtE1yDcp4Q_a}YRCIy$arm8j8Mw4HCc$yZ0o#9>RhkKf4TBpq8OSy1>W_(V(7 z)V8%M44bW~ps~L{PfMsOcTT>l$LcA7LBMzo?%EcTjjA#2%>| zcN#2{ro!4F+(EHsMpBGO$ogs6B%Be#SSqN~`q7CnRYi69f4Y41&tUw*UPc#~r`EL( zSA7#={-2OWaVnZ=b8Jw3Y`nyj$b^D_KD+UP`r46+=^wO?-Fi71=`4Wy#+)GJ1^^HX ziGeoT95@ES*(8X|;CBE^)rDo%@qF7y3iFLa9&Blin!ptuKXcC56k_~5+GY+DSh5om zz07b4Ynr@tV|>LVgS|HIfj-pGH8KQ-xjL#8(v*OvNvnGJhJ#$wL1DgI(m<(WrnF*@ zY{TT-ifX|1Il_MO`M{LHv3P;?zC&hmCd}lSzU7rv2+b8;89ug*q(MEopqu#BJW)!dH&cN^sRy;X0_49LKKM!<1*2a6BM%sj|`VgKG9veftNw4DV^1Pc2Ve!)Ek9tWKK{Q?8t$NC$?Lz-k>Cg2aM ztgkr2?m;Z-A+>%6r|rGF-@sLiMs?)uC12vz0mmf3iTrrcDT)|{QWx;8p2Kz^s?=x7 zH4OY50s%I&!lY2a@iLheYS+Ys&n?0r@VN0@VVt%=*;^pLK3zV@Q5*E=V9;)*=~rdL z=F7YkdV?Xzb~Z=ud`EM!?1lAnSFMXGe};{QVqa5VQPdOWOV58-rj;hh`-YxOf*iEV zerd{*=_2UaC3}jmouSgr5LOf?xohGdPrTRfIs^VRbs3OhJzm@E16B(M#G#dMJ~w|F zT*Kj7OqtY3fOQ6;^k&0^1kBCG^rLQxwNYaSIeYt>oX20M2`;2H^ccdWe(}YA_51mz zccbHTJg>CMG!5st%G6v(W3l|R@#uf@B=ZV)r<|z2v2f}6 z*ve6GasCFb@PyE&nv`Pj+PI+tJg_Eqg8^Ukrd(--TB?gbm(w!d&b8d;*gjA^KB@RR zZl!!U@|9xBhT@9=F5~Q7Zx&=Cqc$Bn_euKPxnLHA+s@?rfcXre0t8I(i-xig$0~kl z+3g{{$qUrUjFn2$GJEz#Xa(>I(iWnF-SUKkrH3+cY%KT&6mQ`mIQ(P#TQAOx1u-M3 z0aO!VH9dG)EGe~CXSoEele%I^`anQS0tmF@|7VkBLRChaP39KiO`Dn9!b~T_?iZrO zK>71EP^(gzCEF9gRK-}rDmyuXbR_gJcO;jyb$$kGi_T9_7?SXgqJFqyE71DEW9`tG zsx=K0L-Ho4Rt}%LGzuLqCSlQ75xswulMYt^NKpUoF>He`gGInGHLT4-qzbv=zPE9> z?V`aNe>C^E)+B9O^JYVMT2<1ms^&Lk+7~bLAGAEQKHHkHVQ-?NC0x-Rr#KX1H-|vI zpe5=GYpdG#{B+TruIS@}(iZ@$s@}`Jnw;%u$S$4>{mn0tuC~B5sd2Zoz9#5#O?*vT z-Qh9rf%J;?<3yyuT@Fm%`qlgk;Qj#^4xm&w!^92onn`Yk3FpNXK`N!mW^Eqhc8!H9d9R0E#PyVIq66Bn3x}m_20RoC(8A z7WKALo-uY*c*j<$rA(?8XO)?zNiS+&fx0lJr6GCOKM4$(UxE_+0a6}-W+G5ZXaIa^ z(2XyM6!NdDLKyO4L`cR9;C1US0tNC-)gMV?l=cW^IZ1)$Cgpnw2P%74DvQ$BE1$+_ znIyzLF$oP}0pUmEmrMWv{!|a`VbB%C)P=``jsWFxv=fm8EJcKq$;kAbJp}!A)qmw> zwTpw5H`0?D(zWkNyWfN9IXI|XSnehqrK!vFM}y29M{|&J>c`Py8GhO zfN>#_FH~=Ko^(RAY4w7nsA;~4q=s9DXZkc<_UEgOTJ@^Ug_**}%&u?v2}Aj&tNfBV zJ~1QV-Ubo4C9XZz{$8u;$4uyw>uTd(OXgTVIcLtcz}^3=AWKpZ49nXgQCH6>e%?J; z)Ey!|R2F)#$zSR4hptNxst?Fnb!Ef0ln33T6PtLD6Nr1QoS1}cfX$FksSL~ko&tU)pgH5q{4WW<$r3vm+;5ZAm zF}U}kaLmJ(kow->*yl4|v8y?uWO>D-8+V@$dVEaMxL+ce0_CuaQvrRic;utp?Pojh zM}~lcchrQ6dP9xZC8oD7_g=2%wd;RN6Thso9aO;yZktZpl`|x9N$GK4v>M{#ccdr> zg;nt{z;O!*-r64)zH{X$_{5-(vH-Vw^?W1v;gkq>hM!my+;y36xx8vf)rqTn-FLay zn?uiVIIht{u)sA!xLqBRa`pP5MKiW&6n* zIeJ6(_CeB#eajk4eh!UP{KmUEYb0beeYtvHVW*pLrsllJjR_x_vlxlN*t7?+EhQ@< zD1-1M7#;a|A`9G#LI<`RmPnYXLLDk}{aY`d3^ZLWGiP>lYKT_XWH<@ynYO^JU zw|weT;MVL$81OK&!iWP-fI*7f{2E_)t6=nN0hI980PGNA3Q=^l0@?S>#0oN|0$f1; zwW!2wtuZYzK-p_iLizQpoK?DdPp{HjuZ8byQzw*wT}^pL?r2{_sNPdDgw|b+7yT{j8WObKKHk z%~HQm1Bj9LI4BaqPTS`M zM`2_i>l|dhvVm62S{MS6FPX+I)j1#N4Eh9^#IiU-yNsKV;OY$F->LG$wg!!} zrAIK(8Jp~Uc!KY-(i=ai=k%TtXqUsbC0&RjU5ZjabMw)(YFKzYLV zheLaum)UZzH9Sh!mH(0Y+%z(fRv}U-w2N!gF5~o;FDq$e9v=CSj0N~K&ygS%Lx~(+ z^SG(0{Zg!4-fh00b6#L)#RpQgq+`$NjpCGePjA>qf1~~b6j7iET6@%~x|N~?xiInB zk+;BK%8W-vcnrwDX)FlR(fZ3)-5VeLL=Ztt&&JVXlgu^v_*(wbS^wqoy;!k`)A9>H z>x%9J5+Eo~MoAJQ$L>415+VLNAWwimWEJBu8Dw|^eFjIDs!=8MCTQ~h<}!d#z{b&& zUZ)$x3mYJ5ea5OoCC-msy?@DDMQJ?S8J^nCaoPE`8984)8M8%hGvS9LPXnwJM5Rej zuOx^=z_5`)F2H98@+dtN2dCz!e&qozuhEMSYS<`Z6m+GMLOp+^+^|SqppE}SYna-( zEZ1tOxX&l0G^}&D2;t15vK;qqS=IHmzW~%Ic8SFLyyVU#vE`!(WA~!B0)q)IeIBig zhc^UrCHR?uvEiPs1b3t~1{Ho7W>^nbp){q5Y-vHp!znGIywZ7HQPO+a(oyV>gLl!T z4Ri~Vuv#xzhIWkBEas)F1+O1S&#yRys748PL za%!nJ*e*|YB@#c4oZ@M+mTAU6!(uo1$lxZ8X!z*82Boo(LqY2Qv;~5O;+)&}Ec1i( zF=QCMY(M!lN@uYnhnN5Tqmnr-8d@G4<<}+7OXk?JIcibb>X&0Io-A$Q!vvg!Nr3cy zgkk~=BQ&1e@fFiv7^By_I?^ELk$qfl|B(;Ilh{h|33UCgS zF&KWQj}0^IGmPr^HgMB}=`()w(;s}`|CxCCwyLuFB9^m=1*25W=&zKT(_{g zHv|{z&@(0S-DyzU0R?r-*nldgO->X!FkZn;M^>0!>0@-UyLi?vUK4ddDQHu+T+MWS zK29}fNnajjh_^t$_xiptd{R(mB_yN)~q6 z#LZc*M_B~1FIHoHVJ-A?gfx87?umoi@qkbIyfkrDgB@QOP>eqW!Bjyy`*|2r3`Rd6 z#R0|=@bs2|)gFv$4BQ1;6i-=+$ZZ<~4nj;bNkb2B7_!T_t=og!w_C~;j(@rWY*K|S zNNArXObe)q9Rn2v-XNbRwLPBcGM4?!0*(5_=W4N-!*UMlWT;SRz8bB*B4}Y_eQTce zFR}Gs5vEz(qqOh1n6!)he#S;;Q-H87z*5DrE=^_!R(_MOe!$f|fN5NO?}(1#h=bV? zxqg-ozs6`;Q*_MfuA~#2D?p=;D*&sRemZ&D{DnsYz=Ol|q@b~LqqijMPKmtC5xJ?< zqF~#k;8VWw?MGuWGL%1&#RK1km{(}b9gYm?V_t$Uj}&X_=aJv=6!N-1$dpK#x8wCC zK2Ta30~am6nKxpm677rFRWF9AS#0M$w&9M>aYt&{6L5yE4xey0apPdTI%I1{C=N1E z2u63b*`JUCke`6=!@s@Or<_HQsS$Dng(IG+;O7vwc1!fF99OGUJx%rsc?VBYdF)vWN+h$kXXAEG%2lNfA_VDLXiGktBY<*!Dn7%Q;1J zX=^g|RYT9_h96AwsLX&mK?r>38>IeShSB*vGHH^KMV`%71{{#VsKLQkCpunWb=utXbgwR+NW;_^|SwO8Lhr~ST zy*&Lu>p=Qq1sq)PucLME+dV)7!lCtuJn6gcqiY02OFr0ItYwK6Gd*bm6#F~c=r6xt z8vjSB!OZD4OA8#HVACUZwHv#Dl(v9Cdg)b5dLU7~kKW)03a5Mdty;Tg&2B0&qV1Q6 z{i(6WMTUJ9p)j`swii-;l13xl&3QeZru8spVFn{aV1)lC=J!+ad1>Wz>t*9tzwLdI z8WUfcB^n_z&Jx|)ShDdGazKawYaj-kCooKe4U?>kJecnf9QywKAdlV1mT{+El8MMX z1GHD%BPriaVe9t_igd<2sjXE0j@VTruB3LTY@VvSIf9ZLeX=l=-d*8yk_kd!T^PzIFj~Kz{fUl zMM6n563p&ozBmBH#=a)ZbIy)lxeXXCEK#K(SWBJbIv;Rbn^ir{d}Z6JKF&7!4Ntz< zZ|k9>5Z4xZl--D(J}8oV7wTt=#rlqB?O7@;izDn~BGMF&Iz@}<=V4wm^mw*IqX%>m zrP#Eg4UX^+YWDQwM!|l{z^Q--GNAeyg14awlrTsAPv1~ubmB`U(5>(}M z;V_D^2CQ&AlsLz-T?5&b74`sAW6y4Wi{mgkv>}*!>%z(;ZH&=&$1zoYH#Gi!s9_J+ zw#OmTualV8)fr23^oNoX{)wjq{p5I}m}HuI-!@vxMhgdJ4*xEnH8 zv8%t#k1&NO9V5eJ_B$|@&!scC>dYZ#!?`rcLdM<(S*E||xt|A}VK&0nj;FjRg3%${ zz~8q5=xRKfaJ3iwB(5zzfJ^KOAQ)o@*H{l6b3w1KV76|KbW)aA7U8AhXClx^rY8Z0 zwuu`;n*VxmUQpY;*-@{e#?yC4IJk#1gyuqsvdMheG`S|tdQ@&16Vbj``K7LM-nBJp zi#Kl#R$Te~x9ZLv%a2diIfc3kU%_2pGPA@hOrRdauMY?7VI3RhWRL?B$#8__cVT2a zrq=g>_DR61aGoCw9z=#4h`di4hR0mF{O!{U*Y)}f$^%5hb-j_g5^627{CKXryvo`- zJ95?tAr={n?iB>wNH=T@0i#II88l#^<}Fe}A%z*^j-HV6)XT-3f}S1ndcDVTw%3Ol zvPIVH^dSBb3eZhF*WR4i<{b6$*6GrM?q|B=!vO6(YShRH&|gHz5PXc5%qAaUTzd}x zk42n)Vr!4MiI7&P3CvD9Y25hn2C$X2*X^j?To-Sy|6m9R0#=HgJ<{?r>2N>8Xukp~ zTujx76r$i##a#CU>d{9xg2t;q`h712>8e~+@MmFjAp zJBu@)38uH;8`B&&aM&OF94f~Huwlbv2L#x}0SDcnE*kSe*KkO0>tCMJtFA64SuSjo zYXV#?0WcZHS7h|H?q|E6%XF~9G*faod&Zc?)NOtI(vFlJ*SBohnV6ke_pNg=%%qVH zA*d8A3uq1? z(u|YQo`z$J=*NMtOfD>wn10~cevmrKhES0y6f_j9ChGK+^@^>^Rnbvk-L2X_KA>*P zVEj{>JRYZt-FQrmqL&Xq>!P~q=KAa~6YyIg+ZkE~wUOS?F4(wh$Awmo3oP`tjDd@1 zckK@hk*;~9m)dSX|ZoK*f!Mud;?M+wVtRBk^Sr1^yn7+1pF=;ZJNC3mwwu`g^J z26M*135d<2*RK*rAPx0=cl5sX{;L8Rd8mba>vOl{IFp(@ZE9QP&&;g0s`CMcbOxRX zL_Y=?XjqHAchUrdCD8^Y@j!mdGcJhm>(d@Fd5_yjdXs(3D?8<8`n=W`{Jm4y&MA)DX2-LYCvU_LKl%?Nz~|-+MyekgPDC_Z z)5bsuj>1iA0ip5LDPHb-_=p`1Foia=qZEtH`fEDVHNoTc@l)NvxcA+hBkCfdoka_^ z(ctQ|OwY6(%-SmDR6=v@l|*5Ip*X6mCNE*d64kA)t*Hr|mL_SXw`_#O@mNycF6(N4 zD-GuI9e^BfJjp4e5cbv2~Q0~p`{()O`=cuonU?dvoeq!ReK){Ca#ea>ht*zY@8TrY=CP1cjb!>#X*mLVu3-i>BX3<;c>J2z6bT9yG9V*Ck;}k%HRY#sAKq>LsG`E7Yr}hv1!{s zOCR08l$O`QPjS|1Wu5li=-kwR_`-nJdQM|KADt9WzTc(3?^nK5Z2L60JD+o`sds1b z_+dV^oa6q^fBgImuwQ{vM$VKYN<&;iOI+`gjwo|Uy#TBU^CYHsB!#4*fJX|>2zUBm zS#w$TIWj6wCRU0g#HpW2hxB!apbz-$nwj)4O*|-W{<=;k%TPTM?oN=`6%tPHh1h#_ zK#r~3u3UwG2GngS^u#|aw^ht?ugf->;$s2=fJ;)IU47-v9y{Dm88oS1DjDx6zyEE><^ za?(>9VmHiw{LEDKTR5?7L_!E*4Q+RQTC!%6*l}H49w#l0bMJrDhkYe+M?;*h)iXll z8Bn(fuafK%Lp-ca3yN@cM}K>yTpt&$?r}+47a}WXyl*kIEfK@lfu5g^W+; z9JRx4w>vr%t~cb)Y4QrT>mGZnBHz4aop$&%NlaU*>}@~$Sidp^%9@V&S&x8a+4j)1 z!I^dGdj0~uxgsJz1Uw+a3!7oHU|)W@846>h-QYPLTKgb!0DazZRQCssJqgY9tu5XU z1N3DgTbb07D4#>IoklC2{Pc=~7hKG`6$66Sxa%QqXr1D#M8RXYA)^KICFSp3@|G5N~4d7yGTd1il@ z%@U^05q0J4x9eob+?-~mI#62^^JflcfB0kW{+dh7eCB=+ zh+O;P=?%uh0-+R->S(Ay%MV;_gZBvh;^XMYf|?lATZPRNOpVTeyvk9>bB&|84h$2v zX$HH{BT_iw|AW+`x+mMsbKK#z08XXHy>oiewb#(x7{e<(`)jFiW;wk*OTA$ z#c&S_CVoB*N9jRuGYr=@L~!SJAI=CxA^F?1bJ(zj2`U`N+-T3zX%~sQ7xAkC;+MK4 zdCkdzF(*r0i)Tg)9EpnGk`3( zZ}b2-T$5SsIKPycTRR-(s)X)?rYmLL^=My_V;@J8;?ktJ>vQHDa6PDXN?6n82-9ZE zcS$U?_M$vH&>wJ#-2=Zv6Eu8Jv;=wn*88vDqLq%;J@S@Hue_rwTcS#RPTTDT_DE@S zyL=M+kKpeZFC0BU9yCEKfS~Z*%?-4u=w1;KlQ1qY^Itf2=4EbtOR2D{6gqn-g=6c_ zuy3Yih+syz)*U>->xG+`=gbUZCtj9({rx6vwkSQtQIgV9uX5J+Eqp@O>KRZtQ?K`CSC+EvF=%uLzdH*4 zQWP-vYGL@r#mRRdEdd22e4RdGvbxzzJC}f1WmE6AuBxJ7~Z1)jW0R!xa4nm1_gtD_{#;>qWtG z8()5RMP}?GMu00mfhmFxZ$=^xEE%#=>VKYOdw1U^D6`OMgg33YeleNClA*sG;Q@o% z;gP#ly5vhstyA9GkSb5*I-T5B>YP{HqeR1uP~EMwRau{}0maU*74@&(4XRc43#qazxU&UanuyFH6c<+kRs@LJdIG$zXXP zQ$T8H8+Hv--x64(V6Fp(!4p$C2t7M5Aa%oWyCg+VZoxhLtoqcJ2VH_$KK#draZQL% zT$v-o*G(%BVY%XBNmiVI#E!D*-eb!LhLG1ogv2N)1A168Dp{Lu_K8}b{&FU*KN4T2 zrc`UFpT+j;;%0x9-Jh?^Ft6)p_irPTd6?-QwY5N9vkjxjV+l=A1Oh4kwiR+&ZcZJCiI#$vi=C6j70am0&`gv!o^I$m9h1`;y+(Ux zJlJB^Y4?IhK=mbj0LUC4@18vy`8r_dFMhEsanW(F<1l=Fc_w%3w@v$6t&^iO@)J42 z7Pcu*on9jc*jyVCVNV+xT_xb!siHx3F@UnT)wT3M?5!REn?E zSA)(>Hf)|`Ev))<>q5rMtIt3?mj zi!Lc_MWzeG7YPw zcHjI!wsSdv@BHdQ3V ztxbhDJ@*|^5iHr$+d{`>aK7XV@7%jSNmijMVL6N}{Q-&P02r6n!*6Mscm6PTUHr`2 zfK6B83umL=pZsU@rS0`Eq1kTEr3p8FJnv1fUYtpuH|@Ar>TfeprhWNF?w8x6ijC?c z@b*P9D)uK0{|08WA;iJ$UCQZMDyZ=g{DW6m%WUSbh(M731}Oo7P(9>zEuquNHPdm0^j*wM5W3oqc;dD=*nvnLc}VawXfK z46|(%ZnrFRb!-rofWm`x+NgnRYaM>(?Of}2M@y>nRkmHjE^8}IUk4Qc_`-gvoe^c2 z;x*U&?`?v@&8nN>)ctVNhrI3&SN816|1&XvH1C?g-^X#tV_S!2O-J43!b>ZXqnIx% zlLF^dKr|iK9*5VjepELK+#m!`)3xuk2|^-}2?=3)2hVU$Y(FP>oF$w}iQ|jI1w-Y| z1@emadQ0pk)y0Zl&)Wa~AI-@H9i2zyQSI{V(uxaE-lRIh8_JDuzq52t@xgg$XKvl&310E-%_As|Q~ zPu#*h0lNh3Mgm)Lm{$Eu;u|jwgTnOpF#FrCjz!eLfOni9;wCYU>&_X(!~(`)rdlKH z$u+<X`yu8eg05LhP_0#ksm?EUT#eL{K|PvKE?eucDjNZXz&g*Jrf5*U6i1a2G8(I z$JZ^-G?*2Qi=ySn7A2(SKDNdo|9qOPXqvGmM=(1uKzDJQX+&T^C)%@d58zk429BXu z-<%OjDmBRRpIw$-#5f@-1cCWVV1W1e zf5fPNX$_~uOW5vZ+{?4S(Yl(3Q&$cA!(N&+K=@Q{EXwA$BvJTSvh)8VI zlxDPUq#8F`^*qNGGQWy0Fq)yjkXO50!OD#5$-4M7U294Bjl)$ba{+S>e&)62zgAUp ztU+3FOlGaCX|}BU&(y7L`qAO@L<+#;#}uc=%nxqYD87Wka!2ID)ws%`u*CD5uNOSj zsW6=#o*6im0lI_l3f8-Ia;O)kk;@n!w?>8C&@FJZ6;j9K7Q4KWx}p@eDm4>D=8+Ly zXHwVLZR8u08WYZi4;Rl?YYOS%<^;<)vnU6X2rcsh3D4>O1-ni%MItUxIf@d(!A}ZQZI5&AVno?siXl!^L?TF zgUy7Gi0u^y+CS(E4QMJfp+SLgo|*o_2&M$Za|Kjc(c|li6nsS5_AtrdYm+2#U=ExSFFOS;G1BA%8ld{;`P6@B9hx)GTd|tZ9$gkuWg1F`c zZfSz3D#3)LdvZE-vJ>EJ*y_VCn`HfNMeuj2g5uPc>fOnJ5{CYfhuLRK+qFe21&`;u zTB1a^j)f_Sa{_)_uO1wqoIO zCM%lB{E#~!9{ehuL%kwe2g$o@ z4w(A!pe$InF>e!Fs3-POc7!uHGIDbKjKqRrgO-z&m^$O~XKz4$s0!|^vRv_V`Zql4 z_C{|Coa({*)&Eov2YZ^U1IDRUpMqCs^aKRxjyuZGVT84?`i3wOg!V~EaE1ehT<*8ElVwd8c#Z8M zO*`MI6vbbNEr>7_M;s2Q7cGsHwXMT*Asql0=Unl9nieA_7 z{If8N$}!62cU>p5$J`I`DbCUf-hoalLE*mP-kmV@VBP@*{qo5-fcj2c5Pv0+<~(VI zGQ}$CC=f6Pp4^d)+qlRwIVYZm(F=s zR}m_-g>HQ?%=|Ii^>L6hPF$H5+`X6}t*X+XAUQE!3~d%*vd;hF>;C=bi!{@!?@g=D z@R}2ZtqC!E!efR4yafuKVGRb)hQq8Cf|sA7w%~(ddN&il`EKHhKgqLzluKg=NC5Sr z-duVa=ijmgtscS-4~x8Gy->5>@~7GUNyCAhFR@h${b9HhaeJHz@e(cypv4G6a^eme z0>e7cY>rM0xG5#FedM&klLyiu?fj$ts${ie14*A3Coe0DzguRQD>lt_a7|ybgl{%% zpfcw0AHNFg8MhYbO^r{3aC);g6Ok7;$k7X~3D91R|`;Bt<>LV$2#jW zZl)aY)<7A)S(bAsc z9L31U!mRC_!7_X zl7qWL6>m2D>cKe>mKpyRcDmOv;{l+{Mx&$XIY#)sk1YqK>cR=nt@-FSF+ZW%ig8vG zMgqJ>c%8&p_|)rk91`tQI5QQk2wAeqHTey#`Ex8M2S=DrDc90n`@Z`$!Y(0WBo>Cl z2o1ckS;H_X(M^Vj3wL{+?mZyAnp15bTq$k;hs+r#%gD~GQc+HoNh7gq#<7!4U(7qP zd&fk_=^6Qv%7dnokB0gq0A=)j~SUUgzi#IX)A(QyC`ctNcjN0zs1If|4sGcC z8cq`=1kRk^?@rRV)UYvR6~=S8u1VZVZ@IyH+XK_xe-cpy2Q z7ri3iTPc=hLg9g_iLe*I;34~YDqP|KGU^B^HkjQ1@^bcX0L2o1ZJ8MCtmS0n#AfHH zsoli$7%poJk4YTEE7%kV*O%m05sx)AUk^=c!~u$aoc9M*GbY8q(JB!pPH#2DcTEzX zyoU0wl-*h`Y&8q_P}vb3Klzo^a%19_WX`$sq)vWv_5M7((}9qwQOFN>wj^gD^pd#| zA$K3JFAhuavRJ)^new>DD!1B`8HIU0$k`UAogUFSJ%%l3!Gd>>>KOacEiej@-0be) zb32_cuIC!xkoT@f>O`A_vPt-9O1^jSrry=%bRk8PL;&J5a@M=}gOMK##SnNbe|zS* z;f@-k;&%9Ap=G`B1m&06{cm4`jOUO^t$PA!BJxRMBki+4f;SF54L88CKL7Qiub!bT zkYwNkdU^UB`G0?!LVw{=v$Mq9n$ggf0VSwirn6gYEGo8PwP6HQnoO}t$_*`OIdC!~ z3~6SDClOB*;^1l2EnREiiL|BE*(~VD5xk+ZUC`ZS1WC*|Wor1TeATSa3q8#XFvu|`Osxiv$t6;Cpa8BM-ZiwmImf~Byi$yXZyr0qjy;Z{2o9$la_zmlhw3TD_%%oohUURN*>0`2@XaW?FDA-ePy86N2xyZm>uM-@a+!uu_aNfqjn~BdJ3sbl{R11 zmT&!D;Tq!O(kEp~8d))_=oqfgCBYDhzi2$OhDMXYNoNm-7>^ZZ>9ZYEd6s|i zZU+d=0eY$?OW2WR{GKNoB&o}Pi|o9Ji})E#pTr9WRtpjl)9m@`mVhN36h#Qp@W zLeq7#W{B_ROLq8ioEte6loyPSke4Ln*C!Z+txj61MvQf6nt%|RZ~998Aa;o|~#9Q2s?=shysJKS0O z`(Kv(VUACQomrx!Ic#YzH@&%MPU+(}HE*uZ>D)SVyuL;7R#@Y6L5_PYZK6z*81qYb z?Bol(Qib;ynWpCCKhLTcz7A>>kON_i;Q^7h8iKj`*`gOgrVr;+wBitdAp?#;%^#$q z)wA@=L&e4SUvtT=*&OS%hBnWJ{pJUDe3WP?#Lo?T!|Ov3IRvFC96e}5G~Q>23Bss( zFdo4<$Itq_AM~op+;N8F81BqjF(Z}Mu=SM5i)jtpJoA=V``a7;lHOm#J&-CopQ=5t zvYqF5tYMb{9_XH*S{znyXqFy50Mz_2_V;gOLfB7{|0?M0zUnC9 zI-ViWS?UpF#Ch1-TS4L$88s9vn*W(9l$Y zUMx~j4IhlUN)MsKBPJt2I39GB$ZNJ9QP@V$@nEe8KA8H5yQ|{ze%duR?plZ|(h-<> z!|>_1p9}74`l-$R)w){he3Gz+w5y{)r{f3|qhC>)Xu+a^6Omw1E# zy#yAUOTuU55u%Jx`K{B|8kkWF3I}B8<#pXigg?W+^N!5jiGPmzhPh{RQ#+q%g#9xO z!$Bh)e5`N+ubL$?0A(c-ccS#4X@g&ep5JnY*F%#>iy$mdsc4psxkT4LG_J-oZThUMy|W^53qvPIetvz{}IA2ng*a- z{X$9iLU+{9g}8!ST*3!_iBU# Q;C~C|FZtlY`(Nz(U&aA3_y7O^ literal 0 HcmV?d00001 diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_radial_gradient.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_radial_gradient.sg.json new file mode 100644 index 0000000..2b3c0bc --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/symbol_radial_gradient.sg.json @@ -0,0 +1,1638 @@ +{ + "width": 410, + "height": 410, + "origin": [ + 5, + 5 + ], + "scenegraph": { + "clip": false, + "interactive": true, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": true, + "items": [ + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 111.11111111111111, + "y": 140, + "size": 43.23353293413174, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 200, + "y": 300, + "size": 873.3173652694611, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 288.88888888888886, + "y": 60.00000000000001, + "size": 1444, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 333.33333333333337, + "y": 20.000000000000018, + "size": 925.1976047904193, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 244.44444444444446, + "y": 60.00000000000001, + "size": 674.4431137724551, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 66.66666666666666, + "y": 20.000000000000018, + "size": 25.940119760479043, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 288.88888888888886, + "y": 179.99999999999997, + "size": 250.75449101796409, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 200, + "y": 260, + "size": 864.6706586826347, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 288.88888888888886, + "y": 100, + "size": 856.0239520958085, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 111.11111111111111, + "y": 340, + "size": 198.874251497006, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 288.88888888888886, + "y": 20.000000000000018, + "size": 1132.7185628742513, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 244.44444444444446, + "y": 340, + "size": 250.75449101796409, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 244.44444444444446, + "y": 179.99999999999997, + "size": 1132.7185628742513, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 155.55555555555557, + "y": 340, + "size": 657.1497005988024, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 244.44444444444446, + "y": 220.00000000000003, + "size": 1089.4850299401196, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 244.44444444444446, + "y": 300, + "size": 518.8023952095808, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 200, + "y": 179.99999999999997, + "size": 380.4550898203593, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 111.11111111111111, + "y": 100, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 244.44444444444446, + "y": 20.000000000000018, + "size": 207.52095808383234, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 200, + "y": 140, + "size": 233.46107784431138, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 200, + "y": 100, + "size": 69.17365269461078, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 244.44444444444446, + "y": 140, + "size": 1124.0718562874251, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 288.88888888888886, + "y": 140, + "size": 734.9700598802395, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 244.44444444444446, + "y": 260, + "size": 622.5628742514971, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 200, + "y": 60.00000000000001, + "size": 86.46706586826348, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 111.11111111111111, + "y": 20.000000000000018, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 111.11111111111111, + "y": 300, + "size": 95.11377245508983, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 155.55555555555557, + "y": 220.00000000000003, + "size": 77.82035928143713, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 200, + "y": 340, + "size": 786.8502994011975, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 200, + "y": 220.00000000000003, + "size": 613.9161676646706, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 155.55555555555557, + "y": 179.99999999999997, + "size": 34.58682634730539, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 333.33333333333337, + "y": 100, + "size": 121.05389221556885, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 244.44444444444446, + "y": 100, + "size": 916.5508982035929, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 333.33333333333337, + "y": 260, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 333.33333333333337, + "y": 60.00000000000001, + "size": 311.28143712574854, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 155.55555555555557, + "y": 100, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 200, + "y": 20.000000000000018, + "size": 69.17365269461078, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 155.55555555555557, + "y": 300, + "size": 345.8682634730539, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 155.55555555555557, + "y": 380, + "size": 371.8083832335329, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 200, + "y": 380, + "size": 250.75449101796409, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 377.77777777777777, + "y": 20.000000000000018, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 155.55555555555557, + "y": 260, + "size": 190.22754491017966, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 288.88888888888886, + "y": 220.00000000000003, + "size": 138.34730538922156, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 111.11111111111111, + "y": 380, + "size": 155.64071856287427, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 66.66666666666666, + "y": 340, + "size": 69.17365269461078, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 377.77777777777777, + "y": 60.00000000000001, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 155.55555555555557, + "y": 20.000000000000018, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 66.66666666666666, + "y": 140, + "size": 25.940119760479043, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 288.88888888888886, + "y": 300, + "size": 51.880239520958085, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 333.33333333333337, + "y": 340, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 66.66666666666666, + "y": 380, + "size": 121.05389221556885, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 155.55555555555557, + "y": 140, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 288.88888888888886, + "y": 260, + "size": 121.05389221556885, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 333.33333333333337, + "y": 140, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 288.88888888888886, + "y": 340, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 22.22222222222222, + "y": 380, + "size": 25.940119760479043, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 244.44444444444446, + "y": 380, + "size": 25.940119760479043, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 155.55555555555557, + "y": 60.00000000000001, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 333.33333333333337, + "y": 220.00000000000003, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 111.11111111111111, + "y": 260, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 333.33333333333337, + "y": 179.99999999999997, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 66.66666666666666, + "y": 300, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 66.66666666666666, + "y": 260, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "fill": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + { + "offset": 0, + "color": "white" + }, + { + "offset": 1, + "color": "purple" + } + ] + }, + "stroke": "black", + "strokeWidth": 0.5, + "x": 66.66666666666666, + "y": 60.00000000000001, + "size": 8.646706586826348, + "shape": "circle" + } + ], + "marktype": "symbol", + "name": "marks", + "role": "mark", + "zindex": 0 + } + ], + "fill": "transparent", + "stroke": "transparent", + "x": 0, + "y": 0, + "width": 400, + "height": 400 + } + ], + "marktype": "group", + "name": "root", + "role": "frame", + "zindex": 0 + } +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/gradients/trail_gradient.sg.json b/sg2d-vega-test-data/vega-scenegraphs/gradients/trail_gradient.sg.json index 25e0b8a..df71c31 100644 --- a/sg2d-vega-test-data/vega-scenegraphs/gradients/trail_gradient.sg.json +++ b/sg2d-vega-test-data/vega-scenegraphs/gradients/trail_gradient.sg.json @@ -21,6 +21,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -56,6 +57,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -91,6 +93,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -126,6 +129,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -161,6 +165,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -196,6 +201,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -231,6 +237,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -266,6 +273,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -301,6 +309,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -336,6 +345,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -371,6 +381,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -406,6 +417,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -441,6 +453,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -476,6 +489,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -511,6 +525,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -546,6 +561,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -581,6 +597,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -616,6 +633,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -651,6 +669,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -686,6 +705,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -721,6 +741,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -756,6 +777,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -791,6 +813,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -826,6 +849,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -861,6 +885,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -896,6 +921,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -931,6 +957,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -966,6 +993,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1001,6 +1029,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1036,6 +1065,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1071,6 +1101,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1106,6 +1137,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1141,6 +1173,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1176,6 +1209,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1211,6 +1245,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1246,6 +1281,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1281,6 +1317,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1316,6 +1353,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1351,6 +1389,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1386,6 +1425,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1421,6 +1461,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1456,6 +1497,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1491,6 +1533,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1526,6 +1569,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1561,6 +1605,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1596,6 +1641,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1631,6 +1677,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1666,6 +1713,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1701,6 +1749,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1736,6 +1785,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1771,6 +1821,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1806,6 +1857,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1841,6 +1893,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1876,6 +1929,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1911,6 +1965,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1946,6 +2001,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -1981,6 +2037,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2016,6 +2073,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2051,6 +2109,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2086,6 +2145,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2121,6 +2181,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2156,6 +2217,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2191,6 +2253,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2226,6 +2289,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2261,6 +2325,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2296,6 +2361,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2331,6 +2397,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, @@ -2366,6 +2433,7 @@ "y1": 1, "x2": 1, "y2": 1, + "gradient": "linear", "stops": [ { "offset": 0, diff --git a/sg2d-vega-test-data/vega-specs/gradients/radial_concentric_gradient_bars.vg.json b/sg2d-vega-test-data/vega-specs/gradients/radial_concentric_gradient_bars.vg.json new file mode 100644 index 0000000..34e08cc --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/gradients/radial_concentric_gradient_bars.vg.json @@ -0,0 +1,204 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "A simple bar chart with embedded data.", + "background": "white", + "padding": 5, + "height": 200, + "style": "cell", + "encode": {"update": {"stroke": {"value": "transparent"}}}, + "data": [ + { + "name": "source_0", + "values": [ + { + "a": "A", + "b": 28, + "fill": "blue" + }, + { + "a": "B", + "b": 55, + "fill": { + "gradient": "radial", + "x1": 0.5, + "y1": 0.5, + "x2": 0.5, + "y2": 0.5, + "r1": 0.0, + "r2": 0.5, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + } + }, + { + "a": "C", + "b": 43, + "fill": { + "gradient": "radial", + "x1": 0.5, + "y1": 0.4, + "x2": 0.5, + "y2": 0.4, + "r1": 0.15, + "r2": 0.4, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 0.4, + "color": "purple" + }, + { + "offset": 1, + "color": "crimson" + } + ] + } + }, + { + "a": "D", + "b": 91, + "fill": { + "gradient": "radial", + "x1": 0.2, + "y1": 0.2, + "x2": 0.2, + "y2": 0.2, + "r1": 0.0, + "r2": 0.4, + "stops": [ + { + "offset": 0, + "color": "rgb(128, 128, 128)" + }, + { + "offset": 0.4, + "color": "rgba(128, 128, 128, 0.3)" + }, + { + "offset": 1, + "color": "deeppink" + } + ] + } + }, + { + "a": "E", + "b": 81, + "fill": "black" + } + ] + }, + { + "name": "data_0", + "source": "source_0", + "transform": [ + { + "type": "stack", + "groupby": ["a"], + "field": "b", + "sort": {"field": [], "order": []}, + "as": ["b_start", "b_end"], + "offset": "zero" + }, + { + "type": "filter", + "expr": "isValid(datum[\"b\"]) && isFinite(+datum[\"b\"])" + } + ] + } + ], + "signals": [ + {"name": "x_step", "value": 60}, + { + "name": "width", + "update": "bandspace(domain('x').length, 0.1, 0.05) * x_step" + } + ], + "marks": [ + { + "name": "marks", + "type": "rect", + "style": ["bar"], + "from": {"data": "data_0"}, + "encode": { + "update": { + "fill": { + "field": "fill" + }, + "cornerRadius": {"value": 10}, + "ariaRoleDescription": {"value": "bar"}, + "description": { + "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" + }, + "x": {"scale": "x", "field": "a"}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, + "y": {"scale": "y", "field": "b_end"}, + "y2": {"scale": "y", "field": "b_start"} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "band", + "domain": {"data": "data_0", "field": "a", "sort": true}, + "range": {"step": {"signal": "x_step"}}, + "paddingInner": 0.1, + "paddingOuter": 0.05 + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "data_0", "fields": ["b_start", "b_end"]}, + "range": [{"signal": "height"}, 0], + "nice": true, + "zero": true + } + ], + "axes": [ + { + "scale": "y", + "orient": "left", + "gridScale": "x", + "grid": true, + "tickCount": {"signal": "ceil(height/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "x", + "orient": "bottom", + "grid": false, + "labels": false, + "labelAngle": 0, + "labelBaseline": "top", + "zindex": 0 + }, + { + "scale": "y", + "orient": "left", + "grid": false, + "labels": false, + "labelOverlap": true, + "tickCount": {"signal": "ceil(height/40)"}, + "zindex": 0 + } + ] +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-specs/gradients/radial_offset_gradient_bars.vg.json b/sg2d-vega-test-data/vega-specs/gradients/radial_offset_gradient_bars.vg.json new file mode 100644 index 0000000..2d715e8 --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/gradients/radial_offset_gradient_bars.vg.json @@ -0,0 +1,204 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "A simple bar chart with embedded data.", + "background": "white", + "padding": 5, + "height": 200, + "style": "cell", + "encode": {"update": {"stroke": {"value": "transparent"}}}, + "data": [ + { + "name": "source_0", + "values": [ + { + "a": "A", + "b": 28, + "fill": "blue" + }, + { + "a": "B", + "b": 55, + "fill": { + "gradient": "radial", + "x1": 0.5, + "y1": 0.2, + "x2": 0.5, + "y2": 0.6, + "r1": 0.0, + "r2": 0.5, + "stops": [ + { + "offset": 0, + "color": "yellow" + }, + { + "offset": 1, + "color": "darkgreen" + } + ] + } + }, + { + "a": "C", + "b": 43, + "fill": { + "gradient": "radial", + "x1": 0.6, + "y1": 0.4, + "x2": 0.5, + "y2": 0.6, + "r1": 0.1, + "r2": 0.4, + "stops": [ + { + "offset": 0, + "color": "pink" + }, + { + "offset": 0.4, + "color": "purple" + }, + { + "offset": 1, + "color": "crimson" + } + ] + } + }, + { + "a": "D", + "b": 91, + "fill": { + "gradient": "radial", + "x1": 0.2, + "y1": 0.4, + "x2": 0.5, + "y2": 0.6, + "r1": 0.0, + "r2": 0.4, + "stops": [ + { + "offset": 0, + "color": "rgb(128, 128, 128)" + }, + { + "offset": 0.4, + "color": "rgba(128, 128, 128, 0.3)" + }, + { + "offset": 1, + "color": "deeppink" + } + ] + } + }, + { + "a": "E", + "b": 81, + "fill": "black" + } + ] + }, + { + "name": "data_0", + "source": "source_0", + "transform": [ + { + "type": "stack", + "groupby": ["a"], + "field": "b", + "sort": {"field": [], "order": []}, + "as": ["b_start", "b_end"], + "offset": "zero" + }, + { + "type": "filter", + "expr": "isValid(datum[\"b\"]) && isFinite(+datum[\"b\"])" + } + ] + } + ], + "signals": [ + {"name": "x_step", "value": 60}, + { + "name": "width", + "update": "bandspace(domain('x').length, 0.1, 0.05) * x_step" + } + ], + "marks": [ + { + "name": "marks", + "type": "rect", + "style": ["bar"], + "from": {"data": "data_0"}, + "encode": { + "update": { + "fill": { + "field": "fill" + }, + "cornerRadius": {"value": 10}, + "ariaRoleDescription": {"value": "bar"}, + "description": { + "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" + }, + "x": {"scale": "x", "field": "a"}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, + "y": {"scale": "y", "field": "b_end"}, + "y2": {"scale": "y", "field": "b_start"} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "band", + "domain": {"data": "data_0", "field": "a", "sort": true}, + "range": {"step": {"signal": "x_step"}}, + "paddingInner": 0.1, + "paddingOuter": 0.05 + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "data_0", "fields": ["b_start", "b_end"]}, + "range": [{"signal": "height"}, 0], + "nice": true, + "zero": true + } + ], + "axes": [ + { + "scale": "y", + "orient": "left", + "gridScale": "x", + "grid": true, + "tickCount": {"signal": "ceil(height/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "x", + "orient": "bottom", + "grid": false, + "labels": false, + "labelAngle": 0, + "labelBaseline": "top", + "zindex": 0 + }, + { + "scale": "y", + "orient": "left", + "grid": false, + "labels": false, + "labelOverlap": true, + "tickCount": {"signal": "ceil(height/40)"}, + "zindex": 0 + } + ] +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-specs/gradients/symbol_radial_gradient.vg.json b/sg2d-vega-test-data/vega-specs/gradients/symbol_radial_gradient.vg.json new file mode 100644 index 0000000..4b611cf --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/gradients/symbol_radial_gradient.vg.json @@ -0,0 +1,135 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "background": "white", + "padding": 5, + "width": 400, + "height": 400, + "style": "cell", + "config": {"style": {"cell": {"stroke": "transparent"}}}, + "data": [ + { + "name": "source_0", + "url": "data/movies.json", + "format": {"type": "json"}, + "transform": [ + { + "type": "extent", + "field": "IMDB Rating", + "signal": "bin_maxbins_10_IMDB_Rating_extent" + }, + { + "type": "bin", + "field": "IMDB Rating", + "as": [ + "bin_maxbins_10_IMDB Rating", + "bin_maxbins_10_IMDB Rating_end" + ], + "signal": "bin_maxbins_10_IMDB_Rating_bins", + "extent": {"signal": "bin_maxbins_10_IMDB_Rating_extent"}, + "maxbins": 10 + }, + { + "type": "extent", + "field": "Rotten Tomatoes Rating", + "signal": "bin_maxbins_10_Rotten_Tomatoes_Rating_extent" + }, + { + "type": "bin", + "field": "Rotten Tomatoes Rating", + "as": [ + "bin_maxbins_10_Rotten Tomatoes Rating", + "bin_maxbins_10_Rotten Tomatoes Rating_end" + ], + "signal": "bin_maxbins_10_Rotten_Tomatoes_Rating_bins", + "extent": {"signal": "bin_maxbins_10_Rotten_Tomatoes_Rating_extent"}, + "maxbins": 10 + }, + { + "type": "aggregate", + "groupby": [ + "bin_maxbins_10_IMDB Rating", + "bin_maxbins_10_IMDB Rating_end", + "bin_maxbins_10_Rotten Tomatoes Rating", + "bin_maxbins_10_Rotten Tomatoes Rating_end" + ], + "ops": ["count"], + "fields": [null], + "as": ["__count"] + }, + { + "type": "filter", + "expr": "isValid(datum[\"bin_maxbins_10_IMDB Rating\"]) && isFinite(+datum[\"bin_maxbins_10_IMDB Rating\"]) && isValid(datum[\"bin_maxbins_10_Rotten Tomatoes Rating\"]) && isFinite(+datum[\"bin_maxbins_10_Rotten Tomatoes Rating\"])" + } + ] + } + ], + "marks": [ + { + "name": "marks", + "type": "symbol", + "style": ["circle"], + "from": {"data": "source_0"}, + "encode": { + "update": { + "fill": { + "value": { + "gradient": "radial", + "x1": 0.4, + "y1": 0.4, + "x2": 0.5, + "y2": 0.5, + "stops": [ + {"offset": 0, "color": "white"}, + {"offset": 1, "color": "purple"} + ] + } + }, + "stroke": {"value": "black"}, + "strokeWidth": {"value": 0.5}, + "x": { + "signal": "scale(\"x\", 0.5 * datum[\"bin_maxbins_10_IMDB Rating\"] + 0.5 * datum[\"bin_maxbins_10_IMDB Rating_end\"])" + }, + "y": { + "signal": "scale(\"y\", 0.5 * datum[\"bin_maxbins_10_Rotten Tomatoes Rating\"] + 0.5 * datum[\"bin_maxbins_10_Rotten Tomatoes Rating_end\"])" + }, + "size": {"scale": "size", "field": "__count"}, + "shape": {"value": "circle"} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "linear", + "domain": { + "signal": "[bin_maxbins_10_IMDB_Rating_bins.start, bin_maxbins_10_IMDB_Rating_bins.stop]" + }, + "range": [0, {"signal": "width"}], + "bins": {"signal": "bin_maxbins_10_IMDB_Rating_bins"}, + "zero": false + }, + { + "name": "y", + "type": "linear", + "domain": { + "signal": "[bin_maxbins_10_Rotten_Tomatoes_Rating_bins.start, bin_maxbins_10_Rotten_Tomatoes_Rating_bins.stop]" + }, + "range": [{"signal": "height"}, 0], + "bins": {"signal": "bin_maxbins_10_Rotten_Tomatoes_Rating_bins"}, + "zero": false + }, + { + "name": "size", + "type": "linear", + "domain": {"data": "source_0", "field": "__count"}, + "range": [ + 0, + { + "signal": "pow(0.95 * min(width / ((bin_maxbins_10_IMDB_Rating_bins.stop - bin_maxbins_10_IMDB_Rating_bins.start) / bin_maxbins_10_IMDB_Rating_bins.step), height / ((bin_maxbins_10_Rotten_Tomatoes_Rating_bins.stop - bin_maxbins_10_Rotten_Tomatoes_Rating_bins.start) / bin_maxbins_10_Rotten_Tomatoes_Rating_bins.step)), 2)" + } + ], + "zero": true + } + ] +} \ No newline at end of file From c4640c95538ee135a1ade4ed3c29762866e7a10d Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 27 Jan 2024 12:24:16 -0500 Subject: [PATCH 26/27] Support radial gradient --- sg2d-wgpu/src/marks/gradient.wgsl | 95 ++++++++++++++++++++++--- sg2d-wgpu/src/marks/rect.rs | 4 +- sg2d-wgpu/tests/test_image_baselines.rs | 6 ++ 3 files changed, 93 insertions(+), 12 deletions(-) diff --git a/sg2d-wgpu/src/marks/gradient.wgsl b/sg2d-wgpu/src/marks/gradient.wgsl index 68b4b91..d1d5d26 100644 --- a/sg2d-wgpu/src/marks/gradient.wgsl +++ b/sg2d-wgpu/src/marks/gradient.wgsl @@ -2,8 +2,8 @@ // This is intended to be concatenated to the end of shader files that support // gradients -const GRADIENT_LINEAR = 1.0; -const GRADIENT_RADIAL = 2.0; +const GRADIENT_LINEAR = 0.0; +const GRADIENT_RADIAL = 1.0; const COLORWAY_LENGTH = 250.0; const GRADIENT_TEXTURE_WIDTH = 256.0; @@ -34,19 +34,20 @@ fn lookup_color(color: vec4, clip_position: vec4, top_left: vec2, let y0 = control1[1]; let x1 = control1[2]; let y1 = control1[3]; + let p0 = vec2(x0, y0); + let p1 = vec2(x1, y1); + + let frag_xy = vec2(clip_position[0], clip_position[1]); + let width_height = vec2(bottom_right[0] - top_left[0], bottom_right[1] - top_left[1]); if (gradient_type == GRADIENT_LINEAR) { // Convert fragment coordinate into coordinate normalized to rect bounding box - let frag_xy = vec2(clip_position[0], clip_position[1]); - let width_height = vec2(bottom_right[0] - top_left[0], bottom_right[1] - top_left[1]); let norm_xy = (frag_xy - top_left) / width_height; - let p0 = vec2(x0, y0); - let p1 = vec2(x1, y1); let control_dist = distance(p0, p1); let projected_dist = dot(norm_xy - p0, p1 - p0) / control_dist; - let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; - let tex_coord_x = clamp(projected_dist / control_dist, 0.0, 1.0) * COLORWAY_LENGTH / GRADIENT_TEXTURE_WIDTH + col_offset / GRADIENT_TEXTURE_WIDTH; + + let tex_coord_x = compute_tex_x_coord(projected_dist / control_dist); return textureSample(gradient_texture, linear_sampler, vec2(tex_coord_x, tex_coord_y)); } else { @@ -55,10 +56,84 @@ fn lookup_color(color: vec4, clip_position: vec4, top_left: vec2, let r0 = control2[0]; let r1 = control2[1]; - // TODO: compute radial gradinet - return vec4(1.0, 0.0, 0.0, 1.0); + // Expand top_left and bottom_right so they form a square + var square_top_left: vec2; + var square_bottom_right: vec2; + var side: f32; + if (width_height[0] > width_height[1]) { + // wider than tall, push out y coordinates until square + let delta = (width_height[0] - width_height[1]) / 2.0; + square_top_left = vec2(top_left[0], top_left[1] - delta); + square_bottom_right = vec2(bottom_right[0], bottom_right[1] + delta); + side = width_height[0]; + } else if (width_height[0] < width_height[1]) { + // taller than wide, push out x coordinates until square + let delta = (width_height[1] - width_height[0]) / 2.0; + square_top_left = vec2(top_left[0] - delta, top_left[1]); + square_bottom_right = vec2(bottom_right[0] + delta, bottom_right[1]); + side = width_height[1]; + } else { + // already square + square_top_left = top_left; + square_bottom_right = bottom_right; + side = width_height[0]; + } + + // Normalize the fragment coordinates to square + let norm_xy = (frag_xy - square_top_left) / side; + let r_delta = r1 - r0; + var frag_radius: f32; + if (p0[0] == p1[0] && p0[1] == p1[1]) { + // Concentric circles, compute radius to p0 + frag_radius = distance(norm_xy, p0); + } else { + // Offset circles, + // In this case the radius we're computing is not to p0, but to a point between + // p0 and p1. + // + // Define the following variables: + // t: Free variable such that as t scales from 0 to 1, the radius center point + // scales from p0 to p1 while the radius scales from 0 to r. + // x: Component of norm_xy along line from p0 to p1 + // y: Component of norm_xy perpendicular to the line from p0 to p1 + // d: Distance from p0 to p1, + // + // The equation we need to solve is: + // r1 * t = sqrt((x - d*t) & 2 + y^2). + // + // The solution below was obtained using sympy + // >>> from sympy.solvers import solve + // >>> from sympy import symbols, sqrt + // >>> r1, t, d, x, y = symbols("r1,t,d,x,y") + // >>> solutions = solve(r1 * t - sqrt((x - d * t) ** 2 + y**2), t) + // + // Take the position solution, which corresponds to positive t values + // >>> print(solutions[1]) + // (-d*x + sqrt(-d**2*y**2 + r1**2*x**2 + r1**2*y**2))/(-d**2 + r1**2) + // + let centers = p1 - p0; + let d = length(centers); + let relative_xy = norm_xy - p0; + let x = dot(relative_xy, centers) / d; + let y = length(relative_xy - normalize(centers) * x); + let t = ( + -d * x + sqrt(-pow(d,2.0)*pow(y,2.0) + pow(r1,2.0)*pow(x,2.0) + pow(r1,2.0)*pow(y,2.0)) + ) / ( + -pow(d,2.0) + pow(r1,2.0) + ); + frag_radius = r1 * t; + } + + let grad_dist = (frag_radius - r0) / r_delta; + let tex_coord_x = compute_tex_x_coord(grad_dist); + return textureSample(gradient_texture, linear_sampler, vec2(tex_coord_x, tex_coord_y)); } } else { return color; } +} + +fn compute_tex_x_coord(grad_dist: f32) -> f32 { + let col_offset = GRADIENT_TEXTURE_WIDTH - COLORWAY_LENGTH; + return clamp(grad_dist, 0.0, 1.0) * COLORWAY_LENGTH / GRADIENT_TEXTURE_WIDTH + col_offset / GRADIENT_TEXTURE_WIDTH; } \ No newline at end of file diff --git a/sg2d-wgpu/src/marks/rect.rs b/sg2d-wgpu/src/marks/rect.rs index 30f2d75..9895085 100644 --- a/sg2d-wgpu/src/marks/rect.rs +++ b/sg2d-wgpu/src/marks/rect.rs @@ -5,8 +5,8 @@ use itertools::izip; use sg2d::marks::rect::RectMark; use wgpu::{Extent3d, VertexBufferLayout}; -pub const GRADIENT_LINEAR: f32 = 1.0; -pub const GRADIENT_RADIAL: f32 = 2.0; +pub const GRADIENT_LINEAR: f32 = 0.0; +pub const GRADIENT_RADIAL: f32 = 1.0; pub const COLORWAY_LENGTH: u32 = 250; pub const GRADIENT_TEXTURE_WIDTH: u32 = 256; diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index 1097d00..e39a033 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -125,6 +125,11 @@ mod test_image_baselines { // Our gradient bounding box for arc marks is the full circle, not the bounding box around the arc wedge case("gradients", "arc_gradient", 0.1), + + // vl-convert/resvg doesn't handle focus radius properly + case("gradients", "radial_concentric_gradient_bars", 0.03), + case("gradients", "radial_offset_gradient_bars", 0.02), + case("gradients", "symbol_radial_gradient", 0.002), )] fn test_image_baseline(category: &str, spec_name: &str, tolerance: f64) { println!("{spec_name}"); @@ -139,6 +144,7 @@ mod test_image_baselines { let scene_spec_str = fs::read_to_string(format!("{specs_dir}/{spec_name}.sg.json")).unwrap(); let scene_spec: VegaSceneGraph = serde_json::from_str(&scene_spec_str).unwrap(); + // println!("{scene_spec:#?}"); // Read expected png let expected_dssim = dssim::load_image( From 9709b72372f4adf96e6720b33495316f583c5e5c Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 27 Jan 2024 12:26:55 -0500 Subject: [PATCH 27/27] clippy fix --- sg2d-wgpu/src/marks/arc.rs | 4 ++-- sg2d-wgpu/src/marks/path.rs | 16 ++++++++-------- sg2d-wgpu/src/marks/rect.rs | 8 ++++---- sg2d-wgpu/src/marks/rule.rs | 4 ++-- sg2d-wgpu/src/marks/symbol.rs | 4 ++-- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/sg2d-wgpu/src/marks/arc.rs b/sg2d-wgpu/src/marks/arc.rs index b85e040..d0209aa 100644 --- a/sg2d-wgpu/src/marks/arc.rs +++ b/sg2d-wgpu/src/marks/arc.rs @@ -182,8 +182,8 @@ impl ArcShader { texture_size, shader: format!( "{}\n{}", - include_str!("arc.wgsl").to_string(), - include_str!("gradient.wgsl").to_string() + include_str!("arc.wgsl"), + include_str!("gradient.wgsl") ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), diff --git a/sg2d-wgpu/src/marks/path.rs b/sg2d-wgpu/src/marks/path.rs index 6173565..ca1e09e 100644 --- a/sg2d-wgpu/src/marks/path.rs +++ b/sg2d-wgpu/src/marks/path.rs @@ -149,8 +149,8 @@ impl PathShader { texture_size, shader: format!( "{}\n{}", - include_str!("path.wgsl").to_string(), - include_str!("gradient.wgsl").to_string() + include_str!("path.wgsl"), + include_str!("gradient.wgsl") ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -273,8 +273,8 @@ impl PathShader { texture_size, shader: format!( "{}\n{}", - include_str!("path.wgsl").to_string(), - include_str!("gradient.wgsl").to_string() + include_str!("path.wgsl"), + include_str!("gradient.wgsl") ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -416,8 +416,8 @@ impl PathShader { texture_size, shader: format!( "{}\n{}", - include_str!("path.wgsl").to_string(), - include_str!("gradient.wgsl").to_string() + include_str!("path.wgsl"), + include_str!("gradient.wgsl") ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), @@ -497,8 +497,8 @@ impl PathShader { texture_size, shader: format!( "{}\n{}", - include_str!("path.wgsl").to_string(), - include_str!("gradient.wgsl").to_string() + include_str!("path.wgsl"), + include_str!("gradient.wgsl") ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), diff --git a/sg2d-wgpu/src/marks/rect.rs b/sg2d-wgpu/src/marks/rect.rs index 9895085..ef40f3e 100644 --- a/sg2d-wgpu/src/marks/rect.rs +++ b/sg2d-wgpu/src/marks/rect.rs @@ -92,8 +92,8 @@ impl RectInstance { position: [*x, *y], width: *width, height: *height, - fill: to_color_or_gradient_coord(&fill, texture_size), - stroke: to_color_or_gradient_coord(&stroke, texture_size), + fill: to_color_or_gradient_coord(fill, texture_size), + stroke: to_color_or_gradient_coord(stroke, texture_size), stroke_width: *stroke_width, corner_radius: *corner_radius, }) @@ -145,8 +145,8 @@ impl RectShader { uniform: RectUniform::new(dimensions), shader: format!( "{}\n{}", - include_str!("rect.wgsl").to_string(), - include_str!("gradient.wgsl").to_string() + include_str!("rect.wgsl"), + include_str!("gradient.wgsl") ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), diff --git a/sg2d-wgpu/src/marks/rule.rs b/sg2d-wgpu/src/marks/rule.rs index dd219b2..ee37b7c 100644 --- a/sg2d-wgpu/src/marks/rule.rs +++ b/sg2d-wgpu/src/marks/rule.rs @@ -218,8 +218,8 @@ impl RuleShader { texture_size, shader: format!( "{}\n{}", - include_str!("rule.wgsl").to_string(), - include_str!("gradient.wgsl").to_string() + include_str!("rule.wgsl"), + include_str!("gradient.wgsl") ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index 025c9e7..44a40ef 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -213,8 +213,8 @@ impl SymbolShader { texture_size, shader: format!( "{}\n{}", - include_str!("symbol.wgsl").to_string(), - include_str!("gradient.wgsl").to_string() + include_str!("symbol.wgsl"), + include_str!("gradient.wgsl") ), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(),