Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API
@ 2024-08-19 20:57 Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 01/37] lib/drmtest: Add is_vkms_device() Harry Wentland
                   ` (39 more replies)
  0 siblings, 40 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:57 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

This series introduces support for
* drm_colorop DRM objects
* COLOR_PIPELINE plane property

Kernel changes can be found at [1] and on dri-devel.

It also adds a new kms_colorop test case that tests the color pipeline
API. The tests are designed to be easily extensible with a "transform"
and "compare" function pointer for each test. The "transform" function
performs the transformations under test via SW routines. The "compare"
function compares the DRM/KMS result (via a writeback connector) with
the result derived via the SW "transform".

This series introduces a number of tests for pre-defined transfer
functions, custom LUTs, 3x4 CTMs, a multiplier, 3D LUT, and a bypass
test.

It tests 8-bit and 10-bit RGB surface formats, depending on driver support
on the drm_plane as well as the writeback drm_connector end.

Bhanuprakash sent an Intel series as a v4. This v5 does not incorporate
his patches as rebasing them wasn't straight-forward.

[1] https://gitlab.freedesktop.org/hwentland/linux/-/tree/amd-color-pipeline-v5

v5:
 - Bypass test
 - 10 bpc support
 - Proper setup and cleanup
 - PQ/BT2020 TFs
 - 1D LUT tests
 - Multiplier tests
 - 3D LUT test

v4:
 - Intel color pipeline work, to possibly be combined with v5 in a future iteration.

v3:
 - Remove need for IOCTLs and libdrm changes
 - Test colorop properties with both atomic and legacy code paths
 - move enum drm_colorop_type to drm_mode.h
 - Add descriptions for public functions in lib (Kamil)
 - Use SPDX style license identifier (Kamil)
 - Replace Skia license comment with copyright note in file header
 - Fix kms_colorop subtests if applicable color pipeline not found

Alex Hung (9):
  lib/igt_kms: increase MAX_NUM_COLOROPS to 128
  tests/kms_colorop: Add a sRGB test for EOTF -> Inverse EOTF -> EOTF
  lib/igt_color: Add 1D LUT color transformation support
  test/kms_colorop: Add tests that exercise the 1D LUT colorops
  tests/kms_colorop: Add multiplier tests
  scripts/convert_3dlut.py Convert a 3D LUT to igt_3dlut_t array for 3D
    LUT API
  tests/kms_colorop: Add 3D LUT subtests
  drm-uapi: Update kernel doc for drm_colorop_type
  drm-uapi: Sync up definition with kernel colorop implementation

Harry Wentland (28):
  lib/drmtest: Add is_vkms_device()
  tests/kms_writeback: Fix kms_writeback for VKMS
  lib/igt_kms: Move get_writeback_formats_blob to lib
  lib/igt_kms: Introduce DRM_CLIENT_CAP_PLANE_COLOR_PIPELINE
  include/drm-uapi: Add COLOROP object
  drm-uapi: Add 3x4 CTM
  drm-uapi: Add 1D LUT drm_colorop_type
  lib/igt_kms: Introduce drm_colorop and COLOR_PIPELINE
  tests/kms_properties: Add colorop properties test
  igt/color: Add SW color transform functionality
  lib/igt_fb: Add copy_fb function
  tests/kms_colorop: Add kms_colorop tests
  lib/igt_kms: Add support for DATA colorop property
  lib/igt_color: Add support for 3x4 matrices
  tests/kms_colorop: Add 3x4 CTM tests
  tests/kms_colorop: Add bypass test
  tests/kms_colorop: Parametrize the buffer format
  tests/kms_colorop: Add 10bpc test and skip if format not supported
  tests/kms_colorop: Skip if writeback does not support fourcc
  lib/igt_fb: Allow any non-planar format for igt_copy_fb
  kms/colorop: Do proper setup and cleanup
  lib/igt_color: Support color transform for XRGB2101010
  tests/kms_colorop: Set wide [13, 13] bracket for comparison on amdgpu
  lib/igt_color: Add PQ variants for 0-1 and 0-125 range
  tests/kms_colorop: Add tests for PQ variants
  lib/igt_color: add BT2020/BT709 transfer functions
  tests/kms_colorop: Add tests for BT2020/BT709 TFs
  lib/igt_color: Point license header at skia license

 include/drm-uapi/drm.h      |   15 +
 include/drm-uapi/drm_mode.h |  131 +
 lib/drmtest.c               |    5 +
 lib/drmtest.h               |    1 +
 lib/igt_color.c             |  653 +++
 lib/igt_color.h             |  162 +
 lib/igt_color_lut.h         | 9866 +++++++++++++++++++++++++++++++++++
 lib/igt_fb.c                |   36 +-
 lib/igt_fb.h                |    3 +
 lib/igt_kms.c               |  329 +-
 lib/igt_kms.h               |  100 +
 lib/meson.build             |    1 +
 scripts/convert_3dlut.py    |   94 +
 tests/kms_colorop.c         |  714 +++
 tests/kms_colorop.h         |  275 +
 tests/kms_properties.c      |   69 +
 tests/kms_writeback.c       |   38 +-
 tests/meson.build           |    1 +
 18 files changed, 12458 insertions(+), 35 deletions(-)
 create mode 100644 lib/igt_color.c
 create mode 100644 lib/igt_color.h
 create mode 100644 lib/igt_color_lut.h
 create mode 100755 scripts/convert_3dlut.py
 create mode 100644 tests/kms_colorop.c
 create mode 100644 tests/kms_colorop.h

--
2.46.0


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v5 01/37] lib/drmtest: Add is_vkms_device()
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
@ 2024-08-19 20:57 ` Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 02/37] tests/kms_writeback: Fix kms_writeback for VKMS Harry Wentland
                   ` (38 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:57 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 lib/drmtest.c | 5 +++++
 lib/drmtest.h | 1 +
 2 files changed, 6 insertions(+)

diff --git a/lib/drmtest.c b/lib/drmtest.c
index 2dd4540b85d6..cc6a227d75b5 100644
--- a/lib/drmtest.c
+++ b/lib/drmtest.c
@@ -118,6 +118,11 @@ static bool __is_device(int fd, const char *expect)
 	return strcmp(expect, name) == 0;
 }
 
+bool is_vkms_device(int fd)
+{
+	return __is_device(fd, "vkms");
+}
+
 bool is_amdgpu_device(int fd)
 {
 	return __is_device(fd, "amdgpu");
diff --git a/lib/drmtest.h b/lib/drmtest.h
index 27e5a18e265f..b3d53f2523d0 100644
--- a/lib/drmtest.h
+++ b/lib/drmtest.h
@@ -136,6 +136,7 @@ void igt_require_nouveau(int fd);
 void igt_require_vc4(int fd);
 void igt_require_xe(int fd);
 
+bool is_vkms_device(int fd);
 bool is_amdgpu_device(int fd);
 bool is_i915_device(int fd);
 bool is_mtk_device(int fd);
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 02/37] tests/kms_writeback: Fix kms_writeback for VKMS
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 01/37] lib/drmtest: Add is_vkms_device() Harry Wentland
@ 2024-08-19 20:57 ` Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 03/37] lib/igt_kms: Move get_writeback_formats_blob to lib Harry Wentland
                   ` (37 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:57 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

VKMS doesn't like us to add buffers with unknown fourcc
type. Other drivers might behave similarly. Make sure
we avoid creating 10bpc buffers if they are not supported.

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 tests/kms_writeback.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/tests/kms_writeback.c b/tests/kms_writeback.c
index e1d31bb93723..bce0d593f1d7 100644
--- a/tests/kms_writeback.c
+++ b/tests/kms_writeback.c
@@ -133,6 +133,10 @@ static bool check_writeback_config(igt_display_t *display, igt_output_t *output,
 	height = override_mode.vdisplay;
 
 	for (i = 0; i < sizeof(fourcc) / sizeof(uint32_t); i++) {
+		plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+
+		if (!igt_plane_has_format_mod(plane, fourcc[i], DRM_FORMAT_MOD_LINEAR))
+			continue;
 
 		ret = igt_create_fb(display->drm_fd, width, height,
 				    fourcc[i], modifier, &input_fb);
@@ -142,7 +146,6 @@ static bool check_writeback_config(igt_display_t *display, igt_output_t *output,
 				    fourcc[i], modifier, &output_fb);
 		igt_assert_lte(0, ret);
 
-		plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
 		igt_plane_set_fb(plane, &input_fb);
 		igt_output_set_writeback_fb(output, &output_fb);
 
@@ -596,12 +599,14 @@ igt_main_args("b:c:f:dl", long_options, help_str, opt_handler, NULL)
 				      &input_fb);
 		igt_assert(fb_id >= 0);
 
-		fb_id = igt_create_fb(display.drm_fd, mode.hdisplay,
-				      mode.vdisplay,
-				      DRM_FORMAT_XRGB2101010,
-				      DRM_FORMAT_MOD_LINEAR,
-				      &input_fb_10bit);
-		igt_assert(fb_id >= 0);
+		if (igt_plane_has_format_mod(plane, DRM_FORMAT_XRGB2101010, DRM_FORMAT_MOD_LINEAR)) {
+			fb_id = igt_create_fb(display.drm_fd, mode.hdisplay,
+					mode.vdisplay,
+					DRM_FORMAT_XRGB2101010,
+					DRM_FORMAT_MOD_LINEAR,
+					&input_fb_10bit);
+			igt_assert(fb_id >= 0);
+		}
 
 		igt_plane_set_fb(plane, &input_fb);
 
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 03/37] lib/igt_kms: Move get_writeback_formats_blob to lib
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 01/37] lib/drmtest: Add is_vkms_device() Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 02/37] tests/kms_writeback: Fix kms_writeback for VKMS Harry Wentland
@ 2024-08-19 20:57 ` Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 04/37] lib/igt_kms: Introduce DRM_CLIENT_CAP_PLANE_COLOR_PIPELINE Harry Wentland
                   ` (36 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:57 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

We'll need it in other tests

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 lib/igt_kms.c         | 19 +++++++++++++++++++
 lib/igt_kms.h         |  2 ++
 tests/kms_writeback.c | 19 -------------------
 3 files changed, 21 insertions(+), 19 deletions(-)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index e030b35a6051..1a1bf942c600 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -6685,3 +6685,22 @@ int get_num_scalers(int drm_fd, enum pipe pipe)
 
 	return num_scalers;
 }
+
+drmModePropertyBlobRes *get_writeback_formats_blob(igt_output_t *output)
+{
+	drmModePropertyBlobRes *blob = NULL;
+	uint64_t blob_id;
+	int ret;
+
+	ret = kmstest_get_property(output->display->drm_fd,
+				   output->config.connector->connector_id,
+				   DRM_MODE_OBJECT_CONNECTOR,
+				   igt_connector_prop_names[IGT_CONNECTOR_WRITEBACK_PIXEL_FORMATS],
+				   NULL, &blob_id, NULL);
+	if (ret)
+		blob = drmModeGetPropertyBlob(output->display->drm_fd, blob_id);
+
+	igt_assert(blob);
+
+	return blob;
+}
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index e8582a45b53e..3921bb7a5f58 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -1225,4 +1225,6 @@ bool igt_check_output_is_dp_mst(igt_output_t *output);
 int igt_get_dp_mst_connector_id(igt_output_t *output);
 int get_num_scalers(int drm_fd, enum pipe pipe);
 
+drmModePropertyBlobRes *get_writeback_formats_blob(igt_output_t *output);
+
 #endif /* __IGT_KMS_H__ */
diff --git a/tests/kms_writeback.c b/tests/kms_writeback.c
index bce0d593f1d7..97c47739ed4b 100644
--- a/tests/kms_writeback.c
+++ b/tests/kms_writeback.c
@@ -94,25 +94,6 @@ enum {
 	XRGB2101010 = 1 << 1,
 };
 
-static drmModePropertyBlobRes *get_writeback_formats_blob(igt_output_t *output)
-{
-	drmModePropertyBlobRes *blob = NULL;
-	uint64_t blob_id;
-	int ret;
-
-	ret = kmstest_get_property(output->display->drm_fd,
-				   output->config.connector->connector_id,
-				   DRM_MODE_OBJECT_CONNECTOR,
-				   igt_connector_prop_names[IGT_CONNECTOR_WRITEBACK_PIXEL_FORMATS],
-				   NULL, &blob_id, NULL);
-	if (ret)
-		blob = drmModeGetPropertyBlob(output->display->drm_fd, blob_id);
-
-	igt_assert(blob);
-
-	return blob;
-}
-
 static bool check_writeback_config(igt_display_t *display, igt_output_t *output,
 				    drmModeModeInfo override_mode)
 {
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 04/37] lib/igt_kms: Introduce DRM_CLIENT_CAP_PLANE_COLOR_PIPELINE
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (2 preceding siblings ...)
  2024-08-19 20:57 ` [PATCH v5 03/37] lib/igt_kms: Move get_writeback_formats_blob to lib Harry Wentland
@ 2024-08-19 20:57 ` Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 05/37] include/drm-uapi: Add COLOROP object Harry Wentland
                   ` (35 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:57 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

We don't want to set this by default since existing tests
might require COLOR_RANGE and COLOR_ENCODING plane properties.

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 include/drm-uapi/drm.h | 15 +++++++++++++++
 lib/igt_kms.c          |  4 ++++
 lib/igt_kms.h          |  1 +
 3 files changed, 20 insertions(+)

diff --git a/include/drm-uapi/drm.h b/include/drm-uapi/drm.h
index 02540248deb1..002337cc9709 100644
--- a/include/drm-uapi/drm.h
+++ b/include/drm-uapi/drm.h
@@ -836,6 +836,21 @@ struct drm_get_cap {
  */
 #define DRM_CLIENT_CAP_WRITEBACK_CONNECTORS	5
 
+/**
+ * DRM_CLIENT_CAP_PLANE_COLOR_PIPELINE
+ *
+ * If set to 1, the DRM core will
+ * - expose plane COLOR_PIPELINE properties for pre-blending color management.
+ * - reject setting of these plane properties:
+ *   - COLOR_ENCODING
+ *   - COLOR_RANGE
+ *
+ * The client must enable &DRM_CLIENT_CAP_ATOMIC first.
+ *
+ * This capability is currently in development.
+ */
+#define DRM_CLIENT_CAP_PLANE_COLOR_PIPELINE	7
+
 /* DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */
 struct drm_set_client_cap {
 	__u64 capability;
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 1a1bf942c600..4cc2b195174d 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -2928,6 +2928,10 @@ void igt_display_require(igt_display_t *display, int drm_fd)
 	if (drmSetClientCap(drm_fd, LOCAL_DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT, 1) == 0)
 		display->has_virt_cursor_plane = 1;
 
+	if (drmSetClientCap(drm_fd, DRM_CLIENT_CAP_PLANE_COLOR_PIPELINE, 1) == 0)
+		display->has_plane_color_pipeline = 1;
+
+
 	plane_resources = drmModeGetPlaneResources(display->drm_fd);
 	igt_assert(plane_resources);
 
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 3921bb7a5f58..7c9ca73a7dfb 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -483,6 +483,7 @@ struct igt_display {
 	bool has_cursor_plane;
 	bool is_atomic;
 	bool has_virt_cursor_plane;
+	bool has_plane_color_pipeline;
 	bool first_commit;
 
 	uint64_t *modifiers;
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 05/37] include/drm-uapi: Add COLOROP object
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (3 preceding siblings ...)
  2024-08-19 20:57 ` [PATCH v5 04/37] lib/igt_kms: Introduce DRM_CLIENT_CAP_PLANE_COLOR_PIPELINE Harry Wentland
@ 2024-08-19 20:57 ` Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 06/37] drm-uapi: Add 3x4 CTM Harry Wentland
                   ` (34 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:57 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

DRM is introducing a new DRM core obejct, a drm_colorop. This
object will represent one color operation in a color pipeline.

Introduce the object type in the drm-uapi.

v3:
- move enum drm_colorop_type to drm_mode.h

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 include/drm-uapi/drm_mode.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/include/drm-uapi/drm_mode.h b/include/drm-uapi/drm_mode.h
index ea1b639bcb28..c49526bca034 100644
--- a/include/drm-uapi/drm_mode.h
+++ b/include/drm-uapi/drm_mode.h
@@ -629,6 +629,7 @@ struct drm_mode_connector_set_property {
 #define DRM_MODE_OBJECT_FB 0xfbfbfbfb
 #define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb
 #define DRM_MODE_OBJECT_PLANE 0xeeeeeeee
+#define DRM_MODE_OBJECT_COLOROP 0xfafafafa
 #define DRM_MODE_OBJECT_ANY 0
 
 struct drm_mode_obj_get_properties {
@@ -857,6 +858,10 @@ struct drm_color_lut {
 	__u16 reserved;
 };
 
+enum drm_colorop_type {
+	DRM_COLOROP_1D_CURVE
+};
+
 /**
  * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
  *
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 06/37] drm-uapi: Add 3x4 CTM
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (4 preceding siblings ...)
  2024-08-19 20:57 ` [PATCH v5 05/37] include/drm-uapi: Add COLOROP object Harry Wentland
@ 2024-08-19 20:57 ` Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 07/37] drm-uapi: Add 1D LUT drm_colorop_type Harry Wentland
                   ` (33 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:57 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 include/drm-uapi/drm_mode.h | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/include/drm-uapi/drm_mode.h b/include/drm-uapi/drm_mode.h
index c49526bca034..358c5c313bd8 100644
--- a/include/drm-uapi/drm_mode.h
+++ b/include/drm-uapi/drm_mode.h
@@ -847,6 +847,22 @@ struct drm_color_ctm {
 	__u64 matrix[9];
 };
 
+struct drm_color_ctm_3x4 {
+	/*
+	 * Conversion matrix with 3x4 dimensions in S31.32 sign-magnitude
+	 * (not two's complement!) format.
+	 *
+	 * TODO what's the format?
+	 *
+	 * out   matrix          in
+	 * |R|   |0  1  2  3 |   | R |
+	 * |G| = |4  5  6  7 | x | G |
+	 * |B|   |8  9  10 12|   | B |
+	 *                       |1.0|
+	 */
+	__u64 matrix[12];
+};
+
 struct drm_color_lut {
 	/*
 	 * Values are mapped linearly to 0.0 - 1.0 range, with 0x0 == 0.0 and
@@ -859,7 +875,8 @@ struct drm_color_lut {
 };
 
 enum drm_colorop_type {
-	DRM_COLOROP_1D_CURVE
+	DRM_COLOROP_1D_CURVE,
+	DRM_COLOROP_CTM_3X4,
 };
 
 /**
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 07/37] drm-uapi: Add 1D LUT drm_colorop_type
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (5 preceding siblings ...)
  2024-08-19 20:57 ` [PATCH v5 06/37] drm-uapi: Add 3x4 CTM Harry Wentland
@ 2024-08-19 20:57 ` Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 08/37] lib/igt_kms: Introduce drm_colorop and COLOR_PIPELINE Harry Wentland
                   ` (32 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:57 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 include/drm-uapi/drm_mode.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/drm-uapi/drm_mode.h b/include/drm-uapi/drm_mode.h
index 358c5c313bd8..59dc8dcaa481 100644
--- a/include/drm-uapi/drm_mode.h
+++ b/include/drm-uapi/drm_mode.h
@@ -876,6 +876,7 @@ struct drm_color_lut {
 
 enum drm_colorop_type {
 	DRM_COLOROP_1D_CURVE,
+	DRM_COLOROP_1D_LUT,
 	DRM_COLOROP_CTM_3X4,
 };
 
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 08/37] lib/igt_kms: Introduce drm_colorop and COLOR_PIPELINE
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (6 preceding siblings ...)
  2024-08-19 20:57 ` [PATCH v5 07/37] drm-uapi: Add 1D LUT drm_colorop_type Harry Wentland
@ 2024-08-19 20:57 ` Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 09/37] tests/kms_properties: Add colorop properties test Harry Wentland
                   ` (31 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:57 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

We've introduced a new drm_colorop object in DRM. These are
used to make up a color pipeline. Introduce the concept of
this new DRM core object to IGT, including:
 - discovery of drm_colorop objects during init
 - various helper functions for deaing with drm_colorops
 - handling drm_colorops in atomic commit

Along with this we're also introducing a new COLOR_PIPELINE
plane property to track and be able to retrieve the colorops.

v5:
 - Fix warning

v3:
 - Add commit description (Kamil)
 - Add description for public functions (Kamil)
 - Squash with COLOR_PIPELINE patch
 - Remove need for IOCTLs
 - Change colorop discovery to work without IOCTLs
 - move enum drm_colorop_type to drm_mode.h
 - Drop display from colorop prop_enum functions

v2:
 - Iterate through all next drm_colorop objects

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 lib/igt_kms.c | 269 ++++++++++++++++++++++++++++++++++++++++++++++++--
 lib/igt_kms.h |  89 +++++++++++++++++
 2 files changed, 352 insertions(+), 6 deletions(-)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 4cc2b195174d..f02c268461c7 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -90,6 +90,7 @@
 #define MAX_CONNECTORS 32
 #define MAX_EDID 2
 #define DISPLAY_TILE_BLOCK 0x12
+#define MAX_NUM_COLOROPS 32
 
 typedef bool (*igt_connector_attr_set)(int dir, const char *attr, const char *value);
 
@@ -687,6 +688,14 @@ const char * const igt_plane_prop_names[IGT_NUM_PLANE_PROPS] = {
 	[IGT_PLANE_ZPOS] = "zpos",
 	[IGT_PLANE_FB_DAMAGE_CLIPS] = "FB_DAMAGE_CLIPS",
 	[IGT_PLANE_SCALING_FILTER] = "SCALING_FILTER",
+	[IGT_PLANE_COLOR_PIPELINE] = "COLOR_PIPELINE",
+};
+
+const char * const igt_colorop_prop_names[IGT_NUM_COLOROP_PROPS] = {
+	[IGT_COLOROP_TYPE] = "TYPE",
+	[IGT_COLOROP_BYPASS] = "BYPASS",
+	[IGT_COLOROP_CURVE_1D_TYPE] = "CURVE_1D_TYPE",
+	[IGT_COLOROP_NEXT] = "NEXT",
 };
 
 const char * const igt_crtc_prop_names[IGT_NUM_CRTC_PROPS] = {
@@ -754,6 +763,108 @@ igt_plane_rotations(igt_display_t *display, igt_plane_t *plane,
 	return rotations;
 }
 
+/**
+ * igt_find_colorop:
+ * @display: display on which to look for colorop.
+ * @id: DRM object id of the colorop.
+ *
+ * Returns: An igt_colorop_t if found, or NULL otherwise.
+ */
+igt_colorop_t *igt_find_colorop(igt_display_t *display, uint32_t id)
+{
+	int i;
+
+	/* find corresponding igt_colorop */
+	for (i = 0; i < display->n_colorops; ++i) {
+		igt_colorop_t *colorop = &display->colorops[i];
+
+		if (colorop->id == id)
+			return colorop;
+	}
+
+	return NULL;
+}
+
+/*
+ * Retrieve all the properies specified in props_name and store them into
+ * colorop->props.
+ */
+static void
+igt_fill_colorop_props(igt_display_t *display, igt_colorop_t *colorop,
+		       int num_props, const char * const prop_names[])
+{
+	drmModeObjectPropertiesPtr props;
+	int i, j, fd;
+
+	fd = display->drm_fd;
+
+	props = drmModeObjectGetProperties(fd, colorop->id, DRM_MODE_OBJECT_COLOROP);
+	igt_assert(props);
+
+	for (i = 0; i < props->count_props; i++) {
+		drmModePropertyPtr prop =
+			drmModeGetProperty(fd, props->props[i]);
+
+		for (j = 0; j < num_props; j++) {
+			if (strcmp(prop->name, prop_names[j]) != 0)
+				continue;
+
+			colorop->props[j] = props->props[i];
+			break;
+		}
+
+		drmModeFreeProperty(prop);
+	}
+	drmModeFreeObjectProperties(props);
+}
+
+static void igt_fill_colorop(igt_display_t *display, igt_plane_t *plane,
+			     igt_colorop_t *colorop, uint32_t id,
+			     char *name)
+{
+	colorop->id = id;
+	colorop->plane = plane;
+
+	if (name)
+		memcpy(colorop->name, name, sizeof(colorop->name));
+
+	igt_fill_colorop_props(display, colorop, IGT_NUM_COLOROP_PROPS, igt_colorop_prop_names);
+}
+
+static void
+igt_fill_plane_color_pipelines(igt_display_t *display, igt_plane_t *plane,
+			       drmModePropertyPtr prop)
+{
+	int i;
+	uint32_t colorop_id;
+
+	plane->num_color_pipelines = 0;
+
+	for (i = 0; i < prop->count_enums; i++) {
+		if (prop->enums[i].value) {
+			igt_colorop_t *colorop = &display->colorops[display->n_colorops++];
+
+			igt_assert(display->n_colorops < MAX_NUM_COLOROPS);
+
+			igt_fill_colorop(display, plane, colorop, prop->enums[i].value, prop->enums[i].name);
+			plane->color_pipelines[plane->num_color_pipelines++] = colorop;
+
+			/* get all NEXT colorops */
+			colorop_id = igt_colorop_get_prop(display, colorop,
+							IGT_COLOROP_NEXT);
+			while (colorop_id) {
+				colorop = &display->colorops[display->n_colorops++];
+				igt_fill_colorop(display, plane, colorop, colorop_id, NULL);
+				colorop_id = igt_colorop_get_prop(display, colorop,
+								IGT_COLOROP_NEXT);
+			}
+		}
+	}
+
+	igt_assert(plane->num_color_pipelines < IGT_NUM_PLANE_COLOR_PIPELINES);
+
+}
+
 /*
  * Retrieve all the properties specified in props_name and store them into
  * plane->props.
@@ -785,6 +896,9 @@ igt_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
 		if (strcmp(prop->name, "rotation") == 0)
 			plane->rotations = igt_plane_rotations(display, plane, prop);
 
+		if (strcmp(prop->name, "COLOR_PIPELINE") == 0)
+			igt_fill_plane_color_pipelines(display, plane, prop);
+
 		drmModeFreeProperty(prop);
 	}
 
@@ -2947,16 +3061,14 @@ void igt_display_require(igt_display_t *display, int drm_fd)
 		igt_assert(plane->drm_plane);
 
 		plane->type = get_drm_plane_type(display->drm_fd, id);
-
-		/*
-		 * TODO: Fill in the rest of the plane properties here and
-		 * move away from the plane per pipe model to align closer
-		 * to the DRM KMS model.
-		 */
 	}
 
 	drmModeFreePlaneResources(plane_resources);
 
+	/* init colorops */
+	display->colorops = calloc(MAX_NUM_COLOROPS, sizeof(igt_colorop_t));
+	display->n_colorops = 0;
+
 	for_each_pipe(display, i) {
 		igt_pipe_t *pipe = &display->pipes[i];
 		igt_plane_t *plane;
@@ -3594,6 +3706,45 @@ igt_atomic_prepare_plane_commit(igt_plane_t *plane, igt_pipe_t *pipe,
 	}
 }
 
+/*
+ * Add colorop properties
+ */
+static void
+igt_atomic_prepare_colorop_commit(igt_colorop_t *colorop, igt_pipe_t *pipe,
+	drmModeAtomicReq *req)
+{
+	igt_display_t *display = pipe->display;
+	int i, next_val;
+
+	while (colorop) {
+		LOG(display,
+		    "populating colorop data: %s.%d\n",
+		    kmstest_pipe_name(pipe->pipe),
+		    colorop->id);
+
+		for (i = 0; i < IGT_NUM_COLOROP_PROPS; i++) {
+			if (!igt_colorop_is_prop_changed(colorop, i))
+				continue;
+
+			/* it's an error to try an unsupported feature */
+			igt_assert(colorop->props[i]);
+
+			igt_debug("colorop %s.%d: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+				kmstest_pipe_name(pipe->pipe), colorop->id, igt_colorop_prop_names[i],
+				colorop->values[i], colorop->values[i]);
+
+			igt_assert_lt(0, drmModeAtomicAddProperty(req, colorop->id,
+							colorop->props[i],
+							colorop->values[i]));
+		}
+
+		/* get next colorop */
+		next_val = igt_colorop_get_prop(display, colorop,
+						IGT_COLOROP_NEXT);
+		colorop = igt_find_colorop(display, next_val);
+	}
+}
+
 /*
  * Properties that can be changed through legacy SetProperty:
  * - Obviously not the XYWH SRC/CRTC coordinates.
@@ -4041,6 +4192,25 @@ uint64_t igt_plane_get_prop(igt_plane_t *plane, enum igt_atomic_plane_properties
 					plane->drm_plane->plane_id, plane->props[prop]);
 }
 
+/**
+ * igt_colorop_get_prop:
+ * @colorop: Target colorop.
+ * @prop: Property to check.
+ *
+ * Return current value on a colorop for a given property.
+ *
+ * Returns: The value the property is set to, if this
+ * is a blob, the blob id is returned. This can be passed
+ * to drmModeGetPropertyBlob() to get the contents of the blob.
+ */
+uint64_t igt_colorop_get_prop(igt_display_t *display, igt_colorop_t *colorop, enum igt_atomic_colorop_properties prop)
+{
+	igt_assert(igt_colorop_has_prop(colorop, prop));
+
+	return igt_mode_object_get_prop(display, DRM_MODE_OBJECT_COLOROP,
+					colorop->id, colorop->props[prop]);
+}
+
 static bool igt_mode_object_get_prop_enum_value(int drm_fd, uint32_t id, const char *str, uint64_t *val)
 {
 	drmModePropertyPtr prop = drmModeGetProperty(drm_fd, id);
@@ -4129,6 +4299,44 @@ bool igt_plane_check_prop_is_mutable(igt_plane_t *plane,
 	return !(prop->flags & DRM_MODE_PROP_IMMUTABLE);
 }
 
+/**
+ * igt_plane_is_valid_colorop:
+ * @plane: Target plane.
+ * @colorop: Colorop to check.
+ *
+ * Returns: True if the given @colorop is a valid color pipeline on
+ * the given @plane
+ */
+bool igt_plane_is_valid_colorop(igt_plane_t *plane, igt_colorop_t *colorop)
+{
+	int i;
+	bool found = false;
+
+	for (i = 0; i < plane->num_color_pipelines; i++) {
+		if (plane->color_pipelines[i] == colorop) {
+			found = true;
+			break;
+		}
+	}
+
+	return found;
+}
+/**
+ * igt_plane_set_color_pipeline:
+ * @plane: Target plane.
+ * @colorop: Colorop to set as color pipeline.
+ *
+ * This function sets the given @colorop as color pipeline on @plane, or fails
+ * the test if it's an invalid color pipeline for the plane.
+ */
+void igt_plane_set_color_pipeline(igt_plane_t *plane, igt_colorop_t *colorop)
+{
+	igt_assert(igt_plane_is_valid_colorop(plane, colorop));
+
+	plane->assigned_color_pipeline = colorop;
+	igt_plane_set_prop_enum(plane, IGT_PLANE_COLOR_PIPELINE, colorop->name);
+}
+
 /**
  * igt_plane_replace_prop_blob:
  * @plane: plane to set property on.
@@ -4161,6 +4369,50 @@ igt_plane_replace_prop_blob(igt_plane_t *plane, enum igt_atomic_plane_properties
 	igt_plane_set_prop_changed(plane, prop);
 }
 
+/**
+ * igt_colorop_try_prop_enum:
+ * @colorop: Target colorop.
+ * @prop: Property to check.
+ * @val: Value to set.
+ *
+ * Returns: False if the given @colorop doesn't have the enum @prop or
+ * failed to set the enum property @val else True.
+ */
+bool igt_colorop_try_prop_enum(igt_colorop_t *colorop,
+			       enum igt_atomic_colorop_properties prop,
+			       const char *val)
+{
+	igt_display_t *display = colorop->plane->pipe->display;
+	uint64_t uval;
+
+	igt_assert(colorop->props[prop]);
+
+	if (!igt_mode_object_get_prop_enum_value(display->drm_fd,
+						 colorop->props[prop], val, &uval))
+		return false;
+
+	igt_colorop_set_prop_value(colorop, prop, uval);
+	return true;
+}
+
+/**
+ * igt_colorop_set_prop_enum:
+ * @plane: Target plane.
+ * @prop: Property to check.
+ * @val: Value to set.
+ *
+ * This function tries to set given enum property @prop value @val to
+ * the given @colorop, and terminate the execution if its failed.
+ */
+void igt_colorop_set_prop_enum(igt_colorop_t *colorop,
+			       enum igt_atomic_colorop_properties prop,
+			       const char *val)
+{
+	bool result = false;
+	result = igt_colorop_try_prop_enum(colorop, prop, val);
+	igt_assert(result);
+}
+
 /**
  * igt_output_get_prop:
  * @output: Target output.
@@ -4433,6 +4685,11 @@ static int igt_atomic_commit(igt_display_t *display, uint32_t flags, void *user_
 
 			if (plane->changed)
 				igt_atomic_prepare_plane_commit(plane, pipe_obj, req);
+
+			/* TODO iterate over assigned color pipeline and prepare colorop commit */
+			if (plane->assigned_color_pipeline)
+				igt_atomic_prepare_colorop_commit(plane->assigned_color_pipeline,
+								  pipe_obj, req);
 		}
 
 	}
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 7c9ca73a7dfb..3b4f8dbaee20 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -345,9 +345,18 @@ enum igt_atomic_plane_properties {
        IGT_PLANE_SCALING_FILTER,
        IGT_PLANE_HOTSPOT_X,
        IGT_PLANE_HOTSPOT_Y,
+       IGT_PLANE_COLOR_PIPELINE,
        IGT_NUM_PLANE_PROPS
 };
 
+enum igt_atomic_colorop_properties {
+	IGT_COLOROP_TYPE,
+	IGT_COLOROP_BYPASS,
+	IGT_COLOROP_CURVE_1D_TYPE,
+	IGT_COLOROP_NEXT,
+	IGT_NUM_COLOROP_PROPS
+};
+
 /**
  * igt_plane_prop_names
  *
@@ -356,10 +365,20 @@ enum igt_atomic_plane_properties {
  */
 extern const char * const igt_plane_prop_names[];
 
+/**
+ * igt_colorop_prop_names
+ *
+ * igt_colorop_prop_names contains a list of colorop property names,
+ * as indexed by the igt_atomic_colorop_properties enum.
+ */
+extern const char * const igt_colorop_prop_names[];
+
 typedef struct igt_display igt_display_t;
 typedef struct igt_pipe igt_pipe_t;
 typedef uint32_t igt_fixed_t;			/* 16.16 fixed point */
 
+#define IGT_NUM_PLANE_COLOR_PIPELINES 4
+
 typedef enum {
 	/* this maps to the kernel API */
 	IGT_ROTATION_0   = 1 << 0,
@@ -385,6 +404,20 @@ static inline bool igt_rotation_90_or_270(igt_rotation_t rotation)
 	return rotation & (IGT_ROTATION_90 | IGT_ROTATION_270);
 }
 
+typedef struct igt_plane igt_plane_t;
+
+typedef struct igt_colorop {
+	uint32_t id;
+	igt_plane_t *plane;
+
+	char name[DRM_PROP_NAME_LEN];
+
+	uint64_t changed;
+	uint32_t props[IGT_NUM_COLOROP_PROPS];
+	uint64_t values[IGT_NUM_COLOROP_PROPS];
+
+} igt_colorop_t;
+
 typedef struct igt_plane {
 	/*< private >*/
 	igt_pipe_t *pipe;
@@ -418,6 +451,11 @@ typedef struct igt_plane {
 	uint64_t *modifiers;
 	uint32_t *formats;
 	int format_mod_count;
+
+	igt_colorop_t *color_pipelines[IGT_NUM_PLANE_COLOR_PIPELINES];
+	int num_color_pipelines;
+
+	igt_colorop_t *assigned_color_pipeline;
 } igt_plane_t;
 
 /*
@@ -476,9 +514,11 @@ struct igt_display {
 	int log_shift;
 	int n_pipes;
 	int n_planes;
+	int n_colorops;
 	int n_outputs;
 	igt_output_t *outputs;
 	igt_plane_t *planes;
+	igt_colorop_t *colorops;
 	igt_pipe_t *pipes;
 	bool has_cursor_plane;
 	bool is_atomic;
@@ -810,6 +850,53 @@ extern void igt_plane_set_prop_enum(igt_plane_t *plane,
 				    enum igt_atomic_plane_properties prop,
 				    const char *val);
 
+
+
+extern bool igt_plane_is_valid_colorop(igt_plane_t *plane, igt_colorop_t *colorop);
+
+extern void igt_plane_set_color_pipeline(igt_plane_t *plane, igt_colorop_t *colorop);
+
+/**
+ * igt_colorop_has_prop:
+ * @colorop: colorop to check.
+ * @prop: Property to check.
+ *
+ * Check whether colorop supports a given property.
+ *
+ * Returns: True if the property is supported, otherwise false.
+ */
+static inline bool
+igt_colorop_has_prop(igt_colorop_t *colorop, enum igt_atomic_colorop_properties prop)
+{
+	return colorop->props[prop];
+}
+
+uint64_t igt_colorop_get_prop(igt_display_t *display, igt_colorop_t *colorop, enum igt_atomic_colorop_properties prop);
+
+#define igt_colorop_is_prop_changed(colorop, prop) \
+	(!!((colorop)->changed & (1 << (prop))))
+
+#define igt_colorop_set_prop_changed(colorop, prop) \
+	(colorop)->changed |= 1 << (prop)
+
+#define igt_colorop_clear_prop_changed(colorop, prop) \
+	(colorop)->changed &= ~(1 << (prop))
+
+#define igt_colorop_set_prop_value(colorop, prop, value) \
+	do { \
+		colorop->values[prop] = value; \
+		igt_colorop_set_prop_changed(colorop, prop); \
+	} while (0)
+
+
+extern bool igt_colorop_try_prop_enum(igt_colorop_t *colorop,
+				      enum igt_atomic_colorop_properties prop,
+				      const char *val);
+
+extern void igt_colorop_set_prop_enum(igt_colorop_t *colorop,
+				      enum igt_atomic_colorop_properties prop,
+				      const char *val);
+
 extern void igt_plane_replace_prop_blob(igt_plane_t *plane,
 					enum igt_atomic_plane_properties prop,
 					const void *ptr, size_t length);
@@ -1228,4 +1315,6 @@ int get_num_scalers(int drm_fd, enum pipe pipe);
 
 drmModePropertyBlobRes *get_writeback_formats_blob(igt_output_t *output);
 
+igt_colorop_t *igt_find_colorop(igt_display_t *display, uint32_t id);
+
 #endif /* __IGT_KMS_H__ */
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 09/37] tests/kms_properties: Add colorop properties test
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (7 preceding siblings ...)
  2024-08-19 20:57 ` [PATCH v5 08/37] lib/igt_kms: Introduce drm_colorop and COLOR_PIPELINE Harry Wentland
@ 2024-08-19 20:57 ` Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 10/37] igt/color: Add SW color transform functionality Harry Wentland
                   ` (30 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:57 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

We've introduced the concept of a new DRM core object, the
drm_colorop, to represent a color operation as part of a
color pipeline.

Add new tests to kms_properties to test the properties of
a drm_colorop object.

v3:
 - Update test to work without new libdrm definitions for
   colorop objects
 - Test colorop properties with both atomic and legacy
   code paths

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 tests/kms_properties.c | 69 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)

diff --git a/tests/kms_properties.c b/tests/kms_properties.c
index a93c93cccf64..75252b3c9dbe 100644
--- a/tests/kms_properties.c
+++ b/tests/kms_properties.c
@@ -49,6 +49,7 @@
  * @crtc:            CRTC
  * @plane:           Plane
  * @invalid:         Invalid (connector/crtc/plane)
+ * @colorop:         Colorop
  *
  * arg[2]:
  *
@@ -221,6 +222,39 @@ static void test_properties(int fd, uint32_t type, uint32_t id, bool atomic)
 	}
 }
 
+static void run_colorop_property_tests(igt_display_t *display, enum pipe pipe, igt_output_t *output, bool atomic)
+{
+	struct igt_fb fb;
+	igt_plane_t *plane;
+	igt_colorop_t *colorop;
+	int i;
+	int colorop_id = 0;
+
+	prepare_pipe(display, pipe, output, &fb);
+
+	for_each_plane_on_pipe(display, pipe, plane) {
+		igt_info("Testing colorop properties on plane %s.#%d-%s (output: %s)\n",
+			 kmstest_pipe_name(pipe), plane->index, kmstest_plane_type_name(plane->type), output->name);
+
+		/* iterate over all color pipelines on plane */
+		for (i = 0; i < plane->num_color_pipelines; ++i) {
+			/* iterate over all colorops in pipeline*/
+			colorop = plane->color_pipelines[i];
+			while (colorop) {
+				igt_info("Testing colorop properties on %s.#%d.#%d-%s (output: %s)\n",
+					kmstest_pipe_name(pipe), plane->index, colorop->id, kmstest_plane_type_name(plane->type), output->name);
+				test_properties(display->drm_fd, DRM_MODE_OBJECT_COLOROP, colorop->id, atomic);
+
+				colorop_id = igt_colorop_get_prop(display, colorop,
+								IGT_COLOROP_NEXT);
+				colorop = igt_find_colorop(display, colorop_id);
+			}
+		}
+	}
+
+	cleanup_pipe(display, pipe, output, &fb);
+}
+
 static void run_plane_property_tests(igt_display_t *display, enum pipe pipe, igt_output_t *output, bool atomic)
 {
 	struct igt_fb fb;
@@ -266,6 +300,37 @@ static void run_connector_property_tests(igt_display_t *display, enum pipe pipe,
 		cleanup_pipe(display, pipe, output, &fb);
 }
 
+static void colorop_properties(igt_display_t *display, bool atomic)
+{
+	bool found_any = false, found;
+	igt_output_t *output;
+	enum pipe pipe;
+
+	/* colorops are only available with atomic */
+	igt_skip_on(!display->is_atomic);
+
+	for_each_pipe(display, pipe) {
+		found = false;
+
+		for_each_valid_output_on_pipe(display, pipe, output) {
+			igt_display_reset(display);
+
+			igt_output_set_pipe(output, pipe);
+			if (!intel_pipe_output_combo_valid(display))
+				continue;
+
+			found_any = found = true;
+
+			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
+				igt_output_name(output)) {
+				run_colorop_property_tests(display, pipe, output, atomic);
+			}
+		}
+	}
+
+	igt_skip_on(!found_any);
+}
+
 static void plane_properties(igt_display_t *display, bool atomic)
 {
 	igt_output_t *output;
@@ -779,6 +844,10 @@ igt_main
 		  "Tests connector properties with legacy commit" },
 		{ "connector-properties-atomic", connector_properties, true,
 		  "Tests connector properties with atomic commit" },
+		{ "colorop-properties-legacy", colorop_properties, false,
+		  "Tests colorop properties with legacy commit" },
+		{ "colorop-properties-atomic", colorop_properties, true,
+		  "Tests colorop properties with atomic commit" },
 	};
 
 	igt_fixture {
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 10/37] igt/color: Add SW color transform functionality
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (8 preceding siblings ...)
  2024-08-19 20:57 ` [PATCH v5 09/37] tests/kms_properties: Add colorop properties test Harry Wentland
@ 2024-08-19 20:57 ` Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 11/37] lib/igt_fb: Add copy_fb function Harry Wentland
                   ` (29 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:57 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

In order to test color we want to compare a HW (KMS) transform
with a SW transform. This introduces color transform for an
sRGB EOTF but this can be extended to other transforms. Code is
borrowed from Skia.

v4:
 - Rename srgb_tf to srgb_eotf

v3:
 - Use SPDX style license identifier (Kamil)
 - Replace large copy-paste of Skia license with copyright note
   in file header. Skia is BSD licensed, which is compatible with
   MIT.

v2:
 - Add inverse sRGB TF
 - Make TF functions available to tests
 - Modify tranform_pixels function to take multple transforms

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 lib/igt_color.c | 258 ++++++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_color.h |  43 ++++++++
 lib/igt_fb.c    |   6 +-
 lib/igt_fb.h    |   2 +
 lib/meson.build |   1 +
 5 files changed, 307 insertions(+), 3 deletions(-)
 create mode 100644 lib/igt_color.c
 create mode 100644 lib/igt_color.h

diff --git a/lib/igt_color.c b/lib/igt_color.c
new file mode 100644
index 000000000000..6349f2b15a47
--- /dev/null
+++ b/lib/igt_color.c
@@ -0,0 +1,258 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright 2023 Advanced Micro Devices, Inc.
+ *
+ * This file contains code adapted from Skia, which is
+ * Copyright (c) 2011 Google Inc. All rights reserved.
+ */
+
+#include <errno.h>
+#include <math.h>
+
+#include "igt_color.h"
+#include "igt_core.h"
+#include "igt_x86.h"
+
+
+static float clamp(float val, float min, float max)
+{
+	return ((val < min) ? min : ((val > max) ? max : val));
+}
+
+static float igt_color_tf_eval_unclamped(const struct igt_color_tf *fn, float x)
+{
+	if (x < fn->d)
+		return fn->c * x + fn->f;
+	return pow(fn->a * x + fn->b, fn->g) + fn->e;
+}
+
+static float igt_color_tf_eval(const struct igt_color_tf *fn, float x)
+{
+	float fn_at_x_unclamped = igt_color_tf_eval_unclamped(fn, x);
+	return clamp(fn_at_x_unclamped, 0.0f, 1.0f);
+}
+
+static void tf_inverse(const struct igt_color_tf *fn, struct igt_color_tf *inv) {
+	memset(inv, 0, sizeof(struct igt_color_tf));
+
+	if (fn->a > 0 && fn->g > 0) {
+		double a_to_the_g = pow(fn->a, fn->g);
+		inv->a = 1.f / a_to_the_g;
+		inv->b = -fn->e / a_to_the_g;
+		inv->g = 1.f / fn->g;
+	}
+
+	inv->d = fn->c * fn->d + fn->f;
+	inv->e = -fn->b / fn->a;
+	if (fn->c != 0) {
+		inv->c = 1.f / fn->c;
+		inv->f = -fn->f / fn->c;
+	}
+}
+
+void igt_color_srgb_inv_eotf(igt_pixel_t *pixel)
+{
+	struct igt_color_tf inv;
+
+	tf_inverse(&srgb_eotf, &inv);
+
+	pixel->r = igt_color_tf_eval(&inv, pixel->r);
+	pixel->g = igt_color_tf_eval(&inv, pixel->g);
+	pixel->b = igt_color_tf_eval(&inv, pixel->b);
+}
+
+
+
+void igt_color_srgb_eotf(igt_pixel_t *pixel)
+{
+	pixel->r = igt_color_tf_eval(&srgb_eotf, pixel->r);
+	pixel->g = igt_color_tf_eval(&srgb_eotf, pixel->g);
+	pixel->b = igt_color_tf_eval(&srgb_eotf, pixel->b);
+}
+
+int igt_color_transform_pixels(igt_fb_t *fb, igt_pixel_transform transforms[], int num_transforms)
+{
+	uint32_t *line = NULL;
+	void *map;
+	char *ptr;
+	int x, y, cpp = igt_drm_format_to_bpp(fb->drm_format) / 8;
+	uint32_t stride = igt_fb_calc_plane_stride(fb, 0);
+
+	if (fb->num_planes != 1)
+		return -EINVAL;
+
+	/* TODO expand for other formats */
+	if (fb->drm_format != DRM_FORMAT_XRGB8888)
+		return -EINVAL;
+
+	ptr = igt_fb_map_buffer(fb->fd, fb);
+	igt_assert(ptr);
+	map = ptr;
+
+	/*
+	 * Framebuffers are often uncached, which can make byte-wise accesses
+	 * very slow. We copy each line of the FB into a local buffer to speed
+	 * up the hashing.
+	 */
+	line = malloc(stride);
+	if (!line) {
+		munmap(map, fb->size);
+		return -ENOMEM;
+	}
+
+	for (y = 0; y < fb->height; y++, ptr += stride) {
+
+		/* get line from buffer */
+		igt_memcpy_from_wc(line, ptr, fb->width * cpp);
+
+		for (x = 0; x < fb->width; x++) {
+			uint32_t raw_pixel = le32_to_cpu(line[x]);
+			igt_pixel_t pixel;
+			int i;
+
+			raw_pixel &= 0x00ffffff;
+
+			/*
+			 * unpack pixel into igt_pixel_t
+			 *
+			 * only for XRGB8888 for now
+			 *
+			 * TODO add "generic" mechanism for unpacking
+			 * other FB formats
+			 */
+			pixel.r = (raw_pixel & 0x00ff0000) >> 16;
+			pixel.g = (raw_pixel & 0x0000ff00) >> 8;
+			pixel.b = (raw_pixel & 0x000000ff);
+
+			/* normalize for 8-bit */
+			pixel.r /= (0xff);
+			pixel.g /= (0xff);
+			pixel.b /= (0xff);
+
+			/* TODO use read_rgb from igt_fb? */
+
+			/* run transform on pixel */
+
+			for (i = 0; i < num_transforms; i++)
+				transforms[i](&pixel);
+
+			/* de-normalize back to 8-bit */
+			pixel.r *= (0xff);
+			pixel.g *= (0xff);
+			pixel.b *= (0xff);
+
+			/* re-pack pixel into FB*/
+			raw_pixel = 0x0;
+			raw_pixel |= ((uint8_t) (lround(pixel.r) & 0xff)) << 16;
+			raw_pixel |= ((uint8_t) (lround(pixel.g) & 0xff)) << 8;
+			raw_pixel |= ((uint8_t) (lround(pixel.b) & 0xff));
+			/* TODO use write_rgb from igt_fb? */
+
+			/* write back to line */
+			line[x] = cpu_to_le32(raw_pixel);
+		}
+
+		/* copy line back to fb buffer */
+		igt_memcpy_from_wc(ptr, line, fb->width * cpp);
+	}
+
+	free(line);
+	igt_fb_unmap_buffer(fb, map);
+
+	return 0;
+
+	/* for each pixel */
+
+	/* convert to float and create igt_pixel */
+
+	/* call transform */
+
+	/* convert back to fb format from igt_pixel */
+
+
+}
+
+bool igt_cmp_fb_component(uint16_t comp1, uint16_t comp2, uint8_t up, uint8_t down)
+{
+	int16_t diff = comp2 - comp1;
+
+	if ((diff < -down) || (diff > up)) {
+		printf("comp1 %x comp2 %x diff %d down %d, up %d\n", comp1, comp2, diff, -down, up);
+		return false;
+	}
+
+	return true;
+}
+
+bool igt_cmp_fb_pixels(igt_fb_t *fb1, igt_fb_t *fb2, uint8_t up, uint8_t down)
+{
+	uint32_t *ptr1, *ptr2;
+	uint32_t pixel1, pixel2, i, j;
+	bool matched = true;
+
+
+	ptr1 = igt_fb_map_buffer(fb1->fd, fb1);
+	ptr2 = igt_fb_map_buffer(fb2->fd, fb2);
+
+	igt_assert(fb1->drm_format == fb2->drm_format);
+	igt_assert(fb1->size == fb2->size);
+
+	for (i = 0; i < fb1->size / sizeof(uint32_t); i++) {
+		uint16_t mask = 0xff;
+		uint16_t shift = 8;
+
+		if (fb1->drm_format == DRM_FORMAT_XRGB2101010) {
+			/* ignore alpha */
+			pixel1 = ptr1[i] & ~0xc0000000;
+			pixel2 = ptr2[i] & ~0xc0000000;
+
+			mask = 0x3ff;
+			shift = 10;
+
+
+		} else if (fb1->drm_format == DRM_FORMAT_XRGB8888) {
+			/* ignore alpha */
+			pixel1 = ptr1[i] & ~0xff000000;
+			pixel2 = ptr2[i] & ~0xff000000;
+
+			mask = 0xff;
+			shift = 8;
+
+		} else {
+			pixel1 = ptr1[i];
+			pixel2 = ptr2[i];
+		}
+
+		for (j = 0; j < 3; j++) {
+			uint16_t comp1 = (pixel1 >> (shift*j)) & mask;
+			uint16_t comp2 = (pixel2 >> (shift*j)) & mask;
+
+			if (!igt_cmp_fb_component(comp1, comp2, up, down)) {
+				/* TODO use proper log*/
+				printf("i %d j %d shift %d mask %x comp1 %x comp2 %x, pixel1 %x pixel2 %x\n",
+				       i, j, shift, mask, comp1, comp2, pixel1, pixel2);
+				return false;
+			}
+		}
+	}
+
+	igt_fb_unmap_buffer(fb1, ptr1);
+	igt_fb_unmap_buffer(fb2, ptr2);
+
+	return matched;
+}
+
+
+void igt_dump_fb(igt_display_t *display, igt_fb_t *fb,
+		 const char *path_name, const char *file_name)
+{
+	char filepath_out[PATH_MAX];
+	cairo_surface_t *fb_surface_out;
+	cairo_status_t status;
+
+	snprintf(filepath_out, PATH_MAX, "%s/%s.png", path_name, file_name);
+	fb_surface_out = igt_get_cairo_surface(display->drm_fd, fb);
+	status = cairo_surface_write_to_png(fb_surface_out, filepath_out);
+	igt_assert_eq(status, CAIRO_STATUS_SUCCESS);
+	cairo_surface_destroy(fb_surface_out);
+}
\ No newline at end of file
diff --git a/lib/igt_color.h b/lib/igt_color.h
new file mode 100644
index 000000000000..fa9f6cf42991
--- /dev/null
+++ b/lib/igt_color.h
@@ -0,0 +1,43 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright 2023 Advanced Micro Devices, Inc.
+ *
+ * This file contains code adapted from Skia, which is
+ * Copyright (c) 2011 Google Inc. All rights reserved.
+ */
+
+
+#ifndef __IGT_COLOR_H__
+#define __IGT_COLOR_H__
+
+#include <limits.h>
+
+#include "igt_fb.h"
+#include "igt_kms.h"
+
+struct igt_color_tf {
+    float g, a,b,c,d,e,f;
+};
+
+const struct igt_color_tf srgb_eotf = {2.4f, (float)(1/1.055), (float)(0.055/1.055), (float)(1/12.92), 0.04045f, 0, 0};
+
+typedef struct igt_pixel {
+	float r;
+	float g;
+	float b;
+} igt_pixel_t;
+
+bool igt_cmp_fb_component(uint16_t comp1, uint16_t comp2, uint8_t up, uint8_t down);
+bool igt_cmp_fb_pixels(igt_fb_t *fb1, igt_fb_t *fb2, uint8_t up, uint8_t down);
+
+void igt_dump_fb(igt_display_t *display, igt_fb_t *fb, const char *path_name, const char *file_name);
+
+/* TODO also allow 64-bit pixels, or other weird sizes */
+typedef void (*igt_pixel_transform)(igt_pixel_t *pixel);
+
+int igt_color_transform_pixels(igt_fb_t *fb, igt_pixel_transform transforms[], int num_transforms);
+
+void igt_color_srgb_inv_eotf(igt_pixel_t *pixel);
+void igt_color_srgb_eotf(igt_pixel_t *pixel);
+
+#endif
\ No newline at end of file
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index addff2cfba3b..abee42918def 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -762,7 +762,7 @@ void igt_init_fb(struct igt_fb *fb, int fd, int width, int height,
 	}
 }
 
-static uint32_t calc_plane_stride(struct igt_fb *fb, int plane)
+uint32_t igt_fb_calc_plane_stride(struct igt_fb *fb, int plane)
 {
 	uint32_t min_stride = fb->plane_width[plane] *
 		(fb->plane_bpp[plane] / 8);
@@ -944,7 +944,7 @@ static uint64_t calc_fb_size(struct igt_fb *fb)
 
 		/* respect the stride requested by the caller */
 		if (!fb->strides[plane])
-			fb->strides[plane] = calc_plane_stride(fb, plane);
+			fb->strides[plane] = igt_fb_calc_plane_stride(fb, plane);
 
 		align = get_plane_alignment(fb, plane);
 		if (align)
@@ -4814,7 +4814,7 @@ int igt_fb_get_fnv1a_crc(struct igt_fb *fb, igt_crc_t *crc)
 	void *map;
 	char *ptr;
 	int x, y, cpp = igt_drm_format_to_bpp(fb->drm_format) / 8;
-	uint32_t stride = calc_plane_stride(fb, 0);
+	uint32_t stride = igt_fb_calc_plane_stride(fb, 0);
 
 	if (fb->num_planes != 1)
 		return -EINVAL;
diff --git a/lib/igt_fb.h b/lib/igt_fb.h
index 834aaef54dea..d2751c0bb772 100644
--- a/lib/igt_fb.h
+++ b/lib/igt_fb.h
@@ -170,6 +170,8 @@ int igt_dirty_fb(int fd, struct igt_fb *fb);
 void *igt_fb_map_buffer(int fd, struct igt_fb *fb);
 void igt_fb_unmap_buffer(struct igt_fb *fb, void *buffer);
 
+uint32_t igt_fb_calc_plane_stride(struct igt_fb *fb, int plane);
+
 void igt_create_bo_for_fb(int fd, int width, int height,
 			  uint32_t format, uint64_t modifier,
 			  struct igt_fb *fb);
diff --git a/lib/meson.build b/lib/meson.build
index f711e60a736a..15fe5f5c2a18 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -107,6 +107,7 @@ lib_sources = [
 	'igt_edid.c',
 	'igt_eld.c',
 	'igt_infoframe.c',
+	'igt_color.c',
 	'veboxcopy_gen12.c',
 	'igt_msm.c',
 	'igt_dsc.c',
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 11/37] lib/igt_fb: Add copy_fb function
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (9 preceding siblings ...)
  2024-08-19 20:57 ` [PATCH v5 10/37] igt/color: Add SW color transform functionality Harry Wentland
@ 2024-08-19 20:57 ` Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 12/37] tests/kms_colorop: Add kms_colorop tests Harry Wentland
                   ` (28 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:57 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 lib/igt_fb.c | 34 ++++++++++++++++++++++++++++++++++
 lib/igt_fb.h |  1 +
 2 files changed, 35 insertions(+)

diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index abee42918def..1e0bad1b82a8 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -2154,6 +2154,40 @@ unsigned int igt_create_fb(int fd, int width, int height, uint32_t format,
 					  fb, 0, 0);
 }
 
+unsigned int igt_copy_fb(int fd, struct igt_fb *src, struct igt_fb *fb)
+{
+	char *in_ptr, *out_ptr;
+	int cpp = igt_drm_format_to_bpp(src->drm_format) / 8;
+
+	int fb_id = 0;
+	igt_assert(src);
+
+	/* TODO allow multiple planes */
+	if (src->num_planes != 1)
+		return -EINVAL;
+
+	/* TODO expand for other formats */
+	if (src->drm_format != DRM_FORMAT_XRGB8888)
+		return -EINVAL;
+
+	fb_id = igt_create_fb(fd, src->width, src->height, src->drm_format,
+			    src->modifier, fb);
+
+	/* copy buffer contents */
+	/* TODO simplify :D */
+	in_ptr = igt_fb_map_buffer(fb->fd, src);
+	igt_assert(in_ptr);
+	out_ptr = igt_fb_map_buffer(fb->fd, fb);
+	igt_assert(out_ptr);
+
+	igt_memcpy_from_wc(out_ptr, in_ptr, fb->width * fb->height * cpp);
+
+	igt_fb_unmap_buffer(fb, out_ptr);
+	igt_fb_unmap_buffer(src, in_ptr);
+
+	return fb_id;
+}
+
 /**
  * igt_create_color_fb:
  * @fd: open drm file descriptor
diff --git a/lib/igt_fb.h b/lib/igt_fb.h
index d2751c0bb772..258a7669e434 100644
--- a/lib/igt_fb.h
+++ b/lib/igt_fb.h
@@ -142,6 +142,7 @@ struct intel_buf *igt_fb_create_intel_buf(int fd, struct buf_ops *bops,
 					  const struct igt_fb *fb, const char *name);
 unsigned int igt_create_fb(int fd, int width, int height, uint32_t format,
 			   uint64_t modifier, struct igt_fb *fb);
+unsigned int igt_copy_fb(int fd, struct igt_fb *src, struct igt_fb *fb);
 unsigned int igt_create_color_fb(int fd, int width, int height,
 				 uint32_t format, uint64_t modifier,
 				 double r, double g, double b,
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 12/37] tests/kms_colorop: Add kms_colorop tests
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (10 preceding siblings ...)
  2024-08-19 20:57 ` [PATCH v5 11/37] lib/igt_fb: Add copy_fb function Harry Wentland
@ 2024-08-19 20:57 ` Harry Wentland
  2024-08-19 20:57 ` [PATCH v5 13/37] lib/igt_kms: Add support for DATA colorop property Harry Wentland
                   ` (27 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:57 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

This tests the color pipeline API, exposed via the
COLOR PIPELINE plane property and drm_colorop objects.

We introduce tests for:
 - sRGB EOTF
 - sRGB Inverse EOTF
 - sRGB EOTF + sRGB Inverse EOTF

The last one is the holy grail of LUT testing. It tests that
after applying an EOTF, followed by its inverse EOTF we arrive
back at the original value. We can use this to test for
precision loss in the pipeline.

All tests are tested via writeback. All transforms are done in
SW (in floating point) and at the end the SW transformed buffer
is compared with the KMS writeback output buffer. The two should
match within a bracket of acceptable deviations. Since these
deviations might look different for different KMS drivers we'll
do this check on a driver-specific basis.

v3:
 - skip tests if color pipeline not found
 - Rename colorop to color_pipeline in places where it refers
   to the entire pipeline (Sebastian)

v2:
 - Make tests dynamic, allowing definition of tests with an
   arbitrary number of transforms
 - Add test for sRGB Inverse EOTF
 - Add test for sRGB EOTF, followed by sRGB Inverse EOTF

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 tests/kms_colorop.c | 530 ++++++++++++++++++++++++++++++++++++++++++++
 tests/kms_colorop.h |  87 ++++++++
 tests/meson.build   |   1 +
 3 files changed, 618 insertions(+)
 create mode 100644 tests/kms_colorop.c
 create mode 100644 tests/kms_colorop.h

diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
new file mode 100644
index 000000000000..b9009a498651
--- /dev/null
+++ b/tests/kms_colorop.c
@@ -0,0 +1,530 @@
+/*
+ * Copyright 2023 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include "igt.h"
+#include "igt_color.h"
+#include "sw_sync.h"
+
+#include "kms_colorop.h"
+
+/**
+ * TEST: kms colorop
+ * Category: Display
+ * Description: Test to validate the retrieving and setting of DRM colorops
+ *
+ * SUBTEST: plane-%s
+ * Description: Tests DRM colorop properties on a plane
+ * Driver requirement: amdgpu
+ * Functionality: kms_core
+ * Mega feature: General Display Features
+ * Test category: functionality test
+ *
+ * arg[1]:
+ *
+ * @srgb_eotf:                   sRGB EOTF
+ * @srgb_inv_eotf:               sRGB Inverse EOTF
+ * @srgb_eotf-srgb_inv_eotf:     sRGB EOTF -> sRGB Inverse EOTF
+ *
+ */
+
+/* TODO move to lib for kms_writeback and kms_colorop (and other future) use */
+static bool check_writeback_config(igt_display_t *display, igt_output_t *output,
+				    drmModeModeInfo override_mode)
+{
+	igt_fb_t input_fb, output_fb;
+	igt_plane_t *plane;
+	uint32_t writeback_format = DRM_FORMAT_XRGB8888;
+	uint64_t modifier = DRM_FORMAT_MOD_LINEAR;
+	int width, height, ret;
+
+	igt_output_override_mode(output, &override_mode);
+
+	width = override_mode.hdisplay;
+	height = override_mode.vdisplay;
+
+	ret = igt_create_fb(display->drm_fd, width, height,
+			    DRM_FORMAT_XRGB8888, modifier, &input_fb);
+	igt_assert(ret >= 0);
+
+	ret = igt_create_fb(display->drm_fd, width, height,
+			    writeback_format, modifier, &output_fb);
+	igt_assert(ret >= 0);
+
+	plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+	igt_plane_set_fb(plane, &input_fb);
+	igt_output_set_writeback_fb(output, &output_fb);
+
+	ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY |
+					    DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	igt_plane_set_fb(plane, NULL);
+	igt_remove_fb(display->drm_fd, &input_fb);
+	igt_remove_fb(display->drm_fd, &output_fb);
+
+	return !ret;
+}
+
+/* TODO move to lib for kms_writeback and kms_colorop (and other future) use */
+typedef struct {
+	bool builtin_mode;
+	bool custom_mode;
+	bool list_modes;
+	bool dump_check;
+	int mode_index;
+	drmModeModeInfo user_mode;
+} data_t;
+
+static data_t data;
+
+/* TODO move to lib for kms_writeback and kms_colorop (and other future) use */
+static igt_output_t *kms_writeback_get_output(igt_display_t *display)
+{
+	int i;
+	enum pipe pipe;
+
+	drmModeModeInfo override_mode = {
+		.clock = 25175,
+		.hdisplay = 640,
+		.hsync_start = 656,
+		.hsync_end = 752,
+		.htotal = 800,
+		.hskew = 0,
+		.vdisplay = 480,
+		.vsync_start = 490,
+		.vsync_end = 492,
+		.vtotal = 525,
+		.vscan = 0,
+		.vrefresh = 60,
+		.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
+		.name = {"640x480-60"},
+	};
+
+	for (i = 0; i < display->n_outputs; i++) {
+		igt_output_t *output = &display->outputs[i];
+
+		if (output->config.connector->connector_type != DRM_MODE_CONNECTOR_WRITEBACK)
+			continue;
+
+		for_each_pipe(display, pipe) {
+			igt_output_set_pipe(output, pipe);
+
+			if (data.custom_mode)
+				override_mode = data.user_mode;
+			if (data.builtin_mode)
+				override_mode = output->config.connector->modes[data.mode_index];
+
+			if (check_writeback_config(display, output, override_mode)) {
+				igt_debug("Using connector %u:%s on pipe %d\n",
+					  output->config.connector->connector_id,
+					  output->name, pipe);
+				return output;
+			}
+		}
+
+		igt_debug("We found %u:%s, but this test will not be able to use it.\n",
+			  output->config.connector->connector_id, output->name);
+
+		/* Restore any connectors we don't use, so we don't trip on them later */
+		kmstest_force_connector(display->drm_fd, output->config.connector, FORCE_CONNECTOR_UNSPECIFIED);
+	}
+
+	return NULL;
+}
+
+/* TODO move to lib for kms_writeback and kms_colorop (and other future) use */
+static uint64_t get_writeback_fb_id(igt_output_t *output)
+{
+	return igt_output_get_prop(output, IGT_CONNECTOR_WRITEBACK_FB_ID);
+}
+
+/* TODO move to lib for kms_writeback and kms_colorop (and other future) use */
+static void detach_crtc(igt_display_t *display, igt_output_t *output)
+{
+	if (get_writeback_fb_id(output) == 0)
+		return;
+
+	igt_output_set_pipe(output, PIPE_NONE);
+	igt_display_commit2(display, COMMIT_ATOMIC);
+}
+
+static void get_and_wait_out_fence(igt_output_t *output)
+{
+	int ret;
+
+	igt_assert(output->writeback_out_fence_fd >= 0);
+
+	ret = sync_fence_wait(output->writeback_out_fence_fd, 1000);
+	igt_assert_f(ret == 0, "sync_fence_wait failed: %s\n", strerror(-ret));
+	close(output->writeback_out_fence_fd);
+	output->writeback_out_fence_fd = -1;
+}
+
+static bool can_use_colorop(igt_display_t *display, igt_colorop_t *colorop, kms_colorop_t *desired)
+{
+	switch (desired->type) {
+	case KMS_COLOROP_ENUMERATED_LUT1D:
+		if (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_1D_CURVE) {
+			return true;
+		}
+	case KMS_COLOROP_CUSTOM_LUT1D:
+	case KMS_COLOROP_CTM:
+	case KMS_COLOROP_LUT3D:
+	default:
+		return false;
+	}
+}
+
+/**
+ * Iterate color pipeline that begins with colorop and try to map
+ * colorops[] to it.
+ */
+static bool map_to_pipeline(igt_display_t *display,
+			    igt_colorop_t *colorop,
+			    kms_colorop_t *colorops[])
+{
+	igt_colorop_t *next = colorop;
+	kms_colorop_t *current_op;
+	int i = 0;
+	int prop_val = 0;
+
+	current_op = colorops[i++];
+	igt_require(current_op);
+
+	while (next) {
+		if (can_use_colorop(display, next, current_op)) {
+			current_op->colorop = next;
+			current_op = colorops[i++];
+			if (!current_op)
+				break;
+		}
+		prop_val = igt_colorop_get_prop(display, next,
+						IGT_COLOROP_NEXT);
+		next = igt_find_colorop(display, prop_val);
+	}
+
+	if (current_op) {
+		/* we failed to map the pipeline */
+
+		/* clean up colorops[i].colorop mappings */
+		for(i = 0, current_op = colorops[0]; current_op; current_op = colorops[i++])
+			current_op->colorop = NULL;
+
+		return false;
+	}
+
+	return true;
+}
+
+static igt_colorop_t *get_color_pipeline(igt_display_t *display,
+					 igt_plane_t *plane,
+					 kms_colorop_t *colorops[])
+{
+	igt_colorop_t *colorop = NULL;
+	int i;
+
+	/* go through all color pipelines */
+	for (i = 0; i < plane->num_color_pipelines; ++i) {
+		if (map_to_pipeline(display, plane->color_pipelines[i], colorops)) {
+			colorop = plane->color_pipelines[i];
+			break;
+		}
+	}
+
+	return colorop;
+}
+
+static void set_colorop(igt_display_t *display,
+			kms_colorop_t *colorop)
+{
+	igt_assert(colorop->colorop);
+	igt_colorop_set_prop_value(colorop->colorop, IGT_COLOROP_BYPASS, 0);
+
+	/* TODO set to desired value from kms_colorop_t */
+	switch (colorop->type) {
+	case KMS_COLOROP_ENUMERATED_LUT1D:
+		switch (colorop->enumerated_lut1d_info.tf) {
+		case KMS_COLOROP_LUT1D_SRGB_EOTF:
+			igt_colorop_set_prop_enum(colorop->colorop, IGT_COLOROP_CURVE_1D_TYPE, "sRGB EOTF");
+			break;
+		case KMS_COLOROP_LUT1D_SRGB_INV_EOTF:
+			igt_colorop_set_prop_enum(colorop->colorop, IGT_COLOROP_CURVE_1D_TYPE, "sRGB Inverse EOTF");
+			break;
+		case KMS_COLOROP_LUT1D_PQ_EOTF:
+		case KMS_COLOROP_LUT1D_PQ_INV_EOTF:
+		default:
+			igt_fail(IGT_EXIT_FAILURE);
+		}
+		break;
+	case KMS_COLOROP_CUSTOM_LUT1D:
+	case KMS_COLOROP_CTM:
+	case KMS_COLOROP_LUT3D:
+	default:
+		igt_fail(IGT_EXIT_FAILURE);
+	}
+}
+
+static void set_color_pipeline(igt_display_t *display,
+			       igt_plane_t *plane,
+			       kms_colorop_t *colorops[],
+			       igt_colorop_t *color_pipeline)
+{
+	igt_colorop_t *next;
+	int prop_val = 0;
+	int i;
+
+	igt_plane_set_color_pipeline(plane, color_pipeline);
+
+	for(i = 0; colorops[i]; i++)
+		set_colorop(display, colorops[i]);
+
+	/* set unused ops in pipeline to bypass */
+	next = color_pipeline;
+	i = 0;
+	while (next) {
+		if (!colorops[i] || colorops[i]->colorop != next)
+			igt_colorop_set_prop_value(next, IGT_COLOROP_BYPASS, 1);
+		else
+			i++;
+
+		prop_val = igt_colorop_get_prop(display, next,
+						IGT_COLOROP_NEXT);
+		next = igt_find_colorop(display, prop_val);
+	}
+}
+
+static void set_color_pipeline_bypass(igt_plane_t *plane)
+{
+	igt_plane_set_prop_enum(plane, IGT_PLANE_COLOR_PIPELINE, "Bypass");
+}
+
+static bool compare_with_bracket(igt_fb_t *in, igt_fb_t *out)
+{
+	if (is_vkms_device(in->fd))
+		return igt_cmp_fb_pixels(in, out, 1, 1);
+	else
+		/*
+		 * By default we'll look for a [0, 0] bracket. We can then
+		 * define it for each driver that implements support for this
+		 * test. That way we can understand the precision of each
+		 * driver better.
+		 */
+		return igt_cmp_fb_pixels(in, out, 0, 0);
+}
+
+#define DUMP_FBS 1
+
+#define MAX_COLOROPS 3
+#define NUM_COLOROP_TESTS 3
+#define MAX_NAME_SIZE 256
+
+static void apply_transforms(kms_colorop_t *colorops[], igt_fb_t *sw_transform_fb)
+{
+	int i;
+	igt_pixel_transform transforms[MAX_COLOROPS];
+
+	/*
+	 * TODO
+	 *
+	 * This is wrong and loses precision since it always goes back
+	 * to an 8-bpc framebuffer.
+	 *
+	 * Instead we need to stay as UNORM or float 16-bpc value throughout
+	 * all transforms.
+	 */
+
+	for (i = 0; colorops[i]; i++)
+		transforms[i] = colorops[i]->transform;
+
+	igt_color_transform_pixels(sw_transform_fb, transforms, i);
+}
+
+static void colorop_plane_test(igt_display_t *display,
+			       kms_colorop_t *colorops[])
+{
+	igt_colorop_t *color_pipeline = NULL;
+	igt_output_t *output;
+	igt_plane_t *plane;
+	igt_fb_t input_fb;
+	igt_fb_t sw_transform_fb;
+	igt_fb_t output_fb;
+	drmModeModeInfo mode;
+	unsigned int fb_id;
+	igt_crc_t input_crc, output_crc;
+
+	output = kms_writeback_get_output(display);
+	igt_require(output);
+
+	if (output->use_override_mode)
+		memcpy(&mode, &output->override_mode, sizeof(mode));
+	else
+		memcpy(&mode, &output->config.default_mode, sizeof(mode));
+
+	/* create input fb */
+	plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+	igt_assert(plane);
+
+	fb_id = igt_create_color_pattern_fb(display->drm_fd,
+					mode.hdisplay, mode.vdisplay,
+					DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR,
+					0.2, 0.2, 0.2, &input_fb);
+	igt_assert(fb_id >= 0);
+	igt_plane_set_fb(plane, &input_fb);
+#if DUMP_FBS
+	igt_dump_fb(display, &input_fb, ".", "input");
+#endif
+
+	/* create output fb */
+	fb_id = igt_create_fb(display->drm_fd, mode.hdisplay, mode.vdisplay,
+				DRM_FORMAT_XRGB8888,
+				igt_fb_mod_to_tiling(0),
+				&output_fb);
+	igt_require(fb_id > 0);
+
+	igt_fb_get_fnv1a_crc(&input_fb, &input_crc);
+
+	igt_require(igt_plane_has_prop(plane, IGT_PLANE_COLOR_PIPELINE));
+
+	/* reset color pipeline*/
+
+	/* TODO do we need this? might be good sanity anyways */
+	set_color_pipeline_bypass(plane);
+
+	/* Commit */
+	igt_plane_set_fb(plane, &input_fb);
+	igt_output_set_writeback_fb(output, &output_fb);
+
+	igt_display_commit_atomic(output->display,
+				DRM_MODE_ATOMIC_ALLOW_MODESET,
+				NULL);
+	get_and_wait_out_fence(output);
+
+	/* Compare input and output buffers. They should be equal here. */
+	igt_fb_get_fnv1a_crc(&output_fb, &output_crc);
+
+	igt_assert_crc_equal(&input_crc, &output_crc);
+
+	/* create sw transformed buffer */
+
+	igt_copy_fb(display->drm_fd, &input_fb, &sw_transform_fb);
+	igt_assert(igt_cmp_fb_pixels(&input_fb, &sw_transform_fb, 0, 0));
+
+	apply_transforms(colorops, &sw_transform_fb);
+#if DUMP_FBS
+	igt_dump_fb(display, &sw_transform_fb, ".", "sw_transform");
+#endif
+	/* discover and set COLOR PIPELINE */
+
+	/* get COLOR_PIPELINE enum */
+	color_pipeline = get_color_pipeline(display, plane, colorops);
+
+	/* skip test if we can't find applicable pipeline */
+	igt_skip_on(!color_pipeline);
+
+	set_color_pipeline(display, plane, colorops, color_pipeline);
+
+	igt_output_set_writeback_fb(output, &output_fb);
+
+	/* commit COLOR_PIPELINE */
+	igt_display_commit_atomic(display,
+				DRM_MODE_ATOMIC_ALLOW_MODESET,
+				NULL);
+	get_and_wait_out_fence(output);
+#if DUMP_FBS
+	igt_dump_fb(display, &output_fb, ".", "output");
+#endif
+
+	/* compare sw transformed and KMS transformed FBs */
+	igt_assert(compare_with_bracket(&sw_transform_fb, &output_fb));
+
+	/* reset color pipeline*/
+	set_color_pipeline_bypass(plane);
+
+	/* Commit */
+	igt_plane_set_fb(plane, &input_fb);
+	igt_output_set_writeback_fb(output, &output_fb);
+
+	igt_display_commit_atomic(output->display,
+				DRM_MODE_ATOMIC_ALLOW_MODESET,
+				NULL);
+	get_and_wait_out_fence(output);
+
+	/* cleanup */
+	detach_crtc(display, output);
+	igt_remove_fb(display->drm_fd, &input_fb);
+	igt_remove_fb(display->drm_fd, &output_fb);
+}
+
+igt_main
+{
+
+	struct {
+		kms_colorop_t *colorops[MAX_COLOROPS];
+		const char *name;
+	} tests[] = {
+		{ { &kms_colorop_srgb_eotf, NULL }, "srgb_eotf" },
+		{ { &kms_colorop_srgb_inv_eotf, NULL }, "srgb_inv_eotf" },
+		{ { &kms_colorop_srgb_eotf, &kms_colorop_srgb_inv_eotf, NULL }, "srgb_eotf-srgb_inv_eotf" }
+	};
+
+	igt_display_t display;
+	int i, ret;
+
+	igt_fixture {
+		display.drm_fd = drm_open_driver_master(DRIVER_ANY);
+
+		if (drmSetClientCap(display.drm_fd, DRM_CLIENT_CAP_ATOMIC, 1) == 0)
+			display.is_atomic = 1;
+
+		ret = drmSetClientCap(display.drm_fd, DRM_CLIENT_CAP_WRITEBACK_CONNECTORS, 1);
+
+		igt_require_f(!ret, "error setting DRM_CLIENT_CAP_WRITEBACK_CONNECTORS\n");
+
+		igt_display_require(&display, display.drm_fd);
+
+		kmstest_set_vt_graphics_mode();
+
+		igt_display_require(&display, display.drm_fd);
+
+		igt_require(display.is_atomic);
+
+	}
+
+	for (i = 0; i < sizeof(tests) / sizeof (tests[0]); i++) {
+		igt_describe("Bla bla bla");
+		igt_subtest_f("plane-%s", tests[i].name)
+			colorop_plane_test(&display, tests[i].colorops);
+	}
+
+	igt_describe("Tests getting and setting COLOR_PIPELINE property on plane");
+#if 0
+	igt_subtest("plane-srgb") {
+		colorop_plane_test(&display, colorops_srgb);
+	}
+	igt_subtest("plane-inv_srgb") {
+		colorop_plane_test(&display, colorops_srgb_inv);
+	}
+#endif
+	igt_fixture {
+
+		igt_display_fini(&display);
+	}
+}
+
diff --git a/tests/kms_colorop.h b/tests/kms_colorop.h
new file mode 100644
index 000000000000..8102d25b13be
--- /dev/null
+++ b/tests/kms_colorop.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2023 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef __KMS_COLOROP_H__
+#define __KMS_COLOROP_H__
+
+#include "igt_color.h"
+
+typedef bool (*compare_fb_t)(igt_fb_t *in, igt_fb_t *out);
+
+typedef int (*transform_fb)(igt_fb_t *in);
+
+typedef int (*transform_pixel)(igt_pixel_t *pixel);
+
+/* Test version definitions */
+typedef enum kms_colorop_type {
+	KMS_COLOROP_ENUMERATED_LUT1D,
+	KMS_COLOROP_CUSTOM_LUT1D,
+	KMS_COLOROP_CTM,
+	KMS_COLOROP_LUT3D
+} kms_colorop_type_t;
+
+typedef enum kms_colorop_lut1d_tf {
+	KMS_COLOROP_LUT1D_SRGB_EOTF,
+	KMS_COLOROP_LUT1D_SRGB_INV_EOTF,
+	KMS_COLOROP_LUT1D_PQ_EOTF,
+	KMS_COLOROP_LUT1D_PQ_INV_EOTF,
+} kms_colorop_lut1d_tf_t;
+
+typedef struct kms_colorop_enumerated_lut1d_info {
+	kms_colorop_lut1d_tf_t tf;
+} kms_colorop_enumerated_lut1d_info_t;
+
+typedef struct kms_colorop {
+	kms_colorop_type_t type;
+
+	union {
+		kms_colorop_enumerated_lut1d_info_t enumerated_lut1d_info;
+	};
+
+	const char *name;
+
+	igt_pixel_transform transform;
+
+	/* Mapped colorop */
+	igt_colorop_t *colorop;
+
+} kms_colorop_t;
+
+kms_colorop_t kms_colorop_srgb_eotf = {
+	.type = KMS_COLOROP_ENUMERATED_LUT1D,
+	.enumerated_lut1d_info = {
+		.tf = KMS_COLOROP_LUT1D_SRGB_EOTF
+	},
+	.name = "srgb_eotf",
+	.transform = &igt_color_srgb_eotf
+};
+
+kms_colorop_t kms_colorop_srgb_inv_eotf = {
+	.type = KMS_COLOROP_ENUMERATED_LUT1D,
+	.enumerated_lut1d_info = {
+		.tf = KMS_COLOROP_LUT1D_SRGB_INV_EOTF
+	},
+	.name = "srgb_inv_eotf",
+	.transform = &igt_color_srgb_inv_eotf
+};
+
+#endif /* __KMS_COLOROP_H__ */
diff --git a/tests/meson.build b/tests/meson.build
index e649466be1a0..75674b0481b3 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -23,6 +23,7 @@ test_progs = [
 	'kms_bw',
 	'kms_color',
 	'kms_concurrent',
+	'kms_colorop',
 	'kms_content_protection',
 	'kms_cursor_crc',
 	'kms_cursor_edge_walk',
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 13/37] lib/igt_kms: Add support for DATA colorop property
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (11 preceding siblings ...)
  2024-08-19 20:57 ` [PATCH v5 12/37] tests/kms_colorop: Add kms_colorop tests Harry Wentland
@ 2024-08-19 20:57 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 14/37] lib/igt_color: Add support for 3x4 matrices Harry Wentland
                   ` (26 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:57 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 lib/igt_kms.c | 33 +++++++++++++++++++++++++++++++++
 lib/igt_kms.h | 12 ++++++++----
 2 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index f02c268461c7..4e45841ac393 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -695,6 +695,7 @@ const char * const igt_colorop_prop_names[IGT_NUM_COLOROP_PROPS] = {
 	[IGT_COLOROP_TYPE] = "TYPE",
 	[IGT_COLOROP_BYPASS] = "BYPASS",
 	[IGT_COLOROP_CURVE_1D_TYPE] = "CURVE_1D_TYPE",
+	[IGT_COLOROP_DATA] = "DATA",
 	[IGT_COLOROP_NEXT] = "NEXT",
 };
 
@@ -4369,6 +4370,38 @@ igt_plane_replace_prop_blob(igt_plane_t *plane, enum igt_atomic_plane_properties
 	igt_plane_set_prop_changed(plane, prop);
 }
 
+/**
+ * igt_colorop_replace_prop_blob:
+ * @plane: colorop to set property on.
+ * @prop: property for which the blob will be replaced.
+ * @ptr: Pointer to contents for the property.
+ * @length: Length of contents.
+ *
+ * This function will destroy the old property blob for the given property,
+ * and will create a new property blob with the values passed to this function.
+ *
+ * The new property blob will be committed when you call igt_display_commit(),
+ * igt_display_commit2() or igt_display_commit_atomic().
+ */
+void
+igt_colorop_replace_prop_blob(igt_colorop_t *colorop, enum igt_atomic_colorop_properties prop, const void *ptr, size_t length)
+{
+	igt_display_t *display = colorop->plane->pipe->display;
+	uint64_t *blob = &colorop->values[prop];
+	uint32_t blob_id = 0;
+
+	if (*blob != 0)
+		igt_assert(drmModeDestroyPropertyBlob(display->drm_fd,
+						      *blob) == 0);
+
+	if (length > 0)
+		igt_assert(drmModeCreatePropertyBlob(display->drm_fd,
+						     ptr, length, &blob_id) == 0);
+
+	*blob = blob_id;
+	igt_colorop_set_prop_changed(colorop, prop);
+}
+
 /**
  * igt_colorop_try_prop_enum:
  * @colorop: Target colorop.
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 3b4f8dbaee20..72880609ddaf 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -353,6 +353,7 @@ enum igt_atomic_colorop_properties {
 	IGT_COLOROP_TYPE,
 	IGT_COLOROP_BYPASS,
 	IGT_COLOROP_CURVE_1D_TYPE,
+	IGT_COLOROP_DATA,
 	IGT_COLOROP_NEXT,
 	IGT_NUM_COLOROP_PROPS
 };
@@ -850,12 +851,15 @@ extern void igt_plane_set_prop_enum(igt_plane_t *plane,
 				    enum igt_atomic_plane_properties prop,
 				    const char *val);
 
-
+extern void igt_plane_replace_prop_blob(igt_plane_t *plane,
+					enum igt_atomic_plane_properties prop,
+					const void *ptr, size_t length);
 
 extern bool igt_plane_is_valid_colorop(igt_plane_t *plane, igt_colorop_t *colorop);
 
 extern void igt_plane_set_color_pipeline(igt_plane_t *plane, igt_colorop_t *colorop);
 
+
 /**
  * igt_colorop_has_prop:
  * @colorop: colorop to check.
@@ -897,9 +901,9 @@ extern void igt_colorop_set_prop_enum(igt_colorop_t *colorop,
 				      enum igt_atomic_colorop_properties prop,
 				      const char *val);
 
-extern void igt_plane_replace_prop_blob(igt_plane_t *plane,
-					enum igt_atomic_plane_properties prop,
-					const void *ptr, size_t length);
+extern void igt_colorop_replace_prop_blob(igt_colorop_t *colorop,
+					  enum igt_atomic_colorop_properties prop,
+					  const void *ptr, size_t length);
 
 extern bool igt_plane_check_prop_is_mutable(igt_plane_t *plane,
 					    enum igt_atomic_plane_properties igt_prop);
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 14/37] lib/igt_color: Add support for 3x4 matrices
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (12 preceding siblings ...)
  2024-08-19 20:57 ` [PATCH v5 13/37] lib/igt_kms: Add support for DATA colorop property Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 15/37] tests/kms_colorop: Add 3x4 CTM tests Harry Wentland
                   ` (25 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

Also add a few matrices for testing.

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 lib/igt_color.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++++-
 lib/igt_color.h | 71 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 158 insertions(+), 1 deletion(-)

diff --git a/lib/igt_color.c b/lib/igt_color.c
index 6349f2b15a47..5e1374e4b792 100644
--- a/lib/igt_color.c
+++ b/lib/igt_color.c
@@ -9,6 +9,7 @@
 #include <errno.h>
 #include <math.h>
 
+#include "drmtest.h"
 #include "igt_color.h"
 #include "igt_core.h"
 #include "igt_x86.h"
@@ -70,6 +71,62 @@ void igt_color_srgb_eotf(igt_pixel_t *pixel)
 	pixel->b = igt_color_tf_eval(&srgb_eotf, pixel->b);
 }
 
+static void igt_color_apply_3x4_ctm(igt_pixel_t *pixel, const igt_matrix_3x4_t *matrix)
+{
+	igt_pixel_t result;
+
+	memcpy(&result, pixel, sizeof(result));
+
+	result.r = matrix->m[0] * pixel->r +
+		   matrix->m[1] * pixel->g +
+		   matrix->m[2] * pixel->b +
+		   matrix->m[3];
+
+	result.g = matrix->m[4] * pixel->r +
+		   matrix->m[5] * pixel->g +
+		   matrix->m[6] * pixel->b +
+		   matrix->m[7];
+
+	result.b = matrix->m[8] * pixel->r +
+		   matrix->m[9] * pixel->g +
+		   matrix->m[10] * pixel->b +
+		   matrix->m[11];
+
+	memcpy(pixel, &result, sizeof(result));
+
+}
+
+void igt_color_ctm_3x4_50_desat(igt_pixel_t *pixel)
+{
+	/* apply a 50% desat matrix */
+	igt_color_apply_3x4_ctm(pixel, &igt_matrix_3x4_50_desat);
+}
+
+void igt_color_ctm_3x4_overdrive(igt_pixel_t *pixel)
+{
+	/* apply a 50% desat matrix */
+	igt_color_apply_3x4_ctm(pixel, &igt_matrix_3x4_overdrive);
+}
+
+void igt_color_ctm_3x4_oversaturate(igt_pixel_t *pixel)
+{
+	/* apply a 50% desat matrix */
+	igt_color_apply_3x4_ctm(pixel, &igt_matrix_3x4_oversaturate);
+}
+
+void igt_color_ctm_3x4_bt709_enc(igt_pixel_t *pixel)
+{
+	/* apply a 50% desat matrix */
+	igt_color_apply_3x4_ctm(pixel, &igt_matrix_3x4_bt709_enc);
+}
+
+void igt_color_ctm_3x4_bt709_dec(igt_pixel_t *pixel)
+{
+	/* apply a 50% desat matrix */
+	igt_color_apply_3x4_ctm(pixel, &igt_matrix_3x4_bt709_dec);
+}
+
+
 int igt_color_transform_pixels(igt_fb_t *fb, igt_pixel_transform transforms[], int num_transforms)
 {
 	uint32_t *line = NULL;
@@ -136,6 +193,11 @@ int igt_color_transform_pixels(igt_fb_t *fb, igt_pixel_transform transforms[], i
 			for (i = 0; i < num_transforms; i++)
 				transforms[i](&pixel);
 
+			/* clip */
+			pixel.r = fmax(fmin(pixel.r, 1.0), 0.0);
+			pixel.g = fmax(fmin(pixel.g, 1.0), 0.0);
+			pixel.b = fmax(fmin(pixel.b, 1.0), 0.0);
+
 			/* de-normalize back to 8-bit */
 			pixel.r *= (0xff);
 			pixel.g *= (0xff);
@@ -255,4 +317,28 @@ void igt_dump_fb(igt_display_t *display, igt_fb_t *fb,
 	status = cairo_surface_write_to_png(fb_surface_out, filepath_out);
 	igt_assert_eq(status, CAIRO_STATUS_SUCCESS);
 	cairo_surface_destroy(fb_surface_out);
-}
\ No newline at end of file
+}
+
+void igt_colorop_set_ctm_3x4(igt_display_t *display,
+			     igt_colorop_t *colorop,
+			     const igt_matrix_3x4_t *matrix)
+{
+	struct drm_color_ctm_3x4 ctm;
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(ctm.matrix); i++) {
+		if (matrix->m[i] < 0) {
+			ctm.matrix[i] =
+				(int64_t) (-matrix->m[i] *
+				((int64_t) 1L << 32));
+			ctm.matrix[i] |= 1ULL << 63;
+		} else {
+			ctm.matrix[i] =
+				(int64_t) (matrix->m[i] *
+				((int64_t) 1L << 32));
+		}
+	}
+
+	/* set blob property */
+	igt_colorop_replace_prop_blob(colorop, IGT_COLOROP_DATA, &ctm, sizeof(ctm));
+}
diff --git a/lib/igt_color.h b/lib/igt_color.h
index fa9f6cf42991..d218550f6dd0 100644
--- a/lib/igt_color.h
+++ b/lib/igt_color.h
@@ -27,6 +27,62 @@ typedef struct igt_pixel {
 	float b;
 } igt_pixel_t;
 
+typedef struct igt_matrix_3x4 {
+	/*
+	 * out   matrix          in
+	 * |R|   |0  1  2  3 |   | R |
+	 * |G| = |4  5  6  7 | x | G |
+	 * |B|   |8  9  10 12|   | B |
+	 *                       |1.0|
+	 */
+	float m[12];
+} igt_matrix_3x4_t;
+
+const igt_matrix_3x4_t igt_matrix_3x4_50_desat = { {
+	0.5, 0.25, 0.25, 0.0,
+	0.25, 0.5, 0.25, 0.0,
+	0.25, 0.25, 0.5, 0.0
+} };
+
+const igt_matrix_3x4_t igt_matrix_3x4_overdrive = { {
+	1.5, 0.0, 0.0, 0.0,
+	0.0, 1.5, 0.0, 0.0,
+	0.0, 0.0, 1.5, 0.0
+} };
+
+const igt_matrix_3x4_t igt_matrix_3x4_oversaturate = { {
+	1.5,   -0.25, -0.25, 0.0,
+	-0.25,  1.5,  -0.25, 0.0,
+	-0.25, -0.25,  1.5,  0.0
+} };
+
+#if 0
+const igt_matrix_3x4_t igt_matrix_3x4_bt709_enc = { {
+	 0.2126,   0.7152,  0.0722, 0.0,
+	-0.1146, -0.3854,  0.5,    0.0,
+	 0.5,     -0.4542, -0.0458, 0.0
+} };
+
+const igt_matrix_3x4_t igt_matrix_3x4_bt709_dec = { {
+	1.0,  0.0,     1.5748, 0.0,
+	1.0, -0.1873, -0.4681, 0.0,
+	1.0,  1.8556,  0.0,    0.0
+} };
+#else
+const igt_matrix_3x4_t igt_matrix_3x4_bt709_enc = { {
+	 0.2126,   0.7152,   0.0722,  0.0,
+	-0.09991, -0.33609,  0.436,   0.0,
+	 0.615,   -0.55861, -0.05639, 0.0
+} };
+
+const igt_matrix_3x4_t igt_matrix_3x4_bt709_dec = { {
+	1.0,  0.0,      1.28033, 0.0,
+	1.0, -0.21482, -0.38059, 0.0,
+	1.0,  2.12798,  0.0,     0.0
+} };
+#endif
+
+
 bool igt_cmp_fb_component(uint16_t comp1, uint16_t comp2, uint8_t up, uint8_t down);
 bool igt_cmp_fb_pixels(igt_fb_t *fb1, igt_fb_t *fb2, uint8_t up, uint8_t down);
 
@@ -37,7 +93,22 @@ typedef void (*igt_pixel_transform)(igt_pixel_t *pixel);
 
 int igt_color_transform_pixels(igt_fb_t *fb, igt_pixel_transform transforms[], int num_transforms);
 
+/* colorop helpers */
+
+void igt_colorop_set_ctm_3x4(igt_display_t *display,
+			     igt_colorop_t *colorop,
+			     const igt_matrix_3x4_t *matrix);
+
+/* transformations */
+
 void igt_color_srgb_inv_eotf(igt_pixel_t *pixel);
 void igt_color_srgb_eotf(igt_pixel_t *pixel);
 
+void igt_color_ctm_3x4_50_desat(igt_pixel_t *pixel);
+void igt_color_ctm_3x4_overdrive(igt_pixel_t *pixel);
+void igt_color_ctm_3x4_oversaturate(igt_pixel_t *pixel);
+void igt_color_ctm_3x4_bt709_dec(igt_pixel_t *pixel);
+void igt_color_ctm_3x4_bt709_enc(igt_pixel_t *pixel);
+
+
 #endif
\ No newline at end of file
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 15/37] tests/kms_colorop: Add 3x4 CTM tests
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (13 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 14/37] lib/igt_color: Add support for 3x4 matrices Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 16/37] tests/kms_colorop: Add bypass test Harry Wentland
                   ` (24 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

v4:
 - Remove unused defines

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 tests/kms_colorop.c | 43 +++++++++++++++++++++++++++++--------------
 tests/kms_colorop.h | 39 ++++++++++++++++++++++++++++++++++++++-
 2 files changed, 67 insertions(+), 15 deletions(-)

diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
index b9009a498651..e782f75983c4 100644
--- a/tests/kms_colorop.c
+++ b/tests/kms_colorop.c
@@ -40,9 +40,16 @@
  *
  * arg[1]:
  *
- * @srgb_eotf:                   sRGB EOTF
- * @srgb_inv_eotf:               sRGB Inverse EOTF
- * @srgb_eotf-srgb_inv_eotf:     sRGB EOTF -> sRGB Inverse EOTF
+ * @srgb_eotf:                  sRGB EOTF
+ * @srgb_inv_eotf:              sRGB Inverse EOTF
+ * @srgb_eotf-srgb_inv_eotf:    sRGB EOTF -> sRGB Inverse EOTF
+ * @ctm_3x4_50_desat:		3x4 matrix doing a 50% desaturation
+ * @ctm_3x4_overdrive:		3x4 matrix overdring all values by 50%
+ * @ctm_3x4_oversaturate:	3x4 matrix oversaturating values
+ * @ctm_3x4_bt709_enc:		BT709 encoding matrix
+ * @ctm_3x4_bt709_dec:		BT709 decoding matrix
+ * @ctm_3x4_bt709_enc_dec:	BT709 encoding matrix, followed by decoding matrix
+ * @ctm_3x4_bt709_dec_enc:	BT709 decoding matrix, followed by encoding matrix
  *
  */
 
@@ -181,11 +188,10 @@ static bool can_use_colorop(igt_display_t *display, igt_colorop_t *colorop, kms_
 {
 	switch (desired->type) {
 	case KMS_COLOROP_ENUMERATED_LUT1D:
-		if (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_1D_CURVE) {
-			return true;
-		}
+		return (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_1D_CURVE);
+	case KMS_COLOROP_CTM_3X4:
+		return (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_CTM_3X4);
 	case KMS_COLOROP_CUSTOM_LUT1D:
-	case KMS_COLOROP_CTM:
 	case KMS_COLOROP_LUT3D:
 	default:
 		return false;
@@ -205,13 +211,15 @@ static bool map_to_pipeline(igt_display_t *display,
 	int i = 0;
 	int prop_val = 0;
 
-	current_op = colorops[i++];
+	current_op = colorops[i];
+	i++;
 	igt_require(current_op);
 
 	while (next) {
 		if (can_use_colorop(display, next, current_op)) {
 			current_op->colorop = next;
-			current_op = colorops[i++];
+			current_op = colorops[i];
+			i++;
 			if (!current_op)
 				break;
 		}
@@ -273,8 +281,10 @@ static void set_colorop(igt_display_t *display,
 			igt_fail(IGT_EXIT_FAILURE);
 		}
 		break;
+	case KMS_COLOROP_CTM_3X4:
+		igt_colorop_set_ctm_3x4(display, colorop->colorop, colorop->matrix_3x4);
+		break;
 	case KMS_COLOROP_CUSTOM_LUT1D:
-	case KMS_COLOROP_CTM:
 	case KMS_COLOROP_LUT3D:
 	default:
 		igt_fail(IGT_EXIT_FAILURE);
@@ -331,9 +341,7 @@ static bool compare_with_bracket(igt_fb_t *in, igt_fb_t *out)
 
 #define DUMP_FBS 1
 
-#define MAX_COLOROPS 3
-#define NUM_COLOROP_TESTS 3
-#define MAX_NAME_SIZE 256
+#define MAX_COLOROPS 5
 
 static void apply_transforms(kms_colorop_t *colorops[], igt_fb_t *sw_transform_fb)
 {
@@ -481,7 +489,14 @@ igt_main
 	} tests[] = {
 		{ { &kms_colorop_srgb_eotf, NULL }, "srgb_eotf" },
 		{ { &kms_colorop_srgb_inv_eotf, NULL }, "srgb_inv_eotf" },
-		{ { &kms_colorop_srgb_eotf, &kms_colorop_srgb_inv_eotf, NULL }, "srgb_eotf-srgb_inv_eotf" }
+		{ { &kms_colorop_srgb_eotf, &kms_colorop_srgb_inv_eotf, NULL }, "srgb_eotf-srgb_inv_eotf" },
+		{ { &kms_colorop_ctm_3x4_50_desat, NULL }, "ctm_3x4_50_desat" },
+		{ { &kms_colorop_ctm_3x4_overdrive, NULL }, "ctm_3x4_overdrive" },
+		{ { &kms_colorop_ctm_3x4_oversaturate, NULL }, "ctm_3x4_oversaturate" },
+		{ { &kms_colorop_ctm_3x4_bt709_enc, NULL }, "ctm_3x4_bt709_enc" },
+		{ { &kms_colorop_ctm_3x4_bt709_dec, NULL }, "ctm_3x4_bt709_dec" },
+		{ { &kms_colorop_ctm_3x4_bt709_enc, &kms_colorop_ctm_3x4_bt709_dec, NULL }, "ctm_3x4_bt709_enc_dec" },
+		{ { &kms_colorop_ctm_3x4_bt709_dec, &kms_colorop_ctm_3x4_bt709_enc, NULL }, "ctm_3x4_bt709_dec_enc" },
 	};
 
 	igt_display_t display;
diff --git a/tests/kms_colorop.h b/tests/kms_colorop.h
index 8102d25b13be..30278ca4edbd 100644
--- a/tests/kms_colorop.h
+++ b/tests/kms_colorop.h
@@ -35,7 +35,7 @@ typedef int (*transform_pixel)(igt_pixel_t *pixel);
 typedef enum kms_colorop_type {
 	KMS_COLOROP_ENUMERATED_LUT1D,
 	KMS_COLOROP_CUSTOM_LUT1D,
-	KMS_COLOROP_CTM,
+	KMS_COLOROP_CTM_3X4,
 	KMS_COLOROP_LUT3D
 } kms_colorop_type_t;
 
@@ -55,6 +55,7 @@ typedef struct kms_colorop {
 
 	union {
 		kms_colorop_enumerated_lut1d_info_t enumerated_lut1d_info;
+		const igt_matrix_3x4_t *matrix_3x4;
 	};
 
 	const char *name;
@@ -84,4 +85,40 @@ kms_colorop_t kms_colorop_srgb_inv_eotf = {
 	.transform = &igt_color_srgb_inv_eotf
 };
 
+kms_colorop_t kms_colorop_ctm_3x4_50_desat = {
+	.type = KMS_COLOROP_CTM_3X4,
+	.matrix_3x4 = &igt_matrix_3x4_50_desat,
+	.name = "ctm_3x4_50_desat",
+	.transform = &igt_color_ctm_3x4_50_desat
+};
+
+kms_colorop_t kms_colorop_ctm_3x4_overdrive = {
+	.type = KMS_COLOROP_CTM_3X4,
+	.matrix_3x4 = &igt_matrix_3x4_overdrive,
+	.name = "ctm_3x4_overdrive",
+	.transform = &igt_color_ctm_3x4_overdrive
+};
+
+kms_colorop_t kms_colorop_ctm_3x4_oversaturate = {
+	.type = KMS_COLOROP_CTM_3X4,
+	.matrix_3x4 = &igt_matrix_3x4_oversaturate,
+	.name = "ctm_3x4_oversaturate",
+	.transform = &igt_color_ctm_3x4_oversaturate
+};
+
+kms_colorop_t kms_colorop_ctm_3x4_bt709_enc = {
+	.type = KMS_COLOROP_CTM_3X4,
+	.matrix_3x4 = &igt_matrix_3x4_bt709_enc,
+	.name = "ctm_3x4_bt709_enc",
+	.transform = &igt_color_ctm_3x4_bt709_enc
+};
+
+kms_colorop_t kms_colorop_ctm_3x4_bt709_dec = {
+	.type = KMS_COLOROP_CTM_3X4,
+	.matrix_3x4 = &igt_matrix_3x4_bt709_dec,
+	.name = "ctm_3x4_bt709_dec",
+	.transform = &igt_color_ctm_3x4_bt709_dec
+};
+
+
 #endif /* __KMS_COLOROP_H__ */
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 16/37] tests/kms_colorop: Add bypass test
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (14 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 15/37] tests/kms_colorop: Add 3x4 CTM tests Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 17/37] tests/kms_colorop: Parametrize the buffer format Harry Wentland
                   ` (23 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

We want to test that setting the color pipeline to bypass
yields the expected results.

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 tests/kms_colorop.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
index e782f75983c4..c65a3e73f08a 100644
--- a/tests/kms_colorop.c
+++ b/tests/kms_colorop.c
@@ -40,6 +40,7 @@
  *
  * arg[1]:
  *
+ * @bypass:			Bypass Color Pipeline
  * @srgb_eotf:                  sRGB EOTF
  * @srgb_inv_eotf:              sRGB Inverse EOTF
  * @srgb_eotf-srgb_inv_eotf:    sRGB EOTF -> sRGB Inverse EOTF
@@ -440,13 +441,18 @@ static void colorop_plane_test(igt_display_t *display,
 #endif
 	/* discover and set COLOR PIPELINE */
 
-	/* get COLOR_PIPELINE enum */
-	color_pipeline = get_color_pipeline(display, plane, colorops);
+	if (!colorops[0]) {
+		/* bypass test */
+		set_color_pipeline_bypass(plane);
+	} else {
+		/* get COLOR_PIPELINE enum */
+		color_pipeline = get_color_pipeline(display, plane, colorops);
 
-	/* skip test if we can't find applicable pipeline */
-	igt_skip_on(!color_pipeline);
+		/* skip test if we can't find applicable pipeline */
+		igt_skip_on(!color_pipeline);
 
-	set_color_pipeline(display, plane, colorops, color_pipeline);
+		set_color_pipeline(display, plane, colorops, color_pipeline);
+	}
 
 	igt_output_set_writeback_fb(output, &output_fb);
 
@@ -487,6 +493,7 @@ igt_main
 		kms_colorop_t *colorops[MAX_COLOROPS];
 		const char *name;
 	} tests[] = {
+		{ { NULL }, "bypass" },
 		{ { &kms_colorop_srgb_eotf, NULL }, "srgb_eotf" },
 		{ { &kms_colorop_srgb_inv_eotf, NULL }, "srgb_inv_eotf" },
 		{ { &kms_colorop_srgb_eotf, &kms_colorop_srgb_inv_eotf, NULL }, "srgb_eotf-srgb_inv_eotf" },
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 17/37] tests/kms_colorop: Parametrize the buffer format
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (15 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 16/37] tests/kms_colorop: Add bypass test Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 18/37] tests/kms_colorop: Add 10bpc test and skip if format not supported Harry Wentland
                   ` (22 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

We'll eventually want to run this test for 10 bpc buffers,
or even other formats. Parametrize the buffer format for
both input and writeback buffers using fourcc.

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 tests/kms_colorop.c | 49 +++++++++++++++++++++++++++++++--------------
 1 file changed, 34 insertions(+), 15 deletions(-)

diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
index c65a3e73f08a..3a12b84d26c9 100644
--- a/tests/kms_colorop.c
+++ b/tests/kms_colorop.c
@@ -31,7 +31,7 @@
  * Category: Display
  * Description: Test to validate the retrieving and setting of DRM colorops
  *
- * SUBTEST: plane-%s
+ * SUBTEST: plane-%s-%s
  * Description: Tests DRM colorop properties on a plane
  * Driver requirement: amdgpu
  * Functionality: kms_core
@@ -40,6 +40,10 @@
  *
  * arg[1]:
  *
+ * @XR24-XR24:			XRGB8888 framebuffer and writeback buffer
+ *
+ * arg[2]:
+ *
  * @bypass:			Bypass Color Pipeline
  * @srgb_eotf:                  sRGB EOTF
  * @srgb_inv_eotf:              sRGB Inverse EOTF
@@ -56,11 +60,12 @@
 
 /* TODO move to lib for kms_writeback and kms_colorop (and other future) use */
 static bool check_writeback_config(igt_display_t *display, igt_output_t *output,
-				    drmModeModeInfo override_mode)
+				    drmModeModeInfo override_mode, __u32 fourcc_in,
+				    __u32 fourcc_out)
 {
 	igt_fb_t input_fb, output_fb;
 	igt_plane_t *plane;
-	uint32_t writeback_format = DRM_FORMAT_XRGB8888;
+	uint32_t writeback_format = fourcc_out;
 	uint64_t modifier = DRM_FORMAT_MOD_LINEAR;
 	int width, height, ret;
 
@@ -70,7 +75,7 @@ static bool check_writeback_config(igt_display_t *display, igt_output_t *output,
 	height = override_mode.vdisplay;
 
 	ret = igt_create_fb(display->drm_fd, width, height,
-			    DRM_FORMAT_XRGB8888, modifier, &input_fb);
+			    fourcc_in, modifier, &input_fb);
 	igt_assert(ret >= 0);
 
 	ret = igt_create_fb(display->drm_fd, width, height,
@@ -103,7 +108,7 @@ typedef struct {
 static data_t data;
 
 /* TODO move to lib for kms_writeback and kms_colorop (and other future) use */
-static igt_output_t *kms_writeback_get_output(igt_display_t *display)
+static igt_output_t *kms_writeback_get_output(igt_display_t *display, __u32 fourcc_in, __u32 fourcc_out)
 {
 	int i;
 	enum pipe pipe;
@@ -139,7 +144,7 @@ static igt_output_t *kms_writeback_get_output(igt_display_t *display)
 			if (data.builtin_mode)
 				override_mode = output->config.connector->modes[data.mode_index];
 
-			if (check_writeback_config(display, output, override_mode)) {
+			if (check_writeback_config(display, output, override_mode, fourcc_in, fourcc_out)) {
 				igt_debug("Using connector %u:%s on pipe %d\n",
 					  output->config.connector->connector_id,
 					  output->name, pipe);
@@ -366,6 +371,8 @@ static void apply_transforms(kms_colorop_t *colorops[], igt_fb_t *sw_transform_f
 }
 
 static void colorop_plane_test(igt_display_t *display,
+			       __u32 fourcc_in,
+			       __u32 fourcc_out,
 			       kms_colorop_t *colorops[])
 {
 	igt_colorop_t *color_pipeline = NULL;
@@ -378,7 +385,7 @@ static void colorop_plane_test(igt_display_t *display,
 	unsigned int fb_id;
 	igt_crc_t input_crc, output_crc;
 
-	output = kms_writeback_get_output(display);
+	output = kms_writeback_get_output(display, fourcc_in, fourcc_out);
 	igt_require(output);
 
 	if (output->use_override_mode)
@@ -392,7 +399,7 @@ static void colorop_plane_test(igt_display_t *display,
 
 	fb_id = igt_create_color_pattern_fb(display->drm_fd,
 					mode.hdisplay, mode.vdisplay,
-					DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR,
+					fourcc_in, DRM_FORMAT_MOD_LINEAR,
 					0.2, 0.2, 0.2, &input_fb);
 	igt_assert(fb_id >= 0);
 	igt_plane_set_fb(plane, &input_fb);
@@ -402,7 +409,7 @@ static void colorop_plane_test(igt_display_t *display,
 
 	/* create output fb */
 	fb_id = igt_create_fb(display->drm_fd, mode.hdisplay, mode.vdisplay,
-				DRM_FORMAT_XRGB8888,
+				fourcc_in,
 				igt_fb_mod_to_tiling(0),
 				&output_fb);
 	igt_require(fb_id > 0);
@@ -506,8 +513,16 @@ igt_main
 		{ { &kms_colorop_ctm_3x4_bt709_dec, &kms_colorop_ctm_3x4_bt709_enc, NULL }, "ctm_3x4_bt709_dec_enc" },
 	};
 
+	struct {
+		__u32 fourcc_in;
+		__u32 fourcc_out;
+		const char *name;
+	} formats[] = {
+		{ DRM_FORMAT_XRGB8888, DRM_FORMAT_XRGB8888, "XR24-XR24" },
+	};
+
 	igt_display_t display;
-	int i, ret;
+	int i, j, ret;
 
 	igt_fixture {
 		display.drm_fd = drm_open_driver_master(DRIVER_ANY);
@@ -529,12 +544,16 @@ igt_main
 
 	}
 
-	for (i = 0; i < sizeof(tests) / sizeof (tests[0]); i++) {
-		igt_describe("Bla bla bla");
-		igt_subtest_f("plane-%s", tests[i].name)
-			colorop_plane_test(&display, tests[i].colorops);
+	for (j = 0; j < sizeof(formats) / sizeof (formats[0]); j++) {
+		for (i = 0; i < sizeof(tests) / sizeof (tests[0]); i++) {
+			igt_describe("Bla bla bla");
+			igt_subtest_f("plane-%s-%s", formats[j].name, tests[i].name)
+				colorop_plane_test(&display,
+						   formats[j].fourcc_in,
+						   formats[j].fourcc_out,
+						   tests[i].colorops);
+		}
 	}
-
 	igt_describe("Tests getting and setting COLOR_PIPELINE property on plane");
 #if 0
 	igt_subtest("plane-srgb") {
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 18/37] tests/kms_colorop: Add 10bpc test and skip if format not supported
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (16 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 17/37] tests/kms_colorop: Parametrize the buffer format Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 19/37] tests/kms_colorop: Skip if writeback does not support fourcc Harry Wentland
                   ` (21 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 tests/kms_colorop.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
index 3a12b84d26c9..56c232ef33d1 100644
--- a/tests/kms_colorop.c
+++ b/tests/kms_colorop.c
@@ -41,6 +41,7 @@
  * arg[1]:
  *
  * @XR24-XR24:			XRGB8888 framebuffer and writeback buffer
+ * @XR30-XR30:			XRGB8888 framebuffer and writeback buffer
  *
  * arg[2]:
  *
@@ -74,6 +75,10 @@ static bool check_writeback_config(igt_display_t *display, igt_output_t *output,
 	width = override_mode.hdisplay;
 	height = override_mode.vdisplay;
 
+	plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+	igt_skip_on_f(!igt_plane_has_format_mod(plane, fourcc_in, DRM_FORMAT_MOD_LINEAR),
+		      "plane doesn't support fourcc format %x\n", fourcc_in);
+
 	ret = igt_create_fb(display->drm_fd, width, height,
 			    fourcc_in, modifier, &input_fb);
 	igt_assert(ret >= 0);
@@ -82,7 +87,6 @@ static bool check_writeback_config(igt_display_t *display, igt_output_t *output,
 			    writeback_format, modifier, &output_fb);
 	igt_assert(ret >= 0);
 
-	plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
 	igt_plane_set_fb(plane, &input_fb);
 	igt_output_set_writeback_fb(output, &output_fb);
 
@@ -519,6 +523,7 @@ igt_main
 		const char *name;
 	} formats[] = {
 		{ DRM_FORMAT_XRGB8888, DRM_FORMAT_XRGB8888, "XR24-XR24" },
+		{ DRM_FORMAT_XRGB2101010, DRM_FORMAT_XRGB2101010, "XR30-XR30" },
 	};
 
 	igt_display_t display;
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 19/37] tests/kms_colorop: Skip if writeback does not support fourcc
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (17 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 18/37] tests/kms_colorop: Add 10bpc test and skip if format not supported Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 20/37] lib/igt_fb: Allow any non-planar format for igt_copy_fb Harry Wentland
                   ` (20 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 tests/kms_colorop.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
index 56c232ef33d1..4c1751c3be1c 100644
--- a/tests/kms_colorop.c
+++ b/tests/kms_colorop.c
@@ -69,6 +69,10 @@ static bool check_writeback_config(igt_display_t *display, igt_output_t *output,
 	uint32_t writeback_format = fourcc_out;
 	uint64_t modifier = DRM_FORMAT_MOD_LINEAR;
 	int width, height, ret;
+	drmModePropertyBlobRes *wb_formats_blob;
+	int i;
+	__u32 *format;
+	bool found_format = false;
 
 	igt_output_override_mode(output, &override_mode);
 
@@ -83,6 +87,17 @@ static bool check_writeback_config(igt_display_t *display, igt_output_t *output,
 			    fourcc_in, modifier, &input_fb);
 	igt_assert(ret >= 0);
 
+	/* check writeback formats */
+	wb_formats_blob = get_writeback_formats_blob(output);
+	format = wb_formats_blob->data;
+
+	for (i = 0; i < wb_formats_blob->length / 4; i++)
+		if (fourcc_out == format[i])
+			found_format = true;
+
+	igt_skip_on_f(!found_format,
+		      "writeback doesn't support fourcc format %x\n", fourcc_out);
+
 	ret = igt_create_fb(display->drm_fd, width, height,
 			    writeback_format, modifier, &output_fb);
 	igt_assert(ret >= 0);
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 20/37] lib/igt_fb: Allow any non-planar format for igt_copy_fb
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (18 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 19/37] tests/kms_colorop: Skip if writeback does not support fourcc Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 21/37] kms/colorop: Do proper setup and cleanup Harry Wentland
                   ` (19 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

The function is able to handle any non-planar format. It's been
tested for XRGB8888 and XRGB2101010 so far but should work
for a wider range of formats.

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 lib/igt_fb.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index 1e0bad1b82a8..555642c9d9d4 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -2166,10 +2166,6 @@ unsigned int igt_copy_fb(int fd, struct igt_fb *src, struct igt_fb *fb)
 	if (src->num_planes != 1)
 		return -EINVAL;
 
-	/* TODO expand for other formats */
-	if (src->drm_format != DRM_FORMAT_XRGB8888)
-		return -EINVAL;
-
 	fb_id = igt_create_fb(fd, src->width, src->height, src->drm_format,
 			    src->modifier, fb);
 
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 21/37] kms/colorop: Do proper setup and cleanup
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (19 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 20/37] lib/igt_fb: Allow any non-planar format for igt_copy_fb Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 22/37] lib/igt_color: Support color transform for XRGB2101010 Harry Wentland
                   ` (18 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

We need to ensure framebuffers get removed and crcts detached
when tests fail, otherwise consecutive test runs might fail.

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 tests/kms_colorop.c | 139 +++++++++++++++++++++++++-------------------
 1 file changed, 78 insertions(+), 61 deletions(-)

diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
index 4c1751c3be1c..3fa799e7c084 100644
--- a/tests/kms_colorop.c
+++ b/tests/kms_colorop.c
@@ -390,52 +390,20 @@ static void apply_transforms(kms_colorop_t *colorops[], igt_fb_t *sw_transform_f
 }
 
 static void colorop_plane_test(igt_display_t *display,
+			       igt_output_t *output,
+			       igt_plane_t *plane,
+			       igt_fb_t *input_fb,
+			       igt_fb_t *output_fb,
 			       __u32 fourcc_in,
 			       __u32 fourcc_out,
 			       kms_colorop_t *colorops[])
 {
 	igt_colorop_t *color_pipeline = NULL;
-	igt_output_t *output;
-	igt_plane_t *plane;
-	igt_fb_t input_fb;
 	igt_fb_t sw_transform_fb;
-	igt_fb_t output_fb;
-	drmModeModeInfo mode;
-	unsigned int fb_id;
 	igt_crc_t input_crc, output_crc;
+	int res;
 
-	output = kms_writeback_get_output(display, fourcc_in, fourcc_out);
-	igt_require(output);
-
-	if (output->use_override_mode)
-		memcpy(&mode, &output->override_mode, sizeof(mode));
-	else
-		memcpy(&mode, &output->config.default_mode, sizeof(mode));
-
-	/* create input fb */
-	plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
-	igt_assert(plane);
-
-	fb_id = igt_create_color_pattern_fb(display->drm_fd,
-					mode.hdisplay, mode.vdisplay,
-					fourcc_in, DRM_FORMAT_MOD_LINEAR,
-					0.2, 0.2, 0.2, &input_fb);
-	igt_assert(fb_id >= 0);
-	igt_plane_set_fb(plane, &input_fb);
-#if DUMP_FBS
-	igt_dump_fb(display, &input_fb, ".", "input");
-#endif
-
-	/* create output fb */
-	fb_id = igt_create_fb(display->drm_fd, mode.hdisplay, mode.vdisplay,
-				fourcc_in,
-				igt_fb_mod_to_tiling(0),
-				&output_fb);
-	igt_require(fb_id > 0);
-
-	igt_fb_get_fnv1a_crc(&input_fb, &input_crc);
-
-	igt_require(igt_plane_has_prop(plane, IGT_PLANE_COLOR_PIPELINE));
+	igt_fb_get_fnv1a_crc(input_fb, &input_crc);
 
 	/* reset color pipeline*/
 
@@ -443,8 +411,8 @@ static void colorop_plane_test(igt_display_t *display,
 	set_color_pipeline_bypass(plane);
 
 	/* Commit */
-	igt_plane_set_fb(plane, &input_fb);
-	igt_output_set_writeback_fb(output, &output_fb);
+	igt_plane_set_fb(plane, input_fb);
+	igt_output_set_writeback_fb(output, output_fb);
 
 	igt_display_commit_atomic(output->display,
 				DRM_MODE_ATOMIC_ALLOW_MODESET,
@@ -452,14 +420,15 @@ static void colorop_plane_test(igt_display_t *display,
 	get_and_wait_out_fence(output);
 
 	/* Compare input and output buffers. They should be equal here. */
-	igt_fb_get_fnv1a_crc(&output_fb, &output_crc);
+	igt_fb_get_fnv1a_crc(output_fb, &output_crc);
 
 	igt_assert_crc_equal(&input_crc, &output_crc);
 
 	/* create sw transformed buffer */
+	res = igt_copy_fb(display->drm_fd, input_fb, &sw_transform_fb);
+	igt_assert_lte(0, res);
 
-	igt_copy_fb(display->drm_fd, &input_fb, &sw_transform_fb);
-	igt_assert(igt_cmp_fb_pixels(&input_fb, &sw_transform_fb, 0, 0));
+	igt_assert(igt_cmp_fb_pixels(input_fb, &sw_transform_fb, 0, 0));
 
 	apply_transforms(colorops, &sw_transform_fb);
 #if DUMP_FBS
@@ -480,7 +449,7 @@ static void colorop_plane_test(igt_display_t *display,
 		set_color_pipeline(display, plane, colorops, color_pipeline);
 	}
 
-	igt_output_set_writeback_fb(output, &output_fb);
+	igt_output_set_writeback_fb(output, output_fb);
 
 	/* commit COLOR_PIPELINE */
 	igt_display_commit_atomic(display,
@@ -488,28 +457,24 @@ static void colorop_plane_test(igt_display_t *display,
 				NULL);
 	get_and_wait_out_fence(output);
 #if DUMP_FBS
-	igt_dump_fb(display, &output_fb, ".", "output");
+	igt_dump_fb(display, output_fb, ".", "output");
 #endif
 
 	/* compare sw transformed and KMS transformed FBs */
-	igt_assert(compare_with_bracket(&sw_transform_fb, &output_fb));
+	igt_assert(compare_with_bracket(&sw_transform_fb, output_fb));
 
 	/* reset color pipeline*/
 	set_color_pipeline_bypass(plane);
 
 	/* Commit */
-	igt_plane_set_fb(plane, &input_fb);
-	igt_output_set_writeback_fb(output, &output_fb);
+	igt_plane_set_fb(plane, input_fb);
+	igt_output_set_writeback_fb(output, output_fb);
 
 	igt_display_commit_atomic(output->display,
 				DRM_MODE_ATOMIC_ALLOW_MODESET,
 				NULL);
 	get_and_wait_out_fence(output);
 
-	/* cleanup */
-	detach_crtc(display, output);
-	igt_remove_fb(display->drm_fd, &input_fb);
-	igt_remove_fb(display->drm_fd, &output_fb);
 }
 
 igt_main
@@ -561,17 +526,69 @@ igt_main
 		igt_display_require(&display, display.drm_fd);
 
 		igt_require(display.is_atomic);
-
 	}
 
 	for (j = 0; j < sizeof(formats) / sizeof (formats[0]); j++) {
-		for (i = 0; i < sizeof(tests) / sizeof (tests[0]); i++) {
-			igt_describe("Bla bla bla");
-			igt_subtest_f("plane-%s-%s", formats[j].name, tests[i].name)
-				colorop_plane_test(&display,
-						   formats[j].fourcc_in,
-						   formats[j].fourcc_out,
-						   tests[i].colorops);
+		igt_output_t *output;
+		igt_plane_t *plane;
+		igt_fb_t input_fb, output_fb;
+		unsigned int fb_id;
+		drmModeModeInfo mode;
+
+		igt_subtest_group {
+			igt_fixture {
+				output = kms_writeback_get_output(&display,
+								  formats[j].fourcc_in,
+								  formats[j].fourcc_out);
+				igt_require(output);
+
+				if (output->use_override_mode)
+					memcpy(&mode, &output->override_mode, sizeof(mode));
+				else
+					memcpy(&mode, &output->config.default_mode, sizeof(mode));
+
+				/* create input fb */
+				plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+				igt_assert(plane);
+				igt_require(igt_plane_has_prop(plane, IGT_PLANE_COLOR_PIPELINE));
+
+				fb_id = igt_create_color_pattern_fb(display.drm_fd,
+								mode.hdisplay, mode.vdisplay,
+								formats[j].fourcc_in, DRM_FORMAT_MOD_LINEAR,
+								0.2, 0.2, 0.2, &input_fb);
+				igt_assert(fb_id >= 0);
+				igt_plane_set_fb(plane, &input_fb);
+#if DUMP_FBS
+				igt_dump_fb(&display, &input_fb, ".", "input");
+#endif
+
+				/* create output fb */
+				fb_id = igt_create_fb(display.drm_fd, mode.hdisplay, mode.vdisplay,
+							formats[j].fourcc_in,
+							igt_fb_mod_to_tiling(0),
+							&output_fb);
+				igt_require(fb_id > 0);
+			}
+
+			for (i = 0; i < sizeof(tests) / sizeof (tests[0]); i++) {
+				igt_describe("Bla bla bla");
+				igt_subtest_f("plane-%s-%s", formats[j].name, tests[i].name)
+					colorop_plane_test(&display,
+							output,
+							plane,
+							&input_fb,
+							&output_fb,
+							formats[j].fourcc_in,
+							formats[j].fourcc_out,
+							tests[i].colorops);
+			}
+
+			igt_fixture {
+				detach_crtc(&display, output);
+				igt_remove_fb(display.drm_fd, &input_fb);
+				igt_remove_fb(display.drm_fd, &output_fb);
+
+			}
 		}
 	}
 	igt_describe("Tests getting and setting COLOR_PIPELINE property on plane");
@@ -584,8 +601,8 @@ igt_main
 	}
 #endif
 	igt_fixture {
-
 		igt_display_fini(&display);
+		drm_close_driver(display.drm_fd);
 	}
 }
 
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 22/37] lib/igt_color: Support color transform for XRGB2101010
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (20 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 21/37] kms/colorop: Do proper setup and cleanup Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 23/37] tests/kms_colorop: Set wide [13, 13] bracket for comparison on amdgpu Harry Wentland
                   ` (17 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 lib/igt_color.c | 113 ++++++++++++++++++++++++++++++------------------
 1 file changed, 70 insertions(+), 43 deletions(-)

diff --git a/lib/igt_color.c b/lib/igt_color.c
index 5e1374e4b792..43179a17e41b 100644
--- a/lib/igt_color.c
+++ b/lib/igt_color.c
@@ -126,6 +126,74 @@ void igt_color_ctm_3x4_bt709_dec(igt_pixel_t *pixel)
 	igt_color_apply_3x4_ctm(pixel, &igt_matrix_3x4_bt709_dec);
 }
 
+static void
+igt_color_fourcc_to_pixel(uint32_t raw_pixel, uint32_t drm_format, igt_pixel_t *pixel)
+{
+	if (drm_format == DRM_FORMAT_XRGB8888) {
+		raw_pixel &= 0x00ffffff;
+
+		pixel->r = (raw_pixel & 0x00ff0000) >> 16;
+		pixel->g = (raw_pixel & 0x0000ff00) >> 8;
+		pixel->b = (raw_pixel & 0x000000ff);
+
+		/* normalize for 8-bit */
+		pixel->r /= (0xff);
+		pixel->g /= (0xff);
+		pixel->b /= (0xff);
+	} else if (drm_format == DRM_FORMAT_XRGB2101010) {
+		raw_pixel &= 0x3fffffff;
+
+		pixel->r = (raw_pixel & 0x3ff00000) >> 20;
+		pixel->g = (raw_pixel & 0x000ffc00) >> 10;
+		pixel->b = (raw_pixel & 0x000003ff);
+
+		/* normalize for 10-bit */
+		pixel->r /= (0x3ff);
+		pixel->g /= (0x3ff);
+		pixel->b /= (0x3ff);
+	} else {
+		igt_skip("pixel format support not implemented");
+	}
+}
+
+static uint32_t
+igt_color_pixel_to_fourc(uint32_t drm_format, igt_pixel_t *pixel)
+{
+	uint32_t raw_pixel;
+
+	/* clip */
+	pixel->r = fmax(fmin(pixel->r, 1.0), 0.0);
+	pixel->g = fmax(fmin(pixel->g, 1.0), 0.0);
+	pixel->b = fmax(fmin(pixel->b, 1.0), 0.0);
+
+	if (drm_format == DRM_FORMAT_XRGB8888) {
+		/* de-normalize back to 8-bit */
+		pixel->r *= (0xff);
+		pixel->g *= (0xff);
+		pixel->b *= (0xff);
+
+		/* re-pack pixel into FB*/
+		raw_pixel = 0x0;
+		raw_pixel |= ((uint8_t) (lround(pixel->r) & 0xff)) << 16;
+		raw_pixel |= ((uint8_t) (lround(pixel->g) & 0xff)) << 8;
+		raw_pixel |= ((uint8_t) (lround(pixel->b) & 0xff));
+	} else if (drm_format == DRM_FORMAT_XRGB2101010) {
+		/* de-normalize back to 10-bit */
+		pixel->r *= (0x3ff);
+		pixel->g *= (0x3ff);
+		pixel->b *= (0x3ff);
+
+		/* re-pack pixel into FB*/
+		raw_pixel = 0x0;
+		raw_pixel |= (lround(pixel->r) & 0x3ff) << 20;
+		raw_pixel |= (lround(pixel->g) & 0x3ff) << 10;
+		raw_pixel |= (lround(pixel->b) & 0x3ff);
+	} else {
+		igt_skip("pixel format support not implemented");
+	}
+
+	return raw_pixel;
+}
 
 int igt_color_transform_pixels(igt_fb_t *fb, igt_pixel_transform transforms[], int num_transforms)
 {
@@ -138,10 +206,6 @@ int igt_color_transform_pixels(igt_fb_t *fb, igt_pixel_transform transforms[], i
 	if (fb->num_planes != 1)
 		return -EINVAL;
 
-	/* TODO expand for other formats */
-	if (fb->drm_format != DRM_FORMAT_XRGB8888)
-		return -EINVAL;
-
 	ptr = igt_fb_map_buffer(fb->fd, fb);
 	igt_assert(ptr);
 	map = ptr;
@@ -167,51 +231,14 @@ int igt_color_transform_pixels(igt_fb_t *fb, igt_pixel_transform transforms[], i
 			igt_pixel_t pixel;
 			int i;
 
-			raw_pixel &= 0x00ffffff;
-
-			/*
-			 * unpack pixel into igt_pixel_t
-			 *
-			 * only for XRGB8888 for now
-			 *
-			 * TODO add "generic" mechanism for unpacking
-			 * other FB formats
-			 */
-			pixel.r = (raw_pixel & 0x00ff0000) >> 16;
-			pixel.g = (raw_pixel & 0x0000ff00) >> 8;
-			pixel.b = (raw_pixel & 0x000000ff);
-
-			/* normalize for 8-bit */
-			pixel.r /= (0xff);
-			pixel.g /= (0xff);
-			pixel.b /= (0xff);
-
-			/* TODO use read_rgb from igt_fb? */
+			igt_color_fourcc_to_pixel(raw_pixel, fb->drm_format, &pixel);
 
 			/* run transform on pixel */
-
 			for (i = 0; i < num_transforms; i++)
 				transforms[i](&pixel);
 
-			/* clip */
-			pixel.r = fmax(fmin(pixel.r, 1.0), 0.0);
-			pixel.g = fmax(fmin(pixel.g, 1.0), 0.0);
-			pixel.b = fmax(fmin(pixel.b, 1.0), 0.0);
-
-			/* de-normalize back to 8-bit */
-			pixel.r *= (0xff);
-			pixel.g *= (0xff);
-			pixel.b *= (0xff);
-
-			/* re-pack pixel into FB*/
-			raw_pixel = 0x0;
-			raw_pixel |= ((uint8_t) (lround(pixel.r) & 0xff)) << 16;
-			raw_pixel |= ((uint8_t) (lround(pixel.g) & 0xff)) << 8;
-			raw_pixel |= ((uint8_t) (lround(pixel.b) & 0xff));
-			/* TODO use write_rgb from igt_fb? */
-
 			/* write back to line */
-			line[x] = cpu_to_le32(raw_pixel);
+			line[x] = cpu_to_le32(igt_color_pixel_to_fourc(fb->drm_format, &pixel));
 		}
 
 		/* copy line back to fb buffer */
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 23/37] tests/kms_colorop: Set wide [13, 13] bracket for comparison on amdgpu
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (21 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 22/37] lib/igt_color: Support color transform for XRGB2101010 Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 24/37] lib/igt_color: Add PQ variants for 0-1 and 0-125 range Harry Wentland
                   ` (16 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland, Alex Hung

Setting a fairly wide delta for now, to pass tests. Note that since
tests run with 10 bpc surfaces on amdgpu a wider bracket isn't
unreasonable. Still, this should be investigated to reduce the
delta.

Signed-off-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Harry Wentland <harry.wentland@amd.com>
Co-developed-by: Harry Wentland <harry.wentland@amd.com>
---
 tests/kms_colorop.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
index 3fa799e7c084..659fe63a5e4d 100644
--- a/tests/kms_colorop.c
+++ b/tests/kms_colorop.c
@@ -354,6 +354,8 @@ static bool compare_with_bracket(igt_fb_t *in, igt_fb_t *out)
 {
 	if (is_vkms_device(in->fd))
 		return igt_cmp_fb_pixels(in, out, 1, 1);
+	if (is_amdgpu_device(in->fd))
+		return igt_cmp_fb_pixels(in, out, 13, 13);
 	else
 		/*
 		 * By default we'll look for a [0, 0] bracket. We can then
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 24/37] lib/igt_color: Add PQ variants for 0-1 and 0-125 range
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (22 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 23/37] tests/kms_colorop: Set wide [13, 13] bracket for comparison on amdgpu Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 25/37] tests/kms_colorop: Add tests for PQ variants Harry Wentland
                   ` (15 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

Add PQ SW transforms. The most obvious to do the PQ EOTF
is to transform [0.0, 1.0] non-linear values to [0.0, 1.0]
linear values, and same in the inverse. So we add transforms
that do this.

Some HW (like AMD's) has scaling baked into the PQ EOTF
and will scale [0.0, 1.0] non-linear values to [0.0, 125.0]
linear values when applying the PQ EOTF. The inverse will
take [0.0, 125.0] linear values and output [0.0, 1.0]
linear values. We're adding a transform that can handle
this variant as well.

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 lib/igt_color.c | 81 +++++++++++++++++++++++++++++++++++++++++++------
 lib/igt_color.h | 13 ++++++++
 2 files changed, 84 insertions(+), 10 deletions(-)

diff --git a/lib/igt_color.c b/lib/igt_color.c
index 43179a17e41b..0926385f4d82 100644
--- a/lib/igt_color.c
+++ b/lib/igt_color.c
@@ -20,6 +20,13 @@ static float clamp(float val, float min, float max)
 	return ((val < min) ? min : ((val > max) ? max : val));
 }
 
+static void igt_color_multiply(igt_pixel_t *pixel, float multiplier)
+{
+	pixel->r *= multiplier;
+	pixel->g *= multiplier;
+	pixel->b *= multiplier;
+}
+
 static float igt_color_tf_eval_unclamped(const struct igt_color_tf *fn, float x)
 {
 	if (x < fn->d)
@@ -51,24 +58,78 @@ static void tf_inverse(const struct igt_color_tf *fn, struct igt_color_tf *inv)
 	}
 }
 
-void igt_color_srgb_inv_eotf(igt_pixel_t *pixel)
+static float pq_eval(const struct igt_color_tf_pq *pq, float x)
+{
+	return powf(fmaxf(pq->A + pq->B * powf(x, pq->C), 0)
+		       / (pq->D + pq->E * powf(x, pq->C)),
+			    pq->F);
+}
+
+static void pq_inv(struct igt_color_tf_pq *inv)
+{
+	inv->A = -pq_eotf.A;
+	inv->B = pq_eotf.D;
+	inv->C = 1.0f / pq_eotf.F;
+	inv->D = pq_eotf.B;
+	inv->E = -pq_eotf.E;
+	inv->F = 1.0f / pq_eotf.C;
+}
+
+static void igt_color_tf(igt_pixel_t *pixel, const struct igt_color_tf *tf)
+{
+	pixel->r = igt_color_tf_eval(tf, pixel->r);
+	pixel->g = igt_color_tf_eval(tf, pixel->g);
+	pixel->b = igt_color_tf_eval(tf, pixel->b);
+}
+
+static void igt_color_inv_tf(igt_pixel_t *pixel, const struct igt_color_tf *tf)
 {
 	struct igt_color_tf inv;
 
-	tf_inverse(&srgb_eotf, &inv);
-
-	pixel->r = igt_color_tf_eval(&inv, pixel->r);
-	pixel->g = igt_color_tf_eval(&inv, pixel->g);
-	pixel->b = igt_color_tf_eval(&inv, pixel->b);
+	tf_inverse(tf, &inv);
+	igt_color_tf(pixel, &inv);
 }
 
-
+static void tf_pq(igt_pixel_t *pixel, const struct igt_color_tf_pq *pq)
+{
+	pixel->r = pq_eval(pq, pixel->r);
+	pixel->g = pq_eval(pq, pixel->g);
+	pixel->b = pq_eval(pq, pixel->b);
+}
 
 void igt_color_srgb_eotf(igt_pixel_t *pixel)
 {
-	pixel->r = igt_color_tf_eval(&srgb_eotf, pixel->r);
-	pixel->g = igt_color_tf_eval(&srgb_eotf, pixel->g);
-	pixel->b = igt_color_tf_eval(&srgb_eotf, pixel->b);
+	igt_color_tf(pixel, &srgb_eotf);
+}
+
+void igt_color_srgb_inv_eotf(igt_pixel_t *pixel)
+{
+	igt_color_inv_tf(pixel, &srgb_eotf);
+}
+
+void igt_color_pq_eotf(igt_pixel_t *pixel)
+{
+	tf_pq(pixel, &pq_eotf);
+}
+
+void igt_color_pq_inv_eotf(igt_pixel_t *pixel)
+{
+	struct igt_color_tf_pq inv;
+
+	pq_inv(&inv);
+	tf_pq(pixel, &inv);
+}
+
+void igt_color_pq_125_eotf(igt_pixel_t *pixel)
+{
+	igt_color_pq_eotf(pixel);
+	igt_color_multiply(pixel, 125.0f);
+}
+
+void igt_color_pq_125_inv_eotf(igt_pixel_t *pixel)
+{
+	igt_color_multiply(pixel, 1/125.0f);
+	igt_color_pq_inv_eotf(pixel);
 }
 
 static void igt_color_apply_3x4_ctm(igt_pixel_t *pixel, const igt_matrix_3x4_t *matrix)
diff --git a/lib/igt_color.h b/lib/igt_color.h
index d218550f6dd0..a97383fabaf3 100644
--- a/lib/igt_color.h
+++ b/lib/igt_color.h
@@ -19,8 +19,15 @@ struct igt_color_tf {
     float g, a,b,c,d,e,f;
 };
 
+struct igt_color_tf_pq {
+	float A, B, C, D, E, F, G;
+};
+
+
 const struct igt_color_tf srgb_eotf = {2.4f, (float)(1/1.055), (float)(0.055/1.055), (float)(1/12.92), 0.04045f, 0, 0};
 
+const struct igt_color_tf_pq pq_eotf = {-107/128.0f, 1.0f, 32/2523.0f, 2413/128.0f, -2392/128.0f, 8192/1305.0f };
+
 typedef struct igt_pixel {
 	float r;
 	float g;
@@ -104,6 +111,12 @@ void igt_colorop_set_ctm_3x4(igt_display_t *display,
 void igt_color_srgb_inv_eotf(igt_pixel_t *pixel);
 void igt_color_srgb_eotf(igt_pixel_t *pixel);
 
+void igt_color_pq_inv_eotf(igt_pixel_t *pixel);
+void igt_color_pq_eotf(igt_pixel_t *pixel);
+
+void igt_color_pq_125_inv_eotf(igt_pixel_t *pixel);
+void igt_color_pq_125_eotf(igt_pixel_t *pixel);
+
 void igt_color_ctm_3x4_50_desat(igt_pixel_t *pixel);
 void igt_color_ctm_3x4_overdrive(igt_pixel_t *pixel);
 void igt_color_ctm_3x4_oversaturate(igt_pixel_t *pixel);
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 25/37] tests/kms_colorop: Add tests for PQ variants
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (23 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 24/37] lib/igt_color: Add PQ variants for 0-1 and 0-125 range Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 26/37] lib/igt_kms: increase MAX_NUM_COLOROPS to 128 Harry Wentland
                   ` (14 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

Add tests exercising the PQ EOTF and its inverse, both
for the [0.0, 1.0] variant as well as the [0.0, 125.0]
scaled variant.

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 tests/kms_colorop.c | 32 ++++++++++++++-----------
 tests/kms_colorop.h | 57 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 76 insertions(+), 13 deletions(-)

diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
index 659fe63a5e4d..538c527f6d5c 100644
--- a/tests/kms_colorop.c
+++ b/tests/kms_colorop.c
@@ -49,6 +49,13 @@
  * @srgb_eotf:                  sRGB EOTF
  * @srgb_inv_eotf:              sRGB Inverse EOTF
  * @srgb_eotf-srgb_inv_eotf:    sRGB EOTF -> sRGB Inverse EOTF
+ * @pq_eotf:                    PQ EOTF
+ * @pq_inv_eotf:                PQ Inverse EOTF
+ * @pq_eotf-pq_inv_eotf:        PQ EOTF -> PQ Inverse EOTF
+ * @pq_125_eotf:                PQ EOTF for [0.0, 125.0] optical range
+ * @pq_125_inv_eotf:            PQ Inverse EOTF for [0.0, 125.0] optical range
+ * @pq_125_eotf-pq_125_inv_eotf: PQ EOTF -> PQ Inverse EOTF with [0.0, 125.0] optical range
+ * @pq_125_eotf-pq_125_inv_eotf-pq_125_eotf: PQ EOTF -> PQ Inverse EOTF -> PQ EOTF with [0.0, 125.0] optical range
  * @ctm_3x4_50_desat:		3x4 matrix doing a 50% desaturation
  * @ctm_3x4_overdrive:		3x4 matrix overdring all values by 50%
  * @ctm_3x4_oversaturate:	3x4 matrix oversaturating values
@@ -213,7 +220,10 @@ static bool can_use_colorop(igt_display_t *display, igt_colorop_t *colorop, kms_
 {
 	switch (desired->type) {
 	case KMS_COLOROP_ENUMERATED_LUT1D:
-		return (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_1D_CURVE);
+		if (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_1D_CURVE &&
+		    igt_colorop_try_prop_enum(colorop, IGT_COLOROP_CURVE_1D_TYPE, kms_colorop_lut1d_tf_names[desired->enumerated_lut1d_info.tf]))
+			return true;
+		return false;
 	case KMS_COLOROP_CTM_3X4:
 		return (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_CTM_3X4);
 	case KMS_COLOROP_CUSTOM_LUT1D:
@@ -293,18 +303,7 @@ static void set_colorop(igt_display_t *display,
 	/* TODO set to desired value from kms_colorop_t */
 	switch (colorop->type) {
 	case KMS_COLOROP_ENUMERATED_LUT1D:
-		switch (colorop->enumerated_lut1d_info.tf) {
-		case KMS_COLOROP_LUT1D_SRGB_EOTF:
-			igt_colorop_set_prop_enum(colorop->colorop, IGT_COLOROP_CURVE_1D_TYPE, "sRGB EOTF");
-			break;
-		case KMS_COLOROP_LUT1D_SRGB_INV_EOTF:
-			igt_colorop_set_prop_enum(colorop->colorop, IGT_COLOROP_CURVE_1D_TYPE, "sRGB Inverse EOTF");
-			break;
-		case KMS_COLOROP_LUT1D_PQ_EOTF:
-		case KMS_COLOROP_LUT1D_PQ_INV_EOTF:
-		default:
-			igt_fail(IGT_EXIT_FAILURE);
-		}
+		igt_colorop_set_prop_enum(colorop->colorop, IGT_COLOROP_CURVE_1D_TYPE, kms_colorop_lut1d_tf_names[colorop->enumerated_lut1d_info.tf]);
 		break;
 	case KMS_COLOROP_CTM_3X4:
 		igt_colorop_set_ctm_3x4(display, colorop->colorop, colorop->matrix_3x4);
@@ -490,6 +489,13 @@ igt_main
 		{ { &kms_colorop_srgb_eotf, NULL }, "srgb_eotf" },
 		{ { &kms_colorop_srgb_inv_eotf, NULL }, "srgb_inv_eotf" },
 		{ { &kms_colorop_srgb_eotf, &kms_colorop_srgb_inv_eotf, NULL }, "srgb_eotf-srgb_inv_eotf" },
+		{ { &kms_colorop_pq_eotf, NULL }, "pq_eotf" },
+		{ { &kms_colorop_pq_inv_eotf, NULL }, "pq_inv_eotf" },
+		{ { &kms_colorop_pq_eotf, &kms_colorop_pq_inv_eotf, NULL }, "pq_eotf-pq_inv_eotf" },
+		{ { &kms_colorop_pq_125_eotf, NULL }, "pq_125_eotf" },
+		{ { &kms_colorop_pq_125_inv_eotf, NULL }, "pq_125_inv_eotf" },
+		{ { &kms_colorop_pq_125_eotf, &kms_colorop_pq_125_inv_eotf, NULL }, "pq_125_eotf-pq_125_inv_eotf" },
+		{ { &kms_colorop_pq_125_eotf, &kms_colorop_pq_125_inv_eotf, &kms_colorop_pq_125_eotf_2, NULL }, "pq_125_eotf-pq_125_inv_eotf-pq_125_eotf" },
 		{ { &kms_colorop_ctm_3x4_50_desat, NULL }, "ctm_3x4_50_desat" },
 		{ { &kms_colorop_ctm_3x4_overdrive, NULL }, "ctm_3x4_overdrive" },
 		{ { &kms_colorop_ctm_3x4_oversaturate, NULL }, "ctm_3x4_oversaturate" },
diff --git a/tests/kms_colorop.h b/tests/kms_colorop.h
index 30278ca4edbd..3188e6db4300 100644
--- a/tests/kms_colorop.h
+++ b/tests/kms_colorop.h
@@ -44,8 +44,20 @@ typedef enum kms_colorop_lut1d_tf {
 	KMS_COLOROP_LUT1D_SRGB_INV_EOTF,
 	KMS_COLOROP_LUT1D_PQ_EOTF,
 	KMS_COLOROP_LUT1D_PQ_INV_EOTF,
+	KMS_COLOROP_LUT1D_PQ_125_EOTF,
+	KMS_COLOROP_LUT1D_PQ_125_INV_EOTF,
+	KMS_COLOROP_LUT1D_NUM_ENUMS
 } kms_colorop_lut1d_tf_t;
 
+const char * const kms_colorop_lut1d_tf_names[KMS_COLOROP_LUT1D_NUM_ENUMS] = {
+	[KMS_COLOROP_LUT1D_SRGB_EOTF] = "sRGB EOTF",
+	[KMS_COLOROP_LUT1D_SRGB_INV_EOTF] = "sRGB Inverse EOTF",
+	[KMS_COLOROP_LUT1D_PQ_EOTF] = "PQ EOTF",
+	[KMS_COLOROP_LUT1D_PQ_INV_EOTF] = "PQ Inverse EOTF",
+	[KMS_COLOROP_LUT1D_PQ_125_EOTF] = "PQ 125 EOTF",
+	[KMS_COLOROP_LUT1D_PQ_125_INV_EOTF] = "PQ 125 Inverse EOTF",
+};
+
 typedef struct kms_colorop_enumerated_lut1d_info {
 	kms_colorop_lut1d_tf_t tf;
 } kms_colorop_enumerated_lut1d_info_t;
@@ -85,6 +97,51 @@ kms_colorop_t kms_colorop_srgb_inv_eotf = {
 	.transform = &igt_color_srgb_inv_eotf
 };
 
+kms_colorop_t kms_colorop_pq_eotf = {
+	.type = KMS_COLOROP_ENUMERATED_LUT1D,
+	.enumerated_lut1d_info = {
+		.tf = KMS_COLOROP_LUT1D_PQ_EOTF
+	},
+	.name = "pq_eotf",
+	.transform = &igt_color_pq_eotf
+};
+
+kms_colorop_t kms_colorop_pq_inv_eotf = {
+	.type = KMS_COLOROP_ENUMERATED_LUT1D,
+	.enumerated_lut1d_info = {
+		.tf = KMS_COLOROP_LUT1D_PQ_INV_EOTF
+	},
+	.name = "pq_inv_eotf",
+	.transform = &igt_color_pq_inv_eotf
+};
+
+kms_colorop_t kms_colorop_pq_125_eotf = {
+	.type = KMS_COLOROP_ENUMERATED_LUT1D,
+	.enumerated_lut1d_info = {
+		.tf = KMS_COLOROP_LUT1D_PQ_125_EOTF
+	},
+	.name = "pq_125_eotf",
+	.transform = &igt_color_pq_125_eotf
+};
+
+kms_colorop_t kms_colorop_pq_125_eotf_2 = {
+	.type = KMS_COLOROP_ENUMERATED_LUT1D,
+	.enumerated_lut1d_info = {
+		.tf = KMS_COLOROP_LUT1D_PQ_125_EOTF
+	},
+	.name = "pq_125_eotf",
+	.transform = &igt_color_pq_125_eotf
+};
+
+kms_colorop_t kms_colorop_pq_125_inv_eotf = {
+	.type = KMS_COLOROP_ENUMERATED_LUT1D,
+	.enumerated_lut1d_info = {
+		.tf = KMS_COLOROP_LUT1D_PQ_125_INV_EOTF
+	},
+	.name = "pq_125_inv_eotf",
+	.transform = &igt_color_pq_125_inv_eotf
+};
+
 kms_colorop_t kms_colorop_ctm_3x4_50_desat = {
 	.type = KMS_COLOROP_CTM_3X4,
 	.matrix_3x4 = &igt_matrix_3x4_50_desat,
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 26/37] lib/igt_kms: increase MAX_NUM_COLOROPS to 128
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (24 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 25/37] tests/kms_colorop: Add tests for PQ variants Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 27/37] tests/kms_colorop: Add a sRGB test for EOTF -> Inverse EOTF -> EOTF Harry Wentland
                   ` (13 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Alex Hung

From: Alex Hung <alex.hung@amd.com>

Signed-off-by: Alex Hung <alex.hung@amd.com>
---
 lib/igt_kms.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 4e45841ac393..fc3a76250925 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -90,7 +90,7 @@
 #define MAX_CONNECTORS 32
 #define MAX_EDID 2
 #define DISPLAY_TILE_BLOCK 0x12
-#define MAX_NUM_COLOROPS 32
+#define MAX_NUM_COLOROPS 128
 
 typedef bool (*igt_connector_attr_set)(int dir, const char *attr, const char *value);
 
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 27/37] tests/kms_colorop: Add a sRGB test for EOTF -> Inverse EOTF -> EOTF
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (25 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 26/37] lib/igt_kms: increase MAX_NUM_COLOROPS to 128 Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 28/37] lib/igt_color: add BT2020/BT709 transfer functions Harry Wentland
                   ` (12 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Alex Hung

From: Alex Hung <alex.hung@amd.com>

Signed-off-by: Alex Hung <alex.hung@amd.com>
---
 tests/kms_colorop.c | 40 +++++++++++++++++++++-------------------
 tests/kms_colorop.h |  9 +++++++++
 2 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
index 538c527f6d5c..e86115372a3a 100644
--- a/tests/kms_colorop.c
+++ b/tests/kms_colorop.c
@@ -40,29 +40,30 @@
  *
  * arg[1]:
  *
- * @XR24-XR24:			XRGB8888 framebuffer and writeback buffer
- * @XR30-XR30:			XRGB8888 framebuffer and writeback buffer
+ * @XR24-XR24:				XRGB8888 framebuffer and writeback buffer
+ * @XR30-XR30:				XRGB8888 framebuffer and writeback buffer
  *
  * arg[2]:
  *
- * @bypass:			Bypass Color Pipeline
- * @srgb_eotf:                  sRGB EOTF
- * @srgb_inv_eotf:              sRGB Inverse EOTF
- * @srgb_eotf-srgb_inv_eotf:    sRGB EOTF -> sRGB Inverse EOTF
- * @pq_eotf:                    PQ EOTF
- * @pq_inv_eotf:                PQ Inverse EOTF
- * @pq_eotf-pq_inv_eotf:        PQ EOTF -> PQ Inverse EOTF
- * @pq_125_eotf:                PQ EOTF for [0.0, 125.0] optical range
- * @pq_125_inv_eotf:            PQ Inverse EOTF for [0.0, 125.0] optical range
- * @pq_125_eotf-pq_125_inv_eotf: PQ EOTF -> PQ Inverse EOTF with [0.0, 125.0] optical range
+ * @bypass:				Bypass Color Pipeline
+ * @srgb_eotf:                  	sRGB EOTF
+ * @srgb_inv_eotf:              	sRGB Inverse EOTF
+ * @srgb_eotf-srgb_inv_eotf:    	sRGB EOTF -> sRGB Inverse EOTF
+ * @srgb_eotf-srgb_inv_eotf-srgb_eotf:  sRGB EOTF -> sRGB Inverse EOTF -> sRGB EOTF
+ * @pq_eotf:                    	PQ EOTF
+ * @pq_inv_eotf:                	PQ Inverse EOTF
+ * @pq_eotf-pq_inv_eotf:        	PQ EOTF -> PQ Inverse EOTF
+ * @pq_125_eotf:                	PQ EOTF for [0.0, 125.0] optical range
+ * @pq_125_inv_eotf:            	PQ Inverse EOTF for [0.0, 125.0] optical range
+ * @pq_125_eotf-pq_125_inv_eotf:	PQ EOTF -> PQ Inverse EOTF with [0.0, 125.0] optical range
  * @pq_125_eotf-pq_125_inv_eotf-pq_125_eotf: PQ EOTF -> PQ Inverse EOTF -> PQ EOTF with [0.0, 125.0] optical range
- * @ctm_3x4_50_desat:		3x4 matrix doing a 50% desaturation
- * @ctm_3x4_overdrive:		3x4 matrix overdring all values by 50%
- * @ctm_3x4_oversaturate:	3x4 matrix oversaturating values
- * @ctm_3x4_bt709_enc:		BT709 encoding matrix
- * @ctm_3x4_bt709_dec:		BT709 decoding matrix
- * @ctm_3x4_bt709_enc_dec:	BT709 encoding matrix, followed by decoding matrix
- * @ctm_3x4_bt709_dec_enc:	BT709 decoding matrix, followed by encoding matrix
+ * @ctm_3x4_50_desat:			3x4 matrix doing a 50% desaturation
+ * @ctm_3x4_overdrive:			3x4 matrix overdring all values by 50%
+ * @ctm_3x4_oversaturate:		3x4 matrix oversaturating values
+ * @ctm_3x4_bt709_enc:			BT709 encoding matrix
+ * @ctm_3x4_bt709_dec:			BT709 decoding matrix
+ * @ctm_3x4_bt709_enc_dec:		BT709 encoding matrix, followed by decoding matrix
+ * @ctm_3x4_bt709_dec_enc:		BT709 decoding matrix, followed by encoding matrix
  *
  */
 
@@ -489,6 +490,7 @@ igt_main
 		{ { &kms_colorop_srgb_eotf, NULL }, "srgb_eotf" },
 		{ { &kms_colorop_srgb_inv_eotf, NULL }, "srgb_inv_eotf" },
 		{ { &kms_colorop_srgb_eotf, &kms_colorop_srgb_inv_eotf, NULL }, "srgb_eotf-srgb_inv_eotf" },
+		{ { &kms_colorop_srgb_eotf, &kms_colorop_srgb_inv_eotf, &kms_colorop_srgb_eotf_2, NULL }, "srgb_eotf-srgb_inv_eotf-srgb_eotf" },
 		{ { &kms_colorop_pq_eotf, NULL }, "pq_eotf" },
 		{ { &kms_colorop_pq_inv_eotf, NULL }, "pq_inv_eotf" },
 		{ { &kms_colorop_pq_eotf, &kms_colorop_pq_inv_eotf, NULL }, "pq_eotf-pq_inv_eotf" },
diff --git a/tests/kms_colorop.h b/tests/kms_colorop.h
index 3188e6db4300..7d5cb4bd1669 100644
--- a/tests/kms_colorop.h
+++ b/tests/kms_colorop.h
@@ -88,6 +88,15 @@ kms_colorop_t kms_colorop_srgb_eotf = {
 	.transform = &igt_color_srgb_eotf
 };
 
+kms_colorop_t kms_colorop_srgb_eotf_2 = {
+	.type = KMS_COLOROP_ENUMERATED_LUT1D,
+	.enumerated_lut1d_info = {
+		.tf = KMS_COLOROP_LUT1D_SRGB_EOTF
+	},
+	.name = "srgb_eotf",
+	.transform = &igt_color_srgb_eotf
+};
+
 kms_colorop_t kms_colorop_srgb_inv_eotf = {
 	.type = KMS_COLOROP_ENUMERATED_LUT1D,
 	.enumerated_lut1d_info = {
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 28/37] lib/igt_color: add BT2020/BT709 transfer functions
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (26 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 27/37] tests/kms_colorop: Add a sRGB test for EOTF -> Inverse EOTF -> EOTF Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 29/37] tests/kms_colorop: Add tests for BT2020/BT709 TFs Harry Wentland
                   ` (11 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

BT.709 and BT.2020 transfer functions are identical, the
only difference beind that BT.2020 is defined with a higher
precision for 10 and 12 bpc encodings.

These transfer functions are defined as OETFs, not EOTFs,
so we create functions for them as OETF and its inverse.

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 lib/igt_color.c | 10 ++++++++++
 lib/igt_color.h |  4 ++++
 2 files changed, 14 insertions(+)

diff --git a/lib/igt_color.c b/lib/igt_color.c
index 0926385f4d82..ec8b27d1ef6f 100644
--- a/lib/igt_color.c
+++ b/lib/igt_color.c
@@ -107,6 +107,16 @@ void igt_color_srgb_inv_eotf(igt_pixel_t *pixel)
 	igt_color_inv_tf(pixel, &srgb_eotf);
 }
 
+void igt_color_bt2020_inv_oetf(igt_pixel_t *pixel)
+{
+	igt_color_tf(pixel, &bt2020_inv_oetf);
+}
+
+void igt_color_bt2020_oetf(igt_pixel_t *pixel)
+{
+	igt_color_inv_tf(pixel, &bt2020_inv_oetf);
+}
+
 void igt_color_pq_eotf(igt_pixel_t *pixel)
 {
 	tf_pq(pixel, &pq_eotf);
diff --git a/lib/igt_color.h b/lib/igt_color.h
index a97383fabaf3..813bd19ba439 100644
--- a/lib/igt_color.h
+++ b/lib/igt_color.h
@@ -25,6 +25,7 @@ struct igt_color_tf_pq {
 
 
 const struct igt_color_tf srgb_eotf = {2.4f, (float)(1/1.055), (float)(0.055/1.055), (float)(1/12.92), 0.04045f, 0, 0};
+const struct igt_color_tf bt2020_inv_oetf = {(float)(1/0.45f), (float)(1/1.0993f), (float)(0.0993f/1.0993f), (float)(1/4.5f), (float)(0.081), 0, 0};
 
 const struct igt_color_tf_pq pq_eotf = {-107/128.0f, 1.0f, 32/2523.0f, 2413/128.0f, -2392/128.0f, 8192/1305.0f };
 
@@ -117,6 +118,9 @@ void igt_color_pq_eotf(igt_pixel_t *pixel);
 void igt_color_pq_125_inv_eotf(igt_pixel_t *pixel);
 void igt_color_pq_125_eotf(igt_pixel_t *pixel);
 
+void igt_color_bt2020_inv_oetf(igt_pixel_t *pixel);
+void igt_color_bt2020_oetf(igt_pixel_t *pixel);
+
 void igt_color_ctm_3x4_50_desat(igt_pixel_t *pixel);
 void igt_color_ctm_3x4_overdrive(igt_pixel_t *pixel);
 void igt_color_ctm_3x4_oversaturate(igt_pixel_t *pixel);
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 29/37] tests/kms_colorop: Add tests for BT2020/BT709 TFs
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (27 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 28/37] lib/igt_color: add BT2020/BT709 transfer functions Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 30/37] lib/igt_color: Add 1D LUT color transformation support Harry Wentland
                   ` (10 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 tests/kms_colorop.c |  6 ++++++
 tests/kms_colorop.h | 22 ++++++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
index e86115372a3a..f6738cdcfdf2 100644
--- a/tests/kms_colorop.c
+++ b/tests/kms_colorop.c
@@ -50,6 +50,9 @@
  * @srgb_inv_eotf:              	sRGB Inverse EOTF
  * @srgb_eotf-srgb_inv_eotf:    	sRGB EOTF -> sRGB Inverse EOTF
  * @srgb_eotf-srgb_inv_eotf-srgb_eotf:  sRGB EOTF -> sRGB Inverse EOTF -> sRGB EOTF
+ * @bt2020_inv_oetf:			BT.2020 Inverse OETF
+ * @bt2020_oetf:			BT.2020 OETF
+ * @bt2020_inv_oetf-bt2020_oetf:	BT.2020 Inverse OETF > BT.2020 OETF
  * @pq_eotf:                    	PQ EOTF
  * @pq_inv_eotf:                	PQ Inverse EOTF
  * @pq_eotf-pq_inv_eotf:        	PQ EOTF -> PQ Inverse EOTF
@@ -491,6 +494,9 @@ igt_main
 		{ { &kms_colorop_srgb_inv_eotf, NULL }, "srgb_inv_eotf" },
 		{ { &kms_colorop_srgb_eotf, &kms_colorop_srgb_inv_eotf, NULL }, "srgb_eotf-srgb_inv_eotf" },
 		{ { &kms_colorop_srgb_eotf, &kms_colorop_srgb_inv_eotf, &kms_colorop_srgb_eotf_2, NULL }, "srgb_eotf-srgb_inv_eotf-srgb_eotf" },
+		{ { &kms_colorop_bt2020_inv_oetf, NULL }, "bt2020_inv_oetf" },
+		{ { &kms_colorop_bt2020_oetf, NULL }, "bt2020_oetf" },
+		{ { &kms_colorop_bt2020_inv_oetf, &kms_colorop_bt2020_oetf, NULL }, "bt2020_inv_oetf-bt2020_oetf" },
 		{ { &kms_colorop_pq_eotf, NULL }, "pq_eotf" },
 		{ { &kms_colorop_pq_inv_eotf, NULL }, "pq_inv_eotf" },
 		{ { &kms_colorop_pq_eotf, &kms_colorop_pq_inv_eotf, NULL }, "pq_eotf-pq_inv_eotf" },
diff --git a/tests/kms_colorop.h b/tests/kms_colorop.h
index 7d5cb4bd1669..7b98198f6430 100644
--- a/tests/kms_colorop.h
+++ b/tests/kms_colorop.h
@@ -42,6 +42,8 @@ typedef enum kms_colorop_type {
 typedef enum kms_colorop_lut1d_tf {
 	KMS_COLOROP_LUT1D_SRGB_EOTF,
 	KMS_COLOROP_LUT1D_SRGB_INV_EOTF,
+	KMS_COLOROP_LUT1D_BT2020_INV_OETF,
+	KMS_COLOROP_LUT1D_BT2020_OETF,
 	KMS_COLOROP_LUT1D_PQ_EOTF,
 	KMS_COLOROP_LUT1D_PQ_INV_EOTF,
 	KMS_COLOROP_LUT1D_PQ_125_EOTF,
@@ -52,6 +54,8 @@ typedef enum kms_colorop_lut1d_tf {
 const char * const kms_colorop_lut1d_tf_names[KMS_COLOROP_LUT1D_NUM_ENUMS] = {
 	[KMS_COLOROP_LUT1D_SRGB_EOTF] = "sRGB EOTF",
 	[KMS_COLOROP_LUT1D_SRGB_INV_EOTF] = "sRGB Inverse EOTF",
+	[KMS_COLOROP_LUT1D_BT2020_INV_OETF] = "BT.2020 Inverse OETF",
+	[KMS_COLOROP_LUT1D_BT2020_OETF] = "BT.2020 OETF",
 	[KMS_COLOROP_LUT1D_PQ_EOTF] = "PQ EOTF",
 	[KMS_COLOROP_LUT1D_PQ_INV_EOTF] = "PQ Inverse EOTF",
 	[KMS_COLOROP_LUT1D_PQ_125_EOTF] = "PQ 125 EOTF",
@@ -106,6 +110,24 @@ kms_colorop_t kms_colorop_srgb_inv_eotf = {
 	.transform = &igt_color_srgb_inv_eotf
 };
 
+kms_colorop_t kms_colorop_bt2020_inv_oetf = {
+	.type = KMS_COLOROP_ENUMERATED_LUT1D,
+	.enumerated_lut1d_info = {
+		.tf = KMS_COLOROP_LUT1D_BT2020_INV_OETF
+	},
+	.name = "bt2020_inv_oetf",
+	.transform = &igt_color_bt2020_inv_oetf
+};
+
+kms_colorop_t kms_colorop_bt2020_oetf = {
+	.type = KMS_COLOROP_ENUMERATED_LUT1D,
+	.enumerated_lut1d_info = {
+		.tf = KMS_COLOROP_LUT1D_BT2020_OETF
+	},
+	.name = "bt2020_oetf",
+	.transform = &igt_color_bt2020_oetf
+};
+
 kms_colorop_t kms_colorop_pq_eotf = {
 	.type = KMS_COLOROP_ENUMERATED_LUT1D,
 	.enumerated_lut1d_info = {
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 30/37] lib/igt_color: Add 1D LUT color transformation support
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (28 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 29/37] tests/kms_colorop: Add tests for BT2020/BT709 TFs Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 31/37] test/kms_colorop: Add tests that exercise the 1D LUT colorops Harry Wentland
                   ` (9 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Alex Hung, Harry Wentland

From: Alex Hung <alex.hung@amd.com>

Add definitions and functions for setting 1D LUT on a
drm_colorop.

Add support for the SIZE prop of a colorop, as that's
required for understanding the size of the LUT to
construct.

Signed-off-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Harry Wentland <harry.wentland@amd.com>
Co-developed-by: Harry Wentland <harry.wentland@amd.com>
---
 lib/igt_color.c |  8 ++++++++
 lib/igt_color.h | 20 ++++++++++++++++++++
 lib/igt_kms.c   |  1 +
 lib/igt_kms.h   |  1 +
 4 files changed, 30 insertions(+)

diff --git a/lib/igt_color.c b/lib/igt_color.c
index ec8b27d1ef6f..cc5ee3b0ba50 100644
--- a/lib/igt_color.c
+++ b/lib/igt_color.c
@@ -440,3 +440,11 @@ void igt_colorop_set_ctm_3x4(igt_display_t *display,
 	/* set blob property */
 	igt_colorop_replace_prop_blob(colorop, IGT_COLOROP_DATA, &ctm, sizeof(ctm));
 }
+
+void igt_colorop_set_custom_1dlut(igt_display_t *display,
+				  igt_colorop_t *colorop,
+				  const igt_1dlut_t *lut1d,
+				  const size_t lut_size)
+{
+	igt_colorop_replace_prop_blob(colorop, IGT_COLOROP_DATA, lut1d, lut_size);
+}
\ No newline at end of file
diff --git a/lib/igt_color.h b/lib/igt_color.h
index 813bd19ba439..4a9f9b7a3958 100644
--- a/lib/igt_color.h
+++ b/lib/igt_color.h
@@ -15,6 +15,8 @@
 #include "igt_fb.h"
 #include "igt_kms.h"
 
+#define MAX_COLOR_LUT_ENTRIES 4096
+
 struct igt_color_tf {
     float g, a,b,c,d,e,f;
 };
@@ -35,6 +37,17 @@ typedef struct igt_pixel {
 	float b;
 } igt_pixel_t;
 
+typedef struct igt_1dlut {
+	struct drm_color_lut lut[MAX_COLOR_LUT_ENTRIES];
+} igt_1dlut_t;
+
+igt_1dlut_t igt_1dlut_srgb_inv_eotf = { {
+} };
+
+
+igt_1dlut_t igt_1dlut_srgb_eotf = { {
+} };
+
 typedef struct igt_matrix_3x4 {
 	/*
 	 * out   matrix          in
@@ -107,11 +120,18 @@ void igt_colorop_set_ctm_3x4(igt_display_t *display,
 			     igt_colorop_t *colorop,
 			     const igt_matrix_3x4_t *matrix);
 
+void igt_colorop_set_custom_1dlut(igt_display_t *display,
+				  igt_colorop_t *colorop,
+				  const igt_1dlut_t *lut1d,
+				  const size_t lut_size);
+
 /* transformations */
 
 void igt_color_srgb_inv_eotf(igt_pixel_t *pixel);
 void igt_color_srgb_eotf(igt_pixel_t *pixel);
 
+void igt_color_srgb_inv_eotf_custom_lut(igt_pixel_t *pixel);
+
 void igt_color_pq_inv_eotf(igt_pixel_t *pixel);
 void igt_color_pq_eotf(igt_pixel_t *pixel);
 
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index fc3a76250925..efbcddec12d7 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -695,6 +695,7 @@ const char * const igt_colorop_prop_names[IGT_NUM_COLOROP_PROPS] = {
 	[IGT_COLOROP_TYPE] = "TYPE",
 	[IGT_COLOROP_BYPASS] = "BYPASS",
 	[IGT_COLOROP_CURVE_1D_TYPE] = "CURVE_1D_TYPE",
+	[IGT_COLOROP_SIZE] = "SIZE",
 	[IGT_COLOROP_DATA] = "DATA",
 	[IGT_COLOROP_NEXT] = "NEXT",
 };
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 72880609ddaf..3e789050c860 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -353,6 +353,7 @@ enum igt_atomic_colorop_properties {
 	IGT_COLOROP_TYPE,
 	IGT_COLOROP_BYPASS,
 	IGT_COLOROP_CURVE_1D_TYPE,
+	IGT_COLOROP_SIZE,
 	IGT_COLOROP_DATA,
 	IGT_COLOROP_NEXT,
 	IGT_NUM_COLOROP_PROPS
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 31/37] test/kms_colorop: Add tests that exercise the 1D LUT colorops
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (29 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 30/37] lib/igt_color: Add 1D LUT color transformation support Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 32/37] tests/kms_colorop: Add multiplier tests Harry Wentland
                   ` (8 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Alex Hung, Harry Wentland

From: Alex Hung <alex.hung@amd.com>

We'll use the sRGB EOTF and its inverse for convenience.

Signed-off-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 tests/kms_colorop.c | 35 +++++++++++++++++++++++++++++++++++
 tests/kms_colorop.h | 15 +++++++++++++++
 2 files changed, 50 insertions(+)

diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
index f6738cdcfdf2..436bd085f9a7 100644
--- a/tests/kms_colorop.c
+++ b/tests/kms_colorop.c
@@ -50,6 +50,8 @@
  * @srgb_inv_eotf:              	sRGB Inverse EOTF
  * @srgb_eotf-srgb_inv_eotf:    	sRGB EOTF -> sRGB Inverse EOTF
  * @srgb_eotf-srgb_inv_eotf-srgb_eotf:  sRGB EOTF -> sRGB Inverse EOTF -> sRGB EOTF
+ * @srgb_inv_eotf_lut:              	sRGB Inverse EOTF Custom LUT
+ * @srgb_inv_eotf_lut-srgb_eotf_lut:	sRGB Inverse EOTF Custom LUT -> sRGB EOTF Custom LUT
  * @bt2020_inv_oetf:			BT.2020 Inverse OETF
  * @bt2020_oetf:			BT.2020 OETF
  * @bt2020_inv_oetf-bt2020_oetf:	BT.2020 Inverse OETF > BT.2020 OETF
@@ -231,6 +233,9 @@ static bool can_use_colorop(igt_display_t *display, igt_colorop_t *colorop, kms_
 	case KMS_COLOROP_CTM_3X4:
 		return (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_CTM_3X4);
 	case KMS_COLOROP_CUSTOM_LUT1D:
+		if (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_1D_LUT)
+			return true;
+		return false;
 	case KMS_COLOROP_LUT3D:
 	default:
 		return false;
@@ -298,9 +303,33 @@ static igt_colorop_t *get_color_pipeline(igt_display_t *display,
 	return colorop;
 }
 
+static void fill_custom_1dlut(igt_display_t *display, kms_colorop_t *colorop)
+{
+	uint64_t lut_size = igt_colorop_get_prop(display, colorop->colorop, IGT_COLOROP_SIZE);
+	igt_pixel_t pixel;
+	float index;
+	int i;
+
+	for (i = 0; i < lut_size; i++) {
+		index = i / (float) lut_size;
+
+		pixel.r = index;
+		pixel.g = index;
+		pixel.b = index;
+
+		colorop->transform(&pixel);
+
+		colorop->lut1d->lut[i].red = pixel.r * 0xffff;
+		colorop->lut1d->lut[i].green = pixel.g * 0xffff;
+		colorop->lut1d->lut[i].blue = pixel.b * 0xffff;
+	}
+}
+
 static void set_colorop(igt_display_t *display,
 			kms_colorop_t *colorop)
 {
+	uint64_t lut_size = 0;
+
 	igt_assert(colorop->colorop);
 	igt_colorop_set_prop_value(colorop->colorop, IGT_COLOROP_BYPASS, 0);
 
@@ -313,6 +342,10 @@ static void set_colorop(igt_display_t *display,
 		igt_colorop_set_ctm_3x4(display, colorop->colorop, colorop->matrix_3x4);
 		break;
 	case KMS_COLOROP_CUSTOM_LUT1D:
+		fill_custom_1dlut(display, colorop);
+		lut_size = igt_colorop_get_prop(display, colorop->colorop, IGT_COLOROP_SIZE);
+		igt_colorop_set_custom_1dlut(display, colorop->colorop, colorop->lut1d, lut_size * sizeof(struct drm_color_lut));
+		break;
 	case KMS_COLOROP_LUT3D:
 	default:
 		igt_fail(IGT_EXIT_FAILURE);
@@ -494,6 +527,8 @@ igt_main
 		{ { &kms_colorop_srgb_inv_eotf, NULL }, "srgb_inv_eotf" },
 		{ { &kms_colorop_srgb_eotf, &kms_colorop_srgb_inv_eotf, NULL }, "srgb_eotf-srgb_inv_eotf" },
 		{ { &kms_colorop_srgb_eotf, &kms_colorop_srgb_inv_eotf, &kms_colorop_srgb_eotf_2, NULL }, "srgb_eotf-srgb_inv_eotf-srgb_eotf" },
+		{ { &kms_colorop_srgb_inv_eotf_lut, NULL }, "srgb_inv_eotf_lut" },
+		{ { &kms_colorop_srgb_inv_eotf_lut, &kms_colorop_srgb_eotf_lut, NULL }, "srgb_inv_eotf_lut-srgb_eotf_lut" },
 		{ { &kms_colorop_bt2020_inv_oetf, NULL }, "bt2020_inv_oetf" },
 		{ { &kms_colorop_bt2020_oetf, NULL }, "bt2020_oetf" },
 		{ { &kms_colorop_bt2020_inv_oetf, &kms_colorop_bt2020_oetf, NULL }, "bt2020_inv_oetf-bt2020_oetf" },
diff --git a/tests/kms_colorop.h b/tests/kms_colorop.h
index 7b98198f6430..13d15ea6637d 100644
--- a/tests/kms_colorop.h
+++ b/tests/kms_colorop.h
@@ -71,6 +71,7 @@ typedef struct kms_colorop {
 
 	union {
 		kms_colorop_enumerated_lut1d_info_t enumerated_lut1d_info;
+		igt_1dlut_t *lut1d;
 		const igt_matrix_3x4_t *matrix_3x4;
 	};
 
@@ -110,6 +111,20 @@ kms_colorop_t kms_colorop_srgb_inv_eotf = {
 	.transform = &igt_color_srgb_inv_eotf
 };
 
+kms_colorop_t kms_colorop_srgb_inv_eotf_lut = {
+	.type = KMS_COLOROP_CUSTOM_LUT1D,
+	.lut1d = &igt_1dlut_srgb_inv_eotf,
+	.name = "srgb_inv_eotf_lut",
+	.transform = &igt_color_srgb_inv_eotf
+};
+
+kms_colorop_t kms_colorop_srgb_eotf_lut = {
+	.type = KMS_COLOROP_CUSTOM_LUT1D,
+	.lut1d = &igt_1dlut_srgb_eotf,
+	.name = "srgb_eotf_lut",
+	.transform = &igt_color_srgb_eotf
+};
+
 kms_colorop_t kms_colorop_bt2020_inv_oetf = {
 	.type = KMS_COLOROP_ENUMERATED_LUT1D,
 	.enumerated_lut1d_info = {
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 32/37] tests/kms_colorop: Add multiplier tests
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (30 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 31/37] test/kms_colorop: Add tests that exercise the 1D LUT colorops Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 33/37] lib/igt_color: Point license header at skia license Harry Wentland
                   ` (7 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Alex Hung

From: Alex Hung <alex.hung@amd.com>

This includes multiply_125 (125.0f) and multiply_inv_125 (1/125.0f).

Signed-off-by: Alex Hung <alex.hung@amd.com>
---
 include/drm-uapi/drm_mode.h |  1 +
 lib/igt_color.c             | 10 ++++++++++
 lib/igt_color.h             |  2 ++
 lib/igt_kms.c               |  1 +
 lib/igt_kms.h               |  1 +
 tests/kms_colorop.c         | 11 +++++++++++
 tests/kms_colorop.h         | 15 +++++++++++++++
 7 files changed, 41 insertions(+)

diff --git a/include/drm-uapi/drm_mode.h b/include/drm-uapi/drm_mode.h
index 59dc8dcaa481..57b1dac3d516 100644
--- a/include/drm-uapi/drm_mode.h
+++ b/include/drm-uapi/drm_mode.h
@@ -878,6 +878,7 @@ enum drm_colorop_type {
 	DRM_COLOROP_1D_CURVE,
 	DRM_COLOROP_1D_LUT,
 	DRM_COLOROP_CTM_3X4,
+	DRM_COLOROP_MULTIPLIER,
 };
 
 /**
diff --git a/lib/igt_color.c b/lib/igt_color.c
index cc5ee3b0ba50..e6f435bf436c 100644
--- a/lib/igt_color.c
+++ b/lib/igt_color.c
@@ -197,6 +197,16 @@ void igt_color_ctm_3x4_bt709_dec(igt_pixel_t *pixel)
 	igt_color_apply_3x4_ctm(pixel, &igt_matrix_3x4_bt709_dec);
 }
 
+void igt_color_multiply_125(igt_pixel_t *pixel)
+{
+	igt_color_multiply(pixel, 125.0f);
+}
+
+void igt_color_multiply_inv_125(igt_pixel_t *pixel)
+{
+	igt_color_multiply(pixel, 1/125.0f);
+}
+
 static void
 igt_color_fourcc_to_pixel(uint32_t raw_pixel, uint32_t drm_format, igt_pixel_t *pixel)
 {
diff --git a/lib/igt_color.h b/lib/igt_color.h
index 4a9f9b7a3958..4cc34cab569e 100644
--- a/lib/igt_color.h
+++ b/lib/igt_color.h
@@ -147,5 +147,7 @@ void igt_color_ctm_3x4_oversaturate(igt_pixel_t *pixel);
 void igt_color_ctm_3x4_bt709_dec(igt_pixel_t *pixel);
 void igt_color_ctm_3x4_bt709_enc(igt_pixel_t *pixel);
 
+void igt_color_multiply_125(igt_pixel_t *pixel);
+void igt_color_multiply_inv_125(igt_pixel_t *pixel);
 
 #endif
\ No newline at end of file
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index efbcddec12d7..45d3252eb178 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -697,6 +697,7 @@ const char * const igt_colorop_prop_names[IGT_NUM_COLOROP_PROPS] = {
 	[IGT_COLOROP_CURVE_1D_TYPE] = "CURVE_1D_TYPE",
 	[IGT_COLOROP_SIZE] = "SIZE",
 	[IGT_COLOROP_DATA] = "DATA",
+	[IGT_COLOROP_MULTIPLIER] = "MULTIPLIER",
 	[IGT_COLOROP_NEXT] = "NEXT",
 };
 
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 3e789050c860..ced45124f060 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -355,6 +355,7 @@ enum igt_atomic_colorop_properties {
 	IGT_COLOROP_CURVE_1D_TYPE,
 	IGT_COLOROP_SIZE,
 	IGT_COLOROP_DATA,
+	IGT_COLOROP_MULTIPLIER,
 	IGT_COLOROP_NEXT,
 	IGT_NUM_COLOROP_PROPS
 };
diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
index 436bd085f9a7..90348a34595b 100644
--- a/tests/kms_colorop.c
+++ b/tests/kms_colorop.c
@@ -69,6 +69,8 @@
  * @ctm_3x4_bt709_dec:			BT709 decoding matrix
  * @ctm_3x4_bt709_enc_dec:		BT709 encoding matrix, followed by decoding matrix
  * @ctm_3x4_bt709_dec_enc:		BT709 decoding matrix, followed by encoding matrix
+ * @multiply_125:			Multiplier by 125
+ * @multiply_inv_125:			Multiplier by inverse of 125
  *
  */
 
@@ -236,6 +238,8 @@ static bool can_use_colorop(igt_display_t *display, igt_colorop_t *colorop, kms_
 		if (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_1D_LUT)
 			return true;
 		return false;
+	case KMS_COLOROP_MULTIPLIER:
+		return (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_MULTIPLIER);
 	case KMS_COLOROP_LUT3D:
 	default:
 		return false;
@@ -329,6 +333,7 @@ static void set_colorop(igt_display_t *display,
 			kms_colorop_t *colorop)
 {
 	uint64_t lut_size = 0;
+	uint64_t mult = 1;
 
 	igt_assert(colorop->colorop);
 	igt_colorop_set_prop_value(colorop->colorop, IGT_COLOROP_BYPASS, 0);
@@ -346,6 +351,10 @@ static void set_colorop(igt_display_t *display,
 		lut_size = igt_colorop_get_prop(display, colorop->colorop, IGT_COLOROP_SIZE);
 		igt_colorop_set_custom_1dlut(display, colorop->colorop, colorop->lut1d, lut_size * sizeof(struct drm_color_lut));
 		break;
+	case KMS_COLOROP_MULTIPLIER:
+		mult = colorop->multiplier * (mult << 32);	/* convert double to fixed number */
+		igt_colorop_set_prop_value(colorop->colorop, IGT_COLOROP_MULTIPLIER, mult);
+		break;
 	case KMS_COLOROP_LUT3D:
 	default:
 		igt_fail(IGT_EXIT_FAILURE);
@@ -546,6 +555,8 @@ igt_main
 		{ { &kms_colorop_ctm_3x4_bt709_dec, NULL }, "ctm_3x4_bt709_dec" },
 		{ { &kms_colorop_ctm_3x4_bt709_enc, &kms_colorop_ctm_3x4_bt709_dec, NULL }, "ctm_3x4_bt709_enc_dec" },
 		{ { &kms_colorop_ctm_3x4_bt709_dec, &kms_colorop_ctm_3x4_bt709_enc, NULL }, "ctm_3x4_bt709_dec_enc" },
+		{ { &kms_colorop_multiply_125, NULL }, "multiply_125" },
+		{ { &kms_colorop_multiply_inv_125, NULL }, "multiply_inv_125" },
 	};
 
 	struct {
diff --git a/tests/kms_colorop.h b/tests/kms_colorop.h
index 13d15ea6637d..1def86bc3380 100644
--- a/tests/kms_colorop.h
+++ b/tests/kms_colorop.h
@@ -36,6 +36,7 @@ typedef enum kms_colorop_type {
 	KMS_COLOROP_ENUMERATED_LUT1D,
 	KMS_COLOROP_CUSTOM_LUT1D,
 	KMS_COLOROP_CTM_3X4,
+	KMS_COLOROP_MULTIPLIER,
 	KMS_COLOROP_LUT3D
 } kms_colorop_type_t;
 
@@ -73,6 +74,7 @@ typedef struct kms_colorop {
 		kms_colorop_enumerated_lut1d_info_t enumerated_lut1d_info;
 		igt_1dlut_t *lut1d;
 		const igt_matrix_3x4_t *matrix_3x4;
+		double multiplier;
 	};
 
 	const char *name;
@@ -223,5 +225,18 @@ kms_colorop_t kms_colorop_ctm_3x4_bt709_dec = {
 	.transform = &igt_color_ctm_3x4_bt709_dec
 };
 
+kms_colorop_t kms_colorop_multiply_125 = {
+	.type =	KMS_COLOROP_MULTIPLIER,
+	.multiplier = 125.0f,
+	.name = "multiply_125",
+	.transform = &igt_color_multiply_125
+};
+
+kms_colorop_t kms_colorop_multiply_inv_125 = {
+	.type =	KMS_COLOROP_MULTIPLIER,
+	.multiplier = 1/125.0f,
+	.name = "multiply_inv_125",
+	.transform = &igt_color_multiply_inv_125
+};
 
 #endif /* __KMS_COLOROP_H__ */
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 33/37] lib/igt_color: Point license header at skia license
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (31 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 32/37] tests/kms_colorop: Add multiplier tests Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 34/37] scripts/convert_3dlut.py Convert a 3D LUT to igt_3dlut_t array for 3D LUT API Harry Wentland
                   ` (6 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Harry Wentland

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
 lib/igt_color.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lib/igt_color.c b/lib/igt_color.c
index e6f435bf436c..d3f2ccf00b93 100644
--- a/lib/igt_color.c
+++ b/lib/igt_color.c
@@ -3,7 +3,9 @@
  * Copyright 2023 Advanced Micro Devices, Inc.
  *
  * This file contains code adapted from Skia, which is
- * Copyright (c) 2011 Google Inc. All rights reserved.
+ * distributed under a BSD-style license which can be
+ * found at
+ * https://skia.googlesource.com/skia.git/+/refs/heads/main/LICENSE
  */
 
 #include <errno.h>
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 34/37] scripts/convert_3dlut.py Convert a 3D LUT to igt_3dlut_t array for 3D LUT API
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (32 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 33/37] lib/igt_color: Point license header at skia license Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 35/37] tests/kms_colorop: Add 3D LUT subtests Harry Wentland
                   ` (5 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Alex Hung

From: Alex Hung <alex.hung@amd.com>

This script converts a 17x17x17 3D LUT in a txt file to the following
(i.e. 4913 entries):

	{ .red = 0.000000, .green = 0.000000, .blue = 0.000000 },
	{ .red = 0.175580, .green = 0.003419, .blue = 0.006838 },
	{ .red = 0.338706, .green = 0.015140, .blue = 0.012454 },
	...

The text file should contains 3 column (RGB) in following form:

	0000 0000 0000
	0255 0307 0606
	0225 0306 0893
	...

Signed-off-by: Alex Hung <alex.hung@amd.com>
---
 scripts/convert_3dlut.py | 94 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 94 insertions(+)
 create mode 100755 scripts/convert_3dlut.py

diff --git a/scripts/convert_3dlut.py b/scripts/convert_3dlut.py
new file mode 100755
index 000000000000..35189b549792
--- /dev/null
+++ b/scripts/convert_3dlut.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: (GPL-2.0 OR MIT)
+
+## Copyright (C) 2024 Advanced Micro Devices, Inc.         ##
+## Author: Alex Hung <alex.hung@amd.com>                   ##
+
+import sys, os, argparse
+import numpy as np
+import pprint
+
+import pprint
+
+class Color:
+    def __init__(self, r, g, b):
+        self.r = r
+        self.g = g
+        self.b = b
+    def __str__(self):
+        r = self.r
+        g = self.g
+        b = self.b
+        rgb = "\t{ " + ".red = {0:05f}, .green = {1:05f}, .blue = {2:05f}".format(r, g, b) + " },"
+        return rgb
+
+def print_lut(ind, lut):
+    for i, v in enumerate(lut):
+        if (i - ind) % (17 * 17) == 0:
+            print(str(i) + " " + v)
+            #print(v)
+
+def parse_lut_file(file_path, max_value=4095):
+    lut = []
+
+    try:
+        with open(file_path, "r") as file:
+            for line in file:
+                values = line.strip().split()  # Split values by spaces or tabs
+                if len(values) == 3:
+                    r, g, b = map(float, values)  # Convert to floats
+                    r = r / max_value
+                    g = g / max_value
+                    b = b / max_value
+                    color = Color(r, g, b)
+                    lut.append(color)
+                else:
+                    print(f"Skipping invalid line: '{line.strip()}'")
+    except FileNotFoundError:
+        print(f"File '{file_path}' not found.")
+
+    return lut
+
+def fill_3d_array(lut, size=17):
+    lut3d = np.zeros((size, size, size), dtype=object)
+
+    for i in range(size):
+        for j in range(size):
+            for k in range(size):
+                index = i * (size ** 2) +  j * size + k
+                color = lut[index]
+                lut3d[i][j][k] = color
+    return lut3d
+
+def print_3d_array_rgb(lut3d, size=17):
+    for i in range(size):
+        for j in range(size):
+            for k in range(size):
+                print(lut3d[i][j][k])
+
+def print_3d_array_bgr(lut3d, size=17):
+    for i in range(size):
+        for j in range(size):
+            for k in range(size):
+                print(lut3d[k][j][i])
+
+def main():
+
+    parser = argparse.ArgumentParser(description='Convert integer values in a 3D LUT file to IGT format.')
+    parser.add_argument("-f", "--input", help="3D LUT file", required=True)
+    parser.add_argument("-t", "--traversal", help="traversal order", required=True)
+    args = parser.parse_args()
+
+    lut = parse_lut_file(args.input)
+    lut3d = fill_3d_array(lut)
+
+    if args.traversal.lower() == "rgb":
+        print_3d_array_rgb(lut3d)
+    elif args.traversal.lower() == "bgr":
+        print_3d_array_bgr(lut3d)
+
+    return 0
+
+if __name__ == "__main__":
+    ret = main()
+    sys.exit(ret)
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 35/37] tests/kms_colorop: Add 3D LUT subtests
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (33 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 34/37] scripts/convert_3dlut.py Convert a 3D LUT to igt_3dlut_t array for 3D LUT API Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 36/37] drm-uapi: Update kernel doc for drm_colorop_type Harry Wentland
                   ` (4 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Alex Hung

From: Alex Hung <alex.hung@amd.com>

This includes two subtests 3dlut_17_12_rgb and 3dlut_17_12_bgr.

Signed-off-by: Alex Hung <alex.hung@amd.com>
---
 include/drm-uapi/drm_mode.h |   50 +
 lib/igt_color.c             |  191 +
 lib/igt_color.h             |    9 +
 lib/igt_color_lut.h         | 9866 +++++++++++++++++++++++++++++++++++
 lib/igt_kms.c               |    2 +
 lib/igt_kms.h               |    2 +
 tests/kms_colorop.c         |   46 +-
 tests/kms_colorop.h         |   33 +
 8 files changed, 10198 insertions(+), 1 deletion(-)
 create mode 100644 lib/igt_color_lut.h

diff --git a/include/drm-uapi/drm_mode.h b/include/drm-uapi/drm_mode.h
index 57b1dac3d516..26d59cf3185a 100644
--- a/include/drm-uapi/drm_mode.h
+++ b/include/drm-uapi/drm_mode.h
@@ -879,6 +879,56 @@ enum drm_colorop_type {
 	DRM_COLOROP_1D_LUT,
 	DRM_COLOROP_CTM_3X4,
 	DRM_COLOROP_MULTIPLIER,
+	DRM_COLOROP_3D_LUT,
+};
+
+enum drm_colorop_interpolation_type {
+	DRM_COLOROP_TETRAHEDRAL,
+};
+
+enum drm_colorop_traversal_order {
+	DRM_COLOROP_TRAVERSAL_RGB,
+	DRM_COLOROP_TRAVERSAL_BGR,
+};
+
+struct drm_mode_3dlut_mode {
+	/**
+	 * @lut_size: 3D LUT size - can be 9, 17 or 33
+	 */
+	__u16 lut_size;
+	/**
+	 * @lut_stride: dimensions of 3D LUT. Must be larger than lut_size
+	 */
+	__u16 lut_stride[3];
+	/**
+	 * @interpolation: interpolation algorithm for 3D LUT. See drm_colorop_interpolation_type
+	 */
+	__u16 interpolation;
+	/**
+	 * @color_depth: color depth - can be 8, 10 or 12
+	 */
+	__u16 color_depth;
+	/**
+	 * @color_format: color format specifieid by fourcc values
+	 * ex. DRM_FORMAT_XRGB16161616 - color in order of RGB, each is 16bit.
+	 */
+	__u32 color_format;
+	/**
+	 * @traversal_order: RGB color placement in 3D array, lut3d[R][G][B] or lut3d[B][G][R]
+	 * ex. for a 3D array with size of 17 -
+	 * DRM_COLOROP_TRAVERSAL_RGB is traversd by
+	 *   for R in range 0..16
+	 *     for G in range 0..16
+	 *       for B in range 0..16
+	 *         color = lut3d[R][G][B]
+	 *
+	 * DRM_COLOROP_TRAVERSAL_BGR is traversd by
+	 *   for R in range 0..16
+	 *     for G in range 0..16
+	 *       for B in range 0..16
+	 *         color = lut3d[B][G][R]
+	 */
+	__u16 traversal_order;
 };
 
 /**
diff --git a/lib/igt_color.c b/lib/igt_color.c
index d3f2ccf00b93..4b890518279c 100644
--- a/lib/igt_color.c
+++ b/lib/igt_color.c
@@ -209,6 +209,189 @@ void igt_color_multiply_inv_125(igt_pixel_t *pixel)
 	igt_color_multiply(pixel, 1/125.0f);
 }
 
+static int
+igt_get_lut3d_index_blue_fast(int r, int g, int b, long dim, int components)
+{
+	return components * (b + (int)dim * (g + (int)dim * r));
+}
+
+/* algorithm from https://github.com/AcademySoftwareFoundation/OpenColorIO/blob/main/src/OpenColorIO/ops/lut3d/Lut3DOpCPU.cpp#L422 */
+static void igt_color_3dlut_tetrahedral(igt_pixel_t *pixel, igt_3dlut_t *lut3d, long m_dim)
+{
+	int n000, n100, n010, n001, n110, n101, n011, n111;
+	float m_step = (float) m_dim - 1.0f;
+	const float dimMinusOne = (float) m_dim - 1.f;
+	float *m_optLut = (float *) lut3d->lut;
+	float idx[3];
+	float out[3];
+	int indexLow[3];
+	int indexHigh[3];
+	float fx, fy, fz;
+
+	idx[0] = pixel->b * m_step;
+	idx[1] = pixel->g * m_step;
+	idx[2] = pixel->r * m_step;
+
+	// NaNs become 0.
+	idx[0] = clamp(idx[0], 0.f, dimMinusOne);
+	idx[1] = clamp(idx[1], 0.f, dimMinusOne);
+	idx[2] = clamp(idx[2], 0.f, dimMinusOne);
+
+	indexLow[0] = floor(idx[0]);
+	indexLow[1] = floor(idx[1]);
+	indexLow[2] = floor(idx[2]);
+
+	// When the idx is exactly equal to an index (e.g. 0,1,2...)
+	// then the computation of highIdx is wrong. However,
+	// the delta is then equal to zero (e.g. idx-lowIdx),
+	// so the highIdx has no impact.
+	indexHigh[0] = ceil(idx[0]);
+	indexHigh[1] = ceil(idx[1]);
+	indexHigh[2] = ceil(idx[2]);
+
+	fx = idx[0] - (float) indexLow[0];
+	fy = idx[1] - (float) indexLow[1];
+	fz = idx[2] - (float) indexLow[2];
+
+	// Compute index into LUT for surrounding corners
+	n000 = igt_get_lut3d_index_blue_fast(indexLow[0], indexLow[1], indexLow[2], m_dim, 3);
+	n100 = igt_get_lut3d_index_blue_fast(indexHigh[0], indexLow[1], indexLow[2], m_dim, 3);
+	n010 = igt_get_lut3d_index_blue_fast(indexLow[0], indexHigh[1], indexLow[2], m_dim, 3);
+	n001 = igt_get_lut3d_index_blue_fast(indexLow[0], indexLow[1], indexHigh[2], m_dim, 3);
+	n110 = igt_get_lut3d_index_blue_fast(indexHigh[0], indexHigh[1], indexLow[2], m_dim, 3);
+	n101 = igt_get_lut3d_index_blue_fast(indexHigh[0], indexLow[1], indexHigh[2], m_dim, 3);
+	n011 = igt_get_lut3d_index_blue_fast(indexLow[0], indexHigh[1], indexHigh[2], m_dim, 3);
+	n111 = igt_get_lut3d_index_blue_fast(indexHigh[0], indexHigh[1], indexHigh[2], m_dim, 3);
+
+	if (fx > fy) {
+		if (fy > fz) {
+			out[0] =
+				(1 - fx)  * m_optLut[n000] +
+				(fx - fy) * m_optLut[n100] +
+				(fy - fz) * m_optLut[n110] +
+				(fz)      * m_optLut[n111];
+
+			out[1] =
+				(1 - fx)  * m_optLut[n000 + 1] +
+				(fx - fy) * m_optLut[n100 + 1] +
+				(fy - fz) * m_optLut[n110 + 1] +
+				(fz)      * m_optLut[n111 + 1];
+
+			out[2] =
+				(1 - fx)  * m_optLut[n000 + 2] +
+				(fx - fy) * m_optLut[n100 + 2] +
+				(fy - fz) * m_optLut[n110 + 2] +
+				(fz)      * m_optLut[n111 + 2];
+		} else if (fx > fz) {
+			out[0] =
+				(1 - fx)  * m_optLut[n000] +
+				(fx - fz) * m_optLut[n100] +
+				(fz - fy) * m_optLut[n101] +
+				(fy)      * m_optLut[n111];
+
+			out[1] =
+				(1 - fx)  * m_optLut[n000 + 1] +
+				(fx - fz) * m_optLut[n100 + 1] +
+				(fz - fy) * m_optLut[n101 + 1] +
+				(fy)      * m_optLut[n111 + 1];
+
+			out[2] =
+				(1 - fx)  * m_optLut[n000 + 2] +
+				(fx - fz) * m_optLut[n100 + 2] +
+				(fz - fy) * m_optLut[n101 + 2] +
+				(fy)      * m_optLut[n111 + 2];
+		} else {
+				out[0] =
+				(1 - fz)  * m_optLut[n000] +
+				(fz - fx) * m_optLut[n001] +
+				(fx - fy) * m_optLut[n101] +
+				(fy)      * m_optLut[n111];
+
+			out[1] =
+				(1 - fz)  * m_optLut[n000 + 1] +
+				(fz - fx) * m_optLut[n001 + 1] +
+				(fx - fy) * m_optLut[n101 + 1] +
+				(fy)      * m_optLut[n111 + 1];
+
+			out[2] =
+				(1 - fz)  * m_optLut[n000 + 2] +
+				(fz - fx) * m_optLut[n001 + 2] +
+				(fx - fy) * m_optLut[n101 + 2] +
+				(fy)      * m_optLut[n111 + 2];
+		}
+	} else {
+		if (fz > fy) {
+			out[0] =
+				(1 - fz)  * m_optLut[n000] +
+				(fz - fy) * m_optLut[n001] +
+				(fy - fx) * m_optLut[n011] +
+				(fx)      * m_optLut[n111];
+
+			out[1] =
+				(1 - fz)  * m_optLut[n000 + 1] +
+				(fz - fy) * m_optLut[n001 + 1] +
+				(fy - fx) * m_optLut[n011 + 1] +
+				(fx)      * m_optLut[n111 + 1];
+
+			out[2] =
+				(1 - fz)  * m_optLut[n000 + 2] +
+				(fz - fy) * m_optLut[n001 + 2] +
+				(fy - fx) * m_optLut[n011 + 2] +
+				(fx)      * m_optLut[n111 + 2];
+		} else if (fz > fx) {
+			out[0] =
+				(1 - fy)  * m_optLut[n000] +
+				(fy - fz) * m_optLut[n010] +
+				(fz - fx) * m_optLut[n011] +
+				(fx)      * m_optLut[n111];
+
+			out[1] =
+				(1 - fy)  * m_optLut[n000 + 1] +
+				(fy - fz) * m_optLut[n010 + 1] +
+				(fz - fx) * m_optLut[n011 + 1] +
+				(fx)      * m_optLut[n111 + 1];
+
+			out[2] =
+				(1 - fy)  * m_optLut[n000 + 2] +
+				(fy - fz) * m_optLut[n010 + 2] +
+				(fz - fx) * m_optLut[n011 + 2] +
+				(fx)      * m_optLut[n111 + 2];
+		} else {
+			out[0] =
+				(1 - fy)  * m_optLut[n000] +
+				(fy - fx) * m_optLut[n010] +
+				(fx - fz) * m_optLut[n110] +
+				(fz)      * m_optLut[n111];
+
+			out[1] =
+				(1 - fy)  * m_optLut[n000 + 1] +
+				(fy - fx) * m_optLut[n010 + 1] +
+				(fx - fz) * m_optLut[n110 + 1] +
+				(fz)      * m_optLut[n111 + 1];
+
+			out[2] =
+				(1 - fy)  * m_optLut[n000 + 2] +
+				(fy - fx) * m_optLut[n010 + 2] +
+				(fx - fz) * m_optLut[n110 + 2] +
+				(fz)      * m_optLut[n111 + 2];
+		}
+	}
+
+	pixel->r = out[0];
+	pixel->g = out[1];
+	pixel->b = out[2];
+}
+
+void igt_color_3dlut_17_12_rgb(igt_pixel_t *pixel)
+{
+	igt_color_3dlut_tetrahedral(pixel, &igt_3dlut_17_rgb, 17);
+}
+
+void igt_color_3dlut_17_12_bgr(igt_pixel_t *pixel)
+{
+	igt_color_3dlut_tetrahedral(pixel, &igt_3dlut_17_bgr, 17);
+}
+
 static void
 igt_color_fourcc_to_pixel(uint32_t raw_pixel, uint32_t drm_format, igt_pixel_t *pixel)
 {
@@ -459,4 +642,12 @@ void igt_colorop_set_custom_1dlut(igt_display_t *display,
 				  const size_t lut_size)
 {
 	igt_colorop_replace_prop_blob(colorop, IGT_COLOROP_DATA, lut1d, lut_size);
+}
+
+void igt_colorop_set_3dlut(igt_display_t *display,
+			   igt_colorop_t *colorop,
+			   const igt_3dlut_norm_t *lut3d,
+			   const size_t lut_size)
+{
+	igt_colorop_replace_prop_blob(colorop, IGT_COLOROP_DATA, lut3d, lut_size);
 }
\ No newline at end of file
diff --git a/lib/igt_color.h b/lib/igt_color.h
index 4cc34cab569e..3f1bf57878ea 100644
--- a/lib/igt_color.h
+++ b/lib/igt_color.h
@@ -14,6 +14,7 @@
 
 #include "igt_fb.h"
 #include "igt_kms.h"
+#include "igt_color_lut.h"
 
 #define MAX_COLOR_LUT_ENTRIES 4096
 
@@ -125,6 +126,12 @@ void igt_colorop_set_custom_1dlut(igt_display_t *display,
 				  const igt_1dlut_t *lut1d,
 				  const size_t lut_size);
 
+void igt_colorop_set_3dlut(igt_display_t *display,
+			   igt_colorop_t *colorop,
+			   const igt_3dlut_norm_t *lut3d,
+			   const size_t lut_size);
+
+
 /* transformations */
 
 void igt_color_srgb_inv_eotf(igt_pixel_t *pixel);
@@ -149,5 +156,7 @@ void igt_color_ctm_3x4_bt709_enc(igt_pixel_t *pixel);
 
 void igt_color_multiply_125(igt_pixel_t *pixel);
 void igt_color_multiply_inv_125(igt_pixel_t *pixel);
+void igt_color_3dlut_17_12_rgb(igt_pixel_t *pixel);
+void igt_color_3dlut_17_12_bgr(igt_pixel_t *pixel);
 
 #endif
\ No newline at end of file
diff --git a/lib/igt_color_lut.h b/lib/igt_color_lut.h
new file mode 100644
index 000000000000..565c8820a5a4
--- /dev/null
+++ b/lib/igt_color_lut.h
@@ -0,0 +1,9866 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright 2024 Advanced Micro Devices, Inc.
+ *
+ */
+
+#ifndef __IGT_COLOR_LUT_H__
+#define __IGT_COLOR_LUT_H__
+
+#include "drm_mode.h"
+
+typedef struct igt_3dlut_norm {
+	struct drm_color_lut lut[4913];
+} igt_3dlut_norm_t;
+
+struct igt_color_lut_float {
+	float red;
+	float green;
+	float blue;
+};
+
+typedef struct igt_3dlut {
+	struct igt_color_lut_float lut[4913];
+} igt_3dlut_t;
+
+/*
+ * A 3D LUT table with 17x17x17 entries for DRM_COLOROP_TRAVERSAL_RGB.
+ * It can be generated by scripts/convert_3dlut.py
+ */
+igt_3dlut_t igt_3dlut_17_rgb = { {
+	{ .red = 0.000000, .green = 0.000000, .blue = 0.000000 },
+	{ .red = 0.175580, .green = 0.003419, .blue = 0.006838 },
+	{ .red = 0.338706, .green = 0.015140, .blue = 0.012454 },
+	{ .red = 0.492552, .green = 0.015629, .blue = 0.012454 },
+	{ .red = 0.641026, .green = 0.023687, .blue = 0.013187 },
+	{ .red = 0.734310, .green = 0.049817, .blue = 0.013675 },
+	{ .red = 0.809035, .green = 0.063736, .blue = 0.006105 },
+	{ .red = 0.884982, .green = 0.063492, .blue = 0.019048 },
+	{ .red = 0.963370, .green = 0.056899, .blue = 0.028571 },
+	{ .red = 0.993407, .green = 0.080586, .blue = 0.044689 },
+	{ .red = 0.999267, .green = 0.099145, .blue = 0.054457 },
+	{ .red = 0.999267, .green = 0.110623, .blue = 0.060317 },
+	{ .red = 0.999267, .green = 0.116972, .blue = 0.064225 },
+	{ .red = 0.999267, .green = 0.121612, .blue = 0.066422 },
+	{ .red = 0.999267, .green = 0.126007, .blue = 0.067643 },
+	{ .red = 0.999512, .green = 0.130647, .blue = 0.067888 },
+	{ .red = 0.999512, .green = 0.134799, .blue = 0.067888 },
+	{ .red = 0.016606, .green = 0.179976, .blue = 0.018559 },
+	{ .red = 0.173382, .green = 0.173382, .blue = 0.005861 },
+	{ .red = 0.328205, .green = 0.158974, .blue = 0.007082 },
+	{ .red = 0.484493, .green = 0.155800, .blue = 0.003663 },
+	{ .red = 0.634432, .green = 0.154090, .blue = 0.006593 },
+	{ .red = 0.718437, .green = 0.145543, .blue = 0.004151 },
+	{ .red = 0.794872, .green = 0.140904, .blue = 0.008791 },
+	{ .red = 0.884493, .green = 0.130891, .blue = 0.003175 },
+	{ .red = 0.978755, .green = 0.118681, .blue = 0.013187 },
+	{ .red = 0.995116, .green = 0.126740, .blue = 0.042002 },
+	{ .red = 0.998046, .green = 0.132357, .blue = 0.053236 },
+	{ .red = 0.999023, .green = 0.135775, .blue = 0.059096 },
+	{ .red = 0.999512, .green = 0.136752, .blue = 0.063004 },
+	{ .red = 0.999512, .green = 0.137729, .blue = 0.065446 },
+	{ .red = 0.999512, .green = 0.139438, .blue = 0.066667 },
+	{ .red = 0.999512, .green = 0.141880, .blue = 0.067399 },
+	{ .red = 0.999512, .green = 0.144567, .blue = 0.067643 },
+	{ .red = 0.020757, .green = 0.326984, .blue = 0.023932 },
+	{ .red = 0.161416, .green = 0.325763, .blue = 0.006838 },
+	{ .red = 0.334554, .green = 0.334310, .blue = 0.008791 },
+	{ .red = 0.462027, .green = 0.302564, .blue = 0.005617 },
+	{ .red = 0.587790, .green = 0.288400, .blue = 0.010012 },
+	{ .red = 0.672772, .green = 0.266667, .blue = 0.006105 },
+	{ .red = 0.755067, .green = 0.251038, .blue = 0.005128 },
+	{ .red = 0.844689, .green = 0.239560, .blue = 0.005372 },
+	{ .red = 0.936508, .green = 0.229548, .blue = 0.010012 },
+	{ .red = 0.990720, .green = 0.218315, .blue = 0.031013 },
+	{ .red = 0.998535, .green = 0.207082, .blue = 0.046398 },
+	{ .red = 0.998779, .green = 0.197802, .blue = 0.054701 },
+	{ .red = 0.998535, .green = 0.189988, .blue = 0.060073 },
+	{ .red = 0.999023, .green = 0.183883, .blue = 0.063248 },
+	{ .red = 0.999267, .green = 0.179487, .blue = 0.064957 },
+	{ .red = 0.999267, .green = 0.176801, .blue = 0.065690 },
+	{ .red = 0.999512, .green = 0.174847, .blue = 0.066422 },
+	{ .red = 0.044933, .green = 0.454701, .blue = 0.035409 },
+	{ .red = 0.150427, .green = 0.454945, .blue = 0.008791 },
+	{ .red = 0.310379, .green = 0.465934, .blue = 0.008547 },
+	{ .red = 0.481807, .green = 0.481807, .blue = 0.010501 },
+	{ .red = 0.573382, .green = 0.425397, .blue = 0.012454 },
+	{ .red = 0.676679, .green = 0.400244, .blue = 0.009280 },
+	{ .red = 0.756044, .green = 0.372405, .blue = 0.011477 },
+	{ .red = 0.821001, .green = 0.346520, .blue = 0.010256 },
+	{ .red = 0.872772, .green = 0.322100, .blue = 0.009768 },
+	{ .red = 0.950183, .green = 0.309890, .blue = 0.010256 },
+	{ .red = 0.986813, .green = 0.291819, .blue = 0.030037 },
+	{ .red = 0.997802, .green = 0.273504, .blue = 0.044444 },
+	{ .red = 0.996825, .green = 0.256410, .blue = 0.052015 },
+	{ .red = 0.998779, .green = 0.243223, .blue = 0.056899 },
+	{ .red = 0.999023, .green = 0.232967, .blue = 0.059829 },
+	{ .red = 0.999023, .green = 0.224176, .blue = 0.061294 },
+	{ .red = 0.999267, .green = 0.217094, .blue = 0.062271 },
+	{ .red = 0.071062, .green = 0.569719, .blue = 0.048840 },
+	{ .red = 0.143590, .green = 0.571673, .blue = 0.011722 },
+	{ .red = 0.291087, .green = 0.581929, .blue = 0.010256 },
+	{ .red = 0.449817, .green = 0.599756, .blue = 0.007570 },
+	{ .red = 0.619780, .green = 0.619536, .blue = 0.012943 },
+	{ .red = 0.693284, .green = 0.548962, .blue = 0.011966 },
+	{ .red = 0.781685, .green = 0.513065, .blue = 0.009768 },
+	{ .red = 0.847619, .green = 0.475702, .blue = 0.011233 },
+	{ .red = 0.895238, .green = 0.439072, .blue = 0.011477 },
+	{ .red = 0.929426, .green = 0.404884, .blue = 0.010989 },
+	{ .red = 0.954823, .green = 0.374359, .blue = 0.008547 },
+	{ .red = 0.975092, .green = 0.347985, .blue = 0.019048 },
+	{ .red = 0.998535, .green = 0.328938, .blue = 0.032723 },
+	{ .red = 0.995116, .green = 0.307937, .blue = 0.044200 },
+	{ .red = 0.996825, .green = 0.291575, .blue = 0.049573 },
+	{ .red = 0.997802, .green = 0.278144, .blue = 0.053480 },
+	{ .red = 0.998779, .green = 0.266178, .blue = 0.055433 },
+	{ .red = 0.086935, .green = 0.676679, .blue = 0.055678 },
+	{ .red = 0.139927, .green = 0.680342, .blue = 0.010256 },
+	{ .red = 0.277656, .green = 0.689621, .blue = 0.013675 },
+	{ .red = 0.424420, .green = 0.705983, .blue = 0.010256 },
+	{ .red = 0.582418, .green = 0.727473, .blue = 0.008303 },
+	{ .red = 0.746764, .green = 0.746764, .blue = 0.014408 },
+	{ .red = 0.805128, .green = 0.664469, .blue = 0.017582 },
+	{ .red = 0.863980, .green = 0.608059, .blue = 0.016117 },
+	{ .red = 0.908913, .green = 0.558242, .blue = 0.011722 },
+	{ .red = 0.939927, .green = 0.512576, .blue = 0.014896 },
+	{ .red = 0.962149, .green = 0.471795, .blue = 0.013919 },
+	{ .red = 0.978755, .green = 0.436386, .blue = 0.010256 },
+	{ .red = 0.978755, .green = 0.401709, .blue = 0.023199 },
+	{ .red = 0.981685, .green = 0.373626, .blue = 0.023687 },
+	{ .red = 0.993895, .green = 0.352869, .blue = 0.025641 },
+	{ .red = 0.993895, .green = 0.334310, .blue = 0.038828 },
+	{ .red = 0.993651, .green = 0.317949, .blue = 0.044444 },
+	{ .red = 0.097192, .green = 0.774603, .blue = 0.057875 },
+	{ .red = 0.137973, .green = 0.779243, .blue = 0.008303 },
+	{ .red = 0.265446, .green = 0.785592, .blue = 0.011966 },
+	{ .red = 0.400488, .green = 0.796581, .blue = 0.015140 },
+	{ .red = 0.541880, .green = 0.810989, .blue = 0.007082 },
+	{ .red = 0.689621, .green = 0.826618, .blue = 0.009035 },
+	{ .red = 0.837851, .green = 0.837851, .blue = 0.014652 },
+	{ .red = 0.880586, .green = 0.748474, .blue = 0.010989 },
+	{ .red = 0.917705, .green = 0.678877, .blue = 0.014652 },
+	{ .red = 0.947009, .green = 0.621245, .blue = 0.013675 },
+	{ .red = 0.965812, .green = 0.569719, .blue = 0.018803 },
+	{ .red = 0.982173, .green = 0.526252, .blue = 0.008547 },
+	{ .red = 0.983150, .green = 0.484737, .blue = 0.024664 },
+	{ .red = 0.981441, .green = 0.448352, .blue = 0.029548 },
+	{ .red = 0.981197, .green = 0.418315, .blue = 0.030525 },
+	{ .red = 0.983150, .green = 0.392918, .blue = 0.029548 },
+	{ .red = 0.980464, .green = 0.369231, .blue = 0.026862 },
+	{ .red = 0.101587, .green = 0.846398, .blue = 0.059096 },
+	{ .red = 0.132845, .green = 0.851038, .blue = 0.011966 },
+	{ .red = 0.249084, .green = 0.855189, .blue = 0.008059 },
+	{ .red = 0.372405, .green = 0.862027, .blue = 0.013431 },
+	{ .red = 0.499878, .green = 0.871062, .blue = 0.011966 },
+	{ .red = 0.631013, .green = 0.881563, .blue = 0.011477 },
+	{ .red = 0.765324, .green = 0.892063, .blue = 0.020513 },
+	{ .red = 0.897680, .green = 0.897680, .blue = 0.017338 },
+	{ .red = 0.928205, .green = 0.806105, .blue = 0.019780 },
+	{ .red = 0.951404, .green = 0.731136, .blue = 0.016361 },
+	{ .red = 0.970452, .green = 0.669597, .blue = 0.013187 },
+	{ .red = 0.977534, .green = 0.613675, .blue = 0.030281 },
+	{ .red = 0.981685, .green = 0.565568, .blue = 0.033700 },
+	{ .red = 0.990476, .green = 0.527228, .blue = 0.024908 },
+	{ .red = 0.995849, .green = 0.493040, .blue = 0.019048 },
+	{ .red = 0.994383, .green = 0.461538, .blue = 0.023687 },
+	{ .red = 0.990232, .green = 0.432723, .blue = 0.023443 },
+	{ .red = 0.101832, .green = 0.896215, .blue = 0.062515 },
+	{ .red = 0.122344, .green = 0.900855, .blue = 0.016361 },
+	{ .red = 0.230525, .green = 0.903297, .blue = 0.020024 },
+	{ .red = 0.343101, .green = 0.907937, .blue = 0.014896 },
+	{ .red = 0.458608, .green = 0.913797, .blue = 0.014896 },
+	{ .red = 0.576801, .green = 0.920391, .blue = 0.020024 },
+	{ .red = 0.696703, .green = 0.927717, .blue = 0.015873 },
+	{ .red = 0.818315, .green = 0.934554, .blue = 0.021245 },
+	{ .red = 0.936508, .green = 0.936264, .blue = 0.016850 },
+	{ .red = 0.957998, .green = 0.845665, .blue = 0.023687 },
+	{ .red = 0.971184, .green = 0.768987, .blue = 0.027839 },
+	{ .red = 0.978022, .green = 0.703541, .blue = 0.039805 },
+	{ .red = 0.982173, .green = 0.648107, .blue = 0.041270 },
+	{ .red = 0.985836, .green = 0.600977, .blue = 0.037851 },
+	{ .red = 0.989011, .green = 0.560684, .blue = 0.032967 },
+	{ .red = 0.992674, .green = 0.526252, .blue = 0.028571 },
+	{ .red = 0.993651, .green = 0.494994, .blue = 0.022222 },
+	{ .red = 0.100366, .green = 0.930159, .blue = 0.065201 },
+	{ .red = 0.113309, .green = 0.935043, .blue = 0.025397 },
+	{ .red = 0.211233, .green = 0.936996, .blue = 0.016361 },
+	{ .red = 0.315263, .green = 0.939683, .blue = 0.012698 },
+	{ .red = 0.420757, .green = 0.943590, .blue = 0.013187 },
+	{ .red = 0.527717, .green = 0.947985, .blue = 0.012454 },
+	{ .red = 0.636142, .green = 0.952625, .blue = 0.015873 },
+	{ .red = 0.745543, .green = 0.957265, .blue = 0.017582 },
+	{ .red = 0.855922, .green = 0.961661, .blue = 0.019536 },
+	{ .red = 0.961172, .green = 0.960195, .blue = 0.018559 },
+	{ .red = 0.976801, .green = 0.873504, .blue = 0.019048 },
+	{ .red = 0.985348, .green = 0.798535, .blue = 0.021001 },
+	{ .red = 0.991453, .green = 0.736020, .blue = 0.022711 },
+	{ .red = 0.993407, .green = 0.680830, .blue = 0.029060 },
+	{ .red = 0.995116, .green = 0.633944, .blue = 0.027106 },
+	{ .red = 0.994628, .green = 0.592918, .blue = 0.029548 },
+	{ .red = 0.993407, .green = 0.556288, .blue = 0.026618 },
+	{ .red = 0.095238, .green = 0.952869, .blue = 0.073016 },
+	{ .red = 0.106227, .green = 0.956777, .blue = 0.047619 },
+	{ .red = 0.188034, .green = 0.960195, .blue = 0.012210 },
+	{ .red = 0.286691, .green = 0.961905, .blue = 0.014896 },
+	{ .red = 0.385348, .green = 0.963370, .blue = 0.027350 },
+	{ .red = 0.483272, .green = 0.966789, .blue = 0.018559 },
+	{ .red = 0.582418, .green = 0.969963, .blue = 0.010745 },
+	{ .red = 0.681807, .green = 0.972650, .blue = 0.020269 },
+	{ .red = 0.781929, .green = 0.975824, .blue = 0.016117 },
+	{ .red = 0.882051, .green = 0.978510, .blue = 0.020513 },
+	{ .red = 0.976313, .green = 0.975092, .blue = 0.019048 },
+	{ .red = 0.985592, .green = 0.891331, .blue = 0.045177 },
+	{ .red = 0.986081, .green = 0.816606, .blue = 0.055922 },
+	{ .red = 0.986569, .green = 0.754090, .blue = 0.054457 },
+	{ .red = 0.987057, .green = 0.700855, .blue = 0.050549 },
+	{ .red = 0.987057, .green = 0.654945, .blue = 0.046642 },
+	{ .red = 0.986813, .green = 0.614652, .blue = 0.041514 },
+	{ .red = 0.105983, .green = 0.965324, .blue = 0.085958 },
+	{ .red = 0.112332, .green = 0.969475, .blue = 0.067888 },
+	{ .red = 0.174115, .green = 0.973871, .blue = 0.039560 },
+	{ .red = 0.261783, .green = 0.976557, .blue = 0.017338 },
+	{ .red = 0.355067, .green = 0.976313, .blue = 0.039805 },
+	{ .red = 0.444444, .green = 0.979487, .blue = 0.022955 },
+	{ .red = 0.535531, .green = 0.981197, .blue = 0.023687 },
+	{ .red = 0.626618, .green = 0.981197, .blue = 0.048840 },
+	{ .red = 0.716972, .green = 0.982418, .blue = 0.057143 },
+	{ .red = 0.807570, .green = 0.984127, .blue = 0.063492 },
+	{ .red = 0.897924, .green = 0.985836, .blue = 0.071551 },
+	{ .red = 0.985348, .green = 0.983883, .blue = 0.019048 },
+	{ .red = 0.988278, .green = 0.902808, .blue = 0.068620 },
+	{ .red = 0.988523, .green = 0.832479, .blue = 0.063248 },
+	{ .red = 0.990476, .green = 0.773871, .blue = 0.052747 },
+	{ .red = 0.995116, .green = 0.725275, .blue = 0.036874 },
+	{ .red = 0.994628, .green = 0.680342, .blue = 0.032967 },
+	{ .red = 0.115507, .green = 0.973626, .blue = 0.093040 },
+	{ .red = 0.122100, .green = 0.976557, .blue = 0.080342 },
+	{ .red = 0.165568, .green = 0.981929, .blue = 0.052991 },
+	{ .red = 0.242491, .green = 0.985592, .blue = 0.031502 },
+	{ .red = 0.329182, .green = 0.984371, .blue = 0.047863 },
+	{ .red = 0.412210, .green = 0.985836, .blue = 0.045177 },
+	{ .red = 0.496215, .green = 0.984860, .blue = 0.060562 },
+	{ .red = 0.578999, .green = 0.987057, .blue = 0.055189 },
+	{ .red = 0.662515, .green = 0.991453, .blue = 0.018559 },
+	{ .red = 0.746032, .green = 0.991453, .blue = 0.041758 },
+	{ .red = 0.828327, .green = 0.990965, .blue = 0.062515 },
+	{ .red = 0.910134, .green = 0.990965, .blue = 0.080342 },
+	{ .red = 0.988278, .green = 0.987790, .blue = 0.063004 },
+	{ .red = 0.990720, .green = 0.912332, .blue = 0.075458 },
+	{ .red = 0.991941, .green = 0.846886, .blue = 0.060073 },
+	{ .red = 0.997558, .green = 0.793651, .blue = 0.031990 },
+	{ .red = 0.990965, .green = 0.740415, .blue = 0.048840 },
+	{ .red = 0.122344, .green = 0.979243, .blue = 0.095482 },
+	{ .red = 0.128205, .green = 0.981685, .blue = 0.085714 },
+	{ .red = 0.160928, .green = 0.986813, .blue = 0.061050 },
+	{ .red = 0.228571, .green = 0.990232, .blue = 0.044200 },
+	{ .red = 0.307204, .green = 0.989744, .blue = 0.050549 },
+	{ .red = 0.385348, .green = 0.988767, .blue = 0.060073 },
+	{ .red = 0.461538, .green = 0.989499, .blue = 0.061294 },
+	{ .red = 0.537241, .green = 0.993651, .blue = 0.037363 },
+	{ .red = 0.614408, .green = 0.990232, .blue = 0.068864 },
+	{ .red = 0.690598, .green = 0.989988, .blue = 0.077411 },
+	{ .red = 0.768010, .green = 0.994383, .blue = 0.055189 },
+	{ .red = 0.844933, .green = 0.995849, .blue = 0.049817 },
+	{ .red = 0.919414, .green = 0.994139, .blue = 0.081319 },
+	{ .red = 0.989499, .green = 0.989255, .blue = 0.080830 },
+	{ .red = 0.992430, .green = 0.920147, .blue = 0.077167 },
+	{ .red = 0.995360, .green = 0.859585, .blue = 0.052259 },
+	{ .red = 0.992918, .green = 0.804151, .blue = 0.052015 },
+	{ .red = 0.127717, .green = 0.982906, .blue = 0.095238 },
+	{ .red = 0.132601, .green = 0.984860, .blue = 0.087668 },
+	{ .red = 0.158730, .green = 0.989744, .blue = 0.065690 },
+	{ .red = 0.218071, .green = 0.992674, .blue = 0.052015 },
+	{ .red = 0.287668, .green = 0.993651, .blue = 0.047863 },
+	{ .red = 0.362637, .green = 0.989988, .blue = 0.069353 },
+	{ .red = 0.431013, .green = 0.993407, .blue = 0.054701 },
+	{ .red = 0.502808, .green = 0.991453, .blue = 0.069109 },
+	{ .red = 0.573382, .green = 0.992186, .blue = 0.069353 },
+	{ .red = 0.644444, .green = 0.995604, .blue = 0.051526 },
+	{ .red = 0.714530, .green = 0.992674, .blue = 0.076435 },
+	{ .red = 0.784615, .green = 0.992674, .blue = 0.083272 },
+	{ .red = 0.857631, .green = 0.997802, .blue = 0.047619 },
+	{ .red = 0.926252, .green = 0.995849, .blue = 0.079365 },
+	{ .red = 0.989988, .green = 0.990232, .blue = 0.089133 },
+	{ .red = 0.993407, .green = 0.926252, .blue = 0.076435 },
+	{ .red = 0.997314, .green = 0.870085, .blue = 0.042491 },
+	{ .red = 0.131868, .green = 0.985592, .blue = 0.093284 },
+	{ .red = 0.136020, .green = 0.987057, .blue = 0.087179 },
+	{ .red = 0.157998, .green = 0.991209, .blue = 0.068376 },
+	{ .red = 0.210256, .green = 0.993895, .blue = 0.056654 },
+	{ .red = 0.270085, .green = 0.996825, .blue = 0.038584 },
+	{ .red = 0.343101, .green = 0.990965, .blue = 0.072772 },
+	{ .red = 0.404884, .green = 0.995116, .blue = 0.054212 },
+	{ .red = 0.472772, .green = 0.991453, .blue = 0.074969 },
+	{ .red = 0.536752, .green = 0.997314, .blue = 0.043223 },
+	{ .red = 0.603419, .green = 0.991941, .blue = 0.077900 },
+	{ .red = 0.669109, .green = 0.994139, .blue = 0.070085 },
+	{ .red = 0.735287, .green = 0.995849, .blue = 0.063492 },
+	{ .red = 0.799512, .green = 0.993407, .blue = 0.085470 },
+	{ .red = 0.866178, .green = 0.995849, .blue = 0.074969 },
+	{ .red = 0.931624, .green = 0.996581, .blue = 0.076190 },
+	{ .red = 0.989988, .green = 0.990965, .blue = 0.092308 },
+	{ .red = 0.994383, .green = 0.931624, .blue = 0.074725 },
+	{ .red = 0.135287, .green = 0.987302, .blue = 0.090842 },
+	{ .red = 0.138706, .green = 0.988767, .blue = 0.085226 },
+	{ .red = 0.158486, .green = 0.992186, .blue = 0.069597 },
+	{ .red = 0.204640, .green = 0.994628, .blue = 0.059829 },
+	{ .red = 0.254457, .green = 0.999267, .blue = 0.022466 },
+	{ .red = 0.325763, .green = 0.991941, .blue = 0.073016 },
+	{ .red = 0.384615, .green = 0.993407, .blue = 0.066911 },
+	{ .red = 0.445665, .green = 0.993162, .blue = 0.070330 },
+	{ .red = 0.506716, .green = 0.993407, .blue = 0.070330 },
+	{ .red = 0.568010, .green = 0.993895, .blue = 0.069841 },
+	{ .red = 0.629304, .green = 0.995116, .blue = 0.065446 },
+	{ .red = 0.690110, .green = 0.992186, .blue = 0.084249 },
+	{ .red = 0.753358, .green = 0.998291, .blue = 0.046154 },
+	{ .red = 0.812698, .green = 0.994383, .blue = 0.081807 },
+	{ .red = 0.873748, .green = 0.995116, .blue = 0.083761 },
+	{ .red = 0.936020, .green = 0.997070, .blue = 0.073016 },
+	{ .red = 0.989988, .green = 0.991209, .blue = 0.092796 },
+	{ .red = 0.010745, .green = 0.008059, .blue = 0.156532 },
+	{ .red = 0.173382, .green = 0.005372, .blue = 0.173626 },
+	{ .red = 0.344078, .green = 0.008059, .blue = 0.169719 },
+	{ .red = 0.495971, .green = 0.007814, .blue = 0.163858 },
+	{ .red = 0.640293, .green = 0.014408, .blue = 0.159463 },
+	{ .red = 0.725763, .green = 0.015140, .blue = 0.143834 },
+	{ .red = 0.795360, .green = 0.013919, .blue = 0.129915 },
+	{ .red = 0.861050, .green = 0.012454, .blue = 0.121368 },
+	{ .red = 0.926252, .green = 0.014408, .blue = 0.116239 },
+	{ .red = 0.979976, .green = 0.025397, .blue = 0.111844 },
+	{ .red = 0.991209, .green = 0.059829, .blue = 0.106227 },
+	{ .red = 0.995849, .green = 0.075214, .blue = 0.101099 },
+	{ .red = 0.998046, .green = 0.084005, .blue = 0.096703 },
+	{ .red = 0.998779, .green = 0.090354, .blue = 0.092552 },
+	{ .red = 0.999267, .green = 0.095726, .blue = 0.088645 },
+	{ .red = 0.999756, .green = 0.100366, .blue = 0.084249 },
+	{ .red = 0.999512, .green = 0.109158, .blue = 0.082051 },
+	{ .red = 0.011722, .green = 0.216117, .blue = 0.216117 },
+	{ .red = 0.147253, .green = 0.147009, .blue = 0.147253 },
+	{ .red = 0.326007, .green = 0.137973, .blue = 0.143834 },
+	{ .red = 0.495726, .green = 0.120147, .blue = 0.139438 },
+	{ .red = 0.662759, .green = 0.088156, .blue = 0.134554 },
+	{ .red = 0.815140, .green = 0.010012, .blue = 0.128449 },
+	{ .red = 0.889866, .green = 0.015385, .blue = 0.119902 },
+	{ .red = 0.953358, .green = 0.013919, .blue = 0.114042 },
+	{ .red = 0.988034, .green = 0.051038, .blue = 0.109402 },
+	{ .red = 0.995116, .green = 0.075458, .blue = 0.104274 },
+	{ .red = 0.997802, .green = 0.087179, .blue = 0.099389 },
+	{ .red = 0.998779, .green = 0.094505, .blue = 0.094750 },
+	{ .red = 0.999267, .green = 0.099145, .blue = 0.091331 },
+	{ .red = 0.999512, .green = 0.105006, .blue = 0.088889 },
+	{ .red = 0.999512, .green = 0.119658, .blue = 0.089621 },
+	{ .red = 0.999512, .green = 0.135287, .blue = 0.091575 },
+	{ .red = 0.999512, .green = 0.148230, .blue = 0.093284 },
+	{ .red = 0.013675, .green = 0.354823, .blue = 0.199756 },
+	{ .red = 0.084493, .green = 0.298168, .blue = 0.128694 },
+	{ .red = 0.299389, .green = 0.296947, .blue = 0.134310 },
+	{ .red = 0.474969, .green = 0.293284, .blue = 0.131624 },
+	{ .red = 0.645665, .green = 0.286447, .blue = 0.124298 },
+	{ .red = 0.814164, .green = 0.275702, .blue = 0.115995 },
+	{ .red = 0.982418, .green = 0.259829, .blue = 0.108181 },
+	{ .red = 0.999267, .green = 0.239316, .blue = 0.108913 },
+	{ .red = 0.999756, .green = 0.232723, .blue = 0.114286 },
+	{ .red = 0.999512, .green = 0.231746, .blue = 0.119658 },
+	{ .red = 0.999267, .green = 0.232723, .blue = 0.124054 },
+	{ .red = 0.999267, .green = 0.234188, .blue = 0.127228 },
+	{ .red = 0.999267, .green = 0.233211, .blue = 0.128449 },
+	{ .red = 0.999267, .green = 0.231502, .blue = 0.128205 },
+	{ .red = 0.999267, .green = 0.230525, .blue = 0.127228 },
+	{ .red = 0.999267, .green = 0.230037, .blue = 0.126252 },
+	{ .red = 0.999267, .green = 0.229304, .blue = 0.124786 },
+	{ .red = 0.008303, .green = 0.469841, .blue = 0.183883 },
+	{ .red = 0.012698, .green = 0.454212, .blue = 0.132845 },
+	{ .red = 0.268376, .green = 0.445665, .blue = 0.097924 },
+	{ .red = 0.450794, .green = 0.446154, .blue = 0.105739 },
+	{ .red = 0.626862, .green = 0.443223, .blue = 0.104274 },
+	{ .red = 0.798779, .green = 0.437851, .blue = 0.097924 },
+	{ .red = 0.969719, .green = 0.429304, .blue = 0.088889 },
+	{ .red = 0.999512, .green = 0.387302, .blue = 0.101099 },
+	{ .red = 0.998779, .green = 0.353846, .blue = 0.112088 },
+	{ .red = 0.999267, .green = 0.330891, .blue = 0.118926 },
+	{ .red = 0.999023, .green = 0.314286, .blue = 0.123565 },
+	{ .red = 0.999756, .green = 0.302320, .blue = 0.127228 },
+	{ .red = 0.999267, .green = 0.292796, .blue = 0.129670 },
+	{ .red = 0.998779, .green = 0.284493, .blue = 0.130403 },
+	{ .red = 0.999023, .green = 0.276923, .blue = 0.129182 },
+	{ .red = 0.999512, .green = 0.269597, .blue = 0.126984 },
+	{ .red = 0.999756, .green = 0.262027, .blue = 0.123810 },
+	{ .red = 0.001954, .green = 0.578999, .blue = 0.172405 },
+	{ .red = 0.000000, .green = 0.581197, .blue = 0.134554 },
+	{ .red = 0.224908, .green = 0.591697, .blue = 0.009035 },
+	{ .red = 0.425153, .green = 0.594872, .blue = 0.011722 },
+	{ .red = 0.602442, .green = 0.595849, .blue = 0.011477 },
+	{ .red = 0.776801, .green = 0.590232, .blue = 0.013919 },
+	{ .red = 0.937973, .green = 0.579243, .blue = 0.010501 },
+	{ .red = 0.998535, .green = 0.529670, .blue = 0.074969 },
+	{ .red = 0.999512, .green = 0.474725, .blue = 0.102564 },
+	{ .red = 0.999267, .green = 0.433211, .blue = 0.113797 },
+	{ .red = 0.999512, .green = 0.401221, .blue = 0.119170 },
+	{ .red = 0.998779, .green = 0.377045, .blue = 0.124054 },
+	{ .red = 0.998535, .green = 0.357265, .blue = 0.126496 },
+	{ .red = 0.999023, .green = 0.340904, .blue = 0.126984 },
+	{ .red = 0.999512, .green = 0.326740, .blue = 0.125763 },
+	{ .red = 0.999267, .green = 0.313309, .blue = 0.123077 },
+	{ .red = 0.999756, .green = 0.301587, .blue = 0.120147 },
+	{ .red = 0.012698, .green = 0.683761, .blue = 0.163370 },
+	{ .red = 0.012210, .green = 0.692552, .blue = 0.131136 },
+	{ .red = 0.206593, .green = 0.713797, .blue = 0.012454 },
+	{ .red = 0.401465, .green = 0.724054, .blue = 0.012454 },
+	{ .red = 0.577534, .green = 0.735531, .blue = 0.007326 },
+	{ .red = 0.747009, .green = 0.741392, .blue = 0.013431 },
+	{ .red = 0.863980, .green = 0.696703, .blue = 0.014896 },
+	{ .red = 0.962882, .green = 0.654945, .blue = 0.018315 },
+	{ .red = 0.998779, .green = 0.596337, .blue = 0.077411 },
+	{ .red = 0.999756, .green = 0.539438, .blue = 0.105739 },
+	{ .red = 0.999267, .green = 0.494505, .blue = 0.116728 },
+	{ .red = 0.998779, .green = 0.457875, .blue = 0.120879 },
+	{ .red = 0.999023, .green = 0.427595, .blue = 0.121123 },
+	{ .red = 0.999512, .green = 0.401954, .blue = 0.119658 },
+	{ .red = 0.998779, .green = 0.381197, .blue = 0.119170 },
+	{ .red = 0.998535, .green = 0.362882, .blue = 0.117460 },
+	{ .red = 0.998779, .green = 0.346032, .blue = 0.114042 },
+	{ .red = 0.000000, .green = 0.780952, .blue = 0.154335 },
+	{ .red = 0.008547, .green = 0.791697, .blue = 0.125275 },
+	{ .red = 0.191941, .green = 0.814164, .blue = 0.013675 },
+	{ .red = 0.374359, .green = 0.821978, .blue = 0.010501 },
+	{ .red = 0.535775, .green = 0.830769, .blue = 0.012943 },
+	{ .red = 0.693284, .green = 0.838828, .blue = 0.007326 },
+	{ .red = 0.844444, .green = 0.840049, .blue = 0.013187 },
+	{ .red = 0.921368, .green = 0.771673, .blue = 0.017582 },
+	{ .red = 0.979731, .green = 0.710623, .blue = 0.035897 },
+	{ .red = 0.999267, .green = 0.646642, .blue = 0.085470 },
+	{ .red = 0.998779, .green = 0.589255, .blue = 0.109402 },
+	{ .red = 0.999756, .green = 0.543101, .blue = 0.117705 },
+	{ .red = 0.999756, .green = 0.504518, .blue = 0.119902 },
+	{ .red = 0.999267, .green = 0.471306, .blue = 0.118681 },
+	{ .red = 0.999267, .green = 0.442491, .blue = 0.115018 },
+	{ .red = 0.999023, .green = 0.417094, .blue = 0.110379 },
+	{ .red = 0.999512, .green = 0.394628, .blue = 0.105250 },
+	{ .red = 0.000000, .green = 0.852503, .blue = 0.143834 },
+	{ .red = 0.033455, .green = 0.862027, .blue = 0.118437 },
+	{ .red = 0.175824, .green = 0.882295, .blue = 0.014164 },
+	{ .red = 0.343346, .green = 0.887179, .blue = 0.015629 },
+	{ .red = 0.489866, .green = 0.893284, .blue = 0.011966 },
+	{ .red = 0.631746, .green = 0.899389, .blue = 0.015385 },
+	{ .red = 0.771917, .green = 0.904029, .blue = 0.021734 },
+	{ .red = 0.905739, .green = 0.902564, .blue = 0.015873 },
+	{ .red = 0.957998, .green = 0.823687, .blue = 0.015385 },
+	{ .red = 0.987546, .green = 0.750183, .blue = 0.054945 },
+	{ .red = 0.999023, .green = 0.686203, .blue = 0.094261 },
+	{ .red = 0.999023, .green = 0.629304, .blue = 0.111355 },
+	{ .red = 0.998779, .green = 0.582418, .blue = 0.116972 },
+	{ .red = 0.999756, .green = 0.542857, .blue = 0.116728 },
+	{ .red = 0.999756, .green = 0.508425, .blue = 0.114042 },
+	{ .red = 0.999512, .green = 0.477900, .blue = 0.109646 },
+	{ .red = 0.998779, .green = 0.450794, .blue = 0.104029 },
+	{ .red = 0.018071, .green = 0.901587, .blue = 0.134554 },
+	{ .red = 0.055922, .green = 0.908913, .blue = 0.114774 },
+	{ .red = 0.157509, .green = 0.927717, .blue = 0.016361 },
+	{ .red = 0.312088, .green = 0.930891, .blue = 0.011966 },
+	{ .red = 0.445421, .green = 0.934799, .blue = 0.012454 },
+	{ .red = 0.573871, .green = 0.938950, .blue = 0.016361 },
+	{ .red = 0.700366, .green = 0.942613, .blue = 0.015385 },
+	{ .red = 0.825397, .green = 0.945055, .blue = 0.021245 },
+	{ .red = 0.944078, .green = 0.941392, .blue = 0.016606 },
+	{ .red = 0.978755, .green = 0.858364, .blue = 0.032723 },
+	{ .red = 0.998779, .green = 0.785104, .blue = 0.063736 },
+	{ .red = 0.999512, .green = 0.717705, .blue = 0.100611 },
+	{ .red = 0.998779, .green = 0.662027, .blue = 0.111600 },
+	{ .red = 0.999267, .green = 0.615385, .blue = 0.113797 },
+	{ .red = 0.999512, .green = 0.575092, .blue = 0.112088 },
+	{ .red = 0.999756, .green = 0.539927, .blue = 0.107937 },
+	{ .red = 0.999756, .green = 0.508669, .blue = 0.102564 },
+	{ .red = 0.046642, .green = 0.934554, .blue = 0.127961 },
+	{ .red = 0.069109, .green = 0.940415, .blue = 0.111355 },
+	{ .red = 0.140171, .green = 0.957998, .blue = 0.013431 },
+	{ .red = 0.284249, .green = 0.959951, .blue = 0.014896 },
+	{ .red = 0.406105, .green = 0.961661, .blue = 0.027839 },
+	{ .red = 0.522100, .green = 0.964591, .blue = 0.023932 },
+	{ .red = 0.636386, .green = 0.967033, .blue = 0.025397 },
+	{ .red = 0.749939, .green = 0.969475, .blue = 0.015873 },
+	{ .red = 0.862271, .green = 0.970452, .blue = 0.018071 },
+	{ .red = 0.968010, .green = 0.964835, .blue = 0.018559 },
+	{ .red = 0.992186, .green = 0.883028, .blue = 0.030525 },
+	{ .red = 0.997558, .green = 0.806838, .blue = 0.086447 },
+	{ .red = 0.998779, .green = 0.743101, .blue = 0.104274 },
+	{ .red = 0.999267, .green = 0.689133, .blue = 0.109402 },
+	{ .red = 0.999023, .green = 0.642735, .blue = 0.109402 },
+	{ .red = 0.999267, .green = 0.602686, .blue = 0.105983 },
+	{ .red = 0.999267, .green = 0.567277, .blue = 0.100855 },
+	{ .red = 0.067643, .green = 0.954823, .blue = 0.127473 },
+	{ .red = 0.086447, .green = 0.958974, .blue = 0.115507 },
+	{ .red = 0.125031, .green = 0.976068, .blue = 0.039560 },
+	{ .red = 0.255189, .green = 0.979243, .blue = 0.018071 },
+	{ .red = 0.370696, .green = 0.977778, .blue = 0.047375 },
+	{ .red = 0.476190, .green = 0.979976, .blue = 0.043956 },
+	{ .red = 0.580220, .green = 0.982418, .blue = 0.037118 },
+	{ .red = 0.683272, .green = 0.982662, .blue = 0.048107 },
+	{ .red = 0.785348, .green = 0.983639, .blue = 0.052747 },
+	{ .red = 0.886447, .green = 0.984127, .blue = 0.056410 },
+	{ .red = 0.982173, .green = 0.979243, .blue = 0.019048 },
+	{ .red = 0.992918, .green = 0.895971, .blue = 0.077167 },
+	{ .red = 0.999023, .green = 0.825885, .blue = 0.093773 },
+	{ .red = 0.999512, .green = 0.764347, .blue = 0.103541 },
+	{ .red = 0.999267, .green = 0.711844, .blue = 0.105250 },
+	{ .red = 0.999023, .green = 0.666422, .blue = 0.103297 },
+	{ .red = 0.999023, .green = 0.626618, .blue = 0.098657 },
+	{ .red = 0.082295, .green = 0.968010, .blue = 0.126984 },
+	{ .red = 0.097924, .green = 0.970940, .blue = 0.117949 },
+	{ .red = 0.133333, .green = 0.983639, .blue = 0.070818 },
+	{ .red = 0.234188, .green = 0.989744, .blue = 0.040293 },
+	{ .red = 0.341636, .green = 0.987057, .blue = 0.062027 },
+	{ .red = 0.436142, .green = 0.991209, .blue = 0.041758 },
+	{ .red = 0.531868, .green = 0.991941, .blue = 0.043956 },
+	{ .red = 0.626129, .green = 0.990476, .blue = 0.061294 },
+	{ .red = 0.718926, .green = 0.990476, .blue = 0.069353 },
+	{ .red = 0.810989, .green = 0.990476, .blue = 0.074725 },
+	{ .red = 0.902076, .green = 0.990476, .blue = 0.083028 },
+	{ .red = 0.988767, .green = 0.986325, .blue = 0.056410 },
+	{ .red = 0.995849, .green = 0.908181, .blue = 0.088889 },
+	{ .red = 0.998779, .green = 0.840537, .blue = 0.097924 },
+	{ .red = 0.999023, .green = 0.781685, .blue = 0.101099 },
+	{ .red = 0.999267, .green = 0.731136, .blue = 0.099634 },
+	{ .red = 0.999023, .green = 0.686935, .blue = 0.095971 },
+	{ .red = 0.096703, .green = 0.976068, .blue = 0.126007 },
+	{ .red = 0.107448, .green = 0.978755, .blue = 0.117949 },
+	{ .red = 0.138950, .green = 0.988523, .blue = 0.083272 },
+	{ .red = 0.219048, .green = 0.995360, .blue = 0.053724 },
+	{ .red = 0.317705, .green = 0.992186, .blue = 0.071062 },
+	{ .red = 0.403663, .green = 0.996093, .blue = 0.056654 },
+	{ .red = 0.492796, .green = 0.993162, .blue = 0.077167 },
+	{ .red = 0.578022, .green = 0.993407, .blue = 0.080586 },
+	{ .red = 0.663004, .green = 0.996581, .blue = 0.067643 },
+	{ .red = 0.748230, .green = 0.998291, .blue = 0.056410 },
+	{ .red = 0.831746, .green = 0.996825, .blue = 0.069597 },
+	{ .red = 0.913797, .green = 0.995116, .blue = 0.087424 },
+	{ .red = 0.990720, .green = 0.989255, .blue = 0.087912 },
+	{ .red = 0.998779, .green = 0.918437, .blue = 0.091575 },
+	{ .red = 0.998779, .green = 0.852503, .blue = 0.096703 },
+	{ .red = 0.999267, .green = 0.796581, .blue = 0.096215 },
+	{ .red = 0.998779, .green = 0.747497, .blue = 0.093773 },
+	{ .red = 0.111844, .green = 0.980708, .blue = 0.125031 },
+	{ .red = 0.118926, .green = 0.982906, .blue = 0.117949 },
+	{ .red = 0.142369, .green = 0.991697, .blue = 0.088645 },
+	{ .red = 0.221001, .green = 0.999512, .blue = 0.083516 },
+	{ .red = 0.305250, .green = 0.997314, .blue = 0.091087 },
+	{ .red = 0.382173, .green = 0.999267, .blue = 0.084982 },
+	{ .red = 0.462027, .green = 0.996581, .blue = 0.094505 },
+	{ .red = 0.538706, .green = 0.999512, .blue = 0.084737 },
+	{ .red = 0.616606, .green = 0.999023, .blue = 0.087179 },
+	{ .red = 0.693284, .green = 0.996581, .blue = 0.097436 },
+	{ .red = 0.770208, .green = 0.997558, .blue = 0.093773 },
+	{ .red = 0.847863, .green = 0.999756, .blue = 0.079609 },
+	{ .red = 0.923565, .green = 0.998779, .blue = 0.087668 },
+	{ .red = 0.991697, .green = 0.991209, .blue = 0.102808 },
+	{ .red = 0.999267, .green = 0.925275, .blue = 0.093040 },
+	{ .red = 0.998535, .green = 0.863004, .blue = 0.094505 },
+	{ .red = 0.998046, .green = 0.809035, .blue = 0.091819 },
+	{ .red = 0.122100, .green = 0.983639, .blue = 0.122344 },
+	{ .red = 0.127961, .green = 0.985592, .blue = 0.116484 },
+	{ .red = 0.154335, .green = 0.995360, .blue = 0.098168 },
+	{ .red = 0.226374, .green = 0.999512, .blue = 0.103297 },
+	{ .red = 0.295238, .green = 0.999267, .blue = 0.103053 },
+	{ .red = 0.364347, .green = 0.999756, .blue = 0.100611 },
+	{ .red = 0.435897, .green = 0.998291, .blue = 0.104518 },
+	{ .red = 0.505495, .green = 0.999756, .blue = 0.098901 },
+	{ .red = 0.576557, .green = 0.997802, .blue = 0.104029 },
+	{ .red = 0.647131, .green = 0.998291, .blue = 0.101343 },
+	{ .red = 0.717949, .green = 0.998779, .blue = 0.098168 },
+	{ .red = 0.788034, .green = 0.997802, .blue = 0.102808 },
+	{ .red = 0.858852, .green = 0.998779, .blue = 0.096947 },
+	{ .red = 0.929670, .green = 0.999512, .blue = 0.093284 },
+	{ .red = 0.991941, .green = 0.991941, .blue = 0.107692 },
+	{ .red = 0.999023, .green = 0.930647, .blue = 0.090598 },
+	{ .red = 0.998291, .green = 0.871551, .blue = 0.088889 },
+	{ .red = 0.129182, .green = 0.985592, .blue = 0.118681 },
+	{ .red = 0.133333, .green = 0.987546, .blue = 0.113065 },
+	{ .red = 0.165568, .green = 0.996337, .blue = 0.105250 },
+	{ .red = 0.226862, .green = 0.999512, .blue = 0.110867 },
+	{ .red = 0.285714, .green = 0.999756, .blue = 0.108913 },
+	{ .red = 0.347985, .green = 1.000000, .blue = 0.107204 },
+	{ .red = 0.412210, .green = 0.999267, .blue = 0.107204 },
+	{ .red = 0.476190, .green = 0.999756, .blue = 0.103297 },
+	{ .red = 0.541636, .green = 0.999267, .blue = 0.103297 },
+	{ .red = 0.606838, .green = 0.999023, .blue = 0.102320 },
+	{ .red = 0.672039, .green = 0.997802, .blue = 0.105006 },
+	{ .red = 0.737729, .green = 0.999023, .blue = 0.098657 },
+	{ .red = 0.803175, .green = 0.998779, .blue = 0.098168 },
+	{ .red = 0.867888, .green = 0.998046, .blue = 0.104029 },
+	{ .red = 0.934310, .green = 0.999512, .blue = 0.092796 },
+	{ .red = 0.991941, .green = 0.992430, .blue = 0.108181 },
+	{ .red = 0.998779, .green = 0.935043, .blue = 0.086447 },
+	{ .red = 0.133333, .green = 0.987546, .blue = 0.113553 },
+	{ .red = 0.136508, .green = 0.989011, .blue = 0.108181 },
+	{ .red = 0.170940, .green = 0.997070, .blue = 0.107204 },
+	{ .red = 0.223932, .green = 0.999512, .blue = 0.112088 },
+	{ .red = 0.276190, .green = 0.999756, .blue = 0.110134 },
+	{ .red = 0.332357, .green = 1.000000, .blue = 0.108181 },
+	{ .red = 0.391209, .green = 0.999512, .blue = 0.107204 },
+	{ .red = 0.451282, .green = 0.998535, .blue = 0.107692 },
+	{ .red = 0.510867, .green = 0.999512, .blue = 0.101832 },
+	{ .red = 0.571673, .green = 0.998046, .blue = 0.105006 },
+	{ .red = 0.632479, .green = 0.998779, .blue = 0.099389 },
+	{ .red = 0.693284, .green = 0.997802, .blue = 0.101832 },
+	{ .red = 0.754823, .green = 0.999023, .blue = 0.095482 },
+	{ .red = 0.815873, .green = 0.999023, .blue = 0.093529 },
+	{ .red = 0.875702, .green = 0.997314, .blue = 0.103785 },
+	{ .red = 0.938462, .green = 0.999512, .blue = 0.088400 },
+	{ .red = 0.991453, .green = 0.992430, .blue = 0.106471 },
+	{ .red = 0.015385, .green = 0.007814, .blue = 0.294994 },
+	{ .red = 0.162882, .green = 0.007326, .blue = 0.296215 },
+	{ .red = 0.327961, .green = 0.007570, .blue = 0.328205 },
+	{ .red = 0.486935, .green = 0.006838, .blue = 0.320879 },
+	{ .red = 0.632967, .green = 0.010501, .blue = 0.313065 },
+	{ .red = 0.707937, .green = 0.013431, .blue = 0.280830 },
+	{ .red = 0.769963, .green = 0.010745, .blue = 0.254945 },
+	{ .red = 0.830281, .green = 0.010989, .blue = 0.237118 },
+	{ .red = 0.891575, .green = 0.012210, .blue = 0.224664 },
+	{ .red = 0.944567, .green = 0.013187, .blue = 0.213187 },
+	{ .red = 0.987790, .green = 0.018803, .blue = 0.202442 },
+	{ .red = 0.999267, .green = 0.049573, .blue = 0.188767 },
+	{ .red = 0.999512, .green = 0.070085, .blue = 0.176313 },
+	{ .red = 0.996337, .green = 0.081074, .blue = 0.164835 },
+	{ .red = 0.997558, .green = 0.086691, .blue = 0.154823 },
+	{ .red = 0.999267, .green = 0.090842, .blue = 0.145543 },
+	{ .red = 0.999756, .green = 0.096215, .blue = 0.137485 },
+	{ .red = 0.006838, .green = 0.154090, .blue = 0.289621 },
+	{ .red = 0.150183, .green = 0.137973, .blue = 0.297680 },
+	{ .red = 0.314286, .green = 0.133822, .blue = 0.313553 },
+	{ .red = 0.491331, .green = 0.110379, .blue = 0.310379 },
+	{ .red = 0.663248, .green = 0.059829, .blue = 0.303785 },
+	{ .red = 0.774115, .green = 0.016850, .blue = 0.284005 },
+	{ .red = 0.840781, .green = 0.016606, .blue = 0.260317 },
+	{ .red = 0.900855, .green = 0.010745, .blue = 0.242979 },
+	{ .red = 0.956288, .green = 0.015873, .blue = 0.229304 },
+	{ .red = 0.985836, .green = 0.049084, .blue = 0.214652 },
+	{ .red = 0.996337, .green = 0.066178, .blue = 0.199023 },
+	{ .red = 0.999267, .green = 0.077656, .blue = 0.184860 },
+	{ .red = 0.999267, .green = 0.087424, .blue = 0.172894 },
+	{ .red = 0.998535, .green = 0.092552, .blue = 0.161905 },
+	{ .red = 0.999756, .green = 0.109158, .blue = 0.155067 },
+	{ .red = 0.999756, .green = 0.123321, .blue = 0.149206 },
+	{ .red = 0.999512, .green = 0.135775, .blue = 0.144322 },
+	{ .red = 0.021490, .green = 0.377289, .blue = 0.377289 },
+	{ .red = 0.021245, .green = 0.306960, .blue = 0.308425 },
+	{ .red = 0.295238, .green = 0.294750, .blue = 0.294994 },
+	{ .red = 0.478632, .green = 0.287668, .blue = 0.292308 },
+	{ .red = 0.652747, .green = 0.276679, .blue = 0.289133 },
+	{ .red = 0.823199, .green = 0.261294, .blue = 0.285226 },
+	{ .red = 0.992186, .green = 0.240049, .blue = 0.282784 },
+	{ .red = 0.999512, .green = 0.226862, .blue = 0.259341 },
+	{ .red = 0.999267, .green = 0.223932, .blue = 0.242002 },
+	{ .red = 0.999267, .green = 0.223443, .blue = 0.227839 },
+	{ .red = 0.999512, .green = 0.223687, .blue = 0.216117 },
+	{ .red = 0.998535, .green = 0.223687, .blue = 0.205861 },
+	{ .red = 0.999267, .green = 0.222955, .blue = 0.197070 },
+	{ .red = 0.999756, .green = 0.221978, .blue = 0.188767 },
+	{ .red = 0.998779, .green = 0.221978, .blue = 0.181441 },
+	{ .red = 0.998779, .green = 0.221490, .blue = 0.174359 },
+	{ .red = 0.999023, .green = 0.220757, .blue = 0.168010 },
+	{ .red = 0.024176, .green = 0.494505, .blue = 0.355800 },
+	{ .red = 0.013431, .green = 0.476190, .blue = 0.325763 },
+	{ .red = 0.249817, .green = 0.447375, .blue = 0.280098 },
+	{ .red = 0.447863, .green = 0.444933, .blue = 0.284982 },
+	{ .red = 0.625641, .green = 0.441758, .blue = 0.282295 },
+	{ .red = 0.800000, .green = 0.435653, .blue = 0.276190 },
+	{ .red = 0.972161, .green = 0.425885, .blue = 0.271062 },
+	{ .red = 0.999267, .green = 0.410745, .blue = 0.275458 },
+	{ .red = 0.999267, .green = 0.396825, .blue = 0.274969 },
+	{ .red = 0.999023, .green = 0.385104, .blue = 0.270085 },
+	{ .red = 0.999023, .green = 0.374603, .blue = 0.263004 },
+	{ .red = 0.998779, .green = 0.364347, .blue = 0.254701 },
+	{ .red = 0.998779, .green = 0.354090, .blue = 0.245910 },
+	{ .red = 0.999267, .green = 0.344078, .blue = 0.236386 },
+	{ .red = 0.999512, .green = 0.335043, .blue = 0.227106 },
+	{ .red = 0.999267, .green = 0.326252, .blue = 0.217827 },
+	{ .red = 0.998535, .green = 0.317949, .blue = 0.209035 },
+	{ .red = 0.014408, .green = 0.596093, .blue = 0.335775 },
+	{ .red = 0.021001, .green = 0.594872, .blue = 0.317949 },
+	{ .red = 0.164835, .green = 0.597314, .blue = 0.259585 },
+	{ .red = 0.419048, .green = 0.594383, .blue = 0.263492 },
+	{ .red = 0.599756, .green = 0.594383, .blue = 0.269353 },
+	{ .red = 0.778510, .green = 0.590965, .blue = 0.268620 },
+	{ .red = 0.952381, .green = 0.584615, .blue = 0.264957 },
+	{ .red = 0.999023, .green = 0.544811, .blue = 0.273993 },
+	{ .red = 0.999512, .green = 0.511111, .blue = 0.281563 },
+	{ .red = 0.998291, .green = 0.488400, .blue = 0.285470 },
+	{ .red = 0.999267, .green = 0.472039, .blue = 0.286203 },
+	{ .red = 0.999267, .green = 0.458608, .blue = 0.284737 },
+	{ .red = 0.999756, .green = 0.446398, .blue = 0.280830 },
+	{ .red = 0.999512, .green = 0.434676, .blue = 0.274969 },
+	{ .red = 0.999512, .green = 0.422711, .blue = 0.267155 },
+	{ .red = 0.999023, .green = 0.410501, .blue = 0.257875 },
+	{ .red = 0.999512, .green = 0.397802, .blue = 0.247863 },
+	{ .red = 0.018803, .green = 0.693773, .blue = 0.320635 },
+	{ .red = 0.016361, .green = 0.699878, .blue = 0.307692 },
+	{ .red = 0.010989, .green = 0.734066, .blue = 0.248107 },
+	{ .red = 0.375580, .green = 0.743346, .blue = 0.232723 },
+	{ .red = 0.571917, .green = 0.742857, .blue = 0.240781 },
+	{ .red = 0.746276, .green = 0.738462, .blue = 0.243956 },
+	{ .red = 0.914774, .green = 0.725763, .blue = 0.240049 },
+	{ .red = 0.998779, .green = 0.678877, .blue = 0.254212 },
+	{ .red = 0.999267, .green = 0.619048, .blue = 0.272283 },
+	{ .red = 0.998779, .green = 0.576068, .blue = 0.278632 },
+	{ .red = 0.999512, .green = 0.543346, .blue = 0.279121 },
+	{ .red = 0.998779, .green = 0.516972, .blue = 0.276679 },
+	{ .red = 0.998779, .green = 0.495971, .blue = 0.273016 },
+	{ .red = 0.999267, .green = 0.476923, .blue = 0.266667 },
+	{ .red = 0.998779, .green = 0.459341, .blue = 0.259341 },
+	{ .red = 0.999512, .green = 0.442491, .blue = 0.250061 },
+	{ .red = 0.998779, .green = 0.426618, .blue = 0.240537 },
+	{ .red = 0.015140, .green = 0.785348, .blue = 0.306716 },
+	{ .red = 0.014408, .green = 0.793895, .blue = 0.295726 },
+	{ .red = 0.025885, .green = 0.833700, .blue = 0.246642 },
+	{ .red = 0.303053, .green = 0.878632, .blue = 0.184371 },
+	{ .red = 0.522589, .green = 0.871306, .blue = 0.191453 },
+	{ .red = 0.698657, .green = 0.860562, .blue = 0.196093 },
+	{ .red = 0.855922, .green = 0.845665, .blue = 0.195849 },
+	{ .red = 0.999756, .green = 0.819536, .blue = 0.195116 },
+	{ .red = 0.998779, .green = 0.731380, .blue = 0.249817 },
+	{ .red = 0.998535, .green = 0.669353, .blue = 0.266422 },
+	{ .red = 0.999512, .green = 0.622955, .blue = 0.270818 },
+	{ .red = 0.999267, .green = 0.585104, .blue = 0.269353 },
+	{ .red = 0.998291, .green = 0.553358, .blue = 0.264469 },
+	{ .red = 0.999512, .green = 0.525763, .blue = 0.256899 },
+	{ .red = 0.998779, .green = 0.500855, .blue = 0.248107 },
+	{ .red = 0.999267, .green = 0.479609, .blue = 0.240049 },
+	{ .red = 0.998779, .green = 0.460073, .blue = 0.231502 },
+	{ .red = 0.019292, .green = 0.853724, .blue = 0.288645 },
+	{ .red = 0.018803, .green = 0.862027, .blue = 0.278877 },
+	{ .red = 0.010989, .green = 0.899145, .blue = 0.235409 },
+	{ .red = 0.164591, .green = 0.983883, .blue = 0.092552 },
+	{ .red = 0.449573, .green = 0.973138, .blue = 0.105495 },
+	{ .red = 0.634188, .green = 0.958730, .blue = 0.115751 },
+	{ .red = 0.791209, .green = 0.940904, .blue = 0.121123 },
+	{ .red = 0.931624, .green = 0.919414, .blue = 0.120391 },
+	{ .red = 0.999756, .green = 0.851526, .blue = 0.198779 },
+	{ .red = 0.999023, .green = 0.768498, .blue = 0.244200 },
+	{ .red = 0.998779, .green = 0.706716, .blue = 0.257143 },
+	{ .red = 0.999023, .green = 0.657875, .blue = 0.259341 },
+	{ .red = 0.999512, .green = 0.617582, .blue = 0.256166 },
+	{ .red = 0.999512, .green = 0.582906, .blue = 0.249817 },
+	{ .red = 0.999267, .green = 0.552381, .blue = 0.241758 },
+	{ .red = 0.999023, .green = 0.524542, .blue = 0.232234 },
+	{ .red = 0.999023, .green = 0.499634, .blue = 0.221978 },
+	{ .red = 0.016117, .green = 0.901832, .blue = 0.269109 },
+	{ .red = 0.000000, .green = 0.909402, .blue = 0.260073 },
+	{ .red = 0.000000, .green = 0.941148, .blue = 0.221490 },
+	{ .red = 0.188034, .green = 0.997558, .blue = 0.136264 },
+	{ .red = 0.402442, .green = 0.999512, .blue = 0.128449 },
+	{ .red = 0.564347, .green = 0.998779, .blue = 0.112576 },
+	{ .red = 0.712576, .green = 0.995116, .blue = 0.083028 },
+	{ .red = 0.851526, .green = 0.985104, .blue = 0.032234 },
+	{ .red = 0.975824, .green = 0.963614, .blue = 0.018559 },
+	{ .red = 0.999756, .green = 0.874481, .blue = 0.203419 },
+	{ .red = 0.999267, .green = 0.795849, .blue = 0.237118 },
+	{ .red = 0.999023, .green = 0.735043, .blue = 0.245665 },
+	{ .red = 0.999267, .green = 0.685470, .blue = 0.245665 },
+	{ .red = 0.999512, .green = 0.643712, .blue = 0.241026 },
+	{ .red = 0.998779, .green = 0.607082, .blue = 0.234188 },
+	{ .red = 0.999023, .green = 0.575092, .blue = 0.225641 },
+	{ .red = 0.999267, .green = 0.546032, .blue = 0.216117 },
+	{ .red = 0.018071, .green = 0.935043, .blue = 0.249817 },
+	{ .red = 0.031746, .green = 0.941392, .blue = 0.242247 },
+	{ .red = 0.027106, .green = 0.968010, .blue = 0.207326 },
+	{ .red = 0.232234, .green = 0.999512, .blue = 0.175092 },
+	{ .red = 0.391209, .green = 0.999267, .blue = 0.180220 },
+	{ .red = 0.518926, .green = 0.999023, .blue = 0.174603 },
+	{ .red = 0.640781, .green = 0.999267, .blue = 0.163126 },
+	{ .red = 0.761416, .green = 0.999512, .blue = 0.140659 },
+	{ .red = 0.881563, .green = 0.996825, .blue = 0.102320 },
+	{ .red = 0.992918, .green = 0.982906, .blue = 0.064225 },
+	{ .red = 0.999512, .green = 0.891087, .blue = 0.205861 },
+	{ .red = 0.999267, .green = 0.816850, .blue = 0.228327 },
+	{ .red = 0.998779, .green = 0.757265, .blue = 0.233211 },
+	{ .red = 0.999756, .green = 0.708181, .blue = 0.230769 },
+	{ .red = 0.999512, .green = 0.665690, .blue = 0.225397 },
+	{ .red = 0.998779, .green = 0.628083, .blue = 0.218315 },
+	{ .red = 0.999023, .green = 0.595360, .blue = 0.209768 },
+	{ .red = 0.055678, .green = 0.955311, .blue = 0.235409 },
+	{ .red = 0.051526, .green = 0.961172, .blue = 0.227839 },
+	{ .red = 0.087668, .green = 0.979243, .blue = 0.201465 },
+	{ .red = 0.260562, .green = 0.999512, .blue = 0.200733 },
+	{ .red = 0.386813, .green = 0.999756, .blue = 0.211233 },
+	{ .red = 0.488889, .green = 0.999512, .blue = 0.207082 },
+	{ .red = 0.590232, .green = 0.999756, .blue = 0.199512 },
+	{ .red = 0.692063, .green = 0.999512, .blue = 0.190965 },
+	{ .red = 0.794383, .green = 0.999023, .blue = 0.178266 },
+	{ .red = 0.898901, .green = 0.999756, .blue = 0.152625 },
+	{ .red = 0.996093, .green = 0.989499, .blue = 0.129426 },
+	{ .red = 0.999267, .green = 0.903541, .blue = 0.204151 },
+	{ .red = 0.998779, .green = 0.832967, .blue = 0.218315 },
+	{ .red = 0.999267, .green = 0.775580, .blue = 0.219536 },
+	{ .red = 0.999267, .green = 0.726740, .blue = 0.215873 },
+	{ .red = 0.999756, .green = 0.684737, .blue = 0.209768 },
+	{ .red = 0.998535, .green = 0.646886, .blue = 0.202930 },
+	{ .red = 0.041514, .green = 0.970940, .blue = 0.219780 },
+	{ .red = 0.027350, .green = 0.976313, .blue = 0.212454 },
+	{ .red = 0.115751, .green = 0.984860, .blue = 0.196093 },
+	{ .red = 0.278877, .green = 0.999512, .blue = 0.215629 },
+	{ .red = 0.385104, .green = 0.999512, .blue = 0.230281 },
+	{ .red = 0.467643, .green = 0.999512, .blue = 0.225885 },
+	{ .red = 0.552869, .green = 0.999267, .blue = 0.220513 },
+	{ .red = 0.639805, .green = 0.999267, .blue = 0.213675 },
+	{ .red = 0.728205, .green = 0.999023, .blue = 0.205861 },
+	{ .red = 0.818559, .green = 1.000000, .blue = 0.194139 },
+	{ .red = 0.909890, .green = 0.999512, .blue = 0.181929 },
+	{ .red = 0.994628, .green = 0.991209, .blue = 0.168010 },
+	{ .red = 0.999512, .green = 0.913309, .blue = 0.199756 },
+	{ .red = 0.999512, .green = 0.846642, .blue = 0.206349 },
+	{ .red = 0.999023, .green = 0.790476, .blue = 0.205617 },
+	{ .red = 0.998779, .green = 0.742857, .blue = 0.201465 },
+	{ .red = 0.999267, .green = 0.701099, .blue = 0.195116 },
+	{ .red = 0.058852, .green = 0.979976, .blue = 0.206838 },
+	{ .red = 0.084493, .green = 0.981197, .blue = 0.203663 },
+	{ .red = 0.135043, .green = 0.989988, .blue = 0.190965 },
+	{ .red = 0.289377, .green = 0.999267, .blue = 0.222711 },
+	{ .red = 0.382418, .green = 0.999267, .blue = 0.240049 },
+	{ .red = 0.450061, .green = 0.999512, .blue = 0.235165 },
+	{ .red = 0.522833, .green = 0.998779, .blue = 0.230525 },
+	{ .red = 0.598046, .green = 0.999023, .blue = 0.223687 },
+	{ .red = 0.675702, .green = 0.999023, .blue = 0.217338 },
+	{ .red = 0.755067, .green = 0.999023, .blue = 0.210012 },
+	{ .red = 0.836142, .green = 0.999512, .blue = 0.201709 },
+	{ .red = 0.917949, .green = 0.999512, .blue = 0.194383 },
+	{ .red = 0.993895, .green = 0.992186, .blue = 0.181929 },
+	{ .red = 0.999267, .green = 0.920635, .blue = 0.191697 },
+	{ .red = 0.999756, .green = 0.857875, .blue = 0.194139 },
+	{ .red = 0.999023, .green = 0.803663, .blue = 0.191941 },
+	{ .red = 0.998779, .green = 0.757021, .blue = 0.187546 },
+	{ .red = 0.101343, .green = 0.981685, .blue = 0.199023 },
+	{ .red = 0.111355, .green = 0.983394, .blue = 0.195604 },
+	{ .red = 0.158486, .green = 0.995604, .blue = 0.189499 },
+	{ .red = 0.293040, .green = 0.999267, .blue = 0.223687 },
+	{ .red = 0.376313, .green = 0.999267, .blue = 0.242491 },
+	{ .red = 0.433455, .green = 0.999512, .blue = 0.237363 },
+	{ .red = 0.496703, .green = 0.999023, .blue = 0.232479 },
+	{ .red = 0.562882, .green = 0.999267, .blue = 0.225885 },
+	{ .red = 0.631990, .green = 0.999512, .blue = 0.219048 },
+	{ .red = 0.703297, .green = 0.999267, .blue = 0.212943 },
+	{ .red = 0.776068, .green = 0.999512, .blue = 0.206105 },
+	{ .red = 0.849573, .green = 0.999023, .blue = 0.201465 },
+	{ .red = 0.924542, .green = 0.999512, .blue = 0.195604 },
+	{ .red = 0.993407, .green = 0.992918, .blue = 0.184615 },
+	{ .red = 0.999512, .green = 0.927228, .blue = 0.182662 },
+	{ .red = 0.999267, .green = 0.866911, .blue = 0.182173 },
+	{ .red = 0.999756, .green = 0.815629, .blue = 0.178266 },
+	{ .red = 0.114530, .green = 0.984127, .blue = 0.189255 },
+	{ .red = 0.118193, .green = 0.986325, .blue = 0.185104 },
+	{ .red = 0.172894, .green = 0.999023, .blue = 0.186325 },
+	{ .red = 0.291819, .green = 0.999267, .blue = 0.220513 },
+	{ .red = 0.367277, .green = 0.999023, .blue = 0.239560 },
+	{ .red = 0.416850, .green = 0.999512, .blue = 0.234188 },
+	{ .red = 0.472527, .green = 0.999267, .blue = 0.229304 },
+	{ .red = 0.532357, .green = 0.998779, .blue = 0.224420 },
+	{ .red = 0.594383, .green = 0.999267, .blue = 0.217094 },
+	{ .red = 0.659096, .green = 0.998779, .blue = 0.211722 },
+	{ .red = 0.725275, .green = 0.999023, .blue = 0.205128 },
+	{ .red = 0.792674, .green = 0.999512, .blue = 0.198291 },
+	{ .red = 0.860562, .green = 0.998779, .blue = 0.195360 },
+	{ .red = 0.929670, .green = 0.999267, .blue = 0.190476 },
+	{ .red = 0.992918, .green = 0.993162, .blue = 0.180952 },
+	{ .red = 0.999756, .green = 0.932601, .blue = 0.171673 },
+	{ .red = 0.999267, .green = 0.875214, .blue = 0.170208 },
+	{ .red = 0.109646, .green = 0.988523, .blue = 0.176313 },
+	{ .red = 0.108425, .green = 0.991697, .blue = 0.171673 },
+	{ .red = 0.184860, .green = 0.999267, .blue = 0.183150 },
+	{ .red = 0.286935, .green = 0.999267, .blue = 0.214164 },
+	{ .red = 0.355800, .green = 0.999023, .blue = 0.232967 },
+	{ .red = 0.400000, .green = 0.999756, .blue = 0.227839 },
+	{ .red = 0.450305, .green = 0.999267, .blue = 0.223199 },
+	{ .red = 0.504518, .green = 0.999023, .blue = 0.218315 },
+	{ .red = 0.561416, .green = 0.999267, .blue = 0.211722 },
+	{ .red = 0.620513, .green = 0.999267, .blue = 0.205861 },
+	{ .red = 0.681319, .green = 0.999267, .blue = 0.200000 },
+	{ .red = 0.743346, .green = 0.998779, .blue = 0.195360 },
+	{ .red = 0.806593, .green = 0.999512, .blue = 0.188278 },
+	{ .red = 0.870085, .green = 0.999267, .blue = 0.185104 },
+	{ .red = 0.934310, .green = 0.999267, .blue = 0.181441 },
+	{ .red = 0.992674, .green = 0.993407, .blue = 0.174115 },
+	{ .red = 0.999756, .green = 0.936996, .blue = 0.160195 },
+	{ .red = 0.087424, .green = 0.994872, .blue = 0.160195 },
+	{ .red = 0.103297, .green = 0.999023, .blue = 0.159951 },
+	{ .red = 0.191209, .green = 0.999267, .blue = 0.178022 },
+	{ .red = 0.280586, .green = 0.999512, .blue = 0.206349 },
+	{ .red = 0.342857, .green = 0.999023, .blue = 0.223687 },
+	{ .red = 0.382906, .green = 0.999756, .blue = 0.218803 },
+	{ .red = 0.429548, .green = 0.999023, .blue = 0.215140 },
+	{ .red = 0.478877, .green = 0.999756, .blue = 0.209280 },
+	{ .red = 0.531868, .green = 0.999023, .blue = 0.204884 },
+	{ .red = 0.586325, .green = 0.999756, .blue = 0.198046 },
+	{ .red = 0.642735, .green = 0.999267, .blue = 0.193407 },
+	{ .red = 0.700611, .green = 0.999512, .blue = 0.187302 },
+	{ .red = 0.758974, .green = 0.998779, .blue = 0.184127 },
+	{ .red = 0.818559, .green = 0.999512, .blue = 0.177778 },
+	{ .red = 0.878388, .green = 0.999512, .blue = 0.172894 },
+	{ .red = 0.938217, .green = 0.999267, .blue = 0.171429 },
+	{ .red = 0.992674, .green = 0.993651, .blue = 0.164591 },
+	{ .red = 0.016117, .green = 0.017338, .blue = 0.421490 },
+	{ .red = 0.157509, .green = 0.010989, .blue = 0.424664 },
+	{ .red = 0.316972, .green = 0.011722, .blue = 0.442002 },
+	{ .red = 0.470085, .green = 0.010501, .blue = 0.470085 },
+	{ .red = 0.613675, .green = 0.012210, .blue = 0.456410 },
+	{ .red = 0.688889, .green = 0.015140, .blue = 0.409524 },
+	{ .red = 0.751160, .green = 0.010256, .blue = 0.372894 },
+	{ .red = 0.809280, .green = 0.017094, .blue = 0.346520 },
+	{ .red = 0.865690, .green = 0.018071, .blue = 0.326496 },
+	{ .red = 0.916484, .green = 0.018071, .blue = 0.309402 },
+	{ .red = 0.958730, .green = 0.020024, .blue = 0.293040 },
+	{ .red = 0.980952, .green = 0.036386, .blue = 0.274725 },
+	{ .red = 0.992430, .green = 0.054701, .blue = 0.257631 },
+	{ .red = 0.999023, .green = 0.063980, .blue = 0.241270 },
+	{ .red = 0.999756, .green = 0.075458, .blue = 0.226129 },
+	{ .red = 0.997314, .green = 0.082784, .blue = 0.211722 },
+	{ .red = 0.998291, .green = 0.087668, .blue = 0.199512 },
+	{ .red = 0.000000, .green = 0.143346, .blue = 0.415629 },
+	{ .red = 0.150427, .green = 0.119170, .blue = 0.449084 },
+	{ .red = 0.313309, .green = 0.123077, .blue = 0.451526 },
+	{ .red = 0.476435, .green = 0.096459, .blue = 0.480342 },
+	{ .red = 0.652503, .green = 0.014896, .blue = 0.476435 },
+	{ .red = 0.751160, .green = 0.013919, .blue = 0.432234 },
+	{ .red = 0.814408, .green = 0.010745, .blue = 0.390720 },
+	{ .red = 0.870818, .green = 0.014408, .blue = 0.361172 },
+	{ .red = 0.925275, .green = 0.008791, .blue = 0.338950 },
+	{ .red = 0.969719, .green = 0.015629, .blue = 0.318926 },
+	{ .red = 0.994139, .green = 0.039560, .blue = 0.297680 },
+	{ .red = 0.991697, .green = 0.063736, .blue = 0.273748 },
+	{ .red = 0.996337, .green = 0.073748, .blue = 0.255433 },
+	{ .red = 0.999267, .green = 0.079121, .blue = 0.238584 },
+	{ .red = 0.999512, .green = 0.100122, .blue = 0.226129 },
+	{ .red = 0.999267, .green = 0.117216, .blue = 0.215140 },
+	{ .red = 0.999267, .green = 0.129915, .blue = 0.205617 },
+	{ .red = 0.014164, .green = 0.273993, .blue = 0.389255 },
+	{ .red = 0.069353, .green = 0.284737, .blue = 0.460317 },
+	{ .red = 0.299389, .green = 0.286935, .blue = 0.445665 },
+	{ .red = 0.464957, .green = 0.285470, .blue = 0.460562 },
+	{ .red = 0.645177, .green = 0.271551, .blue = 0.461050 },
+	{ .red = 0.820269, .green = 0.253236, .blue = 0.455922 },
+	{ .red = 0.991941, .green = 0.228327, .blue = 0.452015 },
+	{ .red = 0.998535, .green = 0.216361, .blue = 0.401954 },
+	{ .red = 0.998535, .green = 0.214164, .blue = 0.365079 },
+	{ .red = 0.999512, .green = 0.214652, .blue = 0.336752 },
+	{ .red = 0.999267, .green = 0.215873, .blue = 0.313553 },
+	{ .red = 0.999023, .green = 0.217338, .blue = 0.294261 },
+	{ .red = 0.998779, .green = 0.218315, .blue = 0.277411 },
+	{ .red = 0.999267, .green = 0.219292, .blue = 0.263248 },
+	{ .red = 0.999267, .green = 0.219292, .blue = 0.249817 },
+	{ .red = 0.999023, .green = 0.219292, .blue = 0.237851 },
+	{ .red = 0.999023, .green = 0.219536, .blue = 0.227106 },
+	{ .red = 0.021734, .green = 0.507937, .blue = 0.508181 },
+	{ .red = 0.010989, .green = 0.487424, .blue = 0.488645 },
+	{ .red = 0.224176, .green = 0.446398, .blue = 0.447863 },
+	{ .red = 0.442979, .green = 0.442491, .blue = 0.442735 },
+	{ .red = 0.629060, .green = 0.435897, .blue = 0.440537 },
+	{ .red = 0.806349, .green = 0.426618, .blue = 0.438584 },
+	{ .red = 0.979731, .green = 0.414408, .blue = 0.437118 },
+	{ .red = 0.998779, .green = 0.401221, .blue = 0.416361 },
+	{ .red = 0.999267, .green = 0.390720, .blue = 0.395360 },
+	{ .red = 0.999512, .green = 0.380952, .blue = 0.375580 },
+	{ .red = 0.999023, .green = 0.371917, .blue = 0.357265 },
+	{ .red = 0.998535, .green = 0.362882, .blue = 0.339927 },
+	{ .red = 0.999023, .green = 0.353602, .blue = 0.323565 },
+	{ .red = 0.999512, .green = 0.344567, .blue = 0.307937 },
+	{ .red = 0.999023, .green = 0.336020, .blue = 0.293040 },
+	{ .red = 0.999267, .green = 0.327473, .blue = 0.279121 },
+	{ .red = 0.999267, .green = 0.318926, .blue = 0.265690 },
+	{ .red = 0.029060, .green = 0.611966, .blue = 0.485226 },
+	{ .red = 0.024176, .green = 0.609035, .blue = 0.475214 },
+	{ .red = 0.022466, .green = 0.600244, .blue = 0.432479 },
+	{ .red = 0.401465, .green = 0.595604, .blue = 0.429060 },
+	{ .red = 0.596093, .green = 0.592674, .blue = 0.433700 },
+	{ .red = 0.776801, .green = 0.589255, .blue = 0.431258 },
+	{ .red = 0.951893, .green = 0.581685, .blue = 0.425153 },
+	{ .red = 0.998779, .green = 0.564591, .blue = 0.433944 },
+	{ .red = 0.998779, .green = 0.546032, .blue = 0.435653 },
+	{ .red = 0.998535, .green = 0.529426, .blue = 0.428571 },
+	{ .red = 0.999023, .green = 0.513065, .blue = 0.416606 },
+	{ .red = 0.999267, .green = 0.497192, .blue = 0.402198 },
+	{ .red = 0.998046, .green = 0.481074, .blue = 0.386081 },
+	{ .red = 0.999023, .green = 0.465446, .blue = 0.369231 },
+	{ .red = 0.999756, .green = 0.450061, .blue = 0.352137 },
+	{ .red = 0.998779, .green = 0.434921, .blue = 0.335287 },
+	{ .red = 0.998779, .green = 0.420024, .blue = 0.318681 },
+	{ .red = 0.023443, .green = 0.705739, .blue = 0.465446 },
+	{ .red = 0.017094, .green = 0.709646, .blue = 0.458608 },
+	{ .red = 0.028083, .green = 0.730159, .blue = 0.431502 },
+	{ .red = 0.340659, .green = 0.746764, .blue = 0.411966 },
+	{ .red = 0.567033, .green = 0.741392, .blue = 0.414652 },
+	{ .red = 0.742613, .green = 0.736264, .blue = 0.417338 },
+	{ .red = 0.911111, .green = 0.723321, .blue = 0.411233 },
+	{ .red = 0.998535, .green = 0.687668, .blue = 0.419048 },
+	{ .red = 0.999023, .green = 0.649084, .blue = 0.435653 },
+	{ .red = 0.998779, .green = 0.625885, .blue = 0.444444 },
+	{ .red = 0.999023, .green = 0.610012, .blue = 0.447619 },
+	{ .red = 0.999023, .green = 0.596825, .blue = 0.446642 },
+	{ .red = 0.999512, .green = 0.584615, .blue = 0.441514 },
+	{ .red = 0.998535, .green = 0.571917, .blue = 0.433211 },
+	{ .red = 0.998535, .green = 0.558486, .blue = 0.421978 },
+	{ .red = 0.999023, .green = 0.539683, .blue = 0.403175 },
+	{ .red = 0.999023, .green = 0.520391, .blue = 0.384127 },
+	{ .red = 0.020757, .green = 0.792186, .blue = 0.446642 },
+	{ .red = 0.019292, .green = 0.798535, .blue = 0.441270 },
+	{ .red = 0.031502, .green = 0.827595, .blue = 0.419536 },
+	{ .red = 0.237118, .green = 0.881563, .blue = 0.383639 },
+	{ .red = 0.515507, .green = 0.869597, .blue = 0.380952 },
+	{ .red = 0.693529, .green = 0.858364, .blue = 0.383150 },
+	{ .red = 0.851770, .green = 0.843223, .blue = 0.379976 },
+	{ .red = 0.998779, .green = 0.819048, .blue = 0.372650 },
+	{ .red = 0.999267, .green = 0.747253, .blue = 0.411477 },
+	{ .red = 0.999023, .green = 0.701587, .blue = 0.426129 },
+	{ .red = 0.998535, .green = 0.668620, .blue = 0.430281 },
+	{ .red = 0.998535, .green = 0.642735, .blue = 0.428327 },
+	{ .red = 0.999267, .green = 0.621734, .blue = 0.423443 },
+	{ .red = 0.999756, .green = 0.602442, .blue = 0.415629 },
+	{ .red = 0.999267, .green = 0.584371, .blue = 0.405372 },
+	{ .red = 0.998779, .green = 0.566300, .blue = 0.392918 },
+	{ .red = 0.999023, .green = 0.548962, .blue = 0.378999 },
+	{ .red = 0.026618, .green = 0.856410, .blue = 0.421734 },
+	{ .red = 0.020513, .green = 0.863492, .blue = 0.416850 },
+	{ .red = 0.013431, .green = 0.892796, .blue = 0.396825 },
+	{ .red = 0.047375, .green = 0.970940, .blue = 0.348474 },
+	{ .red = 0.439805, .green = 0.971184, .blue = 0.335775 },
+	{ .red = 0.628327, .green = 0.956532, .blue = 0.337485 },
+	{ .red = 0.786325, .green = 0.938462, .blue = 0.336020 },
+	{ .red = 0.927717, .green = 0.916728, .blue = 0.330647 },
+	{ .red = 0.999023, .green = 0.855678, .blue = 0.365324 },
+	{ .red = 0.999023, .green = 0.785348, .blue = 0.398046 },
+	{ .red = 0.999512, .green = 0.736508, .blue = 0.408547 },
+	{ .red = 0.999023, .green = 0.698657, .blue = 0.409768 },
+	{ .red = 0.998535, .green = 0.667155, .blue = 0.405128 },
+	{ .red = 0.998535, .green = 0.639805, .blue = 0.396825 },
+	{ .red = 0.999023, .green = 0.615140, .blue = 0.385592 },
+	{ .red = 0.998291, .green = 0.592430, .blue = 0.373626 },
+	{ .red = 0.999267, .green = 0.571917, .blue = 0.361416 },
+	{ .red = 0.023932, .green = 0.902564, .blue = 0.394628 },
+	{ .red = 0.027839, .green = 0.908913, .blue = 0.389988 },
+	{ .red = 0.026618, .green = 0.935287, .blue = 0.371429 },
+	{ .red = 0.115507, .green = 0.991453, .blue = 0.332112 },
+	{ .red = 0.416361, .green = 0.999512, .blue = 0.339194 },
+	{ .red = 0.571673, .green = 0.999512, .blue = 0.329670 },
+	{ .red = 0.712821, .green = 0.999512, .blue = 0.307448 },
+	{ .red = 0.853236, .green = 0.991697, .blue = 0.281319 },
+	{ .red = 0.979243, .green = 0.966300, .blue = 0.275458 },
+	{ .red = 0.998535, .green = 0.879365, .blue = 0.355800 },
+	{ .red = 0.999267, .green = 0.811477, .blue = 0.380220 },
+	{ .red = 0.998779, .green = 0.760684, .blue = 0.386813 },
+	{ .red = 0.998535, .green = 0.719658, .blue = 0.385348 },
+	{ .red = 0.998779, .green = 0.685226, .blue = 0.378999 },
+	{ .red = 0.999023, .green = 0.654945, .blue = 0.369475 },
+	{ .red = 0.998535, .green = 0.627350, .blue = 0.357998 },
+	{ .red = 0.999512, .green = 0.602198, .blue = 0.345055 },
+	{ .red = 0.024908, .green = 0.935043, .blue = 0.367521 },
+	{ .red = 0.027350, .green = 0.940659, .blue = 0.363126 },
+	{ .red = 0.039072, .green = 0.963126, .blue = 0.346032 },
+	{ .red = 0.193407, .green = 0.998779, .blue = 0.325763 },
+	{ .red = 0.429060, .green = 0.999023, .blue = 0.356777 },
+	{ .red = 0.552137, .green = 0.999023, .blue = 0.359707 },
+	{ .red = 0.656654, .green = 0.999512, .blue = 0.344567 },
+	{ .red = 0.766789, .green = 0.999023, .blue = 0.325763 },
+	{ .red = 0.883028, .green = 0.999023, .blue = 0.295238 },
+	{ .red = 0.999512, .green = 0.988278, .blue = 0.257631 },
+	{ .red = 0.999267, .green = 0.896215, .blue = 0.342613 },
+	{ .red = 0.999756, .green = 0.830769, .blue = 0.359219 },
+	{ .red = 0.999023, .green = 0.778755, .blue = 0.362637 },
+	{ .red = 0.999512, .green = 0.736508, .blue = 0.358974 },
+	{ .red = 0.998779, .green = 0.699878, .blue = 0.351893 },
+	{ .red = 0.998779, .green = 0.667643, .blue = 0.342125 },
+	{ .red = 0.999023, .green = 0.638584, .blue = 0.330891 },
+	{ .red = 0.041026, .green = 0.956288, .blue = 0.343101 },
+	{ .red = 0.058120, .green = 0.960195, .blue = 0.339438 },
+	{ .red = 0.053480, .green = 0.979731, .blue = 0.323565 },
+	{ .red = 0.243712, .green = 0.999023, .blue = 0.324054 },
+	{ .red = 0.434432, .green = 0.999023, .blue = 0.364103 },
+	{ .red = 0.541880, .green = 0.999512, .blue = 0.377045 },
+	{ .red = 0.621978, .green = 0.999023, .blue = 0.364835 },
+	{ .red = 0.708669, .green = 0.998535, .blue = 0.350916 },
+	{ .red = 0.801465, .green = 0.999267, .blue = 0.332357 },
+	{ .red = 0.899389, .green = 0.998779, .blue = 0.312332 },
+	{ .red = 0.999512, .green = 0.992674, .blue = 0.273260 },
+	{ .red = 0.999267, .green = 0.908425, .blue = 0.327228 },
+	{ .red = 0.999267, .green = 0.844444, .blue = 0.337729 },
+	{ .red = 0.999512, .green = 0.793162, .blue = 0.337973 },
+	{ .red = 0.999023, .green = 0.749939, .blue = 0.333333 },
+	{ .red = 0.998779, .green = 0.712332, .blue = 0.325763 },
+	{ .red = 0.999267, .green = 0.679365, .blue = 0.315995 },
+	{ .red = 0.045665, .green = 0.970940, .blue = 0.320391 },
+	{ .red = 0.069109, .green = 0.973382, .blue = 0.317460 },
+	{ .red = 0.062759, .green = 0.990232, .blue = 0.302564 },
+	{ .red = 0.273260, .green = 0.998779, .blue = 0.320391 },
+	{ .red = 0.435165, .green = 0.999023, .blue = 0.363858 },
+	{ .red = 0.533578, .green = 0.999267, .blue = 0.385104 },
+	{ .red = 0.596581, .green = 0.998779, .blue = 0.373871 },
+	{ .red = 0.666422, .green = 0.999023, .blue = 0.359951 },
+	{ .red = 0.742857, .green = 0.998779, .blue = 0.346032 },
+	{ .red = 0.824664, .green = 0.999512, .blue = 0.330403 },
+	{ .red = 0.910623, .green = 0.998779, .blue = 0.317216 },
+	{ .red = 0.997558, .green = 0.993895, .blue = 0.281807 },
+	{ .red = 0.999023, .green = 0.916972, .blue = 0.310867 },
+	{ .red = 0.999512, .green = 0.855922, .blue = 0.315995 },
+	{ .red = 0.998779, .green = 0.804884, .blue = 0.314530 },
+	{ .red = 0.999267, .green = 0.761905, .blue = 0.308669 },
+	{ .red = 0.998779, .green = 0.723810, .blue = 0.301343 },
+	{ .red = 0.016606, .green = 0.981929, .blue = 0.298413 },
+	{ .red = 0.025153, .green = 0.985592, .blue = 0.294994 },
+	{ .red = 0.119170, .green = 0.989988, .blue = 0.287912 },
+	{ .red = 0.290598, .green = 0.999023, .blue = 0.315018 },
+	{ .red = 0.431013, .green = 0.999023, .blue = 0.358486 },
+	{ .red = 0.524054, .green = 0.999023, .blue = 0.385104 },
+	{ .red = 0.574603, .green = 0.999023, .blue = 0.373871 },
+	{ .red = 0.632479, .green = 0.999267, .blue = 0.360684 },
+	{ .red = 0.697192, .green = 0.999267, .blue = 0.347741 },
+	{ .red = 0.767033, .green = 0.999023, .blue = 0.334799 },
+	{ .red = 0.841514, .green = 0.999512, .blue = 0.321856 },
+	{ .red = 0.918681, .green = 0.998779, .blue = 0.312576 },
+	{ .red = 0.995849, .green = 0.994383, .blue = 0.281074 },
+	{ .red = 0.999267, .green = 0.924298, .blue = 0.292796 },
+	{ .red = 0.999267, .green = 0.864957, .blue = 0.294750 },
+	{ .red = 0.998779, .green = 0.815140, .blue = 0.292063 },
+	{ .red = 0.999512, .green = 0.772650, .blue = 0.286203 },
+	{ .red = 0.100366, .green = 0.982418, .blue = 0.283516 },
+	{ .red = 0.106960, .green = 0.984371, .blue = 0.280830 },
+	{ .red = 0.140171, .green = 0.998046, .blue = 0.275214 },
+	{ .red = 0.298901, .green = 0.998779, .blue = 0.306960 },
+	{ .red = 0.422711, .green = 0.999267, .blue = 0.348718 },
+	{ .red = 0.511111, .green = 0.998779, .blue = 0.378755 },
+	{ .red = 0.553602, .green = 0.998779, .blue = 0.368010 },
+	{ .red = 0.603419, .green = 0.998779, .blue = 0.356288 },
+	{ .red = 0.658852, .green = 0.999512, .blue = 0.342857 },
+	{ .red = 0.719902, .green = 0.998779, .blue = 0.331868 },
+	{ .red = 0.785348, .green = 0.999023, .blue = 0.319902 },
+	{ .red = 0.854212, .green = 0.999756, .blue = 0.308181 },
+	{ .red = 0.925275, .green = 0.999267, .blue = 0.300855 },
+	{ .red = 0.994872, .green = 0.994628, .blue = 0.273504 },
+	{ .red = 0.998535, .green = 0.929426, .blue = 0.275458 },
+	{ .red = 0.999512, .green = 0.873260, .blue = 0.274481 },
+	{ .red = 0.999267, .green = 0.824664, .blue = 0.271062 },
+	{ .red = 0.089377, .green = 0.988767, .blue = 0.264469 },
+	{ .red = 0.097192, .green = 0.990476, .blue = 0.262271 },
+	{ .red = 0.170940, .green = 0.999267, .blue = 0.266911 },
+	{ .red = 0.300366, .green = 0.998779, .blue = 0.296947 },
+	{ .red = 0.410745, .green = 0.999756, .blue = 0.335531 },
+	{ .red = 0.494994, .green = 0.999267, .blue = 0.366789 },
+	{ .red = 0.532357, .green = 0.999023, .blue = 0.357265 },
+	{ .red = 0.575580, .green = 0.999756, .blue = 0.345543 },
+	{ .red = 0.625397, .green = 0.999023, .blue = 0.334799 },
+	{ .red = 0.679609, .green = 0.999512, .blue = 0.322833 },
+	{ .red = 0.738217, .green = 0.999267, .blue = 0.312088 },
+	{ .red = 0.799756, .green = 0.998779, .blue = 0.302808 },
+	{ .red = 0.864225, .green = 0.999267, .blue = 0.292796 },
+	{ .red = 0.930403, .green = 0.999267, .blue = 0.286447 },
+	{ .red = 0.994139, .green = 0.994628, .blue = 0.262271 },
+	{ .red = 0.998535, .green = 0.933822, .blue = 0.258364 },
+	{ .red = 0.999267, .green = 0.880098, .blue = 0.255922 },
+	{ .red = 0.123077, .green = 0.986325, .blue = 0.252503 },
+	{ .red = 0.130647, .green = 0.987790, .blue = 0.251038 },
+	{ .red = 0.190965, .green = 0.998535, .blue = 0.258608 },
+	{ .red = 0.298901, .green = 0.998779, .blue = 0.286203 },
+	{ .red = 0.397070, .green = 0.999756, .blue = 0.321123 },
+	{ .red = 0.476679, .green = 0.999512, .blue = 0.351893 },
+	{ .red = 0.511111, .green = 0.998535, .blue = 0.344078 },
+	{ .red = 0.550183, .green = 0.999267, .blue = 0.333578 },
+	{ .red = 0.594872, .green = 0.999267, .blue = 0.323321 },
+	{ .red = 0.643956, .green = 0.999756, .blue = 0.312332 },
+	{ .red = 0.697192, .green = 0.999512, .blue = 0.302076 },
+	{ .red = 0.753358, .green = 0.999267, .blue = 0.293040 },
+	{ .red = 0.811722, .green = 0.998535, .blue = 0.285226 },
+	{ .red = 0.872527, .green = 0.999023, .blue = 0.276679 },
+	{ .red = 0.934310, .green = 0.999267, .blue = 0.270818 },
+	{ .red = 0.993651, .green = 0.994383, .blue = 0.248840 },
+	{ .red = 0.998535, .green = 0.937973, .blue = 0.242491 },
+	{ .red = 0.126252, .green = 0.988767, .blue = 0.238339 },
+	{ .red = 0.141392, .green = 0.992186, .blue = 0.239805 },
+	{ .red = 0.199267, .green = 0.999023, .blue = 0.248596 },
+	{ .red = 0.294750, .green = 0.998779, .blue = 0.274969 },
+	{ .red = 0.382906, .green = 0.999512, .blue = 0.306227 },
+	{ .red = 0.458120, .green = 0.999267, .blue = 0.336020 },
+	{ .red = 0.489621, .green = 0.998779, .blue = 0.328938 },
+	{ .red = 0.525763, .green = 0.999267, .blue = 0.319902 },
+	{ .red = 0.566789, .green = 0.999512, .blue = 0.310379 },
+	{ .red = 0.611966, .green = 0.999756, .blue = 0.300611 },
+	{ .red = 0.661050, .green = 0.999512, .blue = 0.291087 },
+	{ .red = 0.712821, .green = 0.999512, .blue = 0.282051 },
+	{ .red = 0.766545, .green = 0.998779, .blue = 0.274969 },
+	{ .red = 0.822711, .green = 0.999023, .blue = 0.266667 },
+	{ .red = 0.880098, .green = 0.999267, .blue = 0.259829 },
+	{ .red = 0.938217, .green = 0.999267, .blue = 0.254945 },
+	{ .red = 0.993407, .green = 0.994383, .blue = 0.235165 },
+	{ .red = 0.026618, .green = 0.072039, .blue = 0.524542 },
+	{ .red = 0.152381, .green = 0.013675, .blue = 0.548230 },
+	{ .red = 0.309646, .green = 0.013919, .blue = 0.561172 },
+	{ .red = 0.461294, .green = 0.017338, .blue = 0.580220 },
+	{ .red = 0.584860, .green = 0.014652, .blue = 0.584615 },
+	{ .red = 0.673504, .green = 0.016361, .blue = 0.535043 },
+	{ .red = 0.740171, .green = 0.012698, .blue = 0.489866 },
+	{ .red = 0.794872, .green = 0.012698, .blue = 0.452991 },
+	{ .red = 0.848840, .green = 0.015140, .blue = 0.425641 },
+	{ .red = 0.896703, .green = 0.015629, .blue = 0.402198 },
+	{ .red = 0.936996, .green = 0.017338, .blue = 0.380464 },
+	{ .red = 0.968742, .green = 0.017094, .blue = 0.359463 },
+	{ .red = 0.986813, .green = 0.037118, .blue = 0.338217 },
+	{ .red = 0.996093, .green = 0.052015, .blue = 0.317460 },
+	{ .red = 0.999512, .green = 0.061538, .blue = 0.297436 },
+	{ .red = 0.995604, .green = 0.071306, .blue = 0.277900 },
+	{ .red = 0.996093, .green = 0.080342, .blue = 0.262027 },
+	{ .red = 0.000000, .green = 0.131868, .blue = 0.519414 },
+	{ .red = 0.149939, .green = 0.075702, .blue = 0.603419 },
+	{ .red = 0.312576, .green = 0.102320, .blue = 0.593651 },
+	{ .red = 0.474481, .green = 0.074237, .blue = 0.614652 },
+	{ .red = 0.620513, .green = 0.010256, .blue = 0.626618 },
+	{ .red = 0.728938, .green = 0.013431, .blue = 0.576068 },
+	{ .red = 0.799267, .green = 0.015629, .blue = 0.521612 },
+	{ .red = 0.851282, .green = 0.018559, .blue = 0.476923 },
+	{ .red = 0.903297, .green = 0.018559, .blue = 0.445177 },
+	{ .red = 0.948962, .green = 0.014164, .blue = 0.418315 },
+	{ .red = 0.980220, .green = 0.026129, .blue = 0.391941 },
+	{ .red = 0.986081, .green = 0.047619, .blue = 0.361905 },
+	{ .red = 0.992186, .green = 0.061050, .blue = 0.336996 },
+	{ .red = 0.997802, .green = 0.070085, .blue = 0.315507 },
+	{ .red = 0.999267, .green = 0.089621, .blue = 0.297192 },
+	{ .red = 0.999023, .green = 0.110867, .blue = 0.281807 },
+	{ .red = 0.999512, .green = 0.126496, .blue = 0.268620 },
+	{ .red = 0.010501, .green = 0.247863, .blue = 0.462759 },
+	{ .red = 0.109158, .green = 0.267155, .blue = 0.613675 },
+	{ .red = 0.301587, .green = 0.276190, .blue = 0.595604 },
+	{ .red = 0.465201, .green = 0.278144, .blue = 0.600977 },
+	{ .red = 0.629548, .green = 0.267643, .blue = 0.627839 },
+	{ .red = 0.807326, .green = 0.247863, .blue = 0.628816 },
+	{ .red = 0.982418, .green = 0.221490, .blue = 0.623932 },
+	{ .red = 0.999267, .green = 0.211722, .blue = 0.548230 },
+	{ .red = 0.999756, .green = 0.210745, .blue = 0.490110 },
+	{ .red = 0.999267, .green = 0.211233, .blue = 0.445910 },
+	{ .red = 0.999512, .green = 0.212698, .blue = 0.411722 },
+	{ .red = 0.999267, .green = 0.214652, .blue = 0.383394 },
+	{ .red = 0.998535, .green = 0.216117, .blue = 0.359463 },
+	{ .red = 0.999756, .green = 0.217338, .blue = 0.339194 },
+	{ .red = 0.999023, .green = 0.218071, .blue = 0.320391 },
+	{ .red = 0.999512, .green = 0.219048, .blue = 0.304274 },
+	{ .red = 0.999512, .green = 0.219048, .blue = 0.289377 },
+	{ .red = 0.012943, .green = 0.401954, .blue = 0.514530 },
+	{ .red = 0.021734, .green = 0.403419, .blue = 0.535775 },
+	{ .red = 0.252503, .green = 0.432479, .blue = 0.609280 },
+	{ .red = 0.449084, .green = 0.434676, .blue = 0.593162 },
+	{ .red = 0.614652, .green = 0.434432, .blue = 0.607814 },
+	{ .red = 0.796825, .green = 0.422955, .blue = 0.610745 },
+	{ .red = 0.973871, .green = 0.409280, .blue = 0.608059 },
+	{ .red = 0.998535, .green = 0.399023, .blue = 0.557265 },
+	{ .red = 0.998779, .green = 0.389988, .blue = 0.514774 },
+	{ .red = 0.999756, .green = 0.381197, .blue = 0.481074 },
+	{ .red = 0.999512, .green = 0.372650, .blue = 0.452015 },
+	{ .red = 0.999756, .green = 0.364347, .blue = 0.426618 },
+	{ .red = 0.998535, .green = 0.355556, .blue = 0.403419 },
+	{ .red = 0.999267, .green = 0.347009, .blue = 0.382418 },
+	{ .red = 0.999512, .green = 0.338217, .blue = 0.362393 },
+	{ .red = 0.999023, .green = 0.329426, .blue = 0.343834 },
+	{ .red = 0.999023, .green = 0.321123, .blue = 0.326496 },
+	{ .red = 0.023443, .green = 0.622466, .blue = 0.622711 },
+	{ .red = 0.021978, .green = 0.617827, .blue = 0.618559 },
+	{ .red = 0.017827, .green = 0.599267, .blue = 0.602442 },
+	{ .red = 0.381929, .green = 0.594139, .blue = 0.595849 },
+	{ .red = 0.590965, .green = 0.590232, .blue = 0.590476 },
+	{ .red = 0.778755, .green = 0.583639, .blue = 0.589744 },
+	{ .red = 0.955311, .green = 0.573138, .blue = 0.587057 },
+	{ .red = 0.999267, .green = 0.559219, .blue = 0.570696 },
+	{ .red = 0.999023, .green = 0.545055, .blue = 0.549939 },
+	{ .red = 0.999023, .green = 0.530647, .blue = 0.528694 },
+	{ .red = 0.999023, .green = 0.515995, .blue = 0.506960 },
+	{ .red = 0.999267, .green = 0.500855, .blue = 0.485226 },
+	{ .red = 0.999756, .green = 0.485470, .blue = 0.463004 },
+	{ .red = 0.998535, .green = 0.469841, .blue = 0.441026 },
+	{ .red = 0.998779, .green = 0.454457, .blue = 0.419536 },
+	{ .red = 0.998779, .green = 0.439072, .blue = 0.398291 },
+	{ .red = 0.998779, .green = 0.423932, .blue = 0.378022 },
+	{ .red = 0.023687, .green = 0.717216, .blue = 0.599512 },
+	{ .red = 0.021978, .green = 0.719902, .blue = 0.597558 },
+	{ .red = 0.025397, .green = 0.732601, .blue = 0.589744 },
+	{ .red = 0.294994, .green = 0.748718, .blue = 0.580708 },
+	{ .red = 0.549451, .green = 0.741636, .blue = 0.575824 },
+	{ .red = 0.736996, .green = 0.733089, .blue = 0.575824 },
+	{ .red = 0.906227, .green = 0.719414, .blue = 0.566056 },
+	{ .red = 0.999023, .green = 0.697192, .blue = 0.568498 },
+	{ .red = 0.998046, .green = 0.678877, .blue = 0.581441 },
+	{ .red = 0.998291, .green = 0.659829, .blue = 0.576801 },
+	{ .red = 0.998779, .green = 0.640781, .blue = 0.564347 },
+	{ .red = 0.998779, .green = 0.621734, .blue = 0.547497 },
+	{ .red = 0.998291, .green = 0.601954, .blue = 0.527717 },
+	{ .red = 0.999512, .green = 0.582173, .blue = 0.505983 },
+	{ .red = 0.999023, .green = 0.562149, .blue = 0.483516 },
+	{ .red = 0.998291, .green = 0.541880, .blue = 0.460562 },
+	{ .red = 0.999023, .green = 0.522344, .blue = 0.437607 },
+	{ .red = 0.016850, .green = 0.799756, .blue = 0.576068 },
+	{ .red = 0.012454, .green = 0.804884, .blue = 0.574115 },
+	{ .red = 0.018071, .green = 0.826862, .blue = 0.566789 },
+	{ .red = 0.125763, .green = 0.883028, .blue = 0.552869 },
+	{ .red = 0.483028, .green = 0.870574, .blue = 0.545788 },
+	{ .red = 0.686691, .green = 0.854701, .blue = 0.540904 },
+	{ .red = 0.845665, .green = 0.839072, .blue = 0.536508 },
+	{ .red = 0.996581, .green = 0.816606, .blue = 0.523810 },
+	{ .red = 0.998535, .green = 0.764835, .blue = 0.559951 },
+	{ .red = 0.998291, .green = 0.736752, .blue = 0.575336 },
+	{ .red = 0.999023, .green = 0.719658, .blue = 0.582662 },
+	{ .red = 0.999512, .green = 0.706471, .blue = 0.583394 },
+	{ .red = 0.999267, .green = 0.694261, .blue = 0.579487 },
+	{ .red = 0.998535, .green = 0.679853, .blue = 0.568987 },
+	{ .red = 0.998291, .green = 0.656654, .blue = 0.546520 },
+	{ .red = 0.999756, .green = 0.633455, .blue = 0.521612 },
+	{ .red = 0.999756, .green = 0.610989, .blue = 0.497924 },
+	{ .red = 0.023443, .green = 0.860562, .blue = 0.545055 },
+	{ .red = 0.024664, .green = 0.866178, .blue = 0.542857 },
+	{ .red = 0.021978, .green = 0.889621, .blue = 0.534554 },
+	{ .red = 0.031013, .green = 0.948962, .blue = 0.517216 },
+	{ .red = 0.391209, .green = 0.972405, .blue = 0.503541 },
+	{ .red = 0.620513, .green = 0.952869, .blue = 0.495726 },
+	{ .red = 0.779731, .green = 0.934554, .blue = 0.493040 },
+	{ .red = 0.921856, .green = 0.912821, .blue = 0.484737 },
+	{ .red = 0.998535, .green = 0.859829, .blue = 0.509646 },
+	{ .red = 0.999023, .green = 0.804640, .blue = 0.542125 },
+	{ .red = 0.999267, .green = 0.769475, .blue = 0.553846 },
+	{ .red = 0.999756, .green = 0.743346, .blue = 0.555800 },
+	{ .red = 0.998291, .green = 0.721612, .blue = 0.552381 },
+	{ .red = 0.999023, .green = 0.703541, .blue = 0.545788 },
+	{ .red = 0.998535, .green = 0.685958, .blue = 0.536020 },
+	{ .red = 0.999267, .green = 0.668620, .blue = 0.523077 },
+	{ .red = 0.999023, .green = 0.651282, .blue = 0.508425 },
+	{ .red = 0.026618, .green = 0.904274, .blue = 0.511111 },
+	{ .red = 0.027106, .green = 0.909890, .blue = 0.508913 },
+	{ .red = 0.018803, .green = 0.931868, .blue = 0.499878 },
+	{ .red = 0.078144, .green = 0.980464, .blue = 0.481563 },
+	{ .red = 0.379976, .green = 0.998779, .blue = 0.482295 },
+	{ .red = 0.575580, .green = 0.998535, .blue = 0.483272 },
+	{ .red = 0.710379, .green = 0.999267, .blue = 0.459585 },
+	{ .red = 0.847131, .green = 0.988278, .blue = 0.438584 },
+	{ .red = 0.973871, .green = 0.962637, .blue = 0.429548 },
+	{ .red = 0.998535, .green = 0.885714, .blue = 0.492308 },
+	{ .red = 0.999023, .green = 0.829548, .blue = 0.517460 },
+	{ .red = 0.998779, .green = 0.789988, .blue = 0.525275 },
+	{ .red = 0.999023, .green = 0.758974, .blue = 0.524542 },
+	{ .red = 0.998291, .green = 0.732357, .blue = 0.518437 },
+	{ .red = 0.999267, .green = 0.708669, .blue = 0.508181 },
+	{ .red = 0.999756, .green = 0.686447, .blue = 0.495238 },
+	{ .red = 0.998291, .green = 0.666422, .blue = 0.482784 },
+	{ .red = 0.028327, .green = 0.935531, .blue = 0.477411 },
+	{ .red = 0.031502, .green = 0.940415, .blue = 0.474969 },
+	{ .red = 0.050794, .green = 0.959219, .blue = 0.466178 },
+	{ .red = 0.136508, .green = 0.995849, .blue = 0.451038 },
+	{ .red = 0.405128, .green = 0.999267, .blue = 0.473260 },
+	{ .red = 0.573382, .green = 0.998779, .blue = 0.498413 },
+	{ .red = 0.678632, .green = 0.999267, .blue = 0.492552 },
+	{ .red = 0.774603, .green = 0.998779, .blue = 0.468620 },
+	{ .red = 0.883272, .green = 0.999267, .blue = 0.434432 },
+	{ .red = 0.998535, .green = 0.987790, .blue = 0.396093 },
+	{ .red = 0.999023, .green = 0.902564, .blue = 0.470085 },
+	{ .red = 0.999267, .green = 0.846398, .blue = 0.488400 },
+	{ .red = 0.998779, .green = 0.803907, .blue = 0.492796 },
+	{ .red = 0.999023, .green = 0.769719, .blue = 0.489377 },
+	{ .red = 0.999023, .green = 0.740171, .blue = 0.482051 },
+	{ .red = 0.999023, .green = 0.713553, .blue = 0.471306 },
+	{ .red = 0.999267, .green = 0.689133, .blue = 0.458608 },
+	{ .red = 0.046886, .green = 0.956288, .blue = 0.446154 },
+	{ .red = 0.050061, .green = 0.960440, .blue = 0.443712 },
+	{ .red = 0.062271, .green = 0.976557, .blue = 0.434921 },
+	{ .red = 0.211477, .green = 0.999267, .blue = 0.432234 },
+	{ .red = 0.419536, .green = 0.999512, .blue = 0.463492 },
+	{ .red = 0.568742, .green = 0.998779, .blue = 0.500366 },
+	{ .red = 0.663736, .green = 0.998779, .blue = 0.511355 },
+	{ .red = 0.731868, .green = 0.998291, .blue = 0.490110 },
+	{ .red = 0.811233, .green = 0.998291, .blue = 0.466667 },
+	{ .red = 0.901832, .green = 0.999267, .blue = 0.439316 },
+	{ .red = 0.997558, .green = 0.991453, .blue = 0.399267 },
+	{ .red = 0.999267, .green = 0.914042, .blue = 0.445177 },
+	{ .red = 0.999267, .green = 0.858120, .blue = 0.457387 },
+	{ .red = 0.999267, .green = 0.814408, .blue = 0.458364 },
+	{ .red = 0.999512, .green = 0.778022, .blue = 0.453968 },
+	{ .red = 0.998535, .green = 0.746032, .blue = 0.446398 },
+	{ .red = 0.998779, .green = 0.717949, .blue = 0.435653 },
+	{ .red = 0.049573, .green = 0.970940, .blue = 0.416850 },
+	{ .red = 0.060806, .green = 0.973871, .blue = 0.414652 },
+	{ .red = 0.090598, .green = 0.985836, .blue = 0.406838 },
+	{ .red = 0.256654, .green = 0.999512, .blue = 0.417094 },
+	{ .red = 0.426618, .green = 0.999267, .blue = 0.452015 },
+	{ .red = 0.560440, .green = 0.998535, .blue = 0.493529 },
+	{ .red = 0.652503, .green = 0.998535, .blue = 0.517705 },
+	{ .red = 0.701832, .green = 0.999756, .blue = 0.495726 },
+	{ .red = 0.763370, .green = 0.998779, .blue = 0.475946 },
+	{ .red = 0.834188, .green = 0.999512, .blue = 0.453480 },
+	{ .red = 0.913309, .green = 0.998779, .blue = 0.435409 },
+	{ .red = 0.997070, .green = 0.993895, .blue = 0.392186 },
+	{ .red = 0.998779, .green = 0.921856, .blue = 0.419536 },
+	{ .red = 0.998779, .green = 0.866667, .blue = 0.426618 },
+	{ .red = 0.999267, .green = 0.822711, .blue = 0.425397 },
+	{ .red = 0.999023, .green = 0.785104, .blue = 0.420269 },
+	{ .red = 0.999267, .green = 0.752381, .blue = 0.412210 },
+	{ .red = 0.079609, .green = 0.978510, .blue = 0.390720 },
+	{ .red = 0.084005, .green = 0.981441, .blue = 0.388523 },
+	{ .red = 0.119414, .green = 0.989011, .blue = 0.382173 },
+	{ .red = 0.281807, .green = 0.999512, .blue = 0.401954 },
+	{ .red = 0.427595, .green = 0.998535, .blue = 0.438095 },
+	{ .red = 0.547741, .green = 0.998535, .blue = 0.480342 },
+	{ .red = 0.639072, .green = 0.999267, .blue = 0.513553 },
+	{ .red = 0.677900, .green = 0.999267, .blue = 0.494261 },
+	{ .red = 0.726496, .green = 0.999023, .blue = 0.474725 },
+	{ .red = 0.783883, .green = 0.998779, .blue = 0.455189 },
+	{ .red = 0.849573, .green = 0.999512, .blue = 0.435409 },
+	{ .red = 0.920635, .green = 0.998291, .blue = 0.422955 },
+	{ .red = 0.997802, .green = 0.996093, .blue = 0.376068 },
+	{ .red = 0.998779, .green = 0.927961, .blue = 0.393162 },
+	{ .red = 0.998779, .green = 0.873993, .blue = 0.396825 },
+	{ .red = 0.998535, .green = 0.829548, .blue = 0.394628 },
+	{ .red = 0.998291, .green = 0.791453, .blue = 0.389255 },
+	{ .red = 0.096215, .green = 0.983394, .blue = 0.366789 },
+	{ .red = 0.099389, .green = 0.986081, .blue = 0.364835 },
+	{ .red = 0.144811, .green = 0.995360, .blue = 0.362882 },
+	{ .red = 0.294994, .green = 0.999023, .blue = 0.386813 },
+	{ .red = 0.420269, .green = 0.999756, .blue = 0.421001 },
+	{ .red = 0.531624, .green = 0.998779, .blue = 0.463004 },
+	{ .red = 0.622955, .green = 1.000000, .blue = 0.502076 },
+	{ .red = 0.655678, .green = 0.998779, .blue = 0.485714 },
+	{ .red = 0.695238, .green = 0.999267, .blue = 0.466422 },
+	{ .red = 0.743346, .green = 0.998779, .blue = 0.448352 },
+	{ .red = 0.798779, .green = 0.999267, .blue = 0.430037 },
+	{ .red = 0.860562, .green = 0.999023, .blue = 0.414896 },
+	{ .red = 0.926740, .green = 0.999023, .blue = 0.403175 },
+	{ .red = 0.999267, .green = 0.998535, .blue = 0.353602 },
+	{ .red = 0.998779, .green = 0.932845, .blue = 0.367766 },
+	{ .red = 0.999512, .green = 0.880830, .blue = 0.368742 },
+	{ .red = 0.999756, .green = 0.836874, .blue = 0.365812 },
+	{ .red = 0.108669, .green = 0.986325, .blue = 0.345299 },
+	{ .red = 0.114042, .green = 0.988034, .blue = 0.343590 },
+	{ .red = 0.167033, .green = 0.999267, .blue = 0.346276 },
+	{ .red = 0.298657, .green = 0.999267, .blue = 0.370452 },
+	{ .red = 0.411722, .green = 0.999023, .blue = 0.403907 },
+	{ .red = 0.512576, .green = 0.999512, .blue = 0.442735 },
+	{ .red = 0.600733, .green = 0.999023, .blue = 0.482540 },
+	{ .red = 0.632234, .green = 0.999267, .blue = 0.470818 },
+	{ .red = 0.666667, .green = 0.999267, .blue = 0.453724 },
+	{ .red = 0.708425, .green = 0.998779, .blue = 0.437118 },
+	{ .red = 0.756532, .green = 0.999023, .blue = 0.419780 },
+	{ .red = 0.810501, .green = 0.999267, .blue = 0.404151 },
+	{ .red = 0.869597, .green = 0.999512, .blue = 0.390476 },
+	{ .red = 0.931624, .green = 0.999267, .blue = 0.381685 },
+	{ .red = 0.998291, .green = 0.998046, .blue = 0.336264 },
+	{ .red = 0.999023, .green = 0.936996, .blue = 0.343590 },
+	{ .red = 0.999023, .green = 0.886203, .blue = 0.343590 },
+	{ .red = 0.107937, .green = 0.989744, .blue = 0.324542 },
+	{ .red = 0.115751, .green = 0.990965, .blue = 0.323321 },
+	{ .red = 0.193651, .green = 0.997558, .blue = 0.332601 },
+	{ .red = 0.298168, .green = 0.999267, .blue = 0.354335 },
+	{ .red = 0.400244, .green = 0.998535, .blue = 0.385592 },
+	{ .red = 0.493040, .green = 0.999756, .blue = 0.421978 },
+	{ .red = 0.576557, .green = 0.999023, .blue = 0.459829 },
+	{ .red = 0.608791, .green = 0.999267, .blue = 0.453236 },
+	{ .red = 0.639805, .green = 0.998779, .blue = 0.438584 },
+	{ .red = 0.676435, .green = 0.999512, .blue = 0.421978 },
+	{ .red = 0.719658, .green = 0.999023, .blue = 0.407326 },
+	{ .red = 0.767766, .green = 0.999267, .blue = 0.392186 },
+	{ .red = 0.820513, .green = 0.999512, .blue = 0.378266 },
+	{ .red = 0.876679, .green = 0.999512, .blue = 0.366789 },
+	{ .red = 0.935775, .green = 0.999512, .blue = 0.358242 },
+	{ .red = 0.995849, .green = 0.996581, .blue = 0.321856 },
+	{ .red = 0.999267, .green = 0.940659, .blue = 0.320635 },
+	{ .red = 0.090598, .green = 0.994872, .blue = 0.304274 },
+	{ .red = 0.108181, .green = 0.998535, .blue = 0.305250 },
+	{ .red = 0.199512, .green = 0.999267, .blue = 0.317216 },
+	{ .red = 0.294994, .green = 0.998779, .blue = 0.338462 },
+	{ .red = 0.386569, .green = 0.999023, .blue = 0.367033 },
+	{ .red = 0.474237, .green = 0.999267, .blue = 0.401954 },
+	{ .red = 0.551648, .green = 0.999267, .blue = 0.436386 },
+	{ .red = 0.585348, .green = 0.999023, .blue = 0.434188 },
+	{ .red = 0.613919, .green = 0.998779, .blue = 0.421245 },
+	{ .red = 0.647131, .green = 0.999512, .blue = 0.406105 },
+	{ .red = 0.686447, .green = 0.998779, .blue = 0.392918 },
+	{ .red = 0.730159, .green = 0.999023, .blue = 0.378999 },
+	{ .red = 0.778022, .green = 0.998779, .blue = 0.367033 },
+	{ .red = 0.829304, .green = 0.999512, .blue = 0.354090 },
+	{ .red = 0.883516, .green = 0.999756, .blue = 0.344078 },
+	{ .red = 0.938950, .green = 0.999512, .blue = 0.337729 },
+	{ .red = 0.994383, .green = 0.995849, .blue = 0.306471 },
+	{ .red = 0.000000, .green = 0.082051, .blue = 0.585348 },
+	{ .red = 0.135775, .green = 0.011966, .blue = 0.620024 },
+	{ .red = 0.285470, .green = 0.015385, .blue = 0.642979 },
+	{ .red = 0.425641, .green = 0.014896, .blue = 0.650061 },
+	{ .red = 0.540904, .green = 0.011722, .blue = 0.642979 },
+	{ .red = 0.656654, .green = 0.013187, .blue = 0.655433 },
+	{ .red = 0.732112, .green = 0.019048, .blue = 0.606349 },
+	{ .red = 0.793162, .green = 0.011722, .blue = 0.564103 },
+	{ .red = 0.843223, .green = 0.018071, .blue = 0.527228 },
+	{ .red = 0.882540, .green = 0.017827, .blue = 0.493284 },
+	{ .red = 0.919414, .green = 0.012698, .blue = 0.464713 },
+	{ .red = 0.952625, .green = 0.016606, .blue = 0.440293 },
+	{ .red = 0.978999, .green = 0.017582, .blue = 0.416850 },
+	{ .red = 0.991453, .green = 0.037851, .blue = 0.391941 },
+	{ .red = 0.989744, .green = 0.053480, .blue = 0.365568 },
+	{ .red = 0.992430, .green = 0.064469, .blue = 0.343834 },
+	{ .red = 0.995604, .green = 0.069841, .blue = 0.324298 },
+	{ .red = 0.000000, .green = 0.124786, .blue = 0.581929 },
+	{ .red = 0.139438, .green = 0.014896, .blue = 0.695482 },
+	{ .red = 0.311600, .green = 0.044200, .blue = 0.741148 },
+	{ .red = 0.473260, .green = 0.012210, .blue = 0.750427 },
+	{ .red = 0.585836, .green = 0.015873, .blue = 0.710134 },
+	{ .red = 0.701832, .green = 0.015385, .blue = 0.705495 },
+	{ .red = 0.785592, .green = 0.016850, .blue = 0.650061 },
+	{ .red = 0.846642, .green = 0.017582, .blue = 0.598291 },
+	{ .red = 0.895971, .green = 0.011966, .blue = 0.555067 },
+	{ .red = 0.928449, .green = 0.019292, .blue = 0.513553 },
+	{ .red = 0.962393, .green = 0.014896, .blue = 0.481563 },
+	{ .red = 0.985836, .green = 0.024420, .blue = 0.451038 },
+	{ .red = 0.995360, .green = 0.042735, .blue = 0.420513 },
+	{ .red = 0.998779, .green = 0.056410, .blue = 0.392430 },
+	{ .red = 0.999267, .green = 0.081319, .blue = 0.368498 },
+	{ .red = 0.999512, .green = 0.105495, .blue = 0.348718 },
+	{ .red = 0.999023, .green = 0.122344, .blue = 0.331136 },
+	{ .red = 0.006105, .green = 0.217094, .blue = 0.501099 },
+	{ .red = 0.124054, .green = 0.244689, .blue = 0.767033 },
+	{ .red = 0.302808, .green = 0.260562, .blue = 0.746520 },
+	{ .red = 0.466178, .green = 0.267155, .blue = 0.743590 },
+	{ .red = 0.628816, .green = 0.258608, .blue = 0.764103 },
+	{ .red = 0.792186, .green = 0.238095, .blue = 0.795360 },
+	{ .red = 0.968498, .green = 0.209768, .blue = 0.796581 },
+	{ .red = 0.998779, .green = 0.205617, .blue = 0.697680 },
+	{ .red = 0.999023, .green = 0.208303, .blue = 0.615629 },
+	{ .red = 0.999756, .green = 0.210012, .blue = 0.555800 },
+	{ .red = 0.999756, .green = 0.211966, .blue = 0.509402 },
+	{ .red = 0.999512, .green = 0.214164, .blue = 0.472039 },
+	{ .red = 0.999267, .green = 0.215873, .blue = 0.441026 },
+	{ .red = 0.999267, .green = 0.217338, .blue = 0.414408 },
+	{ .red = 0.999267, .green = 0.218803, .blue = 0.391209 },
+	{ .red = 0.998779, .green = 0.219048, .blue = 0.369963 },
+	{ .red = 0.998535, .green = 0.219780, .blue = 0.351648 },
+	{ .red = 0.015629, .green = 0.348474, .blue = 0.548230 },
+	{ .red = 0.008791, .green = 0.367521, .blue = 0.624176 },
+	{ .red = 0.281807, .green = 0.416117, .blue = 0.761172 },
+	{ .red = 0.453480, .green = 0.425153, .blue = 0.742613 },
+	{ .red = 0.616361, .green = 0.427595, .blue = 0.748718 },
+	{ .red = 0.780952, .green = 0.421001, .blue = 0.774603 },
+	{ .red = 0.959463, .green = 0.406105, .blue = 0.779976 },
+	{ .red = 0.998535, .green = 0.398046, .blue = 0.700366 },
+	{ .red = 0.999267, .green = 0.390965, .blue = 0.632723 },
+	{ .red = 0.998779, .green = 0.383639, .blue = 0.583394 },
+	{ .red = 0.999512, .green = 0.375580, .blue = 0.544078 },
+	{ .red = 0.999023, .green = 0.367521, .blue = 0.510867 },
+	{ .red = 0.999023, .green = 0.358974, .blue = 0.481807 },
+	{ .red = 0.999023, .green = 0.350427, .blue = 0.455433 },
+	{ .red = 0.998779, .green = 0.341392, .blue = 0.431013 },
+	{ .red = 0.999512, .green = 0.332845, .blue = 0.408791 },
+	{ .red = 0.998779, .green = 0.324054, .blue = 0.387790 },
+	{ .red = 0.025885, .green = 0.521123, .blue = 0.631746 },
+	{ .red = 0.020757, .green = 0.525519, .blue = 0.646642 },
+	{ .red = 0.053480, .green = 0.583394, .blue = 0.768498 },
+	{ .red = 0.410012, .green = 0.579487, .blue = 0.757998 },
+	{ .red = 0.598535, .green = 0.582173, .blue = 0.740904 },
+	{ .red = 0.763370, .green = 0.582662, .blue = 0.755067 },
+	{ .red = 0.941880, .green = 0.569475, .blue = 0.756288 },
+	{ .red = 0.998535, .green = 0.557998, .blue = 0.706716 },
+	{ .red = 0.998535, .green = 0.547497, .blue = 0.659829 },
+	{ .red = 0.998535, .green = 0.535043, .blue = 0.623932 },
+	{ .red = 0.999023, .green = 0.521368, .blue = 0.593162 },
+	{ .red = 0.999267, .green = 0.506960, .blue = 0.564591 },
+	{ .red = 0.999267, .green = 0.491575, .blue = 0.537485 },
+	{ .red = 0.998535, .green = 0.476190, .blue = 0.511111 },
+	{ .red = 0.998535, .green = 0.460317, .blue = 0.485714 },
+	{ .red = 0.999023, .green = 0.444444, .blue = 0.461294 },
+	{ .red = 0.998779, .green = 0.429548, .blue = 0.438095 },
+	{ .red = 0.032723, .green = 0.726740, .blue = 0.726740 },
+	{ .red = 0.031258, .green = 0.728205, .blue = 0.728694 },
+	{ .red = 0.025397, .green = 0.734799, .blue = 0.736996 },
+	{ .red = 0.272772, .green = 0.744567, .blue = 0.747985 },
+	{ .red = 0.531624, .green = 0.738706, .blue = 0.740415 },
+	{ .red = 0.729426, .green = 0.728449, .blue = 0.728694 },
+	{ .red = 0.903297, .green = 0.711844, .blue = 0.718681 },
+	{ .red = 0.999267, .green = 0.694017, .blue = 0.704274 },
+	{ .red = 0.998779, .green = 0.679853, .blue = 0.686447 },
+	{ .red = 0.999512, .green = 0.663980, .blue = 0.666667 },
+	{ .red = 0.999512, .green = 0.646886, .blue = 0.644933 },
+	{ .red = 0.999023, .green = 0.628571, .blue = 0.621978 },
+	{ .red = 0.998779, .green = 0.609524, .blue = 0.597802 },
+	{ .red = 0.999756, .green = 0.589744, .blue = 0.572405 },
+	{ .red = 0.998535, .green = 0.569475, .blue = 0.546764 },
+	{ .red = 0.999023, .green = 0.548962, .blue = 0.520879 },
+	{ .red = 0.999756, .green = 0.528938, .blue = 0.495482 },
+	{ .red = 0.018559, .green = 0.807326, .blue = 0.697680 },
+	{ .red = 0.021001, .green = 0.811477, .blue = 0.698657 },
+	{ .red = 0.033700, .green = 0.828571, .blue = 0.702564 },
+	{ .red = 0.036142, .green = 0.872772, .blue = 0.713797 },
+	{ .red = 0.447863, .green = 0.868864, .blue = 0.705983 },
+	{ .red = 0.668132, .green = 0.852015, .blue = 0.693040 },
+	{ .red = 0.837607, .green = 0.833455, .blue = 0.684249 },
+	{ .red = 0.989255, .green = 0.810989, .blue = 0.667155 },
+	{ .red = 0.999756, .green = 0.784860, .blue = 0.692552 },
+	{ .red = 0.998779, .green = 0.767277, .blue = 0.697680 },
+	{ .red = 0.998779, .green = 0.747741, .blue = 0.687912 },
+	{ .red = 0.998779, .green = 0.727961, .blue = 0.672039 },
+	{ .red = 0.998779, .green = 0.706960, .blue = 0.651770 },
+	{ .red = 0.998779, .green = 0.685470, .blue = 0.629060 },
+	{ .red = 0.998535, .green = 0.663248, .blue = 0.604640 },
+	{ .red = 0.999512, .green = 0.640537, .blue = 0.578755 },
+	{ .red = 0.999023, .green = 0.618071, .blue = 0.552869 },
+	{ .red = 0.029792, .green = 0.865201, .blue = 0.660073 },
+	{ .red = 0.022711, .green = 0.870085, .blue = 0.660073 },
+	{ .red = 0.016117, .green = 0.889377, .blue = 0.660317 },
+	{ .red = 0.030525, .green = 0.935043, .blue = 0.662027 },
+	{ .red = 0.339194, .green = 0.970940, .blue = 0.659341 },
+	{ .red = 0.590476, .green = 0.951648, .blue = 0.647131 },
+	{ .red = 0.771673, .green = 0.929182, .blue = 0.636630 },
+	{ .red = 0.914042, .green = 0.907204, .blue = 0.626618 },
+	{ .red = 0.998779, .green = 0.864469, .blue = 0.641758 },
+	{ .red = 0.998779, .green = 0.825397, .blue = 0.672527 },
+	{ .red = 0.999512, .green = 0.803907, .blue = 0.683516 },
+	{ .red = 0.999023, .green = 0.789499, .blue = 0.687424 },
+	{ .red = 0.999512, .green = 0.777045, .blue = 0.684982 },
+	{ .red = 0.999267, .green = 0.763858, .blue = 0.676923 },
+	{ .red = 0.999512, .green = 0.740171, .blue = 0.653236 },
+	{ .red = 0.999512, .green = 0.716972, .blue = 0.629304 },
+	{ .red = 0.999267, .green = 0.693773, .blue = 0.604151 },
+	{ .red = 0.034432, .green = 0.906960, .blue = 0.620024 },
+	{ .red = 0.030037, .green = 0.911600, .blue = 0.619536 },
+	{ .red = 0.031990, .green = 0.929915, .blue = 0.617094 },
+	{ .red = 0.038339, .green = 0.971917, .blue = 0.612943 },
+	{ .red = 0.337973, .green = 0.998535, .blue = 0.614164 },
+	{ .red = 0.545299, .green = 0.999512, .blue = 0.613431 },
+	{ .red = 0.704274, .green = 0.999023, .blue = 0.593162 },
+	{ .red = 0.839805, .green = 0.983150, .blue = 0.577289 },
+	{ .red = 0.967033, .green = 0.957753, .blue = 0.565568 },
+	{ .red = 0.999267, .green = 0.892552, .blue = 0.618071 },
+	{ .red = 0.998535, .green = 0.848596, .blue = 0.644933 },
+	{ .red = 0.998779, .green = 0.820513, .blue = 0.652991 },
+	{ .red = 0.998779, .green = 0.798535, .blue = 0.652259 },
+	{ .red = 0.998291, .green = 0.779976, .blue = 0.647375 },
+	{ .red = 0.998535, .green = 0.763614, .blue = 0.639072 },
+	{ .red = 0.998291, .green = 0.747253, .blue = 0.627839 },
+	{ .red = 0.998046, .green = 0.731136, .blue = 0.614408 },
+	{ .red = 0.028083, .green = 0.936996, .blue = 0.580464 },
+	{ .red = 0.025397, .green = 0.941148, .blue = 0.579487 },
+	{ .red = 0.044444, .green = 0.957509, .blue = 0.575580 },
+	{ .red = 0.112332, .green = 0.988278, .blue = 0.568254 },
+	{ .red = 0.380464, .green = 0.998779, .blue = 0.583883 },
+	{ .red = 0.554823, .green = 0.999267, .blue = 0.602198 },
+	{ .red = 0.692552, .green = 0.999756, .blue = 0.616361 },
+	{ .red = 0.783639, .green = 0.999756, .blue = 0.594628 },
+	{ .red = 0.883028, .green = 0.999023, .blue = 0.556777 },
+	{ .red = 0.999267, .green = 0.988767, .blue = 0.512576 },
+	{ .red = 0.999023, .green = 0.909158, .blue = 0.590476 },
+	{ .red = 0.999267, .green = 0.863248, .blue = 0.610256 },
+	{ .red = 0.998779, .green = 0.830281, .blue = 0.615873 },
+	{ .red = 0.998779, .green = 0.804151, .blue = 0.613431 },
+	{ .red = 0.999267, .green = 0.781441, .blue = 0.605861 },
+	{ .red = 0.998779, .green = 0.760195, .blue = 0.595116 },
+	{ .red = 0.998535, .green = 0.740659, .blue = 0.582662 },
+	{ .red = 0.041758, .green = 0.957265, .blue = 0.543101 },
+	{ .red = 0.052259, .green = 0.960684, .blue = 0.541880 },
+	{ .red = 0.040537, .green = 0.976068, .blue = 0.537241 },
+	{ .red = 0.170696, .green = 0.999756, .blue = 0.534799 },
+	{ .red = 0.404396, .green = 0.999512, .blue = 0.559951 },
+	{ .red = 0.557753, .green = 0.998779, .blue = 0.589011 },
+	{ .red = 0.682295, .green = 0.998535, .blue = 0.619292 },
+	{ .red = 0.759951, .green = 0.999023, .blue = 0.617338 },
+	{ .red = 0.823932, .green = 0.999267, .blue = 0.586569 },
+	{ .red = 0.904762, .green = 0.998779, .blue = 0.555800 },
+	{ .red = 0.999756, .green = 0.993407, .blue = 0.503785 },
+	{ .red = 0.999023, .green = 0.919902, .blue = 0.558730 },
+	{ .red = 0.999023, .green = 0.872527, .blue = 0.573138 },
+	{ .red = 0.998779, .green = 0.836630, .blue = 0.575824 },
+	{ .red = 0.998291, .green = 0.807326, .blue = 0.572161 },
+	{ .red = 0.999023, .green = 0.781929, .blue = 0.564103 },
+	{ .red = 0.998535, .green = 0.758486, .blue = 0.553358 },
+	{ .red = 0.042979, .green = 0.971673, .blue = 0.508181 },
+	{ .red = 0.063980, .green = 0.973871, .blue = 0.506960 },
+	{ .red = 0.083272, .green = 0.985348, .blue = 0.502320 },
+	{ .red = 0.241270, .green = 0.999023, .blue = 0.509646 },
+	{ .red = 0.418071, .green = 0.999267, .blue = 0.538217 },
+	{ .red = 0.553114, .green = 0.999512, .blue = 0.571917 },
+	{ .red = 0.667643, .green = 0.998535, .blue = 0.609035 },
+	{ .red = 0.744811, .green = 0.999267, .blue = 0.624420 },
+	{ .red = 0.788278, .green = 0.999512, .blue = 0.596093 },
+	{ .red = 0.846154, .green = 0.999267, .blue = 0.568254 },
+	{ .red = 0.917216, .green = 0.998779, .blue = 0.544078 },
+	{ .red = 0.998046, .green = 0.994628, .blue = 0.491331 },
+	{ .red = 0.999023, .green = 0.927228, .blue = 0.525031 },
+	{ .red = 0.999023, .green = 0.879121, .blue = 0.535043 },
+	{ .red = 0.999267, .green = 0.841514, .blue = 0.535287 },
+	{ .red = 0.998535, .green = 0.810012, .blue = 0.531136 },
+	{ .red = 0.999512, .green = 0.782662, .blue = 0.522589 },
+	{ .red = 0.070818, .green = 0.979976, .blue = 0.476435 },
+	{ .red = 0.080342, .green = 0.982173, .blue = 0.475214 },
+	{ .red = 0.108181, .green = 0.990232, .blue = 0.470574 },
+	{ .red = 0.273260, .green = 0.999512, .blue = 0.486935 },
+	{ .red = 0.422955, .green = 0.998535, .blue = 0.516972 },
+	{ .red = 0.542857, .green = 0.999756, .blue = 0.551648 },
+	{ .red = 0.649328, .green = 0.998779, .blue = 0.591453 },
+	{ .red = 0.731624, .green = 0.998535, .blue = 0.622955 },
+	{ .red = 0.762393, .green = 0.998779, .blue = 0.596093 },
+	{ .red = 0.805128, .green = 0.999267, .blue = 0.568987 },
+	{ .red = 0.859829, .green = 0.999023, .blue = 0.544322 },
+	{ .red = 0.925031, .green = 0.999512, .blue = 0.523321 },
+	{ .red = 0.995604, .green = 0.994628, .blue = 0.475458 },
+	{ .red = 0.999512, .green = 0.932845, .blue = 0.490842 },
+	{ .red = 0.998291, .green = 0.884005, .blue = 0.498413 },
+	{ .red = 0.999512, .green = 0.845910, .blue = 0.496947 },
+	{ .red = 0.998779, .green = 0.812698, .blue = 0.492308 },
+	{ .red = 0.088156, .green = 0.985104, .blue = 0.447619 },
+	{ .red = 0.099145, .green = 0.986325, .blue = 0.446398 },
+	{ .red = 0.136752, .green = 0.994872, .blue = 0.444933 },
+	{ .red = 0.290354, .green = 0.999512, .blue = 0.464957 },
+	{ .red = 0.419780, .green = 0.998535, .blue = 0.494994 },
+	{ .red = 0.530647, .green = 0.998535, .blue = 0.530647 },
+	{ .red = 0.628571, .green = 0.998779, .blue = 0.569719 },
+	{ .red = 0.712088, .green = 0.999023, .blue = 0.607814 },
+	{ .red = 0.738462, .green = 0.999267, .blue = 0.586081 },
+	{ .red = 0.772161, .green = 0.999512, .blue = 0.560684 },
+	{ .red = 0.816117, .green = 0.998535, .blue = 0.538462 },
+	{ .red = 0.869109, .green = 0.998779, .blue = 0.516484 },
+	{ .red = 0.929915, .green = 0.999023, .blue = 0.500122 },
+	{ .red = 0.994383, .green = 0.994628, .blue = 0.453724 },
+	{ .red = 0.998779, .green = 0.936752, .blue = 0.459341 },
+	{ .red = 0.999267, .green = 0.889133, .blue = 0.462759 },
+	{ .red = 0.999267, .green = 0.849817, .blue = 0.461538 },
+	{ .red = 0.107204, .green = 0.987302, .blue = 0.421490 },
+	{ .red = 0.110623, .green = 0.989011, .blue = 0.420269 },
+	{ .red = 0.162882, .green = 0.999023, .blue = 0.423199 },
+	{ .red = 0.298657, .green = 0.998779, .blue = 0.444200 },
+	{ .red = 0.410256, .green = 0.999512, .blue = 0.472039 },
+	{ .red = 0.513309, .green = 0.998779, .blue = 0.506716 },
+	{ .red = 0.605128, .green = 0.999267, .blue = 0.544811 },
+	{ .red = 0.685958, .green = 0.999267, .blue = 0.583150 },
+	{ .red = 0.715507, .green = 0.999023, .blue = 0.571673 },
+	{ .red = 0.743346, .green = 0.998535, .blue = 0.548962 },
+	{ .red = 0.779731, .green = 0.998535, .blue = 0.526496 },
+	{ .red = 0.824176, .green = 0.999023, .blue = 0.504762 },
+	{ .red = 0.876190, .green = 0.999023, .blue = 0.486447 },
+	{ .red = 0.934066, .green = 0.999267, .blue = 0.473016 },
+	{ .red = 0.994383, .green = 0.995360, .blue = 0.428816 },
+	{ .red = 0.999023, .green = 0.940171, .blue = 0.428816 },
+	{ .red = 0.999267, .green = 0.893284, .blue = 0.431258 },
+	{ .red = 0.113553, .green = 0.989499, .blue = 0.397558 },
+	{ .red = 0.113797, .green = 0.991453, .blue = 0.396093 },
+	{ .red = 0.185348, .green = 0.999756, .blue = 0.403663 },
+	{ .red = 0.298413, .green = 0.999267, .blue = 0.423199 },
+	{ .red = 0.400488, .green = 0.998779, .blue = 0.450061 },
+	{ .red = 0.494994, .green = 0.998535, .blue = 0.482784 },
+	{ .red = 0.580952, .green = 0.999267, .blue = 0.518681 },
+	{ .red = 0.659096, .green = 0.999023, .blue = 0.556777 },
+	{ .red = 0.691819, .green = 0.999023, .blue = 0.552625 },
+	{ .red = 0.715995, .green = 0.998779, .blue = 0.531868 },
+	{ .red = 0.747497, .green = 0.998535, .blue = 0.511355 },
+	{ .red = 0.786081, .green = 0.999267, .blue = 0.490598 },
+	{ .red = 0.831258, .green = 0.998535, .blue = 0.473504 },
+	{ .red = 0.882295, .green = 0.999267, .blue = 0.456899 },
+	{ .red = 0.937241, .green = 0.999267, .blue = 0.445910 },
+	{ .red = 0.995849, .green = 0.996825, .blue = 0.400000 },
+	{ .red = 0.999023, .green = 0.943346, .blue = 0.401465 },
+	{ .red = 0.126740, .green = 0.989988, .blue = 0.376557 },
+	{ .red = 0.142369, .green = 0.992918, .blue = 0.378022 },
+	{ .red = 0.200488, .green = 0.999023, .blue = 0.385348 },
+	{ .red = 0.294994, .green = 0.999512, .blue = 0.403175 },
+	{ .red = 0.388278, .green = 0.998535, .blue = 0.428327 },
+	{ .red = 0.475214, .green = 0.999023, .blue = 0.458608 },
+	{ .red = 0.557753, .green = 0.998779, .blue = 0.493773 },
+	{ .red = 0.632234, .green = 0.999023, .blue = 0.529670 },
+	{ .red = 0.668132, .green = 0.999023, .blue = 0.531624 },
+	{ .red = 0.689621, .green = 0.999267, .blue = 0.512332 },
+	{ .red = 0.718193, .green = 0.998291, .blue = 0.494750 },
+	{ .red = 0.752381, .green = 0.998779, .blue = 0.476190 },
+	{ .red = 0.792430, .green = 0.998535, .blue = 0.459096 },
+	{ .red = 0.837851, .green = 0.999512, .blue = 0.442247 },
+	{ .red = 0.887424, .green = 0.999023, .blue = 0.429792 },
+	{ .red = 0.940171, .green = 0.999267, .blue = 0.420513 },
+	{ .red = 0.998046, .green = 0.998779, .blue = 0.371429 },
+	{ .red = 0.000000, .green = 0.109402, .blue = 0.609035 },
+	{ .red = 0.118193, .green = 0.014652, .blue = 0.668376 },
+	{ .red = 0.258852, .green = 0.016117, .blue = 0.700611 },
+	{ .red = 0.398046, .green = 0.013919, .blue = 0.719170 },
+	{ .red = 0.513797, .green = 0.011477, .blue = 0.711600 },
+	{ .red = 0.607326, .green = 0.011722, .blue = 0.696947 },
+	{ .red = 0.723077, .green = 0.018315, .blue = 0.721123 },
+	{ .red = 0.791209, .green = 0.016606, .blue = 0.675214 },
+	{ .red = 0.844200, .green = 0.016850, .blue = 0.632234 },
+	{ .red = 0.884493, .green = 0.014164, .blue = 0.591209 },
+	{ .red = 0.914286, .green = 0.016361, .blue = 0.552625 },
+	{ .red = 0.936752, .green = 0.018559, .blue = 0.517460 },
+	{ .red = 0.958974, .green = 0.017827, .blue = 0.488156 },
+	{ .red = 0.981929, .green = 0.022222, .blue = 0.463492 },
+	{ .red = 0.990965, .green = 0.041026, .blue = 0.436386 },
+	{ .red = 0.998046, .green = 0.046642, .blue = 0.411477 },
+	{ .red = 0.999267, .green = 0.059341, .blue = 0.388034 },
+	{ .red = 0.000000, .green = 0.134554, .blue = 0.609035 },
+	{ .red = 0.122344, .green = 0.015873, .blue = 0.734310 },
+	{ .red = 0.281319, .green = 0.015873, .blue = 0.794628 },
+	{ .red = 0.441758, .green = 0.019048, .blue = 0.823932 },
+	{ .red = 0.561661, .green = 0.019292, .blue = 0.793895 },
+	{ .red = 0.650549, .green = 0.019048, .blue = 0.755311 },
+	{ .red = 0.767766, .green = 0.019292, .blue = 0.769475 },
+	{ .red = 0.839805, .green = 0.018803, .blue = 0.717216 },
+	{ .red = 0.891575, .green = 0.019292, .blue = 0.665446 },
+	{ .red = 0.927961, .green = 0.017094, .blue = 0.616850 },
+	{ .red = 0.954335, .green = 0.011722, .blue = 0.573138 },
+	{ .red = 0.970208, .green = 0.020513, .blue = 0.532357 },
+	{ .red = 0.979731, .green = 0.038095, .blue = 0.495726 },
+	{ .red = 0.987546, .green = 0.051282, .blue = 0.463980 },
+	{ .red = 0.995604, .green = 0.077900, .blue = 0.438339 },
+	{ .red = 0.999023, .green = 0.100122, .blue = 0.414896 },
+	{ .red = 0.999023, .green = 0.118926, .blue = 0.393407 },
+	{ .red = 0.003175, .green = 0.204884, .blue = 0.562393 },
+	{ .red = 0.129670, .green = 0.212943, .blue = 0.921856 },
+	{ .red = 0.304518, .green = 0.237118, .blue = 0.899389 },
+	{ .red = 0.467399, .green = 0.251282, .blue = 0.888645 },
+	{ .red = 0.628816, .green = 0.246642, .blue = 0.901343 },
+	{ .red = 0.791209, .green = 0.225641, .blue = 0.929426 },
+	{ .red = 0.954090, .green = 0.190476, .blue = 0.962637 },
+	{ .red = 0.999512, .green = 0.192430, .blue = 0.852259 },
+	{ .red = 0.999023, .green = 0.202930, .blue = 0.742613 },
+	{ .red = 0.998535, .green = 0.208791, .blue = 0.664713 },
+	{ .red = 0.998779, .green = 0.211966, .blue = 0.606105 },
+	{ .red = 0.999267, .green = 0.214408, .blue = 0.559707 },
+	{ .red = 0.999267, .green = 0.216606, .blue = 0.521368 },
+	{ .red = 0.999512, .green = 0.218071, .blue = 0.488889 },
+	{ .red = 0.998779, .green = 0.219292, .blue = 0.460317 },
+	{ .red = 0.999023, .green = 0.220269, .blue = 0.435409 },
+	{ .red = 0.999512, .green = 0.220024, .blue = 0.413187 },
+	{ .red = 0.000000, .green = 0.313797, .blue = 0.591941 },
+	{ .red = 0.010745, .green = 0.340904, .blue = 0.729915 },
+	{ .red = 0.288156, .green = 0.401465, .blue = 0.912332 },
+	{ .red = 0.457143, .green = 0.413187, .blue = 0.892308 },
+	{ .red = 0.619048, .green = 0.418071, .blue = 0.891819 },
+	{ .red = 0.781197, .green = 0.413675, .blue = 0.911844 },
+	{ .red = 0.944811, .green = 0.401221, .blue = 0.942613 },
+	{ .red = 0.999023, .green = 0.394139, .blue = 0.848107 },
+	{ .red = 0.999512, .green = 0.390965, .blue = 0.750427 },
+	{ .red = 0.999023, .green = 0.385592, .blue = 0.683516 },
+	{ .red = 0.998779, .green = 0.378755, .blue = 0.632967 },
+	{ .red = 0.998535, .green = 0.371184, .blue = 0.591941 },
+	{ .red = 0.999756, .green = 0.363126, .blue = 0.557509 },
+	{ .red = 0.999756, .green = 0.354579, .blue = 0.526252 },
+	{ .red = 0.999023, .green = 0.345543, .blue = 0.497680 },
+	{ .red = 0.999512, .green = 0.336508, .blue = 0.472039 },
+	{ .red = 0.999267, .green = 0.327717, .blue = 0.448107 },
+	{ .red = 0.024176, .green = 0.450305, .blue = 0.644444 },
+	{ .red = 0.017827, .green = 0.465934, .blue = 0.686935 },
+	{ .red = 0.168010, .green = 0.566056, .blue = 0.926496 },
+	{ .red = 0.436386, .green = 0.564347, .blue = 0.907937 },
+	{ .red = 0.604396, .green = 0.572894, .blue = 0.890110 },
+	{ .red = 0.765812, .green = 0.575580, .blue = 0.895726 },
+	{ .red = 0.923321, .green = 0.566545, .blue = 0.914530 },
+	{ .red = 0.998291, .green = 0.555311, .blue = 0.846886 },
+	{ .red = 0.998046, .green = 0.548718, .blue = 0.765812 },
+	{ .red = 0.999512, .green = 0.538706, .blue = 0.714042 },
+	{ .red = 0.998535, .green = 0.526740, .blue = 0.673260 },
+	{ .red = 0.998779, .green = 0.513065, .blue = 0.638828 },
+	{ .red = 0.998779, .green = 0.498413, .blue = 0.607082 },
+	{ .red = 0.998779, .green = 0.483028, .blue = 0.577534 },
+	{ .red = 0.999756, .green = 0.466911, .blue = 0.548962 },
+	{ .red = 0.999023, .green = 0.451038, .blue = 0.521856 },
+	{ .red = 0.999512, .green = 0.434921, .blue = 0.496215 },
+	{ .red = 0.023443, .green = 0.630525, .blue = 0.738217 },
+	{ .red = 0.021978, .green = 0.636386, .blue = 0.750672 },
+	{ .red = 0.027839, .green = 0.671795, .blue = 0.817338 },
+	{ .red = 0.306471, .green = 0.729426, .blue = 0.915751 },
+	{ .red = 0.558730, .green = 0.721123, .blue = 0.899634 },
+	{ .red = 0.734554, .green = 0.717460, .blue = 0.873748 },
+	{ .red = 0.883761, .green = 0.707692, .blue = 0.874969 },
+	{ .red = 0.998535, .green = 0.690110, .blue = 0.842491 },
+	{ .red = 0.999267, .green = 0.681807, .blue = 0.785348 },
+	{ .red = 0.998779, .green = 0.669353, .blue = 0.748718 },
+	{ .red = 0.998291, .green = 0.653968, .blue = 0.718437 },
+	{ .red = 0.998535, .green = 0.636874, .blue = 0.690110 },
+	{ .red = 0.999512, .green = 0.618071, .blue = 0.662027 },
+	{ .red = 0.998535, .green = 0.598291, .blue = 0.634188 },
+	{ .red = 0.997802, .green = 0.577778, .blue = 0.606105 },
+	{ .red = 0.999512, .green = 0.557265, .blue = 0.578755 },
+	{ .red = 0.999267, .green = 0.536752, .blue = 0.551160 },
+	{ .red = 0.036142, .green = 0.814164, .blue = 0.814164 },
+	{ .red = 0.035409, .green = 0.817338, .blue = 0.817582 },
+	{ .red = 0.031013, .green = 0.830037, .blue = 0.831746 },
+	{ .red = 0.028571, .green = 0.862271, .blue = 0.866911 },
+	{ .red = 0.431013, .green = 0.860562, .blue = 0.864225 },
+	{ .red = 0.649573, .green = 0.845665, .blue = 0.847375 },
+	{ .red = 0.827595, .green = 0.826374, .blue = 0.826618 },
+	{ .red = 0.982662, .green = 0.801954, .blue = 0.809280 },
+	{ .red = 0.998291, .green = 0.787057, .blue = 0.793651 },
+	{ .red = 0.998291, .green = 0.771917, .blue = 0.776557 },
+	{ .red = 0.998535, .green = 0.754823, .blue = 0.757265 },
+	{ .red = 0.999756, .green = 0.736020, .blue = 0.735531 },
+	{ .red = 0.998535, .green = 0.715995, .blue = 0.711844 },
+	{ .red = 0.998535, .green = 0.694505, .blue = 0.686691 },
+	{ .red = 0.998535, .green = 0.672283, .blue = 0.660317 },
+	{ .red = 0.998046, .green = 0.649573, .blue = 0.633455 },
+	{ .red = 0.998779, .green = 0.626618, .blue = 0.605861 },
+	{ .red = 0.026129, .green = 0.870085, .blue = 0.769231 },
+	{ .red = 0.029792, .green = 0.874237, .blue = 0.771184 },
+	{ .red = 0.037851, .green = 0.890110, .blue = 0.778755 },
+	{ .red = 0.036142, .green = 0.926740, .blue = 0.795849 },
+	{ .red = 0.293040, .green = 0.965324, .blue = 0.810989 },
+	{ .red = 0.560928, .green = 0.947497, .blue = 0.794872 },
+	{ .red = 0.752869, .green = 0.924542, .blue = 0.776313 },
+	{ .red = 0.904518, .green = 0.900366, .blue = 0.761905 },
+	{ .red = 0.998291, .green = 0.868376, .blue = 0.763370 },
+	{ .red = 0.999512, .green = 0.848840, .blue = 0.784615 },
+	{ .red = 0.999267, .green = 0.831502, .blue = 0.781929 },
+	{ .red = 0.998535, .green = 0.812210, .blue = 0.768987 },
+	{ .red = 0.999267, .green = 0.791697, .blue = 0.750672 },
+	{ .red = 0.998779, .green = 0.770452, .blue = 0.729426 },
+	{ .red = 0.999512, .green = 0.748230, .blue = 0.705495 },
+	{ .red = 0.999512, .green = 0.725275, .blue = 0.680342 },
+	{ .red = 0.998535, .green = 0.701832, .blue = 0.653968 },
+	{ .red = 0.037363, .green = 0.909646, .blue = 0.722833 },
+	{ .red = 0.033455, .green = 0.913797, .blue = 0.723565 },
+	{ .red = 0.019536, .green = 0.929915, .blue = 0.726740 },
+	{ .red = 0.049573, .green = 0.964103, .blue = 0.733822 },
+	{ .red = 0.287668, .green = 0.998779, .blue = 0.742125 },
+	{ .red = 0.514286, .green = 0.998779, .blue = 0.740171 },
+	{ .red = 0.675214, .green = 0.998779, .blue = 0.724054 },
+	{ .red = 0.831013, .green = 0.976557, .blue = 0.707204 },
+	{ .red = 0.958242, .green = 0.951404, .blue = 0.693773 },
+	{ .red = 0.999267, .green = 0.899878, .blue = 0.733333 },
+	{ .red = 0.998535, .green = 0.869597, .blue = 0.756288 },
+	{ .red = 0.998046, .green = 0.852015, .blue = 0.762882 },
+	{ .red = 0.998779, .green = 0.838828, .blue = 0.762149 },
+	{ .red = 0.999267, .green = 0.826862, .blue = 0.757021 },
+	{ .red = 0.999267, .green = 0.808547, .blue = 0.740659 },
+	{ .red = 0.999512, .green = 0.786081, .blue = 0.717460 },
+	{ .red = 0.998779, .green = 0.763370, .blue = 0.693284 },
+	{ .red = 0.031746, .green = 0.938462, .blue = 0.677411 },
+	{ .red = 0.035165, .green = 0.942125, .blue = 0.677656 },
+	{ .red = 0.025641, .green = 0.957021, .blue = 0.677900 },
+	{ .red = 0.087668, .green = 0.985104, .blue = 0.678632 },
+	{ .red = 0.352625, .green = 0.999023, .blue = 0.690110 },
+	{ .red = 0.535775, .green = 0.999512, .blue = 0.703053 },
+	{ .red = 0.675702, .green = 0.999512, .blue = 0.712088 },
+	{ .red = 0.793162, .green = 0.999512, .blue = 0.710134 },
+	{ .red = 0.881319, .green = 0.998291, .blue = 0.669597 },
+	{ .red = 0.995116, .green = 0.985836, .blue = 0.627350 },
+	{ .red = 0.998291, .green = 0.916239, .blue = 0.702076 },
+	{ .red = 0.998535, .green = 0.881074, .blue = 0.720879 },
+	{ .red = 0.999512, .green = 0.857387, .blue = 0.724786 },
+	{ .red = 0.998535, .green = 0.838339, .blue = 0.722344 },
+	{ .red = 0.998046, .green = 0.821978, .blue = 0.716239 },
+	{ .red = 0.999512, .green = 0.806838, .blue = 0.706471 },
+	{ .red = 0.998535, .green = 0.791697, .blue = 0.695238 },
+	{ .red = 0.035653, .green = 0.958486, .blue = 0.634676 },
+	{ .red = 0.034432, .green = 0.961905, .blue = 0.634432 },
+	{ .red = 0.055189, .green = 0.974359, .blue = 0.632967 },
+	{ .red = 0.150427, .green = 0.994628, .blue = 0.632234 },
+	{ .red = 0.390720, .green = 0.998779, .blue = 0.652747 },
+	{ .red = 0.547741, .green = 0.998291, .blue = 0.675214 },
+	{ .red = 0.672039, .green = 0.998535, .blue = 0.697680 },
+	{ .red = 0.776801, .green = 0.998535, .blue = 0.718193 },
+	{ .red = 0.839072, .green = 0.998535, .blue = 0.698413 },
+	{ .red = 0.908425, .green = 0.999267, .blue = 0.658608 },
+	{ .red = 0.999267, .green = 0.992918, .blue = 0.606838 },
+	{ .red = 0.999267, .green = 0.926496, .blue = 0.664713 },
+	{ .red = 0.998046, .green = 0.887424, .blue = 0.681074 },
+	{ .red = 0.998291, .green = 0.859829, .blue = 0.683761 },
+	{ .red = 0.998779, .green = 0.837118, .blue = 0.679609 },
+	{ .red = 0.998046, .green = 0.816850, .blue = 0.672039 },
+	{ .red = 0.999756, .green = 0.798291, .blue = 0.660317 },
+	{ .red = 0.021001, .green = 0.972894, .blue = 0.595116 },
+	{ .red = 0.021978, .green = 0.976068, .blue = 0.594383 },
+	{ .red = 0.088645, .green = 0.983883, .blue = 0.591941 },
+	{ .red = 0.222466, .green = 0.999023, .blue = 0.598046 },
+	{ .red = 0.411233, .green = 0.998535, .blue = 0.621978 },
+	{ .red = 0.547741, .green = 0.999023, .blue = 0.649328 },
+	{ .red = 0.662271, .green = 0.998291, .blue = 0.678877 },
+	{ .red = 0.758486, .green = 0.998535, .blue = 0.707937 },
+	{ .red = 0.818803, .green = 0.998291, .blue = 0.709646 },
+	{ .red = 0.860806, .green = 0.998535, .blue = 0.675458 },
+	{ .red = 0.921856, .green = 0.998535, .blue = 0.644200 },
+	{ .red = 0.999023, .green = 0.995116, .blue = 0.585836 },
+	{ .red = 0.999023, .green = 0.932601, .blue = 0.626374 },
+	{ .red = 0.998535, .green = 0.891819, .blue = 0.638339 },
+	{ .red = 0.998779, .green = 0.861050, .blue = 0.639560 },
+	{ .red = 0.999512, .green = 0.835897, .blue = 0.634921 },
+	{ .red = 0.998535, .green = 0.813187, .blue = 0.627595 },
+	{ .red = 0.042491, .green = 0.982173, .blue = 0.558242 },
+	{ .red = 0.062027, .green = 0.983883, .blue = 0.557509 },
+	{ .red = 0.101343, .green = 0.990476, .blue = 0.554823 },
+	{ .red = 0.265201, .green = 0.999267, .blue = 0.568254 },
+	{ .red = 0.417094, .green = 0.999756, .blue = 0.593407 },
+	{ .red = 0.540415, .green = 0.999267, .blue = 0.623199 },
+	{ .red = 0.645665, .green = 0.999267, .blue = 0.655189 },
+	{ .red = 0.737241, .green = 0.998535, .blue = 0.689133 },
+	{ .red = 0.801954, .green = 0.999756, .blue = 0.706716 },
+	{ .red = 0.830037, .green = 0.999023, .blue = 0.675702 },
+	{ .red = 0.872527, .green = 0.999267, .blue = 0.644200 },
+	{ .red = 0.929915, .green = 0.999756, .blue = 0.617582 },
+	{ .red = 0.999023, .green = 0.997070, .blue = 0.557753 },
+	{ .red = 0.999756, .green = 0.937485, .blue = 0.586081 },
+	{ .red = 0.999023, .green = 0.895238, .blue = 0.595604 },
+	{ .red = 0.999023, .green = 0.862271, .blue = 0.596093 },
+	{ .red = 0.998291, .green = 0.834676, .blue = 0.592186 },
+	{ .red = 0.088645, .green = 0.985592, .blue = 0.525031 },
+	{ .red = 0.088889, .green = 0.988034, .blue = 0.524298 },
+	{ .red = 0.123321, .green = 0.995360, .blue = 0.523077 },
+	{ .red = 0.288889, .green = 0.998779, .blue = 0.541148 },
+	{ .red = 0.416606, .green = 0.999512, .blue = 0.566056 },
+	{ .red = 0.528449, .green = 0.999267, .blue = 0.596337 },
+	{ .red = 0.626862, .green = 0.998779, .blue = 0.629792 },
+	{ .red = 0.713065, .green = 0.998779, .blue = 0.664713 },
+	{ .red = 0.785104, .green = 0.999512, .blue = 0.696703 },
+	{ .red = 0.805128, .green = 0.999756, .blue = 0.667399 },
+	{ .red = 0.836386, .green = 0.998535, .blue = 0.639316 },
+	{ .red = 0.879853, .green = 0.998779, .blue = 0.611966 },
+	{ .red = 0.934554, .green = 0.999512, .blue = 0.589499 },
+	{ .red = 0.997314, .green = 0.996825, .blue = 0.531380 },
+	{ .red = 0.998291, .green = 0.940171, .blue = 0.549695 },
+	{ .red = 0.998535, .green = 0.897924, .blue = 0.555556 },
+	{ .red = 0.999512, .green = 0.863980, .blue = 0.554823 },
+	{ .red = 0.098168, .green = 0.989011, .blue = 0.494750 },
+	{ .red = 0.103785, .green = 0.990476, .blue = 0.494017 },
+	{ .red = 0.157509, .green = 0.999756, .blue = 0.497192 },
+	{ .red = 0.296947, .green = 0.999023, .blue = 0.515263 },
+	{ .red = 0.410012, .green = 0.999512, .blue = 0.539438 },
+	{ .red = 0.512332, .green = 0.999267, .blue = 0.568987 },
+	{ .red = 0.605617, .green = 0.998291, .blue = 0.602686 },
+	{ .red = 0.687179, .green = 0.999023, .blue = 0.637363 },
+	{ .red = 0.759707, .green = 0.998291, .blue = 0.673016 },
+	{ .red = 0.782906, .green = 0.998535, .blue = 0.655678 },
+	{ .red = 0.806593, .green = 0.998779, .blue = 0.627350 },
+	{ .red = 0.840781, .green = 0.999023, .blue = 0.600488 },
+	{ .red = 0.884982, .green = 0.999023, .blue = 0.577045 },
+	{ .red = 0.936996, .green = 0.998291, .blue = 0.562149 },
+	{ .red = 0.996093, .green = 0.996337, .blue = 0.504518 },
+	{ .red = 0.999023, .green = 0.943346, .blue = 0.513065 },
+	{ .red = 0.999267, .green = 0.900855, .blue = 0.517949 },
+	{ .red = 0.117460, .green = 0.989499, .blue = 0.467399 },
+	{ .red = 0.123321, .green = 0.990476, .blue = 0.466667 },
+	{ .red = 0.188523, .green = 0.998779, .blue = 0.473748 },
+	{ .red = 0.297924, .green = 0.999512, .blue = 0.490354 },
+	{ .red = 0.400733, .green = 0.999023, .blue = 0.513797 },
+	{ .red = 0.495482, .green = 0.998535, .blue = 0.542369 },
+	{ .red = 0.581685, .green = 0.999023, .blue = 0.574359 },
+	{ .red = 0.660562, .green = 0.998779, .blue = 0.608791 },
+	{ .red = 0.731380, .green = 0.998779, .blue = 0.644200 },
+	{ .red = 0.760195, .green = 0.998291, .blue = 0.638095 },
+	{ .red = 0.779243, .green = 0.998779, .blue = 0.611477 },
+	{ .red = 0.807570, .green = 0.999023, .blue = 0.586081 },
+	{ .red = 0.844444, .green = 0.999512, .blue = 0.562393 },
+	{ .red = 0.889377, .green = 0.999267, .blue = 0.542613 },
+	{ .red = 0.940415, .green = 0.999512, .blue = 0.528205 },
+	{ .red = 0.994383, .green = 0.995604, .blue = 0.479121 },
+	{ .red = 0.999267, .green = 0.946276, .blue = 0.480342 },
+	{ .red = 0.118193, .green = 0.991941, .blue = 0.442247 },
+	{ .red = 0.134066, .green = 0.994872, .blue = 0.443956 },
+	{ .red = 0.198779, .green = 0.999756, .blue = 0.451282 },
+	{ .red = 0.295726, .green = 0.999512, .blue = 0.466911 },
+	{ .red = 0.388767, .green = 0.999023, .blue = 0.488889 },
+	{ .red = 0.475458, .green = 0.999512, .blue = 0.515507 },
+	{ .red = 0.557998, .green = 0.999023, .blue = 0.546276 },
+	{ .red = 0.634188, .green = 0.998535, .blue = 0.579976 },
+	{ .red = 0.702076, .green = 0.999267, .blue = 0.613431 },
+	{ .red = 0.736508, .green = 0.999023, .blue = 0.615873 },
+	{ .red = 0.753602, .green = 0.999023, .blue = 0.592918 },
+	{ .red = 0.777778, .green = 0.999267, .blue = 0.569475 },
+	{ .red = 0.809768, .green = 0.998535, .blue = 0.548718 },
+	{ .red = 0.848352, .green = 0.999023, .blue = 0.527961 },
+	{ .red = 0.893040, .green = 0.999023, .blue = 0.511355 },
+	{ .red = 0.942613, .green = 0.999512, .blue = 0.498413 },
+	{ .red = 0.993895, .green = 0.995360, .blue = 0.453480 },
+	{ .red = 0.000000, .green = 0.135287, .blue = 0.610745 },
+	{ .red = 0.102320, .green = 0.017338, .blue = 0.712088 },
+	{ .red = 0.236630, .green = 0.019292, .blue = 0.749451 },
+	{ .red = 0.374359, .green = 0.017338, .blue = 0.783639 },
+	{ .red = 0.493040, .green = 0.020757, .blue = 0.782173 },
+	{ .red = 0.587057, .green = 0.019292, .blue = 0.763614 },
+	{ .red = 0.674725, .green = 0.013187, .blue = 0.756288 },
+	{ .red = 0.786569, .green = 0.021490, .blue = 0.784860 },
+	{ .red = 0.844200, .green = 0.018071, .blue = 0.736996 },
+	{ .red = 0.884493, .green = 0.018559, .blue = 0.688156 },
+	{ .red = 0.915263, .green = 0.016361, .blue = 0.643468 },
+	{ .red = 0.937241, .green = 0.020024, .blue = 0.601954 },
+	{ .red = 0.956288, .green = 0.015140, .blue = 0.565568 },
+	{ .red = 0.968742, .green = 0.020269, .blue = 0.531380 },
+	{ .red = 0.976801, .green = 0.033700, .blue = 0.499389 },
+	{ .red = 0.985592, .green = 0.042979, .blue = 0.472283 },
+	{ .red = 0.991209, .green = 0.052259, .blue = 0.446886 },
+	{ .red = 0.007814, .green = 0.146764, .blue = 0.626129 },
+	{ .red = 0.107937, .green = 0.010256, .blue = 0.770696 },
+	{ .red = 0.253236, .green = 0.020024, .blue = 0.824908 },
+	{ .red = 0.410745, .green = 0.011966, .blue = 0.882051 },
+	{ .red = 0.538706, .green = 0.024420, .blue = 0.871306 },
+	{ .red = 0.632479, .green = 0.021245, .blue = 0.833455 },
+	{ .red = 0.716239, .green = 0.010501, .blue = 0.809035 },
+	{ .red = 0.829304, .green = 0.017827, .blue = 0.830525 },
+	{ .red = 0.886935, .green = 0.019048, .blue = 0.775092 },
+	{ .red = 0.925519, .green = 0.016117, .blue = 0.718926 },
+	{ .red = 0.952869, .green = 0.010989, .blue = 0.667643 },
+	{ .red = 0.970696, .green = 0.017827, .blue = 0.620757 },
+	{ .red = 0.985104, .green = 0.015873, .blue = 0.579976 },
+	{ .red = 0.989255, .green = 0.030281, .blue = 0.540171 },
+	{ .red = 0.998535, .green = 0.065934, .blue = 0.509646 },
+	{ .red = 0.999512, .green = 0.095238, .blue = 0.480586 },
+	{ .red = 0.998779, .green = 0.115018, .blue = 0.454945 },
+	{ .red = 0.000000, .green = 0.198779, .blue = 0.646154 },
+	{ .red = 0.129915, .green = 0.171917, .blue = 0.999023 },
+	{ .red = 0.293040, .green = 0.202442, .blue = 0.998291 },
+	{ .red = 0.453236, .green = 0.226862, .blue = 0.998291 },
+	{ .red = 0.607082, .green = 0.230525, .blue = 0.999512 },
+	{ .red = 0.747253, .green = 0.216361, .blue = 0.999023 },
+	{ .red = 0.874969, .green = 0.194139, .blue = 0.998779 },
+	{ .red = 0.992430, .green = 0.171673, .blue = 0.999023 },
+	{ .red = 0.999756, .green = 0.191209, .blue = 0.873016 },
+	{ .red = 0.999023, .green = 0.203907, .blue = 0.775092 },
+	{ .red = 0.999023, .green = 0.211233, .blue = 0.702808 },
+	{ .red = 0.999756, .green = 0.215140, .blue = 0.646886 },
+	{ .red = 0.999267, .green = 0.217582, .blue = 0.600488 },
+	{ .red = 0.999023, .green = 0.219048, .blue = 0.561661 },
+	{ .red = 0.999023, .green = 0.220269, .blue = 0.528449 },
+	{ .red = 0.999267, .green = 0.221245, .blue = 0.499389 },
+	{ .red = 0.999512, .green = 0.221490, .blue = 0.473748 },
+	{ .red = 0.000000, .green = 0.279365, .blue = 0.617582 },
+	{ .red = 0.000000, .green = 0.350916, .blue = 0.981441 },
+	{ .red = 0.285958, .green = 0.376557, .blue = 1.000000 },
+	{ .red = 0.446886, .green = 0.393407, .blue = 0.998291 },
+	{ .red = 0.604396, .green = 0.402930, .blue = 0.999023 },
+	{ .red = 0.750427, .green = 0.401954, .blue = 0.998046 },
+	{ .red = 0.884249, .green = 0.395604, .blue = 0.999512 },
+	{ .red = 0.999512, .green = 0.385836, .blue = 0.994872 },
+	{ .red = 0.998779, .green = 0.387057, .blue = 0.870085 },
+	{ .red = 0.999023, .green = 0.385348, .blue = 0.783150 },
+	{ .red = 0.998779, .green = 0.380952, .blue = 0.720147 },
+	{ .red = 0.999267, .green = 0.374603, .blue = 0.671062 },
+	{ .red = 0.998535, .green = 0.366789, .blue = 0.629304 },
+	{ .red = 0.999023, .green = 0.358242, .blue = 0.593895 },
+	{ .red = 0.998291, .green = 0.349451, .blue = 0.561416 },
+	{ .red = 0.999267, .green = 0.340171, .blue = 0.532845 },
+	{ .red = 0.998779, .green = 0.331380, .blue = 0.506227 },
+	{ .red = 0.018071, .green = 0.412698, .blue = 0.687179 },
+	{ .red = 0.008303, .green = 0.431502, .blue = 0.752381 },
+	{ .red = 0.230525, .green = 0.522344, .blue = 0.998291 },
+	{ .red = 0.439316, .green = 0.544078, .blue = 0.998291 },
+	{ .red = 0.597314, .green = 0.557021, .blue = 0.998046 },
+	{ .red = 0.749206, .green = 0.562393, .blue = 0.999267 },
+	{ .red = 0.886935, .green = 0.557753, .blue = 0.999267 },
+	{ .red = 0.998779, .green = 0.547741, .blue = 0.987302 },
+	{ .red = 0.998535, .green = 0.545299, .blue = 0.874237 },
+	{ .red = 0.999023, .green = 0.539438, .blue = 0.800977 },
+	{ .red = 0.999512, .green = 0.530159, .blue = 0.749695 },
+	{ .red = 0.999756, .green = 0.518193, .blue = 0.708181 },
+	{ .red = 0.998535, .green = 0.504274, .blue = 0.671795 },
+	{ .red = 0.999267, .green = 0.489133, .blue = 0.639072 },
+	{ .red = 0.998779, .green = 0.473260, .blue = 0.608059 },
+	{ .red = 0.999512, .green = 0.457143, .blue = 0.579243 },
+	{ .red = 0.999023, .green = 0.441270, .blue = 0.551404 },
+	{ .red = 0.026374, .green = 0.556532, .blue = 0.749206 },
+	{ .red = 0.024908, .green = 0.567277, .blue = 0.774603 },
+	{ .red = 0.018315, .green = 0.640049, .blue = 0.930403 },
+	{ .red = 0.372161, .green = 0.682540, .blue = 0.998291 },
+	{ .red = 0.584127, .green = 0.697436, .blue = 0.999512 },
+	{ .red = 0.733089, .green = 0.702808, .blue = 0.998046 },
+	{ .red = 0.877411, .green = 0.696947, .blue = 0.999023 },
+	{ .red = 0.998535, .green = 0.682051, .blue = 0.987057 },
+	{ .red = 0.998291, .green = 0.679121, .blue = 0.883028 },
+	{ .red = 0.998779, .green = 0.671306, .blue = 0.825153 },
+	{ .red = 0.998535, .green = 0.659096, .blue = 0.784860 },
+	{ .red = 0.998779, .green = 0.643468, .blue = 0.751160 },
+	{ .red = 0.998779, .green = 0.625641, .blue = 0.720147 },
+	{ .red = 0.998779, .green = 0.606593, .blue = 0.690354 },
+	{ .red = 0.999267, .green = 0.586081, .blue = 0.660806 },
+	{ .red = 0.998779, .green = 0.565324, .blue = 0.631746 },
+	{ .red = 0.999023, .green = 0.544322, .blue = 0.603175 },
+	{ .red = 0.031990, .green = 0.720391, .blue = 0.823199 },
+	{ .red = 0.032723, .green = 0.726007, .blue = 0.832967 },
+	{ .red = 0.024664, .green = 0.752381, .blue = 0.878144 },
+	{ .red = 0.148718, .green = 0.828083, .blue = 0.998535 },
+	{ .red = 0.467888, .green = 0.830525, .blue = 0.999267 },
+	{ .red = 0.672527, .green = 0.825153, .blue = 0.995604 },
+	{ .red = 0.829548, .green = 0.813187, .blue = 0.961172 },
+	{ .red = 0.961172, .green = 0.795849, .blue = 0.952381 },
+	{ .red = 0.998779, .green = 0.785836, .blue = 0.888645 },
+	{ .red = 0.998291, .green = 0.775824, .blue = 0.847131 },
+	{ .red = 0.999512, .green = 0.761416, .blue = 0.818071 },
+	{ .red = 0.999756, .green = 0.744322, .blue = 0.791697 },
+	{ .red = 0.998535, .green = 0.725031, .blue = 0.765079 },
+	{ .red = 0.999512, .green = 0.703785, .blue = 0.738462 },
+	{ .red = 0.999512, .green = 0.681563, .blue = 0.711111 },
+	{ .red = 0.999023, .green = 0.658608, .blue = 0.683028 },
+	{ .red = 0.998291, .green = 0.635409, .blue = 0.654457 },
+	{ .red = 0.025153, .green = 0.874725, .blue = 0.874725 },
+	{ .red = 0.025885, .green = 0.878144, .blue = 0.878388 },
+	{ .red = 0.028327, .green = 0.891087, .blue = 0.892308 },
+	{ .red = 0.031990, .green = 0.920391, .blue = 0.923810 },
+	{ .red = 0.272772, .green = 0.954090, .blue = 0.959219 },
+	{ .red = 0.546032, .green = 0.937241, .blue = 0.940659 },
+	{ .red = 0.735043, .green = 0.916239, .blue = 0.917949 },
+	{ .red = 0.893040, .green = 0.891819, .blue = 0.892063 },
+	{ .red = 0.998535, .green = 0.867643, .blue = 0.873016 },
+	{ .red = 0.998291, .green = 0.853724, .blue = 0.858364 },
+	{ .red = 0.998535, .green = 0.837851, .blue = 0.841270 },
+	{ .red = 0.998291, .green = 0.820024, .blue = 0.822222 },
+	{ .red = 0.998291, .green = 0.800733, .blue = 0.800977 },
+	{ .red = 0.999512, .green = 0.779731, .blue = 0.777778 },
+	{ .red = 0.998291, .green = 0.757509, .blue = 0.753114 },
+	{ .red = 0.999267, .green = 0.734554, .blue = 0.726984 },
+	{ .red = 0.999023, .green = 0.710867, .blue = 0.699878 },
+	{ .red = 0.031502, .green = 0.913309, .blue = 0.821245 },
+	{ .red = 0.029304, .green = 0.916728, .blue = 0.823199 },
+	{ .red = 0.015873, .green = 0.930647, .blue = 0.831502 },
+	{ .red = 0.066178, .green = 0.958974, .blue = 0.847619 },
+	{ .red = 0.225885, .green = 0.999512, .blue = 0.870818 },
+	{ .red = 0.480098, .green = 0.999023, .blue = 0.867888 },
+	{ .red = 0.644444, .green = 0.996825, .blue = 0.856166 },
+	{ .red = 0.812698, .green = 0.970696, .blue = 0.834432 },
+	{ .red = 0.947985, .green = 0.943834, .blue = 0.816606 },
+	{ .red = 0.998779, .green = 0.908425, .blue = 0.835409 },
+	{ .red = 0.999512, .green = 0.893284, .blue = 0.848352 },
+	{ .red = 0.999023, .green = 0.875946, .blue = 0.840537 },
+	{ .red = 0.998535, .green = 0.857143, .blue = 0.825397 },
+	{ .red = 0.999267, .green = 0.837118, .blue = 0.806349 },
+	{ .red = 0.999512, .green = 0.816117, .blue = 0.784860 },
+	{ .red = 0.999267, .green = 0.794139, .blue = 0.761416 },
+	{ .red = 0.999023, .green = 0.771673, .blue = 0.736508 },
+	{ .red = 0.035409, .green = 0.940415, .blue = 0.769719 },
+	{ .red = 0.037851, .green = 0.943834, .blue = 0.770940 },
+	{ .red = 0.032234, .green = 0.956777, .blue = 0.774847 },
+	{ .red = 0.093529, .green = 0.980708, .blue = 0.782173 },
+	{ .red = 0.324298, .green = 0.999512, .blue = 0.794139 },
+	{ .red = 0.518926, .green = 0.999267, .blue = 0.802442 },
+	{ .red = 0.659829, .green = 0.998779, .blue = 0.807082 },
+	{ .red = 0.775336, .green = 0.998779, .blue = 0.802930 },
+	{ .red = 0.875458, .green = 0.999512, .blue = 0.770208 },
+	{ .red = 0.986081, .green = 0.978999, .blue = 0.743346 },
+	{ .red = 0.999023, .green = 0.924786, .blue = 0.800244 },
+	{ .red = 0.998779, .green = 0.900611, .blue = 0.815140 },
+	{ .red = 0.998779, .green = 0.885470, .blue = 0.817094 },
+	{ .red = 0.998779, .green = 0.873260, .blue = 0.813919 },
+	{ .red = 0.999267, .green = 0.861538, .blue = 0.807082 },
+	{ .red = 0.999023, .green = 0.841026, .blue = 0.786569 },
+	{ .red = 0.998535, .green = 0.819780, .blue = 0.764591 },
+	{ .red = 0.018315, .green = 0.959951, .blue = 0.721856 },
+	{ .red = 0.022466, .green = 0.963126, .blue = 0.722344 },
+	{ .red = 0.060806, .green = 0.973382, .blue = 0.723565 },
+	{ .red = 0.133333, .green = 0.990720, .blue = 0.725031 },
+	{ .red = 0.376068, .green = 0.999267, .blue = 0.742369 },
+	{ .red = 0.536996, .green = 0.999267, .blue = 0.758974 },
+	{ .red = 0.662027, .green = 0.999512, .blue = 0.774603 },
+	{ .red = 0.766545, .green = 0.998535, .blue = 0.788034 },
+	{ .red = 0.854945, .green = 0.999267, .blue = 0.794872 },
+	{ .red = 0.911600, .green = 0.999267, .blue = 0.753846 },
+	{ .red = 0.999512, .green = 0.993162, .blue = 0.700855 },
+	{ .red = 0.999023, .green = 0.933333, .blue = 0.761905 },
+	{ .red = 0.998779, .green = 0.904029, .blue = 0.775580 },
+	{ .red = 0.998535, .green = 0.883516, .blue = 0.777045 },
+	{ .red = 0.998535, .green = 0.866667, .blue = 0.772405 },
+	{ .red = 0.999023, .green = 0.852015, .blue = 0.765079 },
+	{ .red = 0.998535, .green = 0.837851, .blue = 0.755800 },
+	{ .red = 0.023443, .green = 0.973626, .blue = 0.677656 },
+	{ .red = 0.025397, .green = 0.976313, .blue = 0.677411 },
+	{ .red = 0.088400, .green = 0.983639, .blue = 0.676923 },
+	{ .red = 0.201465, .green = 0.999512, .blue = 0.683028 },
+	{ .red = 0.404151, .green = 0.998779, .blue = 0.702320 },
+	{ .red = 0.543590, .green = 0.998535, .blue = 0.724298 },
+	{ .red = 0.657387, .green = 0.998291, .blue = 0.746764 },
+	{ .red = 0.751893, .green = 0.999023, .blue = 0.768010 },
+	{ .red = 0.833944, .green = 0.998779, .blue = 0.788767 },
+	{ .red = 0.877656, .green = 0.999756, .blue = 0.768987 },
+	{ .red = 0.927228, .green = 0.998779, .blue = 0.733089 },
+	{ .red = 0.998046, .green = 0.994383, .blue = 0.677900 },
+	{ .red = 0.998291, .green = 0.938217, .blue = 0.720879 },
+	{ .red = 0.999023, .green = 0.905495, .blue = 0.731868 },
+	{ .red = 0.998535, .green = 0.881074, .blue = 0.733333 },
+	{ .red = 0.999023, .green = 0.861294, .blue = 0.728449 },
+	{ .red = 0.998535, .green = 0.843223, .blue = 0.720635 },
+	{ .red = 0.065934, .green = 0.981441, .blue = 0.636630 },
+	{ .red = 0.073016, .green = 0.983394, .blue = 0.636142 },
+	{ .red = 0.106227, .green = 0.989499, .blue = 0.634921 },
+	{ .red = 0.258364, .green = 0.999023, .blue = 0.646398 },
+	{ .red = 0.415385, .green = 0.999023, .blue = 0.667643 },
+	{ .red = 0.539194, .green = 0.998779, .blue = 0.692063 },
+	{ .red = 0.644444, .green = 0.998535, .blue = 0.718437 },
+	{ .red = 0.733822, .green = 0.998535, .blue = 0.744811 },
+	{ .red = 0.810256, .green = 0.999512, .blue = 0.769963 },
+	{ .red = 0.858120, .green = 0.999512, .blue = 0.771673 },
+	{ .red = 0.887179, .green = 0.999267, .blue = 0.736264 },
+	{ .red = 0.934799, .green = 0.998291, .blue = 0.706960 },
+	{ .red = 0.998046, .green = 0.995849, .blue = 0.646642 },
+	{ .red = 0.999267, .green = 0.941880, .blue = 0.677167 },
+	{ .red = 0.998291, .green = 0.905983, .blue = 0.687668 },
+	{ .red = 0.999267, .green = 0.879365, .blue = 0.687668 },
+	{ .red = 0.999023, .green = 0.856899, .blue = 0.683516 },
+	{ .red = 0.051770, .green = 0.988767, .blue = 0.599267 },
+	{ .red = 0.070574, .green = 0.989744, .blue = 0.598779 },
+	{ .red = 0.114286, .green = 0.995116, .blue = 0.597802 },
+	{ .red = 0.285470, .green = 0.998779, .blue = 0.613919 },
+	{ .red = 0.417338, .green = 0.998535, .blue = 0.635653 },
+	{ .red = 0.528938, .green = 0.998535, .blue = 0.661294 },
+	{ .red = 0.625397, .green = 0.999267, .blue = 0.688645 },
+	{ .red = 0.711355, .green = 0.998535, .blue = 0.717705 },
+	{ .red = 0.785104, .green = 0.999267, .blue = 0.745788 },
+	{ .red = 0.842491, .green = 0.998779, .blue = 0.766545 },
+	{ .red = 0.859829, .green = 0.998291, .blue = 0.733333 },
+	{ .red = 0.892063, .green = 0.999267, .blue = 0.699389 },
+	{ .red = 0.938950, .green = 0.999023, .blue = 0.674481 },
+	{ .red = 0.997558, .green = 0.996581, .blue = 0.613187 },
+	{ .red = 0.998779, .green = 0.944322, .blue = 0.635409 },
+	{ .red = 0.999023, .green = 0.907448, .blue = 0.642979 },
+	{ .red = 0.998535, .green = 0.878144, .blue = 0.644200 },
+	{ .red = 0.107204, .green = 0.988523, .blue = 0.565324 },
+	{ .red = 0.114042, .green = 0.989499, .blue = 0.564835 },
+	{ .red = 0.167521, .green = 0.996825, .blue = 0.568498 },
+	{ .red = 0.295238, .green = 0.999512, .blue = 0.583883 },
+	{ .red = 0.411722, .green = 0.998779, .blue = 0.605128 },
+	{ .red = 0.512821, .green = 0.999512, .blue = 0.630525 },
+	{ .red = 0.604640, .green = 0.999267, .blue = 0.658608 },
+	{ .red = 0.686203, .green = 0.999023, .blue = 0.688156 },
+	{ .red = 0.758730, .green = 0.998535, .blue = 0.718681 },
+	{ .red = 0.819780, .green = 0.999512, .blue = 0.746276 },
+	{ .red = 0.836874, .green = 0.998291, .blue = 0.722344 },
+	{ .red = 0.859585, .green = 0.998535, .blue = 0.690598 },
+	{ .red = 0.894994, .green = 0.999756, .blue = 0.660073 },
+	{ .red = 0.941636, .green = 0.999023, .blue = 0.641026 },
+	{ .red = 0.998779, .green = 0.998291, .blue = 0.575336 },
+	{ .red = 0.999023, .green = 0.946764, .blue = 0.594872 },
+	{ .red = 0.999267, .green = 0.908669, .blue = 0.601709 },
+	{ .red = 0.098657, .green = 0.992430, .blue = 0.534310 },
+	{ .red = 0.107692, .green = 0.993162, .blue = 0.533822 },
+	{ .red = 0.185836, .green = 0.999512, .blue = 0.540904 },
+	{ .red = 0.301343, .green = 0.998535, .blue = 0.555800 },
+	{ .red = 0.401465, .green = 0.999267, .blue = 0.576068 },
+	{ .red = 0.494505, .green = 0.999756, .blue = 0.600244 },
+	{ .red = 0.582418, .green = 0.998535, .blue = 0.628816 },
+	{ .red = 0.659829, .green = 0.999267, .blue = 0.657631 },
+	{ .red = 0.730403, .green = 0.998779, .blue = 0.688400 },
+	{ .red = 0.792430, .green = 0.999023, .blue = 0.718926 },
+	{ .red = 0.814896, .green = 0.998291, .blue = 0.706471 },
+	{ .red = 0.831746, .green = 0.999023, .blue = 0.676190 },
+	{ .red = 0.859585, .green = 0.998535, .blue = 0.649328 },
+	{ .red = 0.897436, .green = 0.999267, .blue = 0.623687 },
+	{ .red = 0.943834, .green = 0.999512, .blue = 0.606349 },
+	{ .red = 0.997558, .green = 0.997558, .blue = 0.544811 },
+	{ .red = 0.999267, .green = 0.948962, .blue = 0.557509 },
+	{ .red = 0.123810, .green = 0.991453, .blue = 0.506716 },
+	{ .red = 0.141148, .green = 0.994139, .blue = 0.508669 },
+	{ .red = 0.203907, .green = 0.999023, .blue = 0.515507 },
+	{ .red = 0.299634, .green = 0.998291, .blue = 0.529426 },
+	{ .red = 0.389988, .green = 0.999023, .blue = 0.548474 },
+	{ .red = 0.477656, .green = 0.998779, .blue = 0.572161 },
+	{ .red = 0.558730, .green = 0.999023, .blue = 0.598779 },
+	{ .red = 0.633700, .green = 0.999023, .blue = 0.627839 },
+	{ .red = 0.701832, .green = 0.999023, .blue = 0.657631 },
+	{ .red = 0.763370, .green = 0.999023, .blue = 0.688400 },
+	{ .red = 0.792186, .green = 0.999512, .blue = 0.685714 },
+	{ .red = 0.806105, .green = 0.999756, .blue = 0.658364 },
+	{ .red = 0.829304, .green = 0.999023, .blue = 0.633455 },
+	{ .red = 0.860562, .green = 0.999267, .blue = 0.609280 },
+	{ .red = 0.899878, .green = 0.999267, .blue = 0.588278 },
+	{ .red = 0.945055, .green = 0.999023, .blue = 0.575092 },
+	{ .red = 0.996337, .green = 0.997070, .blue = 0.517216 },
+	{ .red = 0.005128, .green = 0.142125, .blue = 0.646154 },
+	{ .red = 0.093529, .green = 0.014896, .blue = 0.755067 },
+	{ .red = 0.219780, .green = 0.013431, .blue = 0.796093 },
+	{ .red = 0.352869, .green = 0.013675, .blue = 0.841026 },
+	{ .red = 0.476435, .green = 0.018071, .blue = 0.855189 },
+	{ .red = 0.575580, .green = 0.020757, .blue = 0.839560 },
+	{ .red = 0.653724, .green = 0.021245, .blue = 0.815140 },
+	{ .red = 0.737973, .green = 0.021734, .blue = 0.813919 },
+	{ .red = 0.840537, .green = 0.018071, .blue = 0.839316 },
+	{ .red = 0.884005, .green = 0.021978, .blue = 0.784860 },
+	{ .red = 0.915995, .green = 0.015873, .blue = 0.733822 },
+	{ .red = 0.938462, .green = 0.018315, .blue = 0.686203 },
+	{ .red = 0.956044, .green = 0.019048, .blue = 0.643712 },
+	{ .red = 0.970696, .green = 0.015140, .blue = 0.605861 },
+	{ .red = 0.980708, .green = 0.019048, .blue = 0.570452 },
+	{ .red = 0.984615, .green = 0.029792, .blue = 0.536508 },
+	{ .red = 0.983883, .green = 0.045177, .blue = 0.504518 },
+	{ .red = 0.010989, .green = 0.146520, .blue = 0.684249 },
+	{ .red = 0.099389, .green = 0.015140, .blue = 0.805372 },
+	{ .red = 0.232234, .green = 0.021978, .blue = 0.857631 },
+	{ .red = 0.380464, .green = 0.017582, .blue = 0.924542 },
+	{ .red = 0.518193, .green = 0.020024, .blue = 0.946032 },
+	{ .red = 0.622222, .green = 0.009035, .blue = 0.919658 },
+	{ .red = 0.695971, .green = 0.022466, .blue = 0.875214 },
+	{ .red = 0.777289, .green = 0.015873, .blue = 0.861783 },
+	{ .red = 0.876435, .green = 0.024420, .blue = 0.877411 },
+	{ .red = 0.920635, .green = 0.021001, .blue = 0.818315 },
+	{ .red = 0.949695, .green = 0.016117, .blue = 0.760440 },
+	{ .red = 0.968987, .green = 0.019048, .blue = 0.707204 },
+	{ .red = 0.977534, .green = 0.033211, .blue = 0.656410 },
+	{ .red = 0.984371, .green = 0.038339, .blue = 0.612698 },
+	{ .red = 0.995604, .green = 0.064957, .blue = 0.578510 },
+	{ .red = 0.999756, .green = 0.091087, .blue = 0.546276 },
+	{ .red = 0.999023, .green = 0.111111, .blue = 0.515995 },
+	{ .red = 0.000000, .green = 0.192186, .blue = 0.785348 },
+	{ .red = 0.121123, .green = 0.140904, .blue = 0.999023 },
+	{ .red = 0.261538, .green = 0.170452, .blue = 0.999023 },
+	{ .red = 0.403175, .green = 0.199756, .blue = 0.999023 },
+	{ .red = 0.541148, .green = 0.212943, .blue = 0.998291 },
+	{ .red = 0.670330, .green = 0.210745, .blue = 0.998535 },
+	{ .red = 0.788767, .green = 0.200488, .blue = 0.999023 },
+	{ .red = 0.896215, .green = 0.187302, .blue = 0.998779 },
+	{ .red = 0.993651, .green = 0.173871, .blue = 0.996825 },
+	{ .red = 0.999267, .green = 0.194139, .blue = 0.887424 },
+	{ .red = 0.999267, .green = 0.207326, .blue = 0.800000 },
+	{ .red = 0.999023, .green = 0.214652, .blue = 0.732845 },
+	{ .red = 0.998779, .green = 0.219048, .blue = 0.678632 },
+	{ .red = 0.999512, .green = 0.221001, .blue = 0.634188 },
+	{ .red = 0.999023, .green = 0.221734, .blue = 0.595360 },
+	{ .red = 0.999023, .green = 0.221978, .blue = 0.561905 },
+	{ .red = 0.999267, .green = 0.221978, .blue = 0.532601 },
+	{ .red = 0.006838, .green = 0.260073, .blue = 0.664713 },
+	{ .red = 0.093040, .green = 0.311844, .blue = 0.998291 },
+	{ .red = 0.270574, .green = 0.348474, .blue = 0.999267 },
+	{ .red = 0.409524, .green = 0.365324, .blue = 0.998535 },
+	{ .red = 0.548230, .green = 0.378999, .blue = 0.998291 },
+	{ .red = 0.680830, .green = 0.386325, .blue = 0.999267 },
+	{ .red = 0.802198, .green = 0.387546, .blue = 0.999512 },
+	{ .red = 0.910379, .green = 0.383883, .blue = 0.999267 },
+	{ .red = 0.999512, .green = 0.379243, .blue = 0.989744 },
+	{ .red = 0.999023, .green = 0.381929, .blue = 0.884737 },
+	{ .red = 0.999267, .green = 0.380708, .blue = 0.806838 },
+	{ .red = 0.998535, .green = 0.376557, .blue = 0.747497 },
+	{ .red = 0.998779, .green = 0.370208, .blue = 0.699878 },
+	{ .red = 0.999023, .green = 0.362149, .blue = 0.659341 },
+	{ .red = 0.998779, .green = 0.353114, .blue = 0.623443 },
+	{ .red = 0.999267, .green = 0.343834, .blue = 0.591453 },
+	{ .red = 0.999756, .green = 0.334554, .blue = 0.562393 },
+	{ .red = 0.004151, .green = 0.378755, .blue = 0.725519 },
+	{ .red = 0.006105, .green = 0.402442, .blue = 0.824176 },
+	{ .red = 0.266911, .green = 0.482540, .blue = 0.999756 },
+	{ .red = 0.427350, .green = 0.515263, .blue = 0.999512 },
+	{ .red = 0.561172, .green = 0.529915, .blue = 0.998535 },
+	{ .red = 0.691575, .green = 0.540171, .blue = 0.999267 },
+	{ .red = 0.812210, .green = 0.543590, .blue = 0.999512 },
+	{ .red = 0.919414, .green = 0.541392, .blue = 0.999023 },
+	{ .red = 0.999023, .green = 0.536996, .blue = 0.981441 },
+	{ .red = 0.999023, .green = 0.536020, .blue = 0.889621 },
+	{ .red = 0.999023, .green = 0.530159, .blue = 0.823199 },
+	{ .red = 0.998779, .green = 0.520879, .blue = 0.773626 },
+	{ .red = 0.999512, .green = 0.508669, .blue = 0.733333 },
+	{ .red = 0.999267, .green = 0.494261, .blue = 0.696947 },
+	{ .red = 0.999023, .green = 0.478877, .blue = 0.663736 },
+	{ .red = 0.999267, .green = 0.462759, .blue = 0.632723 },
+	{ .red = 0.998779, .green = 0.446642, .blue = 0.603175 },
+	{ .red = 0.010989, .green = 0.510867, .blue = 0.782662 },
+	{ .red = 0.021734, .green = 0.525031, .blue = 0.821734 },
+	{ .red = 0.158974, .green = 0.600000, .blue = 0.999267 },
+	{ .red = 0.416117, .green = 0.633700, .blue = 0.999023 },
+	{ .red = 0.580708, .green = 0.666422, .blue = 0.998291 },
+	{ .red = 0.700122, .green = 0.675458, .blue = 0.998535 },
+	{ .red = 0.815140, .green = 0.678632, .blue = 0.998291 },
+	{ .red = 0.920635, .green = 0.675702, .blue = 0.998291 },
+	{ .red = 0.998779, .green = 0.669353, .blue = 0.980952 },
+	{ .red = 0.999023, .green = 0.667643, .blue = 0.901343 },
+	{ .red = 0.999267, .green = 0.659585, .blue = 0.847619 },
+	{ .red = 0.998779, .green = 0.647131, .blue = 0.807326 },
+	{ .red = 0.998779, .green = 0.631258, .blue = 0.772650 },
+	{ .red = 0.999023, .green = 0.612943, .blue = 0.740904 },
+	{ .red = 0.998046, .green = 0.593407, .blue = 0.710134 },
+	{ .red = 0.998535, .green = 0.572894, .blue = 0.680342 },
+	{ .red = 0.999023, .green = 0.551893, .blue = 0.651282 },
+	{ .red = 0.023199, .green = 0.647619, .blue = 0.834188 },
+	{ .red = 0.023687, .green = 0.655678, .blue = 0.851282 },
+	{ .red = 0.025153, .green = 0.697192, .blue = 0.934554 },
+	{ .red = 0.323321, .green = 0.742369, .blue = 0.998046 },
+	{ .red = 0.536020, .green = 0.763858, .blue = 0.999023 },
+	{ .red = 0.705006, .green = 0.788523, .blue = 0.998291 },
+	{ .red = 0.810256, .green = 0.791209, .blue = 0.998535 },
+	{ .red = 0.914286, .green = 0.786325, .blue = 0.998291 },
+	{ .red = 0.999023, .green = 0.775824, .blue = 0.985592 },
+	{ .red = 0.999267, .green = 0.773626, .blue = 0.914530 },
+	{ .red = 0.999267, .green = 0.763858, .blue = 0.872527 },
+	{ .red = 0.998779, .green = 0.749451, .blue = 0.840293 },
+	{ .red = 0.998291, .green = 0.731868, .blue = 0.811722 },
+	{ .red = 0.999756, .green = 0.711600, .blue = 0.784127 },
+	{ .red = 0.998779, .green = 0.690110, .blue = 0.755800 },
+	{ .red = 0.999023, .green = 0.667399, .blue = 0.727473 },
+	{ .red = 0.999023, .green = 0.643956, .blue = 0.699145 },
+	{ .red = 0.024176, .green = 0.786081, .blue = 0.881807 },
+	{ .red = 0.025641, .green = 0.790720, .blue = 0.889377 },
+	{ .red = 0.031746, .green = 0.810745, .blue = 0.921123 },
+	{ .red = 0.104518, .green = 0.861783, .blue = 0.998779 },
+	{ .red = 0.436874, .green = 0.869841, .blue = 0.998779 },
+	{ .red = 0.620513, .green = 0.876190, .blue = 0.998291 },
+	{ .red = 0.771673, .green = 0.879609, .blue = 0.999023 },
+	{ .red = 0.890598, .green = 0.876923, .blue = 0.999512 },
+	{ .red = 0.998779, .green = 0.858608, .blue = 0.990476 },
+	{ .red = 0.999023, .green = 0.854212, .blue = 0.923077 },
+	{ .red = 0.998535, .green = 0.842735, .blue = 0.892063 },
+	{ .red = 0.998535, .green = 0.827106, .blue = 0.867643 },
+	{ .red = 0.999512, .green = 0.808791, .blue = 0.844200 },
+	{ .red = 0.998779, .green = 0.788523, .blue = 0.819780 },
+	{ .red = 0.998535, .green = 0.766789, .blue = 0.794628 },
+	{ .red = 0.998291, .green = 0.743834, .blue = 0.768254 },
+	{ .red = 0.998535, .green = 0.720147, .blue = 0.741392 },
+	{ .red = 0.029548, .green = 0.916484, .blue = 0.916239 },
+	{ .red = 0.029792, .green = 0.919658, .blue = 0.919658 },
+	{ .red = 0.030281, .green = 0.930891, .blue = 0.932112 },
+	{ .red = 0.064957, .green = 0.954579, .blue = 0.957265 },
+	{ .red = 0.185348, .green = 0.993407, .blue = 0.998291 },
+	{ .red = 0.453968, .green = 0.994872, .blue = 0.999023 },
+	{ .red = 0.630769, .green = 0.985592, .blue = 0.988767 },
+	{ .red = 0.795604, .green = 0.961661, .blue = 0.963126 },
+	{ .red = 0.936020, .green = 0.934799, .blue = 0.935043 },
+	{ .red = 0.999756, .green = 0.913309, .blue = 0.916972 },
+	{ .red = 0.999756, .green = 0.898901, .blue = 0.902320 },
+	{ .red = 0.999267, .green = 0.882784, .blue = 0.885714 },
+	{ .red = 0.998535, .green = 0.865201, .blue = 0.867155 },
+	{ .red = 0.998291, .green = 0.845910, .blue = 0.846642 },
+	{ .red = 0.998291, .green = 0.825153, .blue = 0.824420 },
+	{ .red = 0.998779, .green = 0.803175, .blue = 0.800733 },
+	{ .red = 0.999756, .green = 0.780220, .blue = 0.775580 },
+	{ .red = 0.029792, .green = 0.942613, .blue = 0.858608 },
+	{ .red = 0.029548, .green = 0.945788, .blue = 0.860562 },
+	{ .red = 0.029792, .green = 0.957265, .blue = 0.868132 },
+	{ .red = 0.035165, .green = 0.980952, .blue = 0.883516 },
+	{ .red = 0.296703, .green = 0.999512, .blue = 0.897680 },
+	{ .red = 0.505739, .green = 0.998779, .blue = 0.901099 },
+	{ .red = 0.646886, .green = 0.998046, .blue = 0.902320 },
+	{ .red = 0.757021, .green = 0.998291, .blue = 0.897924 },
+	{ .red = 0.854457, .green = 0.999267, .blue = 0.874481 },
+	{ .red = 0.975336, .green = 0.971184, .blue = 0.854701 },
+	{ .red = 0.999512, .green = 0.935775, .blue = 0.884493 },
+	{ .red = 0.999023, .green = 0.923077, .blue = 0.891575 },
+	{ .red = 0.999512, .green = 0.906227, .blue = 0.879853 },
+	{ .red = 0.999267, .green = 0.887912, .blue = 0.863736 },
+	{ .red = 0.998535, .green = 0.868864, .blue = 0.844933 },
+	{ .red = 0.998779, .green = 0.848596, .blue = 0.824176 },
+	{ .red = 0.998535, .green = 0.827595, .blue = 0.801709 },
+	{ .red = 0.058364, .green = 0.960440, .blue = 0.804884 },
+	{ .red = 0.063492, .green = 0.962882, .blue = 0.805861 },
+	{ .red = 0.084493, .green = 0.972161, .blue = 0.809524 },
+	{ .red = 0.133822, .green = 0.988523, .blue = 0.815629 },
+	{ .red = 0.367033, .green = 0.998291, .blue = 0.829792 },
+	{ .red = 0.531380, .green = 0.999267, .blue = 0.841514 },
+	{ .red = 0.656654, .green = 0.999267, .blue = 0.851526 },
+	{ .red = 0.757998, .green = 0.998779, .blue = 0.858608 },
+	{ .red = 0.842491, .green = 0.999512, .blue = 0.859829 },
+	{ .red = 0.914530, .green = 0.999023, .blue = 0.841758 },
+	{ .red = 0.998046, .green = 0.992186, .blue = 0.789988 },
+	{ .red = 0.999267, .green = 0.942125, .blue = 0.846886 },
+	{ .red = 0.998291, .green = 0.921856, .blue = 0.855922 },
+	{ .red = 0.999756, .green = 0.908425, .blue = 0.854212 },
+	{ .red = 0.999023, .green = 0.896703, .blue = 0.849573 },
+	{ .red = 0.999023, .green = 0.884737, .blue = 0.840537 },
+	{ .red = 0.999267, .green = 0.864469, .blue = 0.819536 },
+	{ .red = 0.037607, .green = 0.974115, .blue = 0.756288 },
+	{ .red = 0.044200, .green = 0.976557, .blue = 0.756777 },
+	{ .red = 0.071306, .green = 0.984615, .blue = 0.758486 },
+	{ .red = 0.185836, .green = 0.998535, .blue = 0.764835 },
+	{ .red = 0.399512, .green = 0.998779, .blue = 0.780220 },
+	{ .red = 0.541636, .green = 0.998779, .blue = 0.796825 },
+	{ .red = 0.653968, .green = 0.999267, .blue = 0.813431 },
+	{ .red = 0.747741, .green = 0.999023, .blue = 0.828327 },
+	{ .red = 0.826618, .green = 0.999512, .blue = 0.840781 },
+	{ .red = 0.896215, .green = 0.999267, .blue = 0.852503 },
+	{ .red = 0.932845, .green = 0.999267, .blue = 0.813675 },
+	{ .red = 0.999512, .green = 0.995360, .blue = 0.758974 },
+	{ .red = 0.998535, .green = 0.945055, .blue = 0.805617 },
+	{ .red = 0.998291, .green = 0.919902, .blue = 0.814652 },
+	{ .red = 0.998291, .green = 0.901832, .blue = 0.813675 },
+	{ .red = 0.999267, .green = 0.886691, .blue = 0.807570 },
+	{ .red = 0.998779, .green = 0.873260, .blue = 0.800488 },
+	{ .red = 0.033455, .green = 0.983394, .blue = 0.711600 },
+	{ .red = 0.036630, .green = 0.985592, .blue = 0.711844 },
+	{ .red = 0.078144, .green = 0.991941, .blue = 0.711844 },
+	{ .red = 0.252747, .green = 0.999023, .blue = 0.721612 },
+	{ .red = 0.414896, .green = 0.998779, .blue = 0.738950 },
+	{ .red = 0.538706, .green = 0.999267, .blue = 0.758730 },
+	{ .red = 0.643223, .green = 0.999267, .blue = 0.779243 },
+	{ .red = 0.731868, .green = 0.998779, .blue = 0.799512 },
+	{ .red = 0.806349, .green = 0.999267, .blue = 0.817827 },
+	{ .red = 0.872039, .green = 0.999267, .blue = 0.836874 },
+	{ .red = 0.904762, .green = 0.998291, .blue = 0.821245 },
+	{ .red = 0.940904, .green = 0.999512, .blue = 0.782173 },
+	{ .red = 0.998535, .green = 0.995604, .blue = 0.726984 },
+	{ .red = 0.998535, .green = 0.946764, .blue = 0.761172 },
+	{ .red = 0.999023, .green = 0.918193, .blue = 0.769475 },
+	{ .red = 0.999512, .green = 0.896947, .blue = 0.768987 },
+	{ .red = 0.998291, .green = 0.878877, .blue = 0.765079 },
+	{ .red = 0.094994, .green = 0.986081, .blue = 0.670085 },
+	{ .red = 0.094505, .green = 0.988278, .blue = 0.670085 },
+	{ .red = 0.109402, .green = 0.994139, .blue = 0.669597 },
+	{ .red = 0.284737, .green = 0.998535, .blue = 0.684005 },
+	{ .red = 0.418071, .green = 0.998779, .blue = 0.702320 },
+	{ .red = 0.530891, .green = 0.998291, .blue = 0.723810 },
+	{ .red = 0.627106, .green = 0.998535, .blue = 0.746520 },
+	{ .red = 0.710867, .green = 0.998535, .blue = 0.769475 },
+	{ .red = 0.784127, .green = 0.998046, .blue = 0.792430 },
+	{ .red = 0.846154, .green = 0.999267, .blue = 0.813675 },
+	{ .red = 0.885958, .green = 0.999023, .blue = 0.816361 },
+	{ .red = 0.905739, .green = 0.999267, .blue = 0.779731 },
+	{ .red = 0.944567, .green = 0.999267, .blue = 0.749206 },
+	{ .red = 0.997802, .green = 0.996093, .blue = 0.690354 },
+	{ .red = 0.998535, .green = 0.948230, .blue = 0.716728 },
+	{ .red = 0.999023, .green = 0.916972, .blue = 0.724542 },
+	{ .red = 0.998779, .green = 0.893040, .blue = 0.725275 },
+	{ .red = 0.111600, .green = 0.988523, .blue = 0.632723 },
+	{ .red = 0.118193, .green = 0.989499, .blue = 0.632479 },
+	{ .red = 0.163614, .green = 0.997070, .blue = 0.636142 },
+	{ .red = 0.297192, .green = 0.999023, .blue = 0.649817 },
+	{ .red = 0.412943, .green = 0.999023, .blue = 0.668376 },
+	{ .red = 0.514530, .green = 0.999267, .blue = 0.689866 },
+	{ .red = 0.605861, .green = 0.999023, .blue = 0.713797 },
+	{ .red = 0.686447, .green = 0.998779, .blue = 0.738217 },
+	{ .red = 0.757509, .green = 0.998535, .blue = 0.762882 },
+	{ .red = 0.819292, .green = 0.998779, .blue = 0.786813 },
+	{ .red = 0.869353, .green = 0.999023, .blue = 0.806349 },
+	{ .red = 0.880098, .green = 0.999512, .blue = 0.771184 },
+	{ .red = 0.905983, .green = 0.999267, .blue = 0.738706 },
+	{ .red = 0.946276, .green = 0.998779, .blue = 0.715018 },
+	{ .red = 0.997558, .green = 0.996825, .blue = 0.652991 },
+	{ .red = 0.998291, .green = 0.949451, .blue = 0.673748 },
+	{ .red = 0.999267, .green = 0.916728, .blue = 0.680586 },
+	{ .red = 0.095238, .green = 0.993162, .blue = 0.599023 },
+	{ .red = 0.103053, .green = 0.994139, .blue = 0.598535 },
+	{ .red = 0.186813, .green = 0.999267, .blue = 0.605372 },
+	{ .red = 0.302564, .green = 0.998535, .blue = 0.618559 },
+	{ .red = 0.404396, .green = 0.998291, .blue = 0.636142 },
+	{ .red = 0.498657, .green = 0.998291, .blue = 0.657875 },
+	{ .red = 0.582906, .green = 0.999267, .blue = 0.681563 },
+	{ .red = 0.660317, .green = 0.999267, .blue = 0.706471 },
+	{ .red = 0.730159, .green = 0.998535, .blue = 0.732357 },
+	{ .red = 0.790720, .green = 0.999023, .blue = 0.757021 },
+	{ .red = 0.844444, .green = 0.999267, .blue = 0.782173 },
+	{ .red = 0.858852, .green = 0.998291, .blue = 0.760195 },
+	{ .red = 0.876435, .green = 0.999267, .blue = 0.727473 },
+	{ .red = 0.906471, .green = 0.998779, .blue = 0.699878 },
+	{ .red = 0.947497, .green = 0.998779, .blue = 0.679609 },
+	{ .red = 0.997070, .green = 0.996825, .blue = 0.617338 },
+	{ .red = 0.999023, .green = 0.951404, .blue = 0.632723 },
+	{ .red = 0.125519, .green = 0.991453, .blue = 0.568254 },
+	{ .red = 0.142613, .green = 0.993895, .blue = 0.570208 },
+	{ .red = 0.205128, .green = 0.998779, .blue = 0.576801 },
+	{ .red = 0.297924, .green = 0.999512, .blue = 0.589011 },
+	{ .red = 0.392918, .green = 0.998291, .blue = 0.606105 },
+	{ .red = 0.478877, .green = 0.999023, .blue = 0.626862 },
+	{ .red = 0.559951, .green = 0.999023, .blue = 0.650061 },
+	{ .red = 0.633944, .green = 0.999267, .blue = 0.674969 },
+	{ .red = 0.701343, .green = 0.999267, .blue = 0.700611 },
+	{ .red = 0.762149, .green = 0.999023, .blue = 0.726740 },
+	{ .red = 0.816117, .green = 0.999267, .blue = 0.752381 },
+	{ .red = 0.837851, .green = 0.999023, .blue = 0.743101 },
+	{ .red = 0.851038, .green = 0.998779, .blue = 0.714042 },
+	{ .red = 0.874481, .green = 0.998535, .blue = 0.686935 },
+	{ .red = 0.907448, .green = 0.999512, .blue = 0.660562 },
+	{ .red = 0.948474, .green = 0.998779, .blue = 0.645421 },
+	{ .red = 0.998779, .green = 0.998535, .blue = 0.578999 },
+	{ .red = 0.013919, .green = 0.144078, .blue = 0.702808 },
+	{ .red = 0.089377, .green = 0.014896, .blue = 0.805128 },
+	{ .red = 0.205372, .green = 0.019780, .blue = 0.835409 },
+	{ .red = 0.332601, .green = 0.022466, .blue = 0.888889 },
+	{ .red = 0.461294, .green = 0.020757, .blue = 0.925519 },
+	{ .red = 0.566545, .green = 0.018803, .blue = 0.918681 },
+	{ .red = 0.650305, .green = 0.015629, .blue = 0.894994 },
+	{ .red = 0.711844, .green = 0.017094, .blue = 0.861050 },
+	{ .red = 0.792186, .green = 0.014896, .blue = 0.863492 },
+	{ .red = 0.879609, .green = 0.024908, .blue = 0.878632 },
+	{ .red = 0.914530, .green = 0.022955, .blue = 0.822711 },
+	{ .red = 0.938706, .green = 0.019292, .blue = 0.769963 },
+	{ .red = 0.956532, .green = 0.018803, .blue = 0.721856 },
+	{ .red = 0.971184, .green = 0.014408, .blue = 0.679121 },
+	{ .red = 0.976557, .green = 0.030281, .blue = 0.636630 },
+	{ .red = 0.985104, .green = 0.030281, .blue = 0.601465 },
+	{ .red = 0.994139, .green = 0.026374, .blue = 0.570696 },
+	{ .red = 0.016850, .green = 0.143834, .blue = 0.760440 },
+	{ .red = 0.096215, .green = 0.019048, .blue = 0.854457 },
+	{ .red = 0.215629, .green = 0.017338, .blue = 0.889621 },
+	{ .red = 0.353114, .green = 0.023199, .blue = 0.958730 },
+	{ .red = 0.490354, .green = 0.042735, .blue = 0.996581 },
+	{ .red = 0.603663, .green = 0.040537, .blue = 0.989255 },
+	{ .red = 0.691819, .green = 0.021490, .blue = 0.960684 },
+	{ .red = 0.750183, .green = 0.020269, .blue = 0.913065 },
+	{ .red = 0.825885, .green = 0.011477, .blue = 0.903541 },
+	{ .red = 0.911355, .green = 0.023932, .blue = 0.912332 },
+	{ .red = 0.944567, .green = 0.024420, .blue = 0.850794 },
+	{ .red = 0.967033, .green = 0.019048, .blue = 0.792918 },
+	{ .red = 0.979243, .green = 0.028327, .blue = 0.738217 },
+	{ .red = 0.993162, .green = 0.020269, .blue = 0.693284 },
+	{ .red = 0.994383, .green = 0.064469, .blue = 0.647619 },
+	{ .red = 0.999023, .green = 0.092063, .blue = 0.610989 },
+	{ .red = 0.999756, .green = 0.110867, .blue = 0.577289 },
+	{ .red = 0.008791, .green = 0.174359, .blue = 0.940904 },
+	{ .red = 0.113309, .green = 0.120635, .blue = 0.999267 },
+	{ .red = 0.236386, .green = 0.146764, .blue = 0.998535 },
+	{ .red = 0.362882, .green = 0.178510, .blue = 0.999267 },
+	{ .red = 0.488156, .green = 0.198779, .blue = 0.998046 },
+	{ .red = 0.608547, .green = 0.205861, .blue = 0.999267 },
+	{ .red = 0.719170, .green = 0.204396, .blue = 0.998779 },
+	{ .red = 0.820269, .green = 0.196825, .blue = 0.999267 },
+	{ .red = 0.912821, .green = 0.187302, .blue = 0.999512 },
+	{ .red = 0.994628, .green = 0.180220, .blue = 0.995360 },
+	{ .red = 0.998535, .green = 0.199756, .blue = 0.897924 },
+	{ .red = 0.999267, .green = 0.211722, .blue = 0.819536 },
+	{ .red = 0.999267, .green = 0.218803, .blue = 0.756777 },
+	{ .red = 0.999023, .green = 0.222466, .blue = 0.705250 },
+	{ .red = 0.998535, .green = 0.224176, .blue = 0.661294 },
+	{ .red = 0.999023, .green = 0.224420, .blue = 0.623932 },
+	{ .red = 0.998779, .green = 0.223687, .blue = 0.590720 },
+	{ .red = 0.002930, .green = 0.263980, .blue = 0.793162 },
+	{ .red = 0.130891, .green = 0.305495, .blue = 0.998779 },
+	{ .red = 0.255433, .green = 0.327228, .blue = 0.999023 },
+	{ .red = 0.377534, .green = 0.344078, .blue = 0.998779 },
+	{ .red = 0.502564, .green = 0.359951, .blue = 0.998291 },
+	{ .red = 0.624176, .green = 0.371917, .blue = 0.999023 },
+	{ .red = 0.736020, .green = 0.377534, .blue = 0.998779 },
+	{ .red = 0.837363, .green = 0.378510, .blue = 0.999267 },
+	{ .red = 0.927717, .green = 0.376557, .blue = 0.998291 },
+	{ .red = 0.999267, .green = 0.375092, .blue = 0.986081 },
+	{ .red = 0.999023, .green = 0.377778, .blue = 0.895238 },
+	{ .red = 0.999023, .green = 0.376313, .blue = 0.824420 },
+	{ .red = 0.998779, .green = 0.371917, .blue = 0.768987 },
+	{ .red = 0.999023, .green = 0.365079, .blue = 0.723077 },
+	{ .red = 0.998779, .green = 0.357021, .blue = 0.683516 },
+	{ .red = 0.999023, .green = 0.347741, .blue = 0.648107 },
+	{ .red = 0.999023, .green = 0.337973, .blue = 0.616117 },
+	{ .red = 0.012454, .green = 0.347741, .blue = 0.757509 },
+	{ .red = 0.010745, .green = 0.383150, .blue = 0.922100 },
+	{ .red = 0.307937, .green = 0.484005, .blue = 0.999267 },
+	{ .red = 0.411233, .green = 0.492552, .blue = 0.998535 },
+	{ .red = 0.528449, .green = 0.507448, .blue = 0.999267 },
+	{ .red = 0.644444, .green = 0.519414, .blue = 0.998779 },
+	{ .red = 0.753846, .green = 0.526984, .blue = 0.999512 },
+	{ .red = 0.852015, .green = 0.530159, .blue = 0.998779 },
+	{ .red = 0.940171, .green = 0.529182, .blue = 0.998535 },
+	{ .red = 0.998535, .green = 0.528205, .blue = 0.976557 },
+	{ .red = 0.998535, .green = 0.526984, .blue = 0.898657 },
+	{ .red = 0.999023, .green = 0.520635, .blue = 0.838828 },
+	{ .red = 0.999267, .green = 0.510623, .blue = 0.791941 },
+	{ .red = 0.998779, .green = 0.498168, .blue = 0.751893 },
+	{ .red = 0.998779, .green = 0.483516, .blue = 0.715995 },
+	{ .red = 0.999267, .green = 0.467643, .blue = 0.683516 },
+	{ .red = 0.998779, .green = 0.451282, .blue = 0.652259 },
+	{ .red = 0.021734, .green = 0.473016, .blue = 0.816850 },
+	{ .red = 0.009768, .green = 0.491087, .blue = 0.874969 },
+	{ .red = 0.224908, .green = 0.552137, .blue = 0.998535 },
+	{ .red = 0.465201, .green = 0.628571, .blue = 0.998291 },
+	{ .red = 0.565812, .green = 0.640781, .blue = 0.998291 },
+	{ .red = 0.668620, .green = 0.651038, .blue = 0.998535 },
+	{ .red = 0.769475, .green = 0.658120, .blue = 0.999267 },
+	{ .red = 0.862027, .green = 0.661050, .blue = 0.998535 },
+	{ .red = 0.946276, .green = 0.659585, .blue = 0.999512 },
+	{ .red = 0.998535, .green = 0.657387, .blue = 0.975824 },
+	{ .red = 0.999512, .green = 0.655433, .blue = 0.911111 },
+	{ .red = 0.999023, .green = 0.646642, .blue = 0.860806 },
+	{ .red = 0.999512, .green = 0.633700, .blue = 0.822222 },
+	{ .red = 0.999756, .green = 0.617338, .blue = 0.788034 },
+	{ .red = 0.998779, .green = 0.598779, .blue = 0.755800 },
+	{ .red = 0.998535, .green = 0.578510, .blue = 0.724786 },
+	{ .red = 0.999267, .green = 0.557753, .blue = 0.695238 },
+	{ .red = 0.026129, .green = 0.591697, .blue = 0.851282 },
+	{ .red = 0.020269, .green = 0.603419, .blue = 0.878388 },
+	{ .red = 0.092308, .green = 0.655433, .blue = 0.995604 },
+	{ .red = 0.377534, .green = 0.689621, .blue = 0.998046 },
+	{ .red = 0.569475, .green = 0.731868, .blue = 0.998291 },
+	{ .red = 0.696703, .green = 0.762393, .blue = 0.999023 },
+	{ .red = 0.783150, .green = 0.767766, .blue = 0.998535 },
+	{ .red = 0.867399, .green = 0.769719, .blue = 0.998046 },
+	{ .red = 0.946032, .green = 0.767033, .blue = 0.999023 },
+	{ .red = 0.999023, .green = 0.762637, .blue = 0.980708 },
+	{ .red = 0.998535, .green = 0.760195, .blue = 0.925031 },
+	{ .red = 0.999512, .green = 0.749939, .blue = 0.885470 },
+	{ .red = 0.998535, .green = 0.735287, .blue = 0.853236 },
+	{ .red = 0.999023, .green = 0.716972, .blue = 0.823932 },
+	{ .red = 0.999023, .green = 0.696459, .blue = 0.795604 },
+	{ .red = 0.998779, .green = 0.674237, .blue = 0.767033 },
+	{ .red = 0.998535, .green = 0.651282, .blue = 0.738706 },
+	{ .red = 0.019536, .green = 0.715018, .blue = 0.890354 },
+	{ .red = 0.010745, .green = 0.721368, .blue = 0.902808 },
+	{ .red = 0.023199, .green = 0.749206, .blue = 0.955311 },
+	{ .red = 0.298413, .green = 0.784615, .blue = 0.998535 },
+	{ .red = 0.503785, .green = 0.806593, .blue = 0.998779 },
+	{ .red = 0.663736, .green = 0.829304, .blue = 0.999267 },
+	{ .red = 0.795604, .green = 0.854945, .blue = 0.999023 },
+	{ .red = 0.868132, .green = 0.855922, .blue = 0.998046 },
+	{ .red = 0.941636, .green = 0.852015, .blue = 0.999023 },
+	{ .red = 0.997802, .green = 0.844933, .blue = 0.985836 },
+	{ .red = 0.999267, .green = 0.841026, .blue = 0.938706 },
+	{ .red = 0.998291, .green = 0.829792, .blue = 0.906471 },
+	{ .red = 0.998779, .green = 0.813919, .blue = 0.880830 },
+	{ .red = 0.998535, .green = 0.795116, .blue = 0.855678 },
+	{ .red = 0.998291, .green = 0.774115, .blue = 0.830525 },
+	{ .red = 0.998535, .green = 0.751648, .blue = 0.804640 },
+	{ .red = 0.999023, .green = 0.728205, .blue = 0.778022 },
+	{ .red = 0.027350, .green = 0.832967, .blue = 0.921612 },
+	{ .red = 0.028816, .green = 0.836874, .blue = 0.927473 },
+	{ .red = 0.041514, .green = 0.852015, .blue = 0.950672 },
+	{ .red = 0.139683, .green = 0.885714, .blue = 0.998779 },
+	{ .red = 0.431502, .green = 0.895726, .blue = 0.998779 },
+	{ .red = 0.600000, .green = 0.905250, .blue = 0.999023 },
+	{ .red = 0.732601, .green = 0.912332, .blue = 0.998779 },
+	{ .red = 0.844444, .green = 0.917949, .blue = 0.999023 },
+	{ .red = 0.927717, .green = 0.918926, .blue = 0.998779 },
+	{ .red = 0.998291, .green = 0.906960, .blue = 0.991697 },
+	{ .red = 0.999512, .green = 0.901099, .blue = 0.947497 },
+	{ .red = 0.998535, .green = 0.888156, .blue = 0.923077 },
+	{ .red = 0.999023, .green = 0.871795, .blue = 0.901832 },
+	{ .red = 0.998535, .green = 0.853480, .blue = 0.880586 },
+	{ .red = 0.999267, .green = 0.832967, .blue = 0.858120 },
+	{ .red = 0.999267, .green = 0.811477, .blue = 0.834676 },
+	{ .red = 0.998535, .green = 0.789011, .blue = 0.810012 },
+	{ .red = 0.045910, .green = 0.944567, .blue = 0.944567 },
+	{ .red = 0.049817, .green = 0.947009, .blue = 0.947253 },
+	{ .red = 0.062515, .green = 0.956288, .blue = 0.957265 },
+	{ .red = 0.084982, .green = 0.975580, .blue = 0.977534 },
+	{ .red = 0.284005, .green = 0.995849, .blue = 0.998535 },
+	{ .red = 0.497924, .green = 0.996581, .blue = 0.998779 },
+	{ .red = 0.636874, .green = 0.997070, .blue = 0.998779 },
+	{ .red = 0.741392, .green = 0.996825, .blue = 0.998535 },
+	{ .red = 0.838339, .green = 0.989744, .blue = 0.991209 },
+	{ .red = 0.963370, .green = 0.962149, .blue = 0.962393 },
+	{ .red = 0.999756, .green = 0.943590, .blue = 0.946032 },
+	{ .red = 0.999756, .green = 0.929182, .blue = 0.931624 },
+	{ .red = 0.999756, .green = 0.913065, .blue = 0.915263 },
+	{ .red = 0.999756, .green = 0.895482, .blue = 0.897436 },
+	{ .red = 0.999023, .green = 0.876679, .blue = 0.877900 },
+	{ .red = 0.998291, .green = 0.856899, .blue = 0.856899 },
+	{ .red = 0.998291, .green = 0.835653, .blue = 0.834676 },
+	{ .red = 0.032479, .green = 0.962637, .blue = 0.885958 },
+	{ .red = 0.033455, .green = 0.965324, .blue = 0.887668 },
+	{ .red = 0.030769, .green = 0.974847, .blue = 0.894505 },
+	{ .red = 0.130403, .green = 0.987790, .blue = 0.903053 },
+	{ .red = 0.359219, .green = 0.998779, .blue = 0.915751 },
+	{ .red = 0.530891, .green = 0.999756, .blue = 0.922344 },
+	{ .red = 0.658608, .green = 0.998779, .blue = 0.926740 },
+	{ .red = 0.755556, .green = 0.998779, .blue = 0.929915 },
+	{ .red = 0.835165, .green = 0.998291, .blue = 0.928938 },
+	{ .red = 0.906227, .green = 0.998291, .blue = 0.917705 },
+	{ .red = 0.992186, .green = 0.988034, .blue = 0.881563 },
+	{ .red = 0.999023, .green = 0.953602, .blue = 0.917705 },
+	{ .red = 0.999267, .green = 0.942613, .blue = 0.919414 },
+	{ .red = 0.998779, .green = 0.926496, .blue = 0.906471 },
+	{ .red = 0.999512, .green = 0.908913, .blue = 0.889866 },
+	{ .red = 0.999023, .green = 0.890598, .blue = 0.871551 },
+	{ .red = 0.999512, .green = 0.871551, .blue = 0.851526 },
+	{ .red = 0.027106, .green = 0.975336, .blue = 0.832234 },
+	{ .red = 0.027595, .green = 0.977778, .blue = 0.833455 },
+	{ .red = 0.030769, .green = 0.986325, .blue = 0.837363 },
+	{ .red = 0.168010, .green = 0.998535, .blue = 0.844689 },
+	{ .red = 0.398779, .green = 0.999267, .blue = 0.855922 },
+	{ .red = 0.544567, .green = 0.999267, .blue = 0.867643 },
+	{ .red = 0.657875, .green = 0.999023, .blue = 0.878877 },
+	{ .red = 0.748718, .green = 0.999023, .blue = 0.888400 },
+	{ .red = 0.823932, .green = 0.998779, .blue = 0.895482 },
+	{ .red = 0.888400, .green = 0.999023, .blue = 0.899389 },
+	{ .red = 0.940171, .green = 0.999267, .blue = 0.888645 },
+	{ .red = 0.998779, .green = 0.994628, .blue = 0.837851 },
+	{ .red = 0.998779, .green = 0.953602, .blue = 0.878632 },
+	{ .red = 0.998046, .green = 0.936264, .blue = 0.883272 },
+	{ .red = 0.998779, .green = 0.923810, .blue = 0.880098 },
+	{ .red = 0.999512, .green = 0.913065, .blue = 0.873748 },
+	{ .red = 0.998779, .green = 0.900366, .blue = 0.863248 },
+	{ .red = 0.094994, .green = 0.980708, .blue = 0.782173 },
+	{ .red = 0.100122, .green = 0.982418, .blue = 0.782418 },
+	{ .red = 0.120635, .green = 0.988034, .blue = 0.783883 },
+	{ .red = 0.249573, .green = 0.998779, .blue = 0.794139 },
+	{ .red = 0.418803, .green = 0.998291, .blue = 0.807814 },
+	{ .red = 0.544567, .green = 0.998535, .blue = 0.823443 },
+	{ .red = 0.647375, .green = 0.999023, .blue = 0.839072 },
+	{ .red = 0.733333, .green = 0.998779, .blue = 0.853480 },
+	{ .red = 0.805861, .green = 0.998779, .blue = 0.866422 },
+	{ .red = 0.867399, .green = 0.999267, .blue = 0.877656 },
+	{ .red = 0.923077, .green = 0.998779, .blue = 0.890842 },
+	{ .red = 0.947253, .green = 0.999023, .blue = 0.853968 },
+	{ .red = 0.998291, .green = 0.995360, .blue = 0.802686 },
+	{ .red = 0.999267, .green = 0.953358, .blue = 0.834921 },
+	{ .red = 0.999023, .green = 0.931380, .blue = 0.841270 },
+	{ .red = 0.999023, .green = 0.915018, .blue = 0.839316 },
+	{ .red = 0.999756, .green = 0.901343, .blue = 0.832967 },
+	{ .red = 0.033944, .green = 0.990232, .blue = 0.739194 },
+	{ .red = 0.050549, .green = 0.991453, .blue = 0.739194 },
+	{ .red = 0.086691, .green = 0.996337, .blue = 0.739438 },
+	{ .red = 0.285226, .green = 0.998535, .blue = 0.751404 },
+	{ .red = 0.421490, .green = 0.998779, .blue = 0.766789 },
+	{ .red = 0.533578, .green = 0.999267, .blue = 0.784371 },
+	{ .red = 0.630281, .green = 0.998779, .blue = 0.802442 },
+	{ .red = 0.712088, .green = 0.999023, .blue = 0.820024 },
+	{ .red = 0.782906, .green = 0.998779, .blue = 0.836874 },
+	{ .red = 0.844444, .green = 0.998291, .blue = 0.853236 },
+	{ .red = 0.897192, .green = 0.999023, .blue = 0.869109 },
+	{ .red = 0.922344, .green = 0.998535, .blue = 0.854212 },
+	{ .red = 0.949939, .green = 0.998779, .blue = 0.818559 },
+	{ .red = 0.999267, .green = 0.996825, .blue = 0.760440 },
+	{ .red = 0.998779, .green = 0.953114, .blue = 0.790476 },
+	{ .red = 0.998779, .green = 0.927473, .blue = 0.797802 },
+	{ .red = 0.998291, .green = 0.908425, .blue = 0.797558 },
+	{ .red = 0.116728, .green = 0.988523, .blue = 0.697436 },
+	{ .red = 0.120391, .green = 0.989744, .blue = 0.697436 },
+	{ .red = 0.163370, .green = 0.997070, .blue = 0.701343 },
+	{ .red = 0.300366, .green = 0.998535, .blue = 0.713553 },
+	{ .red = 0.416361, .green = 0.999023, .blue = 0.729182 },
+	{ .red = 0.518681, .green = 0.999023, .blue = 0.747497 },
+	{ .red = 0.609035, .green = 0.998779, .blue = 0.767277 },
+	{ .red = 0.687912, .green = 0.999023, .blue = 0.787057 },
+	{ .red = 0.757021, .green = 0.999023, .blue = 0.806105 },
+	{ .red = 0.817582, .green = 0.998779, .blue = 0.824908 },
+	{ .red = 0.870330, .green = 0.999023, .blue = 0.843468 },
+	{ .red = 0.904029, .green = 0.999267, .blue = 0.845910 },
+	{ .red = 0.918681, .green = 0.999267, .blue = 0.810256 },
+	{ .red = 0.951160, .green = 0.998535, .blue = 0.781929 },
+	{ .red = 0.998291, .green = 0.996825, .blue = 0.721856 },
+	{ .red = 0.999023, .green = 0.953358, .blue = 0.745788 },
+	{ .red = 0.999267, .green = 0.925275, .blue = 0.753358 },
+	{ .red = 0.102808, .green = 0.992674, .blue = 0.661050 },
+	{ .red = 0.110134, .green = 0.993407, .blue = 0.660806 },
+	{ .red = 0.188523, .green = 0.999023, .blue = 0.667399 },
+	{ .red = 0.303785, .green = 0.999023, .blue = 0.678877 },
+	{ .red = 0.406105, .green = 0.999267, .blue = 0.694261 },
+	{ .red = 0.501832, .green = 0.998291, .blue = 0.713065 },
+	{ .red = 0.585836, .green = 0.999023, .blue = 0.733089 },
+	{ .red = 0.661783, .green = 0.999267, .blue = 0.753846 },
+	{ .red = 0.730403, .green = 0.998535, .blue = 0.775092 },
+	{ .red = 0.790232, .green = 0.998535, .blue = 0.795604 },
+	{ .red = 0.841758, .green = 0.999756, .blue = 0.814408 },
+	{ .red = 0.887668, .green = 0.999023, .blue = 0.833944 },
+	{ .red = 0.895238, .green = 0.999267, .blue = 0.800244 },
+	{ .red = 0.916484, .green = 0.999023, .blue = 0.768498 },
+	{ .red = 0.952137, .green = 0.999756, .blue = 0.742613 },
+	{ .red = 0.997070, .green = 0.996337, .blue = 0.685470 },
+	{ .red = 0.999023, .green = 0.954335, .blue = 0.703297 },
+	{ .red = 0.126984, .green = 0.991941, .blue = 0.627595 },
+	{ .red = 0.145543, .green = 0.994139, .blue = 0.629548 },
+	{ .red = 0.209280, .green = 0.998291, .blue = 0.636142 },
+	{ .red = 0.302808, .green = 0.998779, .blue = 0.646886 },
+	{ .red = 0.395116, .green = 0.998779, .blue = 0.661783 },
+	{ .red = 0.481074, .green = 0.999267, .blue = 0.679853 },
+	{ .red = 0.562393, .green = 0.998779, .blue = 0.700122 },
+	{ .red = 0.635653, .green = 0.999023, .blue = 0.721612 },
+	{ .red = 0.701343, .green = 0.999512, .blue = 0.742857 },
+	{ .red = 0.761661, .green = 0.998779, .blue = 0.764835 },
+	{ .red = 0.814896, .green = 0.998779, .blue = 0.786325 },
+	{ .red = 0.861294, .green = 0.999756, .blue = 0.806838 },
+	{ .red = 0.875214, .green = 0.998535, .blue = 0.788278 },
+	{ .red = 0.889377, .green = 0.998779, .blue = 0.757021 },
+	{ .red = 0.915507, .green = 0.998535, .blue = 0.730159 },
+	{ .red = 0.952137, .green = 0.998535, .blue = 0.710134 },
+	{ .red = 0.997070, .green = 0.996825, .blue = 0.648352 },
+	{ .red = 0.020269, .green = 0.141148, .blue = 0.786569 },
+	{ .red = 0.089866, .green = 0.018559, .blue = 0.868864 },
+	{ .red = 0.193407, .green = 0.018803, .blue = 0.872283 },
+	{ .red = 0.315263, .green = 0.021245, .blue = 0.934554 },
+	{ .red = 0.441514, .green = 0.028816, .blue = 0.979487 },
+	{ .red = 0.553602, .green = 0.037118, .blue = 0.988523 },
+	{ .red = 0.644933, .green = 0.019292, .blue = 0.973382 },
+	{ .red = 0.708913, .green = 0.015873, .blue = 0.935287 },
+	{ .red = 0.755311, .green = 0.016117, .blue = 0.893040 },
+	{ .red = 0.833455, .green = 0.014164, .blue = 0.900122 },
+	{ .red = 0.910134, .green = 0.024176, .blue = 0.909402 },
+	{ .red = 0.937241, .green = 0.025153, .blue = 0.852259 },
+	{ .red = 0.956777, .green = 0.019292, .blue = 0.799756 },
+	{ .red = 0.970940, .green = 0.017094, .blue = 0.751648 },
+	{ .red = 0.981441, .green = 0.019048, .blue = 0.707937 },
+	{ .red = 0.982418, .green = 0.036386, .blue = 0.663736 },
+	{ .red = 0.983394, .green = 0.043468, .blue = 0.625153 },
+	{ .red = 0.026862, .green = 0.124054, .blue = 0.891331 },
+	{ .red = 0.096215, .green = 0.022955, .blue = 0.912576 },
+	{ .red = 0.202198, .green = 0.019292, .blue = 0.919902 },
+	{ .red = 0.332601, .green = 0.021734, .blue = 0.996825 },
+	{ .red = 0.447375, .green = 0.075946, .blue = 0.999267 },
+	{ .red = 0.556044, .green = 0.086935, .blue = 0.997558 },
+	{ .red = 0.656166, .green = 0.071795, .blue = 0.995116 },
+	{ .red = 0.738706, .green = 0.039316, .blue = 0.980220 },
+	{ .red = 0.786813, .green = 0.024176, .blue = 0.934310 },
+	{ .red = 0.860806, .green = 0.020513, .blue = 0.932357 },
+	{ .red = 0.937485, .green = 0.021001, .blue = 0.938462 },
+	{ .red = 0.962882, .green = 0.025153, .blue = 0.876679 },
+	{ .red = 0.980708, .green = 0.018071, .blue = 0.819780 },
+	{ .red = 0.981197, .green = 0.043468, .blue = 0.758974 },
+	{ .red = 0.992918, .green = 0.062271, .blue = 0.715751 },
+	{ .red = 0.999756, .green = 0.091819, .blue = 0.676190 },
+	{ .red = 0.999023, .green = 0.112576, .blue = 0.637363 },
+	{ .red = 0.045421, .green = 0.169963, .blue = 0.976068 },
+	{ .red = 0.108181, .green = 0.120391, .blue = 0.999023 },
+	{ .red = 0.216361, .green = 0.133333, .blue = 0.999023 },
+	{ .red = 0.329915, .green = 0.165324, .blue = 0.998046 },
+	{ .red = 0.445177, .green = 0.189499, .blue = 0.998779 },
+	{ .red = 0.556777, .green = 0.203175, .blue = 0.999023 },
+	{ .red = 0.660806, .green = 0.207326, .blue = 0.998291 },
+	{ .red = 0.757021, .green = 0.204640, .blue = 0.999512 },
+	{ .red = 0.843712, .green = 0.197558, .blue = 0.999023 },
+	{ .red = 0.924786, .green = 0.191941, .blue = 0.999023 },
+	{ .red = 0.995604, .green = 0.188767, .blue = 0.993895 },
+	{ .red = 0.998535, .green = 0.206105, .blue = 0.906716 },
+	{ .red = 0.999023, .green = 0.216606, .blue = 0.834676 },
+	{ .red = 0.998779, .green = 0.222711, .blue = 0.775824 },
+	{ .red = 0.999023, .green = 0.225641, .blue = 0.726984 },
+	{ .red = 0.999023, .green = 0.226618, .blue = 0.684982 },
+	{ .red = 0.999267, .green = 0.226374, .blue = 0.648596 },
+	{ .red = 0.027839, .green = 0.265690, .blue = 0.957021 },
+	{ .red = 0.155311, .green = 0.313553, .blue = 0.998779 },
+	{ .red = 0.242247, .green = 0.313065, .blue = 0.999023 },
+	{ .red = 0.351404, .green = 0.329182, .blue = 0.999023 },
+	{ .red = 0.464957, .green = 0.346276, .blue = 0.998779 },
+	{ .red = 0.576801, .green = 0.359951, .blue = 0.999512 },
+	{ .red = 0.681074, .green = 0.368254, .blue = 0.999023 },
+	{ .red = 0.776313, .green = 0.372161, .blue = 0.998535 },
+	{ .red = 0.863004, .green = 0.372894, .blue = 0.998779 },
+	{ .red = 0.941148, .green = 0.371673, .blue = 0.998535 },
+	{ .red = 0.999267, .green = 0.371917, .blue = 0.983394 },
+	{ .red = 0.999023, .green = 0.373871, .blue = 0.903053 },
+	{ .red = 0.999512, .green = 0.371673, .blue = 0.838584 },
+	{ .red = 0.998779, .green = 0.366789, .blue = 0.785836 },
+	{ .red = 0.999267, .green = 0.359463, .blue = 0.742369 },
+	{ .red = 0.998779, .green = 0.350916, .blue = 0.703297 },
+	{ .red = 0.999512, .green = 0.341636, .blue = 0.669109 },
+	{ .red = 0.000000, .green = 0.325763, .blue = 0.804884 },
+	{ .red = 0.081074, .green = 0.369475, .blue = 0.997802 },
+	{ .red = 0.303785, .green = 0.465934, .blue = 0.999023 },
+	{ .red = 0.394872, .green = 0.474725, .blue = 0.998535 },
+	{ .red = 0.498657, .green = 0.488645, .blue = 0.998291 },
+	{ .red = 0.603907, .green = 0.501099, .blue = 0.998291 },
+	{ .red = 0.704762, .green = 0.510867, .blue = 0.998779 },
+	{ .red = 0.796825, .green = 0.516972, .blue = 0.998046 },
+	{ .red = 0.880830, .green = 0.519658, .blue = 0.999512 },
+	{ .red = 0.955067, .green = 0.519170, .blue = 0.999023 },
+	{ .red = 0.999023, .green = 0.519658, .blue = 0.973871 },
+	{ .red = 0.998535, .green = 0.517460, .blue = 0.905250 },
+	{ .red = 0.999023, .green = 0.510134, .blue = 0.850305 },
+	{ .red = 0.998535, .green = 0.499634, .blue = 0.805128 },
+	{ .red = 0.999512, .green = 0.486447, .blue = 0.767033 },
+	{ .red = 0.998535, .green = 0.471551, .blue = 0.731380 },
+	{ .red = 0.998291, .green = 0.455678, .blue = 0.698901 },
+	{ .red = 0.013675, .green = 0.440537, .blue = 0.852015 },
+	{ .red = 0.007326, .green = 0.462271, .blue = 0.932601 },
+	{ .red = 0.257143, .green = 0.522344, .blue = 0.999267 },
+	{ .red = 0.463248, .green = 0.609768, .blue = 0.998291 },
+	{ .red = 0.547497, .green = 0.619292, .blue = 0.998535 },
+	{ .red = 0.639072, .green = 0.629548, .blue = 0.998291 },
+	{ .red = 0.730159, .green = 0.638339, .blue = 0.998779 },
+	{ .red = 0.815385, .green = 0.644200, .blue = 0.998779 },
+	{ .red = 0.892796, .green = 0.646886, .blue = 0.998535 },
+	{ .red = 0.961905, .green = 0.645910, .blue = 0.998779 },
+	{ .red = 0.998779, .green = 0.645421, .blue = 0.972161 },
+	{ .red = 0.998291, .green = 0.642491, .blue = 0.915263 },
+	{ .red = 0.999023, .green = 0.632479, .blue = 0.869841 },
+	{ .red = 0.999267, .green = 0.618803, .blue = 0.831990 },
+	{ .red = 0.999023, .green = 0.601954, .blue = 0.798291 },
+	{ .red = 0.998779, .green = 0.583150, .blue = 0.766545 },
+	{ .red = 0.998291, .green = 0.562882, .blue = 0.736020 },
+	{ .red = 0.020024, .green = 0.550427, .blue = 0.878144 },
+	{ .red = 0.019292, .green = 0.562882, .blue = 0.912821 },
+	{ .red = 0.193651, .green = 0.608791, .blue = 0.998779 },
+	{ .red = 0.405861, .green = 0.656410, .blue = 0.998779 },
+	{ .red = 0.610745, .green = 0.734310, .blue = 0.999023 },
+	{ .red = 0.680586, .green = 0.739683, .blue = 0.998535 },
+	{ .red = 0.757021, .green = 0.746276, .blue = 0.999023 },
+	{ .red = 0.831746, .green = 0.750916, .blue = 0.999267 },
+	{ .red = 0.901099, .green = 0.752625, .blue = 0.999023 },
+	{ .red = 0.963858, .green = 0.750672, .blue = 0.998779 },
+	{ .red = 0.998535, .green = 0.748962, .blue = 0.976557 },
+	{ .red = 0.998291, .green = 0.745788, .blue = 0.929670 },
+	{ .red = 0.999512, .green = 0.734310, .blue = 0.892552 },
+	{ .red = 0.998535, .green = 0.718926, .blue = 0.860562 },
+	{ .red = 0.999267, .green = 0.700122, .blue = 0.831746 },
+	{ .red = 0.998779, .green = 0.679365, .blue = 0.802930 },
+	{ .red = 0.999023, .green = 0.656899, .blue = 0.774847 },
+	{ .red = 0.026862, .green = 0.656654, .blue = 0.900366 },
+	{ .red = 0.030281, .green = 0.664469, .blue = 0.917460 },
+	{ .red = 0.067888, .green = 0.696703, .blue = 0.987546 },
+	{ .red = 0.355311, .green = 0.732845, .blue = 0.999267 },
+	{ .red = 0.533822, .green = 0.767766, .blue = 0.998535 },
+	{ .red = 0.690354, .green = 0.808791, .blue = 0.999023 },
+	{ .red = 0.784860, .green = 0.832723, .blue = 0.999512 },
+	{ .red = 0.846398, .green = 0.835897, .blue = 0.999267 },
+	{ .red = 0.906471, .green = 0.836630, .blue = 0.999023 },
+	{ .red = 0.963370, .green = 0.833700, .blue = 0.999512 },
+	{ .red = 0.999756, .green = 0.830037, .blue = 0.984127 },
+	{ .red = 0.998535, .green = 0.826374, .blue = 0.944078 },
+	{ .red = 0.998779, .green = 0.814164, .blue = 0.913309 },
+	{ .red = 0.998535, .green = 0.798046, .blue = 0.886935 },
+	{ .red = 0.998535, .green = 0.778999, .blue = 0.861783 },
+	{ .red = 0.999023, .green = 0.757265, .blue = 0.836386 },
+	{ .red = 0.999023, .green = 0.734554, .blue = 0.810256 },
+	{ .red = 0.026374, .green = 0.764835, .blue = 0.927961 },
+	{ .red = 0.033700, .green = 0.769475, .blue = 0.936508 },
+	{ .red = 0.054212, .green = 0.788278, .blue = 0.970696 },
+	{ .red = 0.294994, .green = 0.816606, .blue = 0.999023 },
+	{ .red = 0.489133, .green = 0.837363, .blue = 0.998779 },
+	{ .red = 0.637363, .green = 0.857631, .blue = 0.997802 },
+	{ .red = 0.759219, .green = 0.877900, .blue = 0.998779 },
+	{ .red = 0.860073, .green = 0.900611, .blue = 0.998291 },
+	{ .red = 0.909646, .green = 0.901099, .blue = 0.998779 },
+	{ .red = 0.960195, .green = 0.897924, .blue = 0.999023 },
+	{ .red = 0.999512, .green = 0.892063, .blue = 0.989988 },
+	{ .red = 0.998779, .green = 0.887179, .blue = 0.955556 },
+	{ .red = 0.999267, .green = 0.874481, .blue = 0.931136 },
+	{ .red = 0.998291, .green = 0.858120, .blue = 0.908669 },
+	{ .red = 0.999756, .green = 0.838828, .blue = 0.886691 },
+	{ .red = 0.998535, .green = 0.818315, .blue = 0.863736 },
+	{ .red = 0.998535, .green = 0.796093, .blue = 0.840049 },
+	{ .red = 0.029548, .green = 0.866667, .blue = 0.948718 },
+	{ .red = 0.029792, .green = 0.869841, .blue = 0.953358 },
+	{ .red = 0.032479, .green = 0.882295, .blue = 0.971429 },
+	{ .red = 0.199267, .green = 0.903541, .blue = 0.998535 },
+	{ .red = 0.441270, .green = 0.914286, .blue = 0.998779 },
+	{ .red = 0.596093, .green = 0.924054, .blue = 0.999023 },
+	{ .red = 0.716484, .green = 0.931624, .blue = 0.998535 },
+	{ .red = 0.812454, .green = 0.938462, .blue = 0.999023 },
+	{ .red = 0.894750, .green = 0.944322, .blue = 0.999023 },
+	{ .red = 0.953114, .green = 0.947253, .blue = 0.998535 },
+	{ .red = 0.998291, .green = 0.939194, .blue = 0.993162 },
+	{ .red = 0.999512, .green = 0.931868, .blue = 0.963614 },
+	{ .red = 0.999023, .green = 0.918437, .blue = 0.943590 },
+	{ .red = 0.998779, .green = 0.902076, .blue = 0.925031 },
+	{ .red = 0.999023, .green = 0.883761, .blue = 0.905495 },
+	{ .red = 0.999267, .green = 0.863980, .blue = 0.884737 },
+	{ .red = 0.999512, .green = 0.843223, .blue = 0.863004 },
+	{ .red = 0.067399, .green = 0.963126, .blue = 0.963126 },
+	{ .red = 0.069597, .green = 0.965324, .blue = 0.965568 },
+	{ .red = 0.078144, .green = 0.972894, .blue = 0.973871 },
+	{ .red = 0.094505, .green = 0.988523, .blue = 0.990232 },
+	{ .red = 0.361416, .green = 0.997070, .blue = 0.998291 },
+	{ .red = 0.541636, .green = 0.997558, .blue = 0.998046 },
+	{ .red = 0.664225, .green = 0.998779, .blue = 0.999267 },
+	{ .red = 0.761905, .green = 0.997558, .blue = 0.998291 },
+	{ .red = 0.833700, .green = 0.998046, .blue = 0.998779 },
+	{ .red = 0.889377, .green = 0.998291, .blue = 0.999267 },
+	{ .red = 0.980464, .green = 0.978999, .blue = 0.979243 },
+	{ .red = 0.998535, .green = 0.963126, .blue = 0.964835 },
+	{ .red = 0.999512, .green = 0.948718, .blue = 0.950427 },
+	{ .red = 0.999756, .green = 0.932845, .blue = 0.934799 },
+	{ .red = 0.999512, .green = 0.915995, .blue = 0.917705 },
+	{ .red = 0.999756, .green = 0.897924, .blue = 0.899145 },
+	{ .red = 0.999023, .green = 0.878877, .blue = 0.879609 },
+	{ .red = 0.083028, .green = 0.974359, .blue = 0.904274 },
+	{ .red = 0.090354, .green = 0.976068, .blue = 0.905495 },
+	{ .red = 0.114286, .green = 0.981929, .blue = 0.909646 },
+	{ .red = 0.169719, .green = 0.995849, .blue = 0.920635 },
+	{ .red = 0.405861, .green = 0.999267, .blue = 0.929182 },
+	{ .red = 0.557265, .green = 0.999023, .blue = 0.935287 },
+	{ .red = 0.671795, .green = 0.998291, .blue = 0.941148 },
+	{ .red = 0.758486, .green = 0.999267, .blue = 0.946520 },
+	{ .red = 0.827595, .green = 0.999512, .blue = 0.949939 },
+	{ .red = 0.885958, .green = 0.999023, .blue = 0.950183 },
+	{ .red = 0.939194, .green = 0.998291, .blue = 0.945788 },
+	{ .red = 0.998535, .green = 0.995116, .blue = 0.907937 },
+	{ .red = 0.998535, .green = 0.965324, .blue = 0.938950 },
+	{ .red = 0.999023, .green = 0.955311, .blue = 0.937485 },
+	{ .red = 0.998779, .green = 0.939683, .blue = 0.923810 },
+	{ .red = 0.998535, .green = 0.923321, .blue = 0.907692 },
+	{ .red = 0.999267, .green = 0.905983, .blue = 0.890110 },
+	{ .red = 0.112332, .green = 0.980220, .blue = 0.850061 },
+	{ .red = 0.116728, .green = 0.981685, .blue = 0.850794 },
+	{ .red = 0.133333, .green = 0.986813, .blue = 0.853480 },
+	{ .red = 0.246398, .green = 0.999512, .blue = 0.864713 },
+	{ .red = 0.424908, .green = 0.999267, .blue = 0.874725 },
+	{ .red = 0.552625, .green = 1.000000, .blue = 0.886203 },
+	{ .red = 0.656654, .green = 0.999512, .blue = 0.896703 },
+	{ .red = 0.740415, .green = 0.999512, .blue = 0.906471 },
+	{ .red = 0.809524, .green = 0.999023, .blue = 0.914286 },
+	{ .red = 0.868620, .green = 0.998046, .blue = 0.920879 },
+	{ .red = 0.918193, .green = 0.998535, .blue = 0.925763 },
+	{ .red = 0.956288, .green = 0.999512, .blue = 0.918193 },
+	{ .red = 0.998291, .green = 0.995360, .blue = 0.871795 },
+	{ .red = 0.998779, .green = 0.961416, .blue = 0.900122 },
+	{ .red = 0.999023, .green = 0.946032, .blue = 0.901343 },
+	{ .red = 0.998535, .green = 0.934554, .blue = 0.897680 },
+	{ .red = 0.999512, .green = 0.924298, .blue = 0.890842 },
+	{ .red = 0.094017, .green = 0.987546, .blue = 0.803663 },
+	{ .red = 0.097192, .green = 0.989011, .blue = 0.804151 },
+	{ .red = 0.112576, .green = 0.993895, .blue = 0.805617 },
+	{ .red = 0.286691, .green = 0.999267, .blue = 0.816850 },
+	{ .red = 0.429304, .green = 0.998779, .blue = 0.828816 },
+	{ .red = 0.541636, .green = 0.999512, .blue = 0.842735 },
+	{ .red = 0.638584, .green = 0.998779, .blue = 0.856654 },
+	{ .red = 0.717949, .green = 0.999267, .blue = 0.869841 },
+	{ .red = 0.785348, .green = 0.999512, .blue = 0.881563 },
+	{ .red = 0.843223, .green = 0.999267, .blue = 0.892063 },
+	{ .red = 0.894017, .green = 0.999023, .blue = 0.902076 },
+	{ .red = 0.939438, .green = 0.999023, .blue = 0.913797 },
+	{ .red = 0.956532, .green = 0.999267, .blue = 0.879609 },
+	{ .red = 0.998535, .green = 0.995849, .blue = 0.830525 },
+	{ .red = 0.999023, .green = 0.958974, .blue = 0.856654 },
+	{ .red = 0.998779, .green = 0.939194, .blue = 0.861050 },
+	{ .red = 0.999023, .green = 0.924542, .blue = 0.858364 },
+	{ .red = 0.102808, .green = 0.990476, .blue = 0.760195 },
+	{ .red = 0.108913, .green = 0.991453, .blue = 0.760195 },
+	{ .red = 0.152381, .green = 0.998779, .blue = 0.764835 },
+	{ .red = 0.304762, .green = 0.998535, .blue = 0.774603 },
+	{ .red = 0.424176, .green = 0.998291, .blue = 0.787790 },
+	{ .red = 0.525031, .green = 0.999267, .blue = 0.803175 },
+	{ .red = 0.613919, .green = 0.999756, .blue = 0.819048 },
+	{ .red = 0.693284, .green = 0.998779, .blue = 0.834921 },
+	{ .red = 0.760195, .green = 0.998779, .blue = 0.849573 },
+	{ .red = 0.818071, .green = 0.998535, .blue = 0.863248 },
+	{ .red = 0.868376, .green = 0.999023, .blue = 0.876190 },
+	{ .red = 0.914042, .green = 0.998535, .blue = 0.890842 },
+	{ .red = 0.934066, .green = 0.998779, .blue = 0.875946 },
+	{ .red = 0.956532, .green = 0.998779, .blue = 0.842002 },
+	{ .red = 0.998046, .green = 0.995849, .blue = 0.789499 },
+	{ .red = 0.999023, .green = 0.957753, .blue = 0.812454 },
+	{ .red = 0.998535, .green = 0.934554, .blue = 0.819292 },
+	{ .red = 0.123321, .green = 0.990965, .blue = 0.720391 },
+	{ .red = 0.125519, .green = 0.991941, .blue = 0.720391 },
+	{ .red = 0.190476, .green = 0.999023, .blue = 0.727228 },
+	{ .red = 0.307692, .green = 0.999023, .blue = 0.736996 },
+	{ .red = 0.411477, .green = 0.999267, .blue = 0.750427 },
+	{ .red = 0.506227, .green = 0.998779, .blue = 0.766300 },
+	{ .red = 0.590232, .green = 0.999267, .blue = 0.783150 },
+	{ .red = 0.665934, .green = 0.999023, .blue = 0.800488 },
+	{ .red = 0.731868, .green = 0.999023, .blue = 0.817094 },
+	{ .red = 0.789499, .green = 0.999267, .blue = 0.832723 },
+	{ .red = 0.842247, .green = 0.998291, .blue = 0.849084 },
+	{ .red = 0.887424, .green = 0.998535, .blue = 0.864469 },
+	{ .red = 0.917216, .green = 0.998535, .blue = 0.867399 },
+	{ .red = 0.927717, .green = 0.999267, .blue = 0.831746 },
+	{ .red = 0.956288, .green = 0.999267, .blue = 0.803175 },
+	{ .red = 0.999023, .green = 0.997314, .blue = 0.745788 },
+	{ .red = 0.999512, .green = 0.957753, .blue = 0.768742 },
+	{ .red = 0.107204, .green = 0.994872, .blue = 0.685226 },
+	{ .red = 0.118681, .green = 0.998535, .blue = 0.687424 },
+	{ .red = 0.209524, .green = 0.999023, .blue = 0.693040 },
+	{ .red = 0.304762, .green = 0.999512, .blue = 0.702564 },
+	{ .red = 0.398046, .green = 0.999267, .blue = 0.715507 },
+	{ .red = 0.487668, .green = 0.998046, .blue = 0.731624 },
+	{ .red = 0.566789, .green = 0.998535, .blue = 0.748962 },
+	{ .red = 0.638584, .green = 0.999023, .blue = 0.766789 },
+	{ .red = 0.704029, .green = 0.998779, .blue = 0.784860 },
+	{ .red = 0.763126, .green = 0.998046, .blue = 0.802930 },
+	{ .red = 0.813919, .green = 0.998535, .blue = 0.819536 },
+	{ .red = 0.859829, .green = 0.999267, .blue = 0.836142 },
+	{ .red = 0.900611, .green = 0.998779, .blue = 0.853480 },
+	{ .red = 0.906471, .green = 0.998291, .blue = 0.822955 },
+	{ .red = 0.924542, .green = 0.999512, .blue = 0.789744 },
+	{ .red = 0.956288, .green = 0.999267, .blue = 0.766789 },
+	{ .red = 0.999023, .green = 0.997802, .blue = 0.706227 },
+	{ .red = 0.035897, .green = 0.070330, .blue = 0.999267 },
+	{ .red = 0.091575, .green = 0.021734, .blue = 0.930159 },
+	{ .red = 0.184860, .green = 0.016850, .blue = 0.913309 },
+	{ .red = 0.300366, .green = 0.012698, .blue = 0.977045 },
+	{ .red = 0.411722, .green = 0.066911, .blue = 0.998535 },
+	{ .red = 0.513065, .green = 0.082784, .blue = 0.996825 },
+	{ .red = 0.608303, .green = 0.079609, .blue = 0.995360 },
+	{ .red = 0.699389, .green = 0.045421, .blue = 1.000000 },
+	{ .red = 0.751648, .green = 0.024908, .blue = 0.959951 },
+	{ .red = 0.786813, .green = 0.024420, .blue = 0.913797 },
+	{ .red = 0.864225, .green = 0.021490, .blue = 0.926496 },
+	{ .red = 0.933822, .green = 0.021245, .blue = 0.933578 },
+	{ .red = 0.954823, .green = 0.026129, .blue = 0.875946 },
+	{ .red = 0.971429, .green = 0.015385, .blue = 0.824664 },
+	{ .red = 0.978022, .green = 0.030525, .blue = 0.773138 },
+	{ .red = 0.984371, .green = 0.034432, .blue = 0.728694 },
+	{ .red = 0.996093, .green = 0.023443, .blue = 0.693529 },
+	{ .red = 0.044689, .green = 0.100855, .blue = 0.999756 },
+	{ .red = 0.097924, .green = 0.025397, .blue = 0.969475 },
+	{ .red = 0.192186, .green = 0.021978, .blue = 0.954335 },
+	{ .red = 0.303541, .green = 0.061050, .blue = 0.992674 },
+	{ .red = 0.410012, .green = 0.095238, .blue = 0.998779 },
+	{ .red = 0.511844, .green = 0.107448, .blue = 0.998535 },
+	{ .red = 0.607814, .green = 0.104029, .blue = 0.998291 },
+	{ .red = 0.697680, .green = 0.084982, .blue = 0.999756 },
+	{ .red = 0.775092, .green = 0.045665, .blue = 0.994139 },
+	{ .red = 0.814896, .green = 0.024176, .blue = 0.949695 },
+	{ .red = 0.886691, .green = 0.027839, .blue = 0.952625 },
+	{ .red = 0.957021, .green = 0.018559, .blue = 0.957998 },
+	{ .red = 0.977534, .green = 0.022955, .blue = 0.897680 },
+	{ .red = 0.983883, .green = 0.038584, .blue = 0.835165 },
+	{ .red = 0.999756, .green = 0.048352, .blue = 0.790232 },
+	{ .red = 0.998779, .green = 0.092063, .blue = 0.739683 },
+	{ .red = 0.999267, .green = 0.113553, .blue = 0.697680 },
+	{ .red = 0.059341, .green = 0.171917, .blue = 0.992430 },
+	{ .red = 0.104518, .green = 0.126252, .blue = 0.999023 },
+	{ .red = 0.200733, .green = 0.131868, .blue = 0.999023 },
+	{ .red = 0.304274, .green = 0.161172, .blue = 0.999512 },
+	{ .red = 0.409768, .green = 0.186813, .blue = 0.998779 },
+	{ .red = 0.513553, .green = 0.203663, .blue = 0.998779 },
+	{ .red = 0.611722, .green = 0.211233, .blue = 0.999023 },
+	{ .red = 0.702320, .green = 0.211966, .blue = 0.998535 },
+	{ .red = 0.786081, .green = 0.208303, .blue = 0.999267 },
+	{ .red = 0.862515, .green = 0.201465, .blue = 0.998779 },
+	{ .red = 0.935043, .green = 0.198779, .blue = 0.999267 },
+	{ .red = 0.996337, .green = 0.197802, .blue = 0.992918 },
+	{ .red = 0.999023, .green = 0.212698, .blue = 0.914042 },
+	{ .red = 0.999267, .green = 0.221490, .blue = 0.847375 },
+	{ .red = 0.999023, .green = 0.226374, .blue = 0.792186 },
+	{ .red = 0.999023, .green = 0.228327, .blue = 0.745543 },
+	{ .red = 0.999023, .green = 0.228571, .blue = 0.705250 },
+	{ .red = 0.059829, .green = 0.254457, .blue = 0.999023 },
+	{ .red = 0.158730, .green = 0.309158, .blue = 0.998779 },
+	{ .red = 0.231746, .green = 0.305495, .blue = 0.998535 },
+	{ .red = 0.329915, .green = 0.320879, .blue = 0.998779 },
+	{ .red = 0.432967, .green = 0.336752, .blue = 0.998046 },
+	{ .red = 0.536020, .green = 0.350672, .blue = 0.998535 },
+	{ .red = 0.634188, .green = 0.360195, .blue = 0.999023 },
+	{ .red = 0.724786, .green = 0.366056, .blue = 0.999023 },
+	{ .red = 0.807082, .green = 0.368742, .blue = 0.998291 },
+	{ .red = 0.882784, .green = 0.368742, .blue = 0.999023 },
+	{ .red = 0.951404, .green = 0.368254, .blue = 0.998779 },
+	{ .red = 0.999267, .green = 0.368987, .blue = 0.981441 },
+	{ .red = 0.998779, .green = 0.369963, .blue = 0.908913 },
+	{ .red = 0.999267, .green = 0.366545, .blue = 0.849817 },
+	{ .red = 0.998779, .green = 0.360928, .blue = 0.800000 },
+	{ .red = 0.998779, .green = 0.353358, .blue = 0.757753 },
+	{ .red = 0.999756, .green = 0.344567, .blue = 0.720879 },
+	{ .red = 0.021245, .green = 0.335531, .blue = 0.952625 },
+	{ .red = 0.125031, .green = 0.357509, .blue = 0.998779 },
+	{ .red = 0.298901, .green = 0.453236, .blue = 0.999023 },
+	{ .red = 0.379243, .green = 0.461294, .blue = 0.998779 },
+	{ .red = 0.472772, .green = 0.473993, .blue = 0.998535 },
+	{ .red = 0.569231, .green = 0.486447, .blue = 0.999023 },
+	{ .red = 0.662515, .green = 0.496703, .blue = 0.998779 },
+	{ .red = 0.750427, .green = 0.504274, .blue = 0.999756 },
+	{ .red = 0.829060, .green = 0.509158, .blue = 0.998291 },
+	{ .red = 0.901587, .green = 0.510867, .blue = 0.999512 },
+	{ .red = 0.965812, .green = 0.510379, .blue = 0.999023 },
+	{ .red = 0.999512, .green = 0.510867, .blue = 0.972161 },
+	{ .red = 0.999267, .green = 0.507448, .blue = 0.910623 },
+	{ .red = 0.999267, .green = 0.498901, .blue = 0.859096 },
+	{ .red = 0.998779, .green = 0.487424, .blue = 0.815873 },
+	{ .red = 0.999023, .green = 0.473748, .blue = 0.778510 },
+	{ .red = 0.998291, .green = 0.459096, .blue = 0.744078 },
+	{ .red = 0.016361, .green = 0.411477, .blue = 0.885714 },
+	{ .red = 0.041514, .green = 0.436386, .blue = 0.987302 },
+	{ .red = 0.283028, .green = 0.508913, .blue = 0.998535 },
+	{ .red = 0.452259, .green = 0.591209, .blue = 0.997802 },
+	{ .red = 0.528694, .green = 0.600977, .blue = 0.998535 },
+	{ .red = 0.611966, .green = 0.611233, .blue = 0.999023 },
+	{ .red = 0.695238, .green = 0.620269, .blue = 0.997802 },
+	{ .red = 0.775336, .green = 0.627595, .blue = 0.999023 },
+	{ .red = 0.848107, .green = 0.632479, .blue = 0.998046 },
+	{ .red = 0.914530, .green = 0.634432, .blue = 0.999023 },
+	{ .red = 0.973871, .green = 0.632967, .blue = 0.999267 },
+	{ .red = 0.998779, .green = 0.632967, .blue = 0.969231 },
+	{ .red = 0.998291, .green = 0.628571, .blue = 0.918681 },
+	{ .red = 0.998535, .green = 0.617094, .blue = 0.875458 },
+	{ .red = 0.999267, .green = 0.602442, .blue = 0.839316 },
+	{ .red = 0.999756, .green = 0.585104, .blue = 0.806349 },
+	{ .red = 0.998779, .green = 0.566300, .blue = 0.774847 },
+	{ .red = 0.010745, .green = 0.514530, .blue = 0.904274 },
+	{ .red = 0.016606, .green = 0.527961, .blue = 0.947497 },
+	{ .red = 0.233211, .green = 0.574115, .blue = 0.999512 },
+	{ .red = 0.426374, .green = 0.637118, .blue = 0.998779 },
+	{ .red = 0.596337, .green = 0.712088, .blue = 0.998779 },
+	{ .red = 0.662271, .green = 0.719414, .blue = 0.999023 },
+	{ .red = 0.731624, .green = 0.726496, .blue = 0.999023 },
+	{ .red = 0.800000, .green = 0.732357, .blue = 0.998535 },
+	{ .red = 0.864225, .green = 0.736264, .blue = 0.998535 },
+	{ .red = 0.922833, .green = 0.737485, .blue = 0.998535 },
+	{ .red = 0.976313, .green = 0.735287, .blue = 0.999267 },
+	{ .red = 0.998291, .green = 0.734310, .blue = 0.972894 },
+	{ .red = 0.999023, .green = 0.729670, .blue = 0.932357 },
+	{ .red = 0.998779, .green = 0.716972, .blue = 0.895971 },
+	{ .red = 0.998535, .green = 0.700855, .blue = 0.864957 },
+	{ .red = 0.999267, .green = 0.681563, .blue = 0.836142 },
+	{ .red = 0.998535, .green = 0.660562, .blue = 0.807814 },
+	{ .red = 0.023932, .green = 0.611966, .blue = 0.918681 },
+	{ .red = 0.026129, .green = 0.620757, .blue = 0.940904 },
+	{ .red = 0.177045, .green = 0.654945, .blue = 0.998779 },
+	{ .red = 0.384860, .green = 0.695482, .blue = 0.998046 },
+	{ .red = 0.552625, .green = 0.743590, .blue = 0.998535 },
+	{ .red = 0.716972, .green = 0.808547, .blue = 0.999267 },
+	{ .red = 0.768987, .green = 0.812698, .blue = 0.999756 },
+	{ .red = 0.824176, .green = 0.816850, .blue = 0.998779 },
+	{ .red = 0.878388, .green = 0.819536, .blue = 0.999512 },
+	{ .red = 0.928449, .green = 0.820024, .blue = 0.998291 },
+	{ .red = 0.974603, .green = 0.817094, .blue = 0.998046 },
+	{ .red = 0.998779, .green = 0.814652, .blue = 0.979976 },
+	{ .red = 0.999023, .green = 0.809768, .blue = 0.946276 },
+	{ .red = 0.998535, .green = 0.796825, .blue = 0.915995 },
+	{ .red = 0.998535, .green = 0.780220, .blue = 0.889621 },
+	{ .red = 0.998779, .green = 0.760440, .blue = 0.864469 },
+	{ .red = 0.998046, .green = 0.738950, .blue = 0.838828 },
+	{ .red = 0.022466, .green = 0.708425, .blue = 0.936508 },
+	{ .red = 0.021490, .green = 0.714286, .blue = 0.948718 },
+	{ .red = 0.048596, .green = 0.739438, .blue = 0.999023 },
+	{ .red = 0.347985, .green = 0.766056, .blue = 0.998046 },
+	{ .red = 0.515263, .green = 0.797070, .blue = 0.998291 },
+	{ .red = 0.654457, .green = 0.828327, .blue = 0.998291 },
+	{ .red = 0.780464, .green = 0.864225, .blue = 0.998535 },
+	{ .red = 0.848107, .green = 0.881807, .blue = 0.998779 },
+	{ .red = 0.891087, .green = 0.883516, .blue = 0.998291 },
+	{ .red = 0.933578, .green = 0.883516, .blue = 0.999023 },
+	{ .red = 0.973871, .green = 0.880586, .blue = 0.999023 },
+	{ .red = 0.999023, .green = 0.876679, .blue = 0.986569 },
+	{ .red = 0.999023, .green = 0.871306, .blue = 0.957998 },
+	{ .red = 0.999267, .green = 0.858120, .blue = 0.933578 },
+	{ .red = 0.999023, .green = 0.841514, .blue = 0.911111 },
+	{ .red = 0.999023, .green = 0.822222, .blue = 0.888889 },
+	{ .red = 0.998535, .green = 0.801221, .blue = 0.865690 },
+	{ .red = 0.033944, .green = 0.801954, .blue = 0.953358 },
+	{ .red = 0.043956, .green = 0.805128, .blue = 0.959219 },
+	{ .red = 0.084005, .green = 0.816850, .blue = 0.979731 },
+	{ .red = 0.306960, .green = 0.841026, .blue = 0.998779 },
+	{ .red = 0.484737, .green = 0.860806, .blue = 0.999512 },
+	{ .red = 0.622711, .green = 0.878877, .blue = 0.998535 },
+	{ .red = 0.734066, .green = 0.895726, .blue = 0.998779 },
+	{ .red = 0.827350, .green = 0.911844, .blue = 0.998291 },
+	{ .red = 0.904029, .green = 0.931380, .blue = 0.998291 },
+	{ .red = 0.937729, .green = 0.931380, .blue = 0.998779 },
+	{ .red = 0.972650, .green = 0.928938, .blue = 0.999267 },
+	{ .red = 0.998779, .green = 0.924054, .blue = 0.991453 },
+	{ .red = 0.998779, .green = 0.917705, .blue = 0.967033 },
+	{ .red = 0.998291, .green = 0.904518, .blue = 0.947009 },
+	{ .red = 0.998291, .green = 0.887912, .blue = 0.927717 },
+	{ .red = 0.998779, .green = 0.869109, .blue = 0.907937 },
+	{ .red = 0.999023, .green = 0.849084, .blue = 0.887179 },
+	{ .red = 0.052259, .green = 0.890598, .blue = 0.966056 },
+	{ .red = 0.062515, .green = 0.892552, .blue = 0.968987 },
+	{ .red = 0.096703, .green = 0.899878, .blue = 0.979487 },
+	{ .red = 0.254212, .green = 0.917705, .blue = 0.998535 },
+	{ .red = 0.456410, .green = 0.928205, .blue = 0.999512 },
+	{ .red = 0.599267, .green = 0.936752, .blue = 0.998779 },
+	{ .red = 0.709158, .green = 0.944811, .blue = 0.999023 },
+	{ .red = 0.796581, .green = 0.950916, .blue = 0.999023 },
+	{ .red = 0.867643, .green = 0.955800, .blue = 0.998535 },
+	{ .red = 0.927961, .green = 0.961661, .blue = 0.999512 },
+	{ .red = 0.969475, .green = 0.965324, .blue = 0.999023 },
+	{ .red = 0.999756, .green = 0.959463, .blue = 0.995849 },
+	{ .red = 0.998779, .green = 0.951893, .blue = 0.973626 },
+	{ .red = 0.998535, .green = 0.937973, .blue = 0.957021 },
+	{ .red = 0.998779, .green = 0.921856, .blue = 0.940171 },
+	{ .red = 0.999023, .green = 0.904274, .blue = 0.922344 },
+	{ .red = 0.998779, .green = 0.885470, .blue = 0.903297 },
+	{ .red = 0.078388, .green = 0.975580, .blue = 0.975580 },
+	{ .red = 0.079853, .green = 0.977534, .blue = 0.977534 },
+	{ .red = 0.086691, .green = 0.983883, .blue = 0.984615 },
+	{ .red = 0.136264, .green = 0.997314, .blue = 0.998535 },
+	{ .red = 0.424176, .green = 0.997314, .blue = 0.997314 },
+	{ .red = 0.578999, .green = 0.997802, .blue = 0.997314 },
+	{ .red = 0.688645, .green = 0.999512, .blue = 0.999023 },
+	{ .red = 0.779243, .green = 0.997802, .blue = 0.997558 },
+	{ .red = 0.844444, .green = 0.998291, .blue = 0.998291 },
+	{ .red = 0.894261, .green = 0.998779, .blue = 0.999267 },
+	{ .red = 0.934799, .green = 0.998779, .blue = 0.999267 },
+	{ .red = 0.990476, .green = 0.989255, .blue = 0.989499 },
+	{ .red = 0.999023, .green = 0.975092, .blue = 0.976068 },
+	{ .red = 0.998779, .green = 0.961172, .blue = 0.962393 },
+	{ .red = 0.999512, .green = 0.945788, .blue = 0.947497 },
+	{ .red = 0.999756, .green = 0.929670, .blue = 0.931136 },
+	{ .red = 0.999756, .green = 0.912576, .blue = 0.914042 },
+	{ .red = 0.119658, .green = 0.980464, .blue = 0.916484 },
+	{ .red = 0.123565, .green = 0.981929, .blue = 0.917460 },
+	{ .red = 0.137241, .green = 0.987057, .blue = 0.921368 },
+	{ .red = 0.252259, .green = 0.999267, .blue = 0.933089 },
+	{ .red = 0.443468, .green = 0.998535, .blue = 0.938217 },
+	{ .red = 0.577045, .green = 0.998291, .blue = 0.944078 },
+	{ .red = 0.680830, .green = 0.998046, .blue = 0.950183 },
+	{ .red = 0.760195, .green = 0.999023, .blue = 0.956044 },
+	{ .red = 0.823443, .green = 0.999512, .blue = 0.960440 },
+	{ .red = 0.874481, .green = 0.999756, .blue = 0.963126 },
+	{ .red = 0.917216, .green = 0.999756, .blue = 0.963858 },
+	{ .red = 0.957753, .green = 0.999267, .blue = 0.962149 },
+	{ .red = 0.999023, .green = 0.996337, .blue = 0.932601 },
+	{ .red = 0.998779, .green = 0.972405, .blue = 0.952137 },
+	{ .red = 0.999023, .green = 0.963370, .blue = 0.949206 },
+	{ .red = 0.998535, .green = 0.948474, .blue = 0.935287 },
+	{ .red = 0.999267, .green = 0.933089, .blue = 0.919658 },
+	{ .red = 0.115018, .green = 0.986325, .blue = 0.865934 },
+	{ .red = 0.118193, .green = 0.987546, .blue = 0.866667 },
+	{ .red = 0.129670, .green = 0.992186, .blue = 0.869109 },
+	{ .red = 0.292796, .green = 0.999756, .blue = 0.880098 },
+	{ .red = 0.442247, .green = 0.999023, .blue = 0.888645 },
+	{ .red = 0.560684, .green = 0.997802, .blue = 0.898168 },
+	{ .red = 0.654701, .green = 0.998291, .blue = 0.908425 },
+	{ .red = 0.731136, .green = 0.999267, .blue = 0.917705 },
+	{ .red = 0.796337, .green = 0.998779, .blue = 0.925519 },
+	{ .red = 0.849817, .green = 0.998779, .blue = 0.931868 },
+	{ .red = 0.894750, .green = 0.999023, .blue = 0.936752 },
+	{ .red = 0.936264, .green = 0.998535, .blue = 0.941880 },
+	{ .red = 0.966300, .green = 0.999023, .blue = 0.936996 },
+	{ .red = 0.998535, .green = 0.995849, .blue = 0.893040 },
+	{ .red = 0.998779, .green = 0.966545, .blue = 0.913797 },
+	{ .red = 0.999512, .green = 0.952625, .blue = 0.913553 },
+	{ .red = 0.998291, .green = 0.942125, .blue = 0.909890 },
+	{ .red = 0.126007, .green = 0.988767, .blue = 0.819292 },
+	{ .red = 0.129670, .green = 0.989744, .blue = 0.819780 },
+	{ .red = 0.155556, .green = 0.998291, .blue = 0.825641 },
+	{ .red = 0.311600, .green = 0.999023, .blue = 0.833944 },
+	{ .red = 0.434188, .green = 0.998535, .blue = 0.844444 },
+	{ .red = 0.538217, .green = 0.998535, .blue = 0.856654 },
+	{ .red = 0.625641, .green = 0.999512, .blue = 0.869353 },
+	{ .red = 0.703053, .green = 0.998779, .blue = 0.881074 },
+	{ .red = 0.765812, .green = 0.999512, .blue = 0.891819 },
+	{ .red = 0.822466, .green = 0.998291, .blue = 0.901343 },
+	{ .red = 0.869597, .green = 0.998535, .blue = 0.909890 },
+	{ .red = 0.910379, .green = 0.999512, .blue = 0.917216 },
+	{ .red = 0.949695, .green = 0.999023, .blue = 0.928205 },
+	{ .red = 0.962882, .green = 0.998291, .blue = 0.898413 },
+	{ .red = 0.998535, .green = 0.996093, .blue = 0.849817 },
+	{ .red = 0.999267, .green = 0.963126, .blue = 0.871551 },
+	{ .red = 0.998779, .green = 0.945055, .blue = 0.875458 },
+	{ .red = 0.133333, .green = 0.990232, .blue = 0.777289 },
+	{ .red = 0.136508, .green = 0.990965, .blue = 0.777534 },
+	{ .red = 0.196825, .green = 0.998535, .blue = 0.784860 },
+	{ .red = 0.313065, .green = 0.999267, .blue = 0.793407 },
+	{ .red = 0.421001, .green = 0.998535, .blue = 0.804640 },
+	{ .red = 0.514286, .green = 0.999023, .blue = 0.817827 },
+	{ .red = 0.598291, .green = 0.999267, .blue = 0.831746 },
+	{ .red = 0.673260, .green = 0.998535, .blue = 0.845421 },
+	{ .red = 0.736752, .green = 0.999023, .blue = 0.858364 },
+	{ .red = 0.791941, .green = 0.999756, .blue = 0.870085 },
+	{ .red = 0.842247, .green = 0.998535, .blue = 0.881563 },
+	{ .red = 0.885470, .green = 0.998779, .blue = 0.892308 },
+	{ .red = 0.925519, .green = 0.998046, .blue = 0.905739 },
+	{ .red = 0.941636, .green = 0.999267, .blue = 0.889866 },
+	{ .red = 0.960928, .green = 0.998779, .blue = 0.858120 },
+	{ .red = 0.998046, .green = 0.996093, .blue = 0.808547 },
+	{ .red = 0.998535, .green = 0.960928, .blue = 0.830281 },
+	{ .red = 0.089377, .green = 0.996825, .blue = 0.741148 },
+	{ .red = 0.127473, .green = 0.997558, .blue = 0.742857 },
+	{ .red = 0.214652, .green = 0.998535, .blue = 0.747985 },
+	{ .red = 0.312332, .green = 0.998535, .blue = 0.756288 },
+	{ .red = 0.404151, .green = 0.999267, .blue = 0.767766 },
+	{ .red = 0.491331, .green = 0.999512, .blue = 0.781197 },
+	{ .red = 0.572405, .green = 0.998779, .blue = 0.795849 },
+	{ .red = 0.643223, .green = 0.999512, .blue = 0.810989 },
+	{ .red = 0.707937, .green = 0.998779, .blue = 0.825641 },
+	{ .red = 0.764347, .green = 0.998779, .blue = 0.839560 },
+	{ .red = 0.813919, .green = 0.999023, .blue = 0.852503 },
+	{ .red = 0.858852, .green = 0.998535, .blue = 0.865690 },
+	{ .red = 0.898413, .green = 0.999023, .blue = 0.878388 },
+	{ .red = 0.925519, .green = 0.999023, .blue = 0.880830 },
+	{ .red = 0.934799, .green = 0.998291, .blue = 0.849328 },
+	{ .red = 0.960195, .green = 0.999023, .blue = 0.820513 },
+	{ .red = 0.999023, .green = 0.997314, .blue = 0.765812 },
+	{ .red = 0.048352, .green = 0.112576, .blue = 0.999756 },
+	{ .red = 0.094505, .green = 0.028571, .blue = 0.988278 },
+	{ .red = 0.178266, .green = 0.020269, .blue = 0.953358 },
+	{ .red = 0.283028, .green = 0.049328, .blue = 0.998535 },
+	{ .red = 0.379976, .green = 0.090110, .blue = 0.998046 },
+	{ .red = 0.475458, .green = 0.106227, .blue = 0.998779 },
+	{ .red = 0.565568, .green = 0.104518, .blue = 0.998291 },
+	{ .red = 0.650061, .green = 0.092552, .blue = 0.998535 },
+	{ .red = 0.724786, .green = 0.070085, .blue = 0.993407 },
+	{ .red = 0.787546, .green = 0.022711, .blue = 0.980708 },
+	{ .red = 0.818315, .green = 0.025885, .blue = 0.937241 },
+	{ .red = 0.889377, .green = 0.023199, .blue = 0.947497 },
+	{ .red = 0.952625, .green = 0.016606, .blue = 0.952381 },
+	{ .red = 0.969475, .green = 0.023932, .blue = 0.895726 },
+	{ .red = 0.978510, .green = 0.030525, .blue = 0.841270 },
+	{ .red = 0.988767, .green = 0.025641, .blue = 0.795604 },
+	{ .red = 0.983150, .green = 0.047619, .blue = 0.744078 },
+	{ .red = 0.054457, .green = 0.128938, .blue = 0.999756 },
+	{ .red = 0.097436, .green = 0.063492, .blue = 0.998535 },
+	{ .red = 0.184615, .green = 0.026129, .blue = 0.989255 },
+	{ .red = 0.282295, .green = 0.079121, .blue = 0.999267 },
+	{ .red = 0.378510, .green = 0.107448, .blue = 0.998535 },
+	{ .red = 0.473504, .green = 0.121612, .blue = 0.998535 },
+	{ .red = 0.564103, .green = 0.120879, .blue = 0.998779 },
+	{ .red = 0.649084, .green = 0.110623, .blue = 0.999512 },
+	{ .red = 0.726740, .green = 0.091575, .blue = 0.998291 },
+	{ .red = 0.793162, .green = 0.060562, .blue = 0.989744 },
+	{ .red = 0.842491, .green = 0.019780, .blue = 0.967521 },
+	{ .red = 0.909402, .green = 0.025397, .blue = 0.970696 },
+	{ .red = 0.970696, .green = 0.023687, .blue = 0.971429 },
+	{ .red = 0.988523, .green = 0.022955, .blue = 0.914042 },
+	{ .red = 0.985592, .green = 0.056654, .blue = 0.847375 },
+	{ .red = 0.998535, .green = 0.090842, .blue = 0.803663 },
+	{ .red = 0.999023, .green = 0.114774, .blue = 0.757021 },
+	{ .red = 0.068376, .green = 0.177289, .blue = 0.998779 },
+	{ .red = 0.103541, .green = 0.143834, .blue = 0.998779 },
+	{ .red = 0.188767, .green = 0.142125, .blue = 0.999023 },
+	{ .red = 0.283761, .green = 0.167277, .blue = 0.999023 },
+	{ .red = 0.380952, .green = 0.189988, .blue = 0.999267 },
+	{ .red = 0.476923, .green = 0.206349, .blue = 0.998535 },
+	{ .red = 0.569475, .green = 0.216117, .blue = 0.998779 },
+	{ .red = 0.655433, .green = 0.219292, .blue = 0.998291 },
+	{ .red = 0.735775, .green = 0.218071, .blue = 0.998779 },
+	{ .red = 0.809524, .green = 0.213675, .blue = 0.999023 },
+	{ .red = 0.877900, .green = 0.207326, .blue = 0.998779 },
+	{ .red = 0.943101, .green = 0.206838, .blue = 0.999023 },
+	{ .red = 0.997070, .green = 0.206593, .blue = 0.991697 },
+	{ .red = 0.999512, .green = 0.219048, .blue = 0.919902 },
+	{ .red = 0.999267, .green = 0.225885, .blue = 0.857875 },
+	{ .red = 0.999512, .green = 0.229304, .blue = 0.806349 },
+	{ .red = 0.999512, .green = 0.230281, .blue = 0.761661 },
+	{ .red = 0.080342, .green = 0.250061, .blue = 0.998779 },
+	{ .red = 0.163370, .green = 0.311111, .blue = 0.998779 },
+	{ .red = 0.224176, .green = 0.303785, .blue = 0.998291 },
+	{ .red = 0.312332, .green = 0.316728, .blue = 0.998535 },
+	{ .red = 0.406349, .green = 0.331136, .blue = 0.998046 },
+	{ .red = 0.501587, .green = 0.344322, .blue = 0.998779 },
+	{ .red = 0.593407, .green = 0.354579, .blue = 0.999023 },
+	{ .red = 0.679609, .green = 0.361661, .blue = 0.998779 },
+	{ .red = 0.759463, .green = 0.365568, .blue = 0.999267 },
+	{ .red = 0.831502, .green = 0.366789, .blue = 0.998535 },
+	{ .red = 0.897924, .green = 0.365568, .blue = 0.999023 },
+	{ .red = 0.959463, .green = 0.365568, .blue = 0.998535 },
+	{ .red = 0.999023, .green = 0.365812, .blue = 0.979976 },
+	{ .red = 0.999023, .green = 0.365324, .blue = 0.914286 },
+	{ .red = 0.999023, .green = 0.361172, .blue = 0.858608 },
+	{ .red = 0.998779, .green = 0.354579, .blue = 0.811722 },
+	{ .red = 0.999023, .green = 0.346764, .blue = 0.771429 },
+	{ .red = 0.060317, .green = 0.321368, .blue = 0.991941 },
+	{ .red = 0.151160, .green = 0.356288, .blue = 0.998535 },
+	{ .red = 0.294017, .green = 0.444444, .blue = 0.998779 },
+	{ .red = 0.365324, .green = 0.451282, .blue = 0.998779 },
+	{ .red = 0.450061, .green = 0.462759, .blue = 0.998779 },
+	{ .red = 0.538217, .green = 0.474237, .blue = 0.998291 },
+	{ .red = 0.625885, .green = 0.484737, .blue = 0.998535 },
+	{ .red = 0.708913, .green = 0.493040, .blue = 0.999512 },
+	{ .red = 0.784860, .green = 0.498657, .blue = 0.998779 },
+	{ .red = 0.854457, .green = 0.502076, .blue = 0.999512 },
+	{ .red = 0.916239, .green = 0.502564, .blue = 0.998291 },
+	{ .red = 0.973382, .green = 0.501587, .blue = 0.998291 },
+	{ .red = 0.999756, .green = 0.501343, .blue = 0.970696 },
+	{ .red = 0.998535, .green = 0.496459, .blue = 0.914042 },
+	{ .red = 0.998291, .green = 0.486691, .blue = 0.865446 },
+	{ .red = 0.999023, .green = 0.474481, .blue = 0.824908 },
+	{ .red = 0.999267, .green = 0.460806, .blue = 0.788767 },
+	{ .red = 0.011233, .green = 0.386569, .blue = 0.918681 },
+	{ .red = 0.100611, .green = 0.415629, .blue = 0.998779 },
+	{ .red = 0.306716, .green = 0.509158, .blue = 0.999512 },
+	{ .red = 0.441514, .green = 0.577045, .blue = 0.998535 },
+	{ .red = 0.510867, .green = 0.586081, .blue = 0.999023 },
+	{ .red = 0.586569, .green = 0.595116, .blue = 0.998046 },
+	{ .red = 0.664225, .green = 0.604151, .blue = 0.998046 },
+	{ .red = 0.739683, .green = 0.612210, .blue = 0.999023 },
+	{ .red = 0.809524, .green = 0.618071, .blue = 0.998779 },
+	{ .red = 0.872772, .green = 0.621734, .blue = 0.998535 },
+	{ .red = 0.929670, .green = 0.622222, .blue = 0.998291 },
+	{ .red = 0.981685, .green = 0.620024, .blue = 0.998535 },
+	{ .red = 0.999756, .green = 0.619536, .blue = 0.968010 },
+	{ .red = 0.998291, .green = 0.613431, .blue = 0.920635 },
+	{ .red = 0.998779, .green = 0.600733, .blue = 0.879853 },
+	{ .red = 0.999023, .green = 0.585104, .blue = 0.844444 },
+	{ .red = 0.999023, .green = 0.567766, .blue = 0.812210 },
+	{ .red = 0.017827, .green = 0.481319, .blue = 0.926007 },
+	{ .red = 0.031746, .green = 0.494750, .blue = 0.975580 },
+	{ .red = 0.256166, .green = 0.548474, .blue = 0.998046 },
+	{ .red = 0.450305, .green = 0.633455, .blue = 0.998779 },
+	{ .red = 0.583150, .green = 0.694750, .blue = 0.998779 },
+	{ .red = 0.643223, .green = 0.701587, .blue = 0.998291 },
+	{ .red = 0.707204, .green = 0.708669, .blue = 0.998291 },
+	{ .red = 0.771429, .green = 0.715018, .blue = 0.999512 },
+	{ .red = 0.831990, .green = 0.719902, .blue = 0.998779 },
+	{ .red = 0.887668, .green = 0.722589, .blue = 0.998535 },
+	{ .red = 0.938950, .green = 0.722833, .blue = 0.999267 },
+	{ .red = 0.984615, .green = 0.719658, .blue = 0.998779 },
+	{ .red = 0.999023, .green = 0.718681, .blue = 0.970696 },
+	{ .red = 0.999023, .green = 0.712332, .blue = 0.933089 },
+	{ .red = 0.998535, .green = 0.698413, .blue = 0.898168 },
+	{ .red = 0.999267, .green = 0.681319, .blue = 0.867888 },
+	{ .red = 0.999512, .green = 0.661783, .blue = 0.839316 },
+	{ .red = 0.017827, .green = 0.573626, .blue = 0.937729 },
+	{ .red = 0.014164, .green = 0.583639, .blue = 0.966056 },
+	{ .red = 0.222222, .green = 0.618315, .blue = 0.998291 },
+	{ .red = 0.402686, .green = 0.668864, .blue = 0.998046 },
+	{ .red = 0.570452, .green = 0.731868, .blue = 0.998535 },
+	{ .red = 0.702320, .green = 0.789499, .blue = 0.999512 },
+	{ .red = 0.751404, .green = 0.794139, .blue = 0.998535 },
+	{ .red = 0.802442, .green = 0.798779, .blue = 0.999023 },
+	{ .red = 0.852503, .green = 0.802198, .blue = 0.998535 },
+	{ .red = 0.900122, .green = 0.804151, .blue = 0.998535 },
+	{ .red = 0.944078, .green = 0.803907, .blue = 0.999023 },
+	{ .red = 0.983883, .green = 0.800244, .blue = 0.998779 },
+	{ .red = 0.999512, .green = 0.798046, .blue = 0.977534 },
+	{ .red = 0.998779, .green = 0.792186, .blue = 0.946032 },
+	{ .red = 0.999267, .green = 0.777778, .blue = 0.917216 },
+	{ .red = 0.999023, .green = 0.760440, .blue = 0.890842 },
+	{ .red = 0.999267, .green = 0.740659, .blue = 0.865446 },
+	{ .red = 0.021734, .green = 0.661294, .blue = 0.947741 },
+	{ .red = 0.030525, .green = 0.667643, .blue = 0.962637 },
+	{ .red = 0.178755, .green = 0.693773, .blue = 0.999512 },
+	{ .red = 0.374359, .green = 0.728694, .blue = 0.999512 },
+	{ .red = 0.529915, .green = 0.768498, .blue = 0.998535 },
+	{ .red = 0.666911, .green = 0.810745, .blue = 0.999512 },
+	{ .red = 0.794872, .green = 0.861538, .blue = 0.999023 },
+	{ .red = 0.832967, .green = 0.864225, .blue = 0.999023 },
+	{ .red = 0.872527, .green = 0.866667, .blue = 0.999023 },
+	{ .red = 0.911355, .green = 0.867888, .blue = 0.998779 },
+	{ .red = 0.948230, .green = 0.866911, .blue = 0.999267 },
+	{ .red = 0.981685, .green = 0.863492, .blue = 0.998046 },
+	{ .red = 0.999756, .green = 0.860073, .blue = 0.984127 },
+	{ .red = 1.000000, .green = 0.853968, .blue = 0.958486 },
+	{ .red = 0.998779, .green = 0.840293, .blue = 0.933333 },
+	{ .red = 0.998779, .green = 0.822955, .blue = 0.910867 },
+	{ .red = 0.999023, .green = 0.803419, .blue = 0.888645 },
+	{ .red = 0.036142, .green = 0.747009, .blue = 0.959463 },
+	{ .red = 0.045665, .green = 0.750916, .blue = 0.967033 },
+	{ .red = 0.113309, .green = 0.769719, .blue = 0.999023 },
+	{ .red = 0.348962, .green = 0.793407, .blue = 0.999023 },
+	{ .red = 0.505006, .green = 0.820269, .blue = 0.998535 },
+	{ .red = 0.634188, .green = 0.846886, .blue = 0.998291 },
+	{ .red = 0.743101, .green = 0.872527, .blue = 0.998535 },
+	{ .red = 0.842979, .green = 0.902808, .blue = 0.999512 },
+	{ .red = 0.891575, .green = 0.915263, .blue = 0.998291 },
+	{ .red = 0.921856, .green = 0.915995, .blue = 0.999267 },
+	{ .red = 0.951648, .green = 0.915263, .blue = 0.998291 },
+	{ .red = 0.980708, .green = 0.912088, .blue = 0.998535 },
+	{ .red = 0.999267, .green = 0.907937, .blue = 0.989255 },
+	{ .red = 0.999023, .green = 0.901587, .blue = 0.967521 },
+	{ .red = 0.998779, .green = 0.887912, .blue = 0.947253 },
+	{ .red = 0.999512, .green = 0.871306, .blue = 0.927961 },
+	{ .red = 0.999512, .green = 0.852503, .blue = 0.907937 },
+	{ .red = 0.032234, .green = 0.830281, .blue = 0.970940 },
+	{ .red = 0.045910, .green = 0.832723, .blue = 0.975092 },
+	{ .red = 0.090110, .green = 0.840537, .blue = 0.988767 },
+	{ .red = 0.325519, .green = 0.860317, .blue = 0.998291 },
+	{ .red = 0.486447, .green = 0.877900, .blue = 0.999023 },
+	{ .red = 0.613919, .green = 0.894505, .blue = 0.998779 },
+	{ .red = 0.717949, .green = 0.908913, .blue = 0.998046 },
+	{ .red = 0.802198, .green = 0.922344, .blue = 0.998779 },
+	{ .red = 0.873016, .green = 0.935287, .blue = 0.999512 },
+	{ .red = 0.932601, .green = 0.951648, .blue = 0.999023 },
+	{ .red = 0.956044, .green = 0.951404, .blue = 0.999023 },
+	{ .red = 0.980220, .green = 0.948962, .blue = 0.998779 },
+	{ .red = 0.998779, .green = 0.944567, .blue = 0.992918 },
+	{ .red = 0.998779, .green = 0.937485, .blue = 0.974603 },
+	{ .red = 0.998535, .green = 0.924054, .blue = 0.957753 },
+	{ .red = 0.998779, .green = 0.907937, .blue = 0.940904 },
+	{ .red = 0.998535, .green = 0.890110, .blue = 0.922833 },
+	{ .red = 0.092552, .green = 0.905983, .blue = 0.975092 },
+	{ .red = 0.097924, .green = 0.907448, .blue = 0.977289 },
+	{ .red = 0.117949, .green = 0.913309, .blue = 0.985592 },
+	{ .red = 0.298901, .green = 0.929426, .blue = 0.999267 },
+	{ .red = 0.473993, .green = 0.937973, .blue = 0.998535 },
+	{ .red = 0.604151, .green = 0.945788, .blue = 0.998046 },
+	{ .red = 0.704762, .green = 0.953602, .blue = 0.999267 },
+	{ .red = 0.786813, .green = 0.958730, .blue = 0.998291 },
+	{ .red = 0.850794, .green = 0.963614, .blue = 0.999023 },
+	{ .red = 0.902808, .green = 0.968010, .blue = 0.999756 },
+	{ .red = 0.949206, .green = 0.972894, .blue = 0.999756 },
+	{ .red = 0.979731, .green = 0.976557, .blue = 0.999023 },
+	{ .red = 0.999267, .green = 0.972405, .blue = 0.996337 },
+	{ .red = 0.998535, .green = 0.964103, .blue = 0.979976 },
+	{ .red = 0.998535, .green = 0.950427, .blue = 0.965568 },
+	{ .red = 0.998535, .green = 0.935043, .blue = 0.950183 },
+	{ .red = 0.998535, .green = 0.918437, .blue = 0.933822 },
+	{ .red = 0.084982, .green = 0.983883, .blue = 0.983883 },
+	{ .red = 0.086203, .green = 0.985592, .blue = 0.985592 },
+	{ .red = 0.091575, .green = 0.990965, .blue = 0.991453 },
+	{ .red = 0.266178, .green = 0.998291, .blue = 0.998535 },
+	{ .red = 0.469353, .green = 0.998046, .blue = 0.997314 },
+	{ .red = 0.605861, .green = 0.998535, .blue = 0.997070 },
+	{ .red = 0.707204, .green = 0.999267, .blue = 0.998046 },
+	{ .red = 0.789255, .green = 0.998046, .blue = 0.997070 },
+	{ .red = 0.849084, .green = 0.998535, .blue = 0.998046 },
+	{ .red = 0.895482, .green = 0.999023, .blue = 0.998779 },
+	{ .red = 0.933089, .green = 0.998779, .blue = 0.999023 },
+	{ .red = 0.963126, .green = 0.998535, .blue = 0.999023 },
+	{ .red = 0.996337, .green = 0.994872, .blue = 0.995360 },
+	{ .red = 0.999512, .green = 0.981929, .blue = 0.982906 },
+	{ .red = 0.998291, .green = 0.968742, .blue = 0.969963 },
+	{ .red = 0.999267, .green = 0.954090, .blue = 0.955556 },
+	{ .red = 0.999756, .green = 0.938950, .blue = 0.940415 },
+	{ .red = 0.130891, .green = 0.985348, .blue = 0.926252 },
+	{ .red = 0.133578, .green = 0.986569, .blue = 0.927228 },
+	{ .red = 0.143101, .green = 0.990965, .blue = 0.930647 },
+	{ .red = 0.309402, .green = 0.999512, .blue = 0.940659 },
+	{ .red = 0.464469, .green = 0.999267, .blue = 0.945543 },
+	{ .red = 0.584615, .green = 0.999267, .blue = 0.951160 },
+	{ .red = 0.679853, .green = 0.999267, .blue = 0.956777 },
+	{ .red = 0.757753, .green = 0.998779, .blue = 0.961416 },
+	{ .red = 0.817094, .green = 0.999267, .blue = 0.966300 },
+	{ .red = 0.865446, .green = 0.999512, .blue = 0.969475 },
+	{ .red = 0.906471, .green = 0.998535, .blue = 0.971429 },
+	{ .red = 0.936996, .green = 0.999756, .blue = 0.972405 },
+	{ .red = 0.968987, .green = 0.999512, .blue = 0.971917 },
+	{ .red = 0.998779, .green = 0.996581, .blue = 0.948718 },
+	{ .red = 0.999023, .green = 0.976801, .blue = 0.959951 },
+	{ .red = 0.999023, .green = 0.968254, .blue = 0.956288 },
+	{ .red = 0.998779, .green = 0.954579, .blue = 0.943101 },
+	{ .red = 0.093773, .green = 0.992430, .blue = 0.879609 },
+	{ .red = 0.096215, .green = 0.993407, .blue = 0.880342 },
+	{ .red = 0.155800, .green = 0.999023, .blue = 0.885226 },
+	{ .red = 0.321123, .green = 0.999756, .blue = 0.891819 },
+	{ .red = 0.449573, .green = 0.999267, .blue = 0.899145 },
+	{ .red = 0.558486, .green = 0.997802, .blue = 0.907204 },
+	{ .red = 0.646398, .green = 0.998535, .blue = 0.916484 },
+	{ .red = 0.721123, .green = 0.998291, .blue = 0.925031 },
+	{ .red = 0.780952, .green = 0.999267, .blue = 0.932601 },
+	{ .red = 0.832234, .green = 0.999023, .blue = 0.938462 },
+	{ .red = 0.874481, .green = 0.999512, .blue = 0.943346 },
+	{ .red = 0.912088, .green = 0.999267, .blue = 0.947253 },
+	{ .red = 0.947253, .green = 0.998535, .blue = 0.951648 },
+	{ .red = 0.972161, .green = 0.999267, .blue = 0.947497 },
+	{ .red = 0.998291, .green = 0.995849, .blue = 0.907204 },
+	{ .red = 0.998779, .green = 0.969963, .blue = 0.923565 },
+	{ .red = 0.999756, .green = 0.957265, .blue = 0.922344 },
+	{ .red = 0.084737, .green = 0.995360, .blue = 0.835653 },
+	{ .red = 0.088156, .green = 0.996337, .blue = 0.835897 },
+	{ .red = 0.200977, .green = 0.998779, .blue = 0.840781 },
+	{ .red = 0.323321, .green = 0.999267, .blue = 0.847863 },
+	{ .red = 0.432234, .green = 0.999023, .blue = 0.856899 },
+	{ .red = 0.527717, .green = 0.999267, .blue = 0.867399 },
+	{ .red = 0.612698, .green = 0.998779, .blue = 0.878144 },
+	{ .red = 0.683761, .green = 0.999512, .blue = 0.889133 },
+	{ .red = 0.747497, .green = 0.998779, .blue = 0.898657 },
+	{ .red = 0.799756, .green = 0.999267, .blue = 0.907204 },
+	{ .red = 0.846398, .green = 0.998535, .blue = 0.914774 },
+	{ .red = 0.886203, .green = 0.998779, .blue = 0.921368 },
+	{ .red = 0.923077, .green = 0.998046, .blue = 0.928938 },
+	{ .red = 0.956288, .green = 0.998779, .blue = 0.937729 },
+	{ .red = 0.966789, .green = 0.998535, .blue = 0.908913 },
+	{ .red = 0.998779, .green = 0.996337, .blue = 0.863492 },
+	{ .red = 0.999512, .green = 0.966300, .blue = 0.883028 },
+	{ .red = 0.111844, .green = 0.994872, .blue = 0.794383 },
+	{ .red = 0.119170, .green = 0.999023, .blue = 0.797070 },
+	{ .red = 0.215873, .green = 0.999512, .blue = 0.801465 },
+	{ .red = 0.320147, .green = 0.998535, .blue = 0.808303 },
+	{ .red = 0.413431, .green = 0.999267, .blue = 0.818071 },
+	{ .red = 0.503541, .green = 0.998291, .blue = 0.829060 },
+	{ .red = 0.581441, .green = 0.999023, .blue = 0.841514 },
+	{ .red = 0.654212, .green = 0.998046, .blue = 0.853724 },
+	{ .red = 0.714774, .green = 0.999023, .blue = 0.865201 },
+	{ .red = 0.768254, .green = 0.999512, .blue = 0.875946 },
+	{ .red = 0.815873, .green = 0.999512, .blue = 0.885470 },
+	{ .red = 0.859096, .green = 0.998779, .blue = 0.894750 },
+	{ .red = 0.896947, .green = 0.999023, .blue = 0.903541 },
+	{ .red = 0.932357, .green = 0.998535, .blue = 0.914530 },
+	{ .red = 0.947253, .green = 0.999023, .blue = 0.900855 },
+	{ .red = 0.964347, .green = 0.999023, .blue = 0.870085 },
+	{ .red = 0.998535, .green = 0.996337, .blue = 0.822955 },
+	{ .red = 0.057631, .green = 0.137973, .blue = 0.999756 },
+	{ .red = 0.093773, .green = 0.086203, .blue = 0.999023 },
+	{ .red = 0.171429, .green = 0.036386, .blue = 0.984127 },
+	{ .red = 0.262515, .green = 0.076190, .blue = 0.996825 },
+	{ .red = 0.352625, .green = 0.102076, .blue = 0.998779 },
+	{ .red = 0.441270, .green = 0.116728, .blue = 0.998535 },
+	{ .red = 0.526740, .green = 0.119902, .blue = 0.998535 },
+	{ .red = 0.607082, .green = 0.114530, .blue = 0.998291 },
+	{ .red = 0.683272, .green = 0.100122, .blue = 0.999512 },
+	{ .red = 0.752869, .green = 0.071551, .blue = 0.999267 },
+	{ .red = 0.803907, .green = 0.040781, .blue = 0.980220 },
+	{ .red = 0.847131, .green = 0.021001, .blue = 0.958730 },
+	{ .red = 0.910379, .green = 0.020757, .blue = 0.964835 },
+	{ .red = 0.965812, .green = 0.021001, .blue = 0.965568 },
+	{ .red = 0.981441, .green = 0.021001, .blue = 0.912088 },
+	{ .red = 0.979976, .green = 0.045421, .blue = 0.851770 },
+	{ .red = 0.994383, .green = 0.030281, .blue = 0.812454 },
+	{ .red = 0.062271, .green = 0.148718, .blue = 0.999756 },
+	{ .red = 0.095726, .green = 0.103297, .blue = 0.999023 },
+	{ .red = 0.173871, .green = 0.056410, .blue = 0.998535 },
+	{ .red = 0.262271, .green = 0.092308, .blue = 0.999023 },
+	{ .red = 0.351648, .green = 0.114530, .blue = 0.999267 },
+	{ .red = 0.439805, .green = 0.127961, .blue = 0.998535 },
+	{ .red = 0.525031, .green = 0.130891, .blue = 0.998535 },
+	{ .red = 0.605372, .green = 0.126007, .blue = 0.998291 },
+	{ .red = 0.681563, .green = 0.113553, .blue = 0.999267 },
+	{ .red = 0.751893, .green = 0.090598, .blue = 0.999512 },
+	{ .red = 0.812943, .green = 0.060317, .blue = 0.993162 },
+	{ .red = 0.863248, .green = 0.031013, .blue = 0.978999 },
+	{ .red = 0.926984, .green = 0.025153, .blue = 0.984127 },
+	{ .red = 0.981197, .green = 0.026862, .blue = 0.981929 },
+	{ .red = 0.987790, .green = 0.046154, .blue = 0.918437 },
+	{ .red = 0.999023, .green = 0.088645, .blue = 0.868132 },
+	{ .red = 0.998779, .green = 0.115995, .blue = 0.816117 },
+	{ .red = 0.077656, .green = 0.189744, .blue = 0.998535 },
+	{ .red = 0.107204, .green = 0.171184, .blue = 0.999267 },
+	{ .red = 0.180220, .green = 0.159707, .blue = 0.999023 },
+	{ .red = 0.267155, .green = 0.178999, .blue = 0.999023 },
+	{ .red = 0.356777, .green = 0.198046, .blue = 0.999023 },
+	{ .red = 0.446154, .green = 0.212943, .blue = 0.998779 },
+	{ .red = 0.532845, .green = 0.222711, .blue = 0.998535 },
+	{ .red = 0.615385, .green = 0.227595, .blue = 0.998779 },
+	{ .red = 0.691819, .green = 0.227595, .blue = 0.998779 },
+	{ .red = 0.763614, .green = 0.225153, .blue = 0.999267 },
+	{ .red = 0.829548, .green = 0.220757, .blue = 0.999023 },
+	{ .red = 0.891087, .green = 0.215140, .blue = 0.998779 },
+	{ .red = 0.949939, .green = 0.214896, .blue = 0.999023 },
+	{ .red = 0.997558, .green = 0.214652, .blue = 0.990720 },
+	{ .red = 0.999512, .green = 0.224664, .blue = 0.924542 },
+	{ .red = 0.999267, .green = 0.229792, .blue = 0.866667 },
+	{ .red = 0.999267, .green = 0.231990, .blue = 0.817827 },
+	{ .red = 0.112821, .green = 0.277411, .blue = 0.998535 },
+	{ .red = 0.168742, .green = 0.317460, .blue = 0.998779 },
+	{ .red = 0.218315, .green = 0.305739, .blue = 0.998291 },
+	{ .red = 0.297680, .green = 0.316239, .blue = 0.998535 },
+	{ .red = 0.384371, .green = 0.329182, .blue = 0.999512 },
+	{ .red = 0.471795, .green = 0.341148, .blue = 0.998291 },
+	{ .red = 0.558242, .green = 0.351404, .blue = 0.998535 },
+	{ .red = 0.640293, .green = 0.358242, .blue = 0.999023 },
+	{ .red = 0.716972, .green = 0.363126, .blue = 0.999512 },
+	{ .red = 0.787302, .green = 0.365324, .blue = 0.999512 },
+	{ .red = 0.851282, .green = 0.365079, .blue = 0.999267 },
+	{ .red = 0.910623, .green = 0.362637, .blue = 0.999512 },
+	{ .red = 0.965568, .green = 0.362393, .blue = 0.998535 },
+	{ .red = 0.999023, .green = 0.362149, .blue = 0.978999 },
+	{ .red = 0.999023, .green = 0.360440, .blue = 0.918681 },
+	{ .red = 0.999267, .green = 0.355067, .blue = 0.866667 },
+	{ .red = 0.998779, .green = 0.347985, .blue = 0.821978 },
+	{ .red = 0.076435, .green = 0.305250, .blue = 0.997802 },
+	{ .red = 0.187546, .green = 0.379731, .blue = 0.998779 },
+	{ .red = 0.290354, .green = 0.439316, .blue = 0.998535 },
+	{ .red = 0.353358, .green = 0.444689, .blue = 0.998779 },
+	{ .red = 0.430037, .green = 0.454701, .blue = 0.998535 },
+	{ .red = 0.511844, .green = 0.465446, .blue = 0.999023 },
+	{ .red = 0.593407, .green = 0.474969, .blue = 0.999023 },
+	{ .red = 0.671795, .green = 0.483272, .blue = 0.998535 },
+	{ .red = 0.745055, .green = 0.489377, .blue = 0.998779 },
+	{ .red = 0.812210, .green = 0.493529, .blue = 0.998535 },
+	{ .red = 0.873748, .green = 0.495238, .blue = 0.999512 },
+	{ .red = 0.928205, .green = 0.493773, .blue = 0.998535 },
+	{ .red = 0.979243, .green = 0.492308, .blue = 0.998291 },
+	{ .red = 0.999512, .green = 0.491331, .blue = 0.969719 },
+	{ .red = 0.999267, .green = 0.484737, .blue = 0.917705 },
+	{ .red = 0.998535, .green = 0.473993, .blue = 0.871551 },
+	{ .red = 0.999756, .green = 0.461294, .blue = 0.832967 },
+	{ .red = 0.028816, .green = 0.370208, .blue = 0.960195 },
+	{ .red = 0.129182, .green = 0.401221, .blue = 0.998779 },
+	{ .red = 0.346032, .green = 0.531868, .blue = 0.998779 },
+	{ .red = 0.431502, .green = 0.565812, .blue = 0.998291 },
+	{ .red = 0.494261, .green = 0.573626, .blue = 0.998046 },
+	{ .red = 0.564347, .green = 0.582173, .blue = 0.998779 },
+	{ .red = 0.636386, .green = 0.590720, .blue = 0.998779 },
+	{ .red = 0.706960, .green = 0.598291, .blue = 0.997802 },
+	{ .red = 0.774359, .green = 0.604640, .blue = 0.999023 },
+	{ .red = 0.836142, .green = 0.608791, .blue = 0.999512 },
+	{ .red = 0.891819, .green = 0.610745, .blue = 0.999756 },
+	{ .red = 0.942125, .green = 0.609524, .blue = 0.999267 },
+	{ .red = 0.988034, .green = 0.606593, .blue = 0.998779 },
+	{ .red = 0.999023, .green = 0.605128, .blue = 0.965812 },
+	{ .red = 0.998779, .green = 0.597070, .blue = 0.922833 },
+	{ .red = 0.998535, .green = 0.583394, .blue = 0.883272 },
+	{ .red = 0.998779, .green = 0.567277, .blue = 0.848840 },
+	{ .red = 0.000000, .green = 0.453968, .blue = 0.951160 },
+	{ .red = 0.079609, .green = 0.471306, .blue = 0.999267 },
+	{ .red = 0.270574, .green = 0.530891, .blue = 0.999023 },
+	{ .red = 0.495238, .green = 0.655189, .blue = 0.999023 },
+	{ .red = 0.569475, .green = 0.679609, .blue = 0.998291 },
+	{ .red = 0.624908, .green = 0.685958, .blue = 0.999023 },
+	{ .red = 0.684249, .green = 0.692552, .blue = 0.999023 },
+	{ .red = 0.744322, .green = 0.698657, .blue = 0.998779 },
+	{ .red = 0.802198, .green = 0.704029, .blue = 0.998779 },
+	{ .red = 0.855922, .green = 0.707692, .blue = 0.998291 },
+	{ .red = 0.905495, .green = 0.709158, .blue = 0.999023 },
+	{ .red = 0.950427, .green = 0.707692, .blue = 0.999512 },
+	{ .red = 0.990476, .green = 0.703541, .blue = 0.998046 },
+	{ .red = 0.998779, .green = 0.701832, .blue = 0.968254 },
+	{ .red = 0.999267, .green = 0.693773, .blue = 0.933333 },
+	{ .red = 0.999023, .green = 0.678632, .blue = 0.899389 },
+	{ .red = 0.998535, .green = 0.661050, .blue = 0.869109 },
+	{ .red = 0.016850, .green = 0.538950, .blue = 0.954823 },
+	{ .red = 0.042002, .green = 0.545788, .blue = 0.978755 },
+	{ .red = 0.245665, .green = 0.589988, .blue = 0.999267 },
+	{ .red = 0.415140, .green = 0.650794, .blue = 0.998779 },
+	{ .red = 0.598046, .green = 0.736264, .blue = 0.998291 },
+	{ .red = 0.687668, .green = 0.772650, .blue = 0.998291 },
+	{ .red = 0.733333, .green = 0.777289, .blue = 0.999267 },
+	{ .red = 0.780952, .green = 0.781929, .blue = 0.998535 },
+	{ .red = 0.828816, .green = 0.785836, .blue = 0.999023 },
+	{ .red = 0.873993, .green = 0.788278, .blue = 0.998779 },
+	{ .red = 0.915995, .green = 0.789255, .blue = 0.998535 },
+	{ .red = 0.954090, .green = 0.787546, .blue = 0.998046 },
+	{ .red = 0.990476, .green = 0.782662, .blue = 0.998779 },
+	{ .red = 0.999267, .green = 0.780220, .blue = 0.974359 },
+	{ .red = 0.999267, .green = 0.772894, .blue = 0.945543 },
+	{ .red = 0.998779, .green = 0.757509, .blue = 0.916484 },
+	{ .red = 0.999267, .green = 0.739683, .blue = 0.890354 },
+	{ .red = 0.024908, .green = 0.621245, .blue = 0.960928 },
+	{ .red = 0.028083, .green = 0.628327, .blue = 0.979243 },
+	{ .red = 0.222222, .green = 0.656654, .blue = 0.998535 },
+	{ .red = 0.390476, .green = 0.698901, .blue = 0.998291 },
+	{ .red = 0.539927, .green = 0.747985, .blue = 0.998535 },
+	{ .red = 0.683028, .green = 0.803419, .blue = 0.998535 },
+	{ .red = 0.780464, .green = 0.844689, .blue = 0.998535 },
+	{ .red = 0.816361, .green = 0.847619, .blue = 0.998291 },
+	{ .red = 0.853480, .green = 0.850305, .blue = 0.999267 },
+	{ .red = 0.890354, .green = 0.852015, .blue = 0.999023 },
+	{ .red = 0.925031, .green = 0.852259, .blue = 0.998291 },
+	{ .red = 0.957509, .green = 0.850549, .blue = 0.998291 },
+	{ .red = 0.989499, .green = 0.845665, .blue = 0.999756 },
+	{ .red = 0.998046, .green = 0.842735, .blue = 0.979731 },
+	{ .red = 0.999267, .green = 0.835409, .blue = 0.956777 },
+	{ .red = 0.999512, .green = 0.820513, .blue = 0.932601 },
+	{ .red = 0.998779, .green = 0.803175, .blue = 0.909646 },
+	{ .red = 0.039560, .green = 0.699634, .blue = 0.966300 },
+	{ .red = 0.051282, .green = 0.703785, .blue = 0.975336 },
+	{ .red = 0.195360, .green = 0.725763, .blue = 0.998535 },
+	{ .red = 0.371184, .green = 0.755800, .blue = 0.999512 },
+	{ .red = 0.515263, .green = 0.789988, .blue = 0.999267 },
+	{ .red = 0.640781, .green = 0.824176, .blue = 0.999267 },
+	{ .red = 0.750916, .green = 0.858120, .blue = 0.998535 },
+	{ .red = 0.849817, .green = 0.897924, .blue = 0.998046 },
+	{ .red = 0.876923, .green = 0.899634, .blue = 0.999023 },
+	{ .red = 0.905495, .green = 0.900611, .blue = 0.999267 },
+	{ .red = 0.933822, .green = 0.900611, .blue = 0.999512 },
+	{ .red = 0.960928, .green = 0.899145, .blue = 0.998779 },
+	{ .red = 0.986325, .green = 0.894994, .blue = 0.998291 },
+	{ .red = 0.999267, .green = 0.890842, .blue = 0.986569 },
+	{ .red = 0.999023, .green = 0.884005, .blue = 0.966300 },
+	{ .red = 0.998779, .green = 0.869841, .blue = 0.945543 },
+	{ .red = 0.999023, .green = 0.852991, .blue = 0.926007 },
+	{ .red = 0.037363, .green = 0.777534, .blue = 0.975580 },
+	{ .red = 0.054212, .green = 0.779731, .blue = 0.980220 },
+	{ .red = 0.164103, .green = 0.794628, .blue = 0.998535 },
+	{ .red = 0.355311, .green = 0.815629, .blue = 0.999512 },
+	{ .red = 0.499145, .green = 0.838584, .blue = 0.998535 },
+	{ .red = 0.619048, .green = 0.862027, .blue = 0.999023 },
+	{ .red = 0.720147, .green = 0.883028, .blue = 0.998291 },
+	{ .red = 0.804884, .green = 0.903053, .blue = 0.998779 },
+	{ .red = 0.885958, .green = 0.928938, .blue = 0.999512 },
+	{ .red = 0.920391, .green = 0.937241, .blue = 0.998535 },
+	{ .red = 0.941880, .green = 0.937241, .blue = 0.998779 },
+	{ .red = 0.964103, .green = 0.936020, .blue = 0.999023 },
+	{ .red = 0.985592, .green = 0.932601, .blue = 0.999023 },
+	{ .red = 0.999023, .green = 0.928449, .blue = 0.990965 },
+	{ .red = 0.999023, .green = 0.921368, .blue = 0.973871 },
+	{ .red = 0.998779, .green = 0.907937, .blue = 0.956532 },
+	{ .red = 0.999267, .green = 0.891819, .blue = 0.939438 },
+	{ .red = 0.062515, .green = 0.850061, .blue = 0.980220 },
+	{ .red = 0.069109, .green = 0.852015, .blue = 0.983394 },
+	{ .red = 0.122100, .green = 0.863492, .blue = 0.999267 },
+	{ .red = 0.343346, .green = 0.876190, .blue = 0.998535 },
+	{ .red = 0.488889, .green = 0.891331, .blue = 0.998779 },
+	{ .red = 0.606838, .green = 0.906227, .blue = 0.999267 },
+	{ .red = 0.704029, .green = 0.918926, .blue = 0.998779 },
+	{ .red = 0.783150, .green = 0.930159, .blue = 0.999023 },
+	{ .red = 0.848352, .green = 0.940171, .blue = 0.999023 },
+	{ .red = 0.903785, .green = 0.950427, .blue = 0.999023 },
+	{ .red = 0.950916, .green = 0.964591, .blue = 0.999023 },
+	{ .red = 0.967766, .green = 0.963858, .blue = 0.999267 },
+	{ .red = 0.985592, .green = 0.961661, .blue = 0.999267 },
+	{ .red = 0.999023, .green = 0.957265, .blue = 0.994628 },
+	{ .red = 0.999023, .green = 0.949939, .blue = 0.979731 },
+	{ .red = 0.999023, .green = 0.936752, .blue = 0.965079 },
+	{ .red = 0.999512, .green = 0.921368, .blue = 0.949695 },
+	{ .red = 0.090354, .green = 0.919414, .blue = 0.983883 },
+	{ .red = 0.094017, .green = 0.920879, .blue = 0.985836 },
+	{ .red = 0.107204, .green = 0.926252, .blue = 0.993162 },
+	{ .red = 0.335775, .green = 0.937485, .blue = 0.998535 },
+	{ .red = 0.486447, .green = 0.945543, .blue = 0.998535 },
+	{ .red = 0.604884, .green = 0.953114, .blue = 0.998779 },
+	{ .red = 0.699878, .green = 0.959463, .blue = 0.999023 },
+	{ .red = 0.776313, .green = 0.964347, .blue = 0.998779 },
+	{ .red = 0.836386, .green = 0.968987, .blue = 0.999512 },
+	{ .red = 0.886447, .green = 0.971917, .blue = 0.998535 },
+	{ .red = 0.926740, .green = 0.975092, .blue = 0.998779 },
+	{ .red = 0.962637, .green = 0.979487, .blue = 0.999512 },
+	{ .red = 0.986081, .green = 0.983394, .blue = 0.999267 },
+	{ .red = 0.998779, .green = 0.980220, .blue = 0.996581 },
+	{ .red = 0.998535, .green = 0.971673, .blue = 0.983883 },
+	{ .red = 0.998535, .green = 0.958486, .blue = 0.970940 },
+	{ .red = 0.998779, .green = 0.943834, .blue = 0.957021 },
+	{ .red = 0.089133, .green = 0.989499, .blue = 0.989499 },
+	{ .red = 0.090110, .green = 0.990720, .blue = 0.990965 },
+	{ .red = 0.094261, .green = 0.995360, .blue = 0.995849 },
+	{ .red = 0.334310, .green = 0.998779, .blue = 0.998291 },
+	{ .red = 0.499389, .green = 0.998779, .blue = 0.997314 },
+	{ .red = 0.621490, .green = 0.999023, .blue = 0.997070 },
+	{ .red = 0.715995, .green = 0.999023, .blue = 0.997314 },
+	{ .red = 0.791941, .green = 0.998046, .blue = 0.996825 },
+	{ .red = 0.848107, .green = 0.998535, .blue = 0.997558 },
+	{ .red = 0.891087, .green = 0.999023, .blue = 0.998779 },
+	{ .red = 0.927473, .green = 0.998779, .blue = 0.998779 },
+	{ .red = 0.955800, .green = 0.998535, .blue = 0.998779 },
+	{ .red = 0.978022, .green = 0.998779, .blue = 0.999267 },
+	{ .red = 0.999267, .green = 0.998046, .blue = 0.998291 },
+	{ .red = 0.999756, .green = 0.985836, .blue = 0.986569 },
+	{ .red = 0.998779, .green = 0.973382, .blue = 0.974359 },
+	{ .red = 0.998779, .green = 0.959707, .blue = 0.960928 },
+	{ .red = 0.135287, .green = 0.989011, .blue = 0.933822 },
+	{ .red = 0.137241, .green = 0.989988, .blue = 0.934554 },
+	{ .red = 0.165812, .green = 0.998535, .blue = 0.942613 },
+	{ .red = 0.344567, .green = 0.999023, .blue = 0.946032 },
+	{ .red = 0.478388, .green = 0.998535, .blue = 0.949939 },
+	{ .red = 0.585104, .green = 0.999512, .blue = 0.955800 },
+	{ .red = 0.674725, .green = 0.999512, .blue = 0.960684 },
+	{ .red = 0.750427, .green = 0.998291, .blue = 0.964591 },
+	{ .red = 0.807326, .green = 0.999023, .blue = 0.969231 },
+	{ .red = 0.854457, .green = 0.999023, .blue = 0.972650 },
+	{ .red = 0.892063, .green = 0.999023, .blue = 0.975336 },
+	{ .red = 0.925275, .green = 0.998046, .blue = 0.976557 },
+	{ .red = 0.948962, .green = 0.999512, .blue = 0.977534 },
+	{ .red = 0.975336, .green = 0.999756, .blue = 0.977534 },
+	{ .red = 0.998779, .green = 0.996581, .blue = 0.957998 },
+	{ .red = 0.999267, .green = 0.979731, .blue = 0.964835 },
+	{ .red = 0.999023, .green = 0.971673, .blue = 0.960928 },
+	{ .red = 0.059341, .green = 0.997070, .blue = 0.891331 },
+	{ .red = 0.062271, .green = 0.998046, .blue = 0.891819 },
+	{ .red = 0.207814, .green = 0.999267, .blue = 0.895238 },
+	{ .red = 0.337241, .green = 0.999512, .blue = 0.900611 },
+	{ .red = 0.450305, .green = 0.999267, .blue = 0.906960 },
+	{ .red = 0.547253, .green = 0.999512, .blue = 0.915018 },
+	{ .red = 0.634432, .green = 0.998291, .blue = 0.922100 },
+	{ .red = 0.705495, .green = 0.998535, .blue = 0.929915 },
+	{ .red = 0.764103, .green = 0.999267, .blue = 0.936996 },
+	{ .red = 0.813431, .green = 0.999512, .blue = 0.942613 },
+	{ .red = 0.857143, .green = 0.998535, .blue = 0.947253 },
+	{ .red = 0.892063, .green = 0.999023, .blue = 0.950916 },
+	{ .red = 0.924298, .green = 0.998535, .blue = 0.954090 },
+	{ .red = 0.953602, .green = 0.998779, .blue = 0.957509 },
+	{ .red = 0.975336, .green = 0.999512, .blue = 0.953358 },
+	{ .red = 0.998046, .green = 0.995849, .blue = 0.916972 },
+	{ .red = 0.998779, .green = 0.972405, .blue = 0.930403 },
+	{ .red = 0.126252, .green = 0.993651, .blue = 0.845421 },
+	{ .red = 0.152381, .green = 0.995360, .blue = 0.847375 },
+	{ .red = 0.226618, .green = 0.999023, .blue = 0.852991 },
+	{ .red = 0.327473, .green = 0.999756, .blue = 0.859096 },
+	{ .red = 0.426374, .green = 0.999267, .blue = 0.866667 },
+	{ .red = 0.515018, .green = 0.999512, .blue = 0.875946 },
+	{ .red = 0.595360, .green = 0.999267, .blue = 0.885470 },
+	{ .red = 0.666178, .green = 0.999023, .blue = 0.894750 },
+	{ .red = 0.726496, .green = 0.999267, .blue = 0.903541 },
+	{ .red = 0.778999, .green = 0.998779, .blue = 0.911600 },
+	{ .red = 0.822955, .green = 0.999512, .blue = 0.918437 },
+	{ .red = 0.863248, .green = 0.998779, .blue = 0.924542 },
+	{ .red = 0.897924, .green = 0.998779, .blue = 0.929670 },
+	{ .red = 0.930159, .green = 0.998535, .blue = 0.935531 },
+	{ .red = 0.960195, .green = 0.998779, .blue = 0.943590 },
+	{ .red = 0.969719, .green = 0.998779, .blue = 0.916239 },
+	{ .red = 0.998291, .green = 0.996093, .blue = 0.875214 },
+	{ .red = 0.064957, .green = 0.155800, .blue = 0.999512 },
+	{ .red = 0.093040, .green = 0.117949, .blue = 0.999267 },
+	{ .red = 0.162393, .green = 0.059585, .blue = 0.994872 },
+	{ .red = 0.245177, .green = 0.088156, .blue = 0.998046 },
+	{ .red = 0.328694, .green = 0.111355, .blue = 0.999512 },
+	{ .red = 0.411233, .green = 0.124298, .blue = 0.998535 },
+	{ .red = 0.492063, .green = 0.131380, .blue = 0.998779 },
+	{ .red = 0.568742, .green = 0.127228, .blue = 0.998291 },
+	{ .red = 0.641758, .green = 0.119170, .blue = 0.998779 },
+	{ .red = 0.710134, .green = 0.102808, .blue = 0.999512 },
+	{ .red = 0.772650, .green = 0.078144, .blue = 0.998291 },
+	{ .red = 0.823687, .green = 0.038828, .blue = 0.987302 },
+	{ .red = 0.868132, .green = 0.026374, .blue = 0.972894 },
+	{ .red = 0.927473, .green = 0.017582, .blue = 0.978999 },
+	{ .red = 0.976313, .green = 0.024664, .blue = 0.976068 },
+	{ .red = 0.985348, .green = 0.037118, .blue = 0.920391 },
+	{ .red = 0.983883, .green = 0.051038, .blue = 0.863004 },
+	{ .red = 0.068620, .green = 0.163370, .blue = 0.999267 },
+	{ .red = 0.094994, .green = 0.128205, .blue = 0.999267 },
+	{ .red = 0.163126, .green = 0.075702, .blue = 0.998535 },
+	{ .red = 0.244689, .green = 0.099878, .blue = 0.998535 },
+	{ .red = 0.327717, .green = 0.120635, .blue = 0.999267 },
+	{ .red = 0.409768, .green = 0.132357, .blue = 0.998291 },
+	{ .red = 0.490842, .green = 0.139683, .blue = 0.999023 },
+	{ .red = 0.567521, .green = 0.136508, .blue = 0.998535 },
+	{ .red = 0.640049, .green = 0.128938, .blue = 0.998535 },
+	{ .red = 0.708913, .green = 0.114042, .blue = 0.999512 },
+	{ .red = 0.772161, .green = 0.092796, .blue = 0.998779 },
+	{ .red = 0.831746, .green = 0.055922, .blue = 0.998535 },
+	{ .red = 0.875458, .green = 0.046642, .blue = 0.981929 },
+	{ .red = 0.932601, .green = 0.046398, .blue = 0.984860 },
+	{ .red = 0.989744, .green = 0.028816, .blue = 0.990232 },
+	{ .red = 0.994628, .green = 0.089133, .blue = 0.928694 },
+	{ .red = 0.999267, .green = 0.116484, .blue = 0.876190 },
+	{ .red = 0.092552, .green = 0.216606, .blue = 0.999267 },
+	{ .red = 0.113309, .green = 0.199756, .blue = 0.999267 },
+	{ .red = 0.174115, .green = 0.180220, .blue = 0.998779 },
+	{ .red = 0.253480, .green = 0.193651, .blue = 0.998291 },
+	{ .red = 0.336752, .green = 0.209035, .blue = 0.999267 },
+	{ .red = 0.420024, .green = 0.222222, .blue = 0.999023 },
+	{ .red = 0.501832, .green = 0.232234, .blue = 0.999023 },
+	{ .red = 0.579976, .green = 0.237118, .blue = 0.998535 },
+	{ .red = 0.653968, .green = 0.238339, .blue = 0.999267 },
+	{ .red = 0.722344, .green = 0.237363, .blue = 0.998291 },
+	{ .red = 0.786569, .green = 0.233211, .blue = 0.999023 },
+	{ .red = 0.845665, .green = 0.227595, .blue = 0.998535 },
+	{ .red = 0.902808, .green = 0.222955, .blue = 0.999512 },
+	{ .red = 0.955800, .green = 0.222466, .blue = 0.998779 },
+	{ .red = 0.998046, .green = 0.221734, .blue = 0.989988 },
+	{ .red = 0.999756, .green = 0.229548, .blue = 0.928449 },
+	{ .red = 0.999267, .green = 0.232967, .blue = 0.874237 },
+	{ .red = 0.130891, .green = 0.296459, .blue = 0.999267 },
+	{ .red = 0.175336, .green = 0.327473, .blue = 0.999267 },
+	{ .red = 0.214652, .green = 0.311111, .blue = 0.998046 },
+	{ .red = 0.286203, .green = 0.319414, .blue = 0.998779 },
+	{ .red = 0.365324, .green = 0.330403, .blue = 0.998779 },
+	{ .red = 0.447131, .green = 0.341392, .blue = 0.999267 },
+	{ .red = 0.527717, .green = 0.350183, .blue = 0.999023 },
+	{ .red = 0.605617, .green = 0.357265, .blue = 0.998779 },
+	{ .red = 0.678877, .green = 0.362149, .blue = 0.998779 },
+	{ .red = 0.747009, .green = 0.364591, .blue = 0.999023 },
+	{ .red = 0.809035, .green = 0.364835, .blue = 0.998291 },
+	{ .red = 0.866911, .green = 0.363126, .blue = 0.999023 },
+	{ .red = 0.920635, .green = 0.360195, .blue = 0.999267 },
+	{ .red = 0.970940, .green = 0.358730, .blue = 0.999023 },
+	{ .red = 0.999023, .green = 0.357753, .blue = 0.978266 },
+	{ .red = 0.999023, .green = 0.354823, .blue = 0.922344 },
+	{ .red = 0.999756, .green = 0.348718, .blue = 0.873993 },
+	{ .red = 0.087668, .green = 0.297192, .blue = 0.996337 },
+	{ .red = 0.211477, .green = 0.399023, .blue = 0.998535 },
+	{ .red = 0.287912, .green = 0.438339, .blue = 0.998779 },
+	{ .red = 0.343346, .green = 0.441514, .blue = 0.999512 },
+	{ .red = 0.413675, .green = 0.450061, .blue = 0.999512 },
+	{ .red = 0.488645, .green = 0.459096, .blue = 0.999267 },
+	{ .red = 0.564835, .green = 0.467888, .blue = 0.998535 },
+	{ .red = 0.639560, .green = 0.475458, .blue = 0.999267 },
+	{ .red = 0.709646, .green = 0.481807, .blue = 0.998779 },
+	{ .red = 0.774603, .green = 0.485714, .blue = 0.998779 },
+	{ .red = 0.834188, .green = 0.488156, .blue = 0.999023 },
+	{ .red = 0.887912, .green = 0.487668, .blue = 0.998535 },
+	{ .red = 0.937729, .green = 0.484737, .blue = 0.998779 },
+	{ .red = 0.984371, .green = 0.482051, .blue = 0.998779 },
+	{ .red = 0.999023, .green = 0.480342, .blue = 0.968498 },
+	{ .red = 0.999267, .green = 0.472283, .blue = 0.920635 },
+	{ .red = 0.998046, .green = 0.461050, .blue = 0.876190 },
+	{ .red = 0.054701, .green = 0.358974, .blue = 0.994628 },
+	{ .red = 0.147497, .green = 0.392918, .blue = 0.998046 },
+	{ .red = 0.382906, .green = 0.557998, .blue = 0.998779 },
+	{ .red = 0.422222, .green = 0.557021, .blue = 0.999023 },
+	{ .red = 0.479121, .green = 0.563614, .blue = 0.998535 },
+	{ .red = 0.543834, .green = 0.571429, .blue = 0.999023 },
+	{ .red = 0.610989, .green = 0.578999, .blue = 0.998779 },
+	{ .red = 0.678144, .green = 0.586325, .blue = 0.998779 },
+	{ .red = 0.742125, .green = 0.592430, .blue = 0.998779 },
+	{ .red = 0.801709, .green = 0.596825, .blue = 0.999023 },
+	{ .red = 0.855678, .green = 0.599267, .blue = 0.998046 },
+	{ .red = 0.905250, .green = 0.599267, .blue = 0.998291 },
+	{ .red = 0.950916, .green = 0.596337, .blue = 0.999023 },
+	{ .red = 0.991941, .green = 0.592186, .blue = 0.997802 },
+	{ .red = 0.999267, .green = 0.589499, .blue = 0.964835 },
+	{ .red = 0.998779, .green = 0.580220, .blue = 0.924054 },
+	{ .red = 0.999267, .green = 0.565568, .blue = 0.886691 },
+	{ .red = 0.025397, .green = 0.424908, .blue = 0.960195 },
+	{ .red = 0.112088, .green = 0.448840, .blue = 0.999267 },
+	{ .red = 0.284737, .green = 0.521612, .blue = 0.998779 },
+	{ .red = 0.524054, .green = 0.670818, .blue = 0.999023 },
+	{ .red = 0.556044, .green = 0.666422, .blue = 0.998046 },
+	{ .red = 0.607326, .green = 0.672039, .blue = 0.997802 },
+	{ .red = 0.662515, .green = 0.678144, .blue = 0.998291 },
+	{ .red = 0.719170, .green = 0.684005, .blue = 0.998535 },
+	{ .red = 0.774603, .green = 0.689133, .blue = 0.999023 },
+	{ .red = 0.826374, .green = 0.693040, .blue = 0.998046 },
+	{ .red = 0.874481, .green = 0.694994, .blue = 0.998535 },
+	{ .red = 0.918681, .green = 0.694750, .blue = 0.999023 },
+	{ .red = 0.958974, .green = 0.691819, .blue = 0.999023 },
+	{ .red = 0.995604, .green = 0.686447, .blue = 0.998046 },
+	{ .red = 0.999756, .green = 0.683516, .blue = 0.967033 },
+	{ .red = 0.998779, .green = 0.674237, .blue = 0.932845 },
+	{ .red = 0.998535, .green = 0.658120, .blue = 0.899878 },
+	{ .red = 0.030037, .green = 0.506227, .blue = 0.965324 },
+	{ .red = 0.082540, .green = 0.520391, .blue = 0.997314 },
+	{ .red = 0.260806, .green = 0.567521, .blue = 0.999023 },
+	{ .red = 0.425397, .green = 0.638584, .blue = 0.998779 },
+	{ .red = 0.642979, .green = 0.759707, .blue = 0.998046 },
+	{ .red = 0.672283, .green = 0.757753, .blue = 0.999512 },
+	{ .red = 0.715263, .green = 0.761905, .blue = 0.999023 },
+	{ .red = 0.760440, .green = 0.766056, .blue = 0.998779 },
+	{ .red = 0.805617, .green = 0.769963, .blue = 0.998779 },
+	{ .red = 0.849328, .green = 0.772894, .blue = 0.999023 },
+	{ .red = 0.890354, .green = 0.774115, .blue = 0.999023 },
+	{ .red = 0.928205, .green = 0.773626, .blue = 0.999267 },
+	{ .red = 0.962393, .green = 0.770452, .blue = 0.998046 },
+	{ .red = 0.995604, .green = 0.764347, .blue = 0.998535 },
+	{ .red = 0.998779, .green = 0.761416, .blue = 0.971184 },
+	{ .red = 0.999512, .green = 0.752381, .blue = 0.944078 },
+	{ .red = 0.998779, .green = 0.736264, .blue = 0.915507 },
+	{ .red = 0.020269, .green = 0.586325, .blue = 0.974847 },
+	{ .red = 0.053480, .green = 0.588767, .blue = 0.984615 },
+	{ .red = 0.245421, .green = 0.626862, .blue = 0.998779 },
+	{ .red = 0.400488, .green = 0.676190, .blue = 0.998779 },
+	{ .red = 0.548474, .green = 0.733822, .blue = 0.998535 },
+	{ .red = 0.725763, .green = 0.821490, .blue = 0.999267 },
+	{ .red = 0.765324, .green = 0.829060, .blue = 0.998046 },
+	{ .red = 0.799267, .green = 0.831990, .blue = 0.999267 },
+	{ .red = 0.834676, .green = 0.834432, .blue = 0.999023 },
+	{ .red = 0.870085, .green = 0.836386, .blue = 0.999023 },
+	{ .red = 0.903785, .green = 0.837118, .blue = 0.999023 },
+	{ .red = 0.935287, .green = 0.836142, .blue = 0.998291 },
+	{ .red = 0.965079, .green = 0.833211, .blue = 0.998535 },
+	{ .red = 0.994139, .green = 0.827106, .blue = 0.999267 },
+	{ .red = 0.999756, .green = 0.823443, .blue = 0.978266 },
+	{ .red = 0.997802, .green = 0.815873, .blue = 0.953846 },
+	{ .red = 0.999512, .green = 0.799756, .blue = 0.930647 },
+	{ .red = 0.043712, .green = 0.659096, .blue = 0.974603 },
+	{ .red = 0.058120, .green = 0.662271, .blue = 0.983639 },
+	{ .red = 0.230525, .green = 0.689621, .blue = 0.999023 },
+	{ .red = 0.384127, .green = 0.725275, .blue = 0.999023 },
+	{ .red = 0.521856, .green = 0.765568, .blue = 0.998291 },
+	{ .red = 0.646154, .green = 0.807082, .blue = 0.998046 },
+	{ .red = 0.765568, .green = 0.854457, .blue = 0.998535 },
+	{ .red = 0.835165, .green = 0.883028, .blue = 0.999023 },
+	{ .red = 0.861538, .green = 0.884493, .blue = 0.999267 },
+	{ .red = 0.888889, .green = 0.885714, .blue = 0.999023 },
+	{ .red = 0.916239, .green = 0.885958, .blue = 0.999512 },
+	{ .red = 0.942613, .green = 0.884982, .blue = 0.999512 },
+	{ .red = 0.967277, .green = 0.882295, .blue = 0.998779 },
+	{ .red = 0.991697, .green = 0.876679, .blue = 0.999267 },
+	{ .red = 0.998779, .green = 0.872772, .blue = 0.983150 },
+	{ .red = 0.998535, .green = 0.865446, .blue = 0.963858 },
+	{ .red = 0.999023, .green = 0.850549, .blue = 0.943346 },
+	{ .red = 0.027350, .green = 0.732601, .blue = 0.982662 },
+	{ .red = 0.032967, .green = 0.736264, .blue = 0.990476 },
+	{ .red = 0.215629, .green = 0.753114, .blue = 0.999267 },
+	{ .red = 0.371917, .green = 0.778266, .blue = 0.998779 },
+	{ .red = 0.505006, .green = 0.807082, .blue = 0.998535 },
+	{ .red = 0.620757, .green = 0.836630, .blue = 0.999512 },
+	{ .red = 0.721368, .green = 0.863980, .blue = 0.999267 },
+	{ .red = 0.809524, .green = 0.891331, .blue = 0.999023 },
+	{ .red = 0.886691, .green = 0.922589, .blue = 0.998291 },
+	{ .red = 0.906716, .green = 0.923321, .blue = 0.998779 },
+	{ .red = 0.927717, .green = 0.923321, .blue = 0.999512 },
+	{ .red = 0.948474, .green = 0.922589, .blue = 0.998535 },
+	{ .red = 0.969475, .green = 0.920391, .blue = 0.999512 },
+	{ .red = 0.989988, .green = 0.915751, .blue = 0.999512 },
+	{ .red = 0.999267, .green = 0.911355, .blue = 0.988767 },
+	{ .red = 0.999023, .green = 0.904274, .blue = 0.971917 },
+	{ .red = 0.999512, .green = 0.890110, .blue = 0.954579 },
+	{ .red = 0.070818, .green = 0.798779, .blue = 0.981929 },
+	{ .red = 0.080342, .green = 0.800244, .blue = 0.985104 },
+	{ .red = 0.203663, .green = 0.815140, .blue = 0.998046 },
+	{ .red = 0.362637, .green = 0.833211, .blue = 0.999023 },
+	{ .red = 0.494017, .green = 0.853480, .blue = 0.998779 },
+	{ .red = 0.606593, .green = 0.873016, .blue = 0.998046 },
+	{ .red = 0.700855, .green = 0.891819, .blue = 0.998535 },
+	{ .red = 0.779976, .green = 0.908425, .blue = 0.999023 },
+	{ .red = 0.847375, .green = 0.923810, .blue = 0.998779 },
+	{ .red = 0.914286, .green = 0.945788, .blue = 0.998535 },
+	{ .red = 0.938950, .green = 0.951648, .blue = 0.998779 },
+	{ .red = 0.955067, .green = 0.951160, .blue = 0.999023 },
+	{ .red = 0.971917, .green = 0.949451, .blue = 0.999512 },
+	{ .red = 0.988767, .green = 0.946032, .blue = 0.999267 },
+	{ .red = 0.999023, .green = 0.941392, .blue = 0.992430 },
+	{ .red = 0.998291, .green = 0.934554, .blue = 0.977778 },
+	{ .red = 0.999267, .green = 0.921368, .blue = 0.963126 },
+	{ .red = 0.076435, .green = 0.865690, .blue = 0.986569 },
+	{ .red = 0.085714, .green = 0.866667, .blue = 0.988523 },
+	{ .red = 0.191941, .green = 0.876923, .blue = 0.998046 },
+	{ .red = 0.357753, .green = 0.888889, .blue = 0.999023 },
+	{ .red = 0.489133, .green = 0.901832, .blue = 0.999023 },
+	{ .red = 0.599512, .green = 0.914530, .blue = 0.998779 },
+	{ .red = 0.690354, .green = 0.926252, .blue = 0.999267 },
+	{ .red = 0.765812, .green = 0.936020, .blue = 0.999023 },
+	{ .red = 0.827595, .green = 0.944567, .blue = 0.999267 },
+	{ .red = 0.879121, .green = 0.951893, .blue = 0.998535 },
+	{ .red = 0.923565, .green = 0.960440, .blue = 0.999267 },
+	{ .red = 0.962393, .green = 0.972650, .blue = 0.999512 },
+	{ .red = 0.974847, .green = 0.971673, .blue = 0.999023 },
+	{ .red = 0.988278, .green = 0.969475, .blue = 0.999023 },
+	{ .red = 0.999267, .green = 0.965324, .blue = 0.995360 },
+	{ .red = 0.998779, .green = 0.957998, .blue = 0.982662 },
+	{ .red = 0.999023, .green = 0.945299, .blue = 0.969719 },
+	{ .red = 0.078388, .green = 0.930647, .blue = 0.990720 },
+	{ .red = 0.081319, .green = 0.931868, .blue = 0.992430 },
+	{ .red = 0.182906, .green = 0.938217, .blue = 0.998535 },
+	{ .red = 0.359463, .green = 0.944567, .blue = 0.998779 },
+	{ .red = 0.492063, .green = 0.951648, .blue = 0.999267 },
+	{ .red = 0.600977, .green = 0.958242, .blue = 0.999512 },
+	{ .red = 0.691331, .green = 0.963614, .blue = 0.999023 },
+	{ .red = 0.764347, .green = 0.968010, .blue = 0.998779 },
+	{ .red = 0.823199, .green = 0.971673, .blue = 0.998535 },
+	{ .red = 0.870574, .green = 0.974603, .blue = 0.998535 },
+	{ .red = 0.909158, .green = 0.977045, .blue = 0.998535 },
+	{ .red = 0.941148, .green = 0.979487, .blue = 0.998779 },
+	{ .red = 0.970452, .green = 0.983639, .blue = 0.999267 },
+	{ .red = 0.989499, .green = 0.987302, .blue = 0.999512 },
+	{ .red = 0.999267, .green = 0.984127, .blue = 0.997314 },
+	{ .red = 0.998779, .green = 0.976068, .blue = 0.986569 },
+	{ .red = 0.998535, .green = 0.963614, .blue = 0.974603 },
+	{ .red = 0.091575, .green = 0.992918, .blue = 0.992918 },
+	{ .red = 0.092552, .green = 0.994139, .blue = 0.994139 },
+	{ .red = 0.176557, .green = 0.998779, .blue = 0.998779 },
+	{ .red = 0.374847, .green = 0.998779, .blue = 0.997802 },
+	{ .red = 0.515018, .green = 0.999023, .blue = 0.997070 },
+	{ .red = 0.626374, .green = 0.999023, .blue = 0.996825 },
+	{ .red = 0.715263, .green = 0.998779, .blue = 0.996825 },
+	{ .red = 0.786813, .green = 0.998046, .blue = 0.996337 },
+	{ .red = 0.841270, .green = 0.998291, .blue = 0.997070 },
+	{ .red = 0.881319, .green = 0.999512, .blue = 0.999023 },
+	{ .red = 0.917949, .green = 0.998535, .blue = 0.998291 },
+	{ .red = 0.945055, .green = 0.998779, .blue = 0.998779 },
+	{ .red = 0.968254, .green = 0.998535, .blue = 0.998779 },
+	{ .red = 0.985104, .green = 0.999267, .blue = 0.999512 },
+	{ .red = 1.000000, .green = 0.999267, .blue = 0.999512 },
+	{ .red = 1.000000, .green = 0.988034, .blue = 0.988523 },
+	{ .red = 0.999023, .green = 0.976068, .blue = 0.977045 },
+	{ .red = 0.135287, .green = 0.991453, .blue = 0.939927 },
+	{ .red = 0.136996, .green = 0.992430, .blue = 0.940659 },
+	{ .red = 0.225397, .green = 0.998535, .blue = 0.947497 },
+	{ .red = 0.363614, .green = 0.998535, .blue = 0.949939 },
+	{ .red = 0.478632, .green = 0.999267, .blue = 0.954335 },
+	{ .red = 0.579487, .green = 0.999267, .blue = 0.958730 },
+	{ .red = 0.664713, .green = 0.999267, .blue = 0.963126 },
+	{ .red = 0.736996, .green = 0.998535, .blue = 0.966789 },
+	{ .red = 0.793407, .green = 0.998779, .blue = 0.970940 },
+	{ .red = 0.840781, .green = 0.998535, .blue = 0.974115 },
+	{ .red = 0.876190, .green = 0.999756, .blue = 0.977289 },
+	{ .red = 0.910379, .green = 0.998046, .blue = 0.978510 },
+	{ .red = 0.936264, .green = 0.998046, .blue = 0.979976 },
+	{ .red = 0.956044, .green = 0.999512, .blue = 0.980464 },
+	{ .red = 0.978510, .green = 0.999756, .blue = 0.980464 },
+	{ .red = 0.998779, .green = 0.996825, .blue = 0.962637 },
+	{ .red = 0.999267, .green = 0.981441, .blue = 0.968010 },
+	{ .red = 0.121368, .green = 0.994628, .blue = 0.896703 },
+	{ .red = 0.153846, .green = 0.996093, .blue = 0.898413 },
+	{ .red = 0.237118, .green = 0.999267, .blue = 0.903053 },
+	{ .red = 0.344811, .green = 0.999267, .blue = 0.907448 },
+	{ .red = 0.446154, .green = 0.999023, .blue = 0.913065 },
+	{ .red = 0.536020, .green = 0.999512, .blue = 0.920147 },
+	{ .red = 0.619536, .green = 0.998291, .blue = 0.926252 },
+	{ .red = 0.687912, .green = 0.998779, .blue = 0.933333 },
+	{ .red = 0.746520, .green = 0.998779, .blue = 0.939683 },
+	{ .red = 0.794383, .green = 0.999756, .blue = 0.945299 },
+	{ .red = 0.836874, .green = 0.999267, .blue = 0.949939 },
+	{ .red = 0.872527, .green = 0.999267, .blue = 0.953358 },
+	{ .red = 0.903053, .green = 0.999267, .blue = 0.956288 },
+	{ .red = 0.931624, .green = 0.998535, .blue = 0.958730 },
+	{ .red = 0.957509, .green = 0.999023, .blue = 0.961172 },
+	{ .red = 0.977534, .green = 0.999756, .blue = 0.957021 },
+	{ .red = 0.998535, .green = 0.996337, .blue = 0.922589 },
+	{ .red = 0.068620, .green = 0.170940, .blue = 0.999023 },
+	{ .red = 0.092063, .green = 0.140415, .blue = 0.999267 },
+	{ .red = 0.152869, .green = 0.076923, .blue = 0.998779 },
+	{ .red = 0.229304, .green = 0.097436, .blue = 0.998535 },
+	{ .red = 0.307204, .green = 0.116239, .blue = 0.999023 },
+	{ .red = 0.384860, .green = 0.130891, .blue = 0.999023 },
+	{ .red = 0.461050, .green = 0.136020, .blue = 0.999267 },
+	{ .red = 0.534554, .green = 0.136508, .blue = 0.999023 },
+	{ .red = 0.604151, .green = 0.130647, .blue = 0.998291 },
+	{ .red = 0.670330, .green = 0.118681, .blue = 0.999023 },
+	{ .red = 0.732357, .green = 0.104274, .blue = 0.998779 },
+	{ .red = 0.787790, .green = 0.079365, .blue = 0.995604 },
+	{ .red = 0.841514, .green = 0.033211, .blue = 0.994383 },
+	{ .red = 0.881563, .green = 0.039805, .blue = 0.978999 },
+	{ .red = 0.934554, .green = 0.039560, .blue = 0.982173 },
+	{ .red = 0.985104, .green = 0.027106, .blue = 0.984615 },
+	{ .red = 0.985836, .green = 0.050549, .blue = 0.924542 },
+	{ .red = 0.071551, .green = 0.176557, .blue = 0.998779 },
+	{ .red = 0.093529, .green = 0.147497, .blue = 0.999023 },
+	{ .red = 0.153114, .green = 0.088889, .blue = 0.998779 },
+	{ .red = 0.229060, .green = 0.106471, .blue = 0.998779 },
+	{ .red = 0.306227, .green = 0.123810, .blue = 0.999267 },
+	{ .red = 0.383639, .green = 0.137241, .blue = 0.998779 },
+	{ .red = 0.460317, .green = 0.145543, .blue = 0.999512 },
+	{ .red = 0.534554, .green = 0.148962, .blue = 0.999512 },
+	{ .red = 0.604396, .green = 0.146520, .blue = 0.998535 },
+	{ .red = 0.670818, .green = 0.138706, .blue = 0.998779 },
+	{ .red = 0.733089, .green = 0.128938, .blue = 0.998779 },
+	{ .red = 0.791941, .green = 0.111844, .blue = 0.999756 },
+	{ .red = 0.845421, .green = 0.091575, .blue = 0.997558 },
+	{ .red = 0.899878, .green = 0.082295, .blue = 0.999023 },
+	{ .red = 0.947253, .green = 0.084982, .blue = 0.995116 },
+	{ .red = 0.994139, .green = 0.081807, .blue = 0.993407 },
+	{ .red = 0.999023, .green = 0.117460, .blue = 0.935775 },
+	{ .red = 0.107204, .green = 0.245177, .blue = 0.998291 },
+	{ .red = 0.121612, .green = 0.229060, .blue = 0.999023 },
+	{ .red = 0.170208, .green = 0.202686, .blue = 0.998779 },
+	{ .red = 0.242979, .green = 0.211966, .blue = 0.998291 },
+	{ .red = 0.319902, .green = 0.223932, .blue = 0.998779 },
+	{ .red = 0.397558, .green = 0.234676, .blue = 0.998779 },
+	{ .red = 0.474969, .green = 0.242491, .blue = 0.999756 },
+	{ .red = 0.549206, .green = 0.247375, .blue = 0.999267 },
+	{ .red = 0.620024, .green = 0.249817, .blue = 0.998291 },
+	{ .red = 0.686447, .green = 0.248596, .blue = 0.998779 },
+	{ .red = 0.748474, .green = 0.246154, .blue = 0.998779 },
+	{ .red = 0.806349, .green = 0.241026, .blue = 0.999023 },
+	{ .red = 0.859829, .green = 0.234188, .blue = 0.998535 },
+	{ .red = 0.912332, .green = 0.230525, .blue = 0.999756 },
+	{ .red = 0.961172, .green = 0.229060, .blue = 0.999023 },
+	{ .red = 0.998535, .green = 0.227839, .blue = 0.989011 },
+	{ .red = 0.999756, .green = 0.233700, .blue = 0.931624 },
+	{ .red = 0.140415, .green = 0.307937, .blue = 0.999023 },
+	{ .red = 0.183639, .green = 0.340659, .blue = 0.999512 },
+	{ .red = 0.212454, .green = 0.319414, .blue = 0.998291 },
+	{ .red = 0.277167, .green = 0.326252, .blue = 0.998779 },
+	{ .red = 0.349939, .green = 0.335287, .blue = 0.999023 },
+	{ .red = 0.425397, .green = 0.343834, .blue = 0.998046 },
+	{ .red = 0.501099, .green = 0.351648, .blue = 0.998046 },
+	{ .red = 0.575580, .green = 0.358486, .blue = 0.999267 },
+	{ .red = 0.645177, .green = 0.362393, .blue = 0.998535 },
+	{ .red = 0.711600, .green = 0.365079, .blue = 0.999512 },
+	{ .red = 0.771673, .green = 0.365812, .blue = 0.998291 },
+	{ .red = 0.827595, .green = 0.364347, .blue = 0.998535 },
+	{ .red = 0.879365, .green = 0.360684, .blue = 0.998046 },
+	{ .red = 0.929182, .green = 0.357265, .blue = 0.999512 },
+	{ .red = 0.975580, .green = 0.354823, .blue = 0.999512 },
+	{ .red = 0.999023, .green = 0.352625, .blue = 0.978022 },
+	{ .red = 0.999023, .green = 0.348718, .blue = 0.925519 },
+	{ .red = 0.088889, .green = 0.288889, .blue = 0.996825 },
+	{ .red = 0.222466, .green = 0.408547, .blue = 0.999023 },
+	{ .red = 0.287179, .green = 0.440537, .blue = 0.999023 },
+	{ .red = 0.335531, .green = 0.440781, .blue = 1.000000 },
+	{ .red = 0.399267, .green = 0.447619, .blue = 0.999023 },
+	{ .red = 0.468864, .green = 0.455433, .blue = 0.998535 },
+	{ .red = 0.539927, .green = 0.462759, .blue = 0.999023 },
+	{ .red = 0.610012, .green = 0.469841, .blue = 0.998046 },
+	{ .red = 0.677656, .green = 0.475458, .blue = 0.999023 },
+	{ .red = 0.740659, .green = 0.479365, .blue = 0.999512 },
+	{ .red = 0.798779, .green = 0.481807, .blue = 0.999512 },
+	{ .red = 0.851526, .green = 0.481563, .blue = 0.999267 },
+	{ .red = 0.900122, .green = 0.479365, .blue = 0.999023 },
+	{ .red = 0.945299, .green = 0.475214, .blue = 0.999023 },
+	{ .red = 0.988034, .green = 0.471551, .blue = 0.999023 },
+	{ .red = 0.998535, .green = 0.468620, .blue = 0.967766 },
+	{ .red = 0.999267, .green = 0.459585, .blue = 0.923321 },
+	{ .red = 0.068864, .green = 0.342125, .blue = 0.990720 },
+	{ .red = 0.156777, .green = 0.386081, .blue = 0.998535 },
+	{ .red = 0.391941, .green = 0.562393, .blue = 0.998535 },
+	{ .red = 0.414164, .green = 0.550672, .blue = 0.999267 },
+	{ .red = 0.465934, .green = 0.556044, .blue = 0.998291 },
+	{ .red = 0.525519, .green = 0.562393, .blue = 0.998535 },
+	{ .red = 0.588278, .green = 0.569231, .blue = 0.998291 },
+	{ .red = 0.651526, .green = 0.575580, .blue = 0.998535 },
+	{ .red = 0.712576, .green = 0.581197, .blue = 0.998535 },
+	{ .red = 0.770208, .green = 0.585592, .blue = 0.998535 },
+	{ .red = 0.822955, .green = 0.588034, .blue = 0.998046 },
+	{ .red = 0.872527, .green = 0.588767, .blue = 0.999267 },
+	{ .red = 0.916484, .green = 0.586813, .blue = 0.998779 },
+	{ .red = 0.957998, .green = 0.581929, .blue = 0.999023 },
+	{ .red = 0.995360, .green = 0.577045, .blue = 0.997558 },
+	{ .red = 0.998535, .green = 0.573382, .blue = 0.963370 },
+	{ .red = 0.999023, .green = 0.562637, .blue = 0.925275 },
+	{ .red = 0.035165, .green = 0.398291, .blue = 0.961905 },
+	{ .red = 0.128938, .green = 0.430525, .blue = 0.998046 },
+	{ .red = 0.298168, .green = 0.518193, .blue = 0.998291 },
+	{ .red = 0.513065, .green = 0.658608, .blue = 0.998535 },
+	{ .red = 0.543590, .green = 0.655433, .blue = 0.999512 },
+	{ .red = 0.590965, .green = 0.660317, .blue = 0.998535 },
+	{ .red = 0.642735, .green = 0.665690, .blue = 0.999023 },
+	{ .red = 0.695971, .green = 0.670818, .blue = 0.998291 },
+	{ .red = 0.748962, .green = 0.675702, .blue = 0.999023 },
+	{ .red = 0.799267, .green = 0.679365, .blue = 0.999267 },
+	{ .red = 0.845665, .green = 0.681563, .blue = 0.998046 },
+	{ .red = 0.888889, .green = 0.681807, .blue = 0.998291 },
+	{ .red = 0.928694, .green = 0.679853, .blue = 0.998779 },
+	{ .red = 0.964835, .green = 0.674969, .blue = 0.998291 },
+	{ .red = 0.997802, .green = 0.668864, .blue = 0.996337 },
+	{ .red = 0.999023, .green = 0.664713, .blue = 0.964591 },
+	{ .red = 0.999267, .green = 0.653968, .blue = 0.932601 },
+	{ .red = 0.028571, .green = 0.478632, .blue = 0.979243 },
+	{ .red = 0.116484, .green = 0.496459, .blue = 0.998291 },
+	{ .red = 0.269353, .green = 0.548962, .blue = 0.997802 },
+	{ .red = 0.438095, .green = 0.633944, .blue = 0.998046 },
+	{ .red = 0.626129, .green = 0.743590, .blue = 0.999023 },
+	{ .red = 0.657387, .green = 0.743834, .blue = 0.999512 },
+	{ .red = 0.697680, .green = 0.747741, .blue = 0.998291 },
+	{ .red = 0.740171, .green = 0.751404, .blue = 0.998779 },
+	{ .red = 0.783639, .green = 0.755067, .blue = 0.999267 },
+	{ .red = 0.825641, .green = 0.757753, .blue = 0.998779 },
+	{ .red = 0.865446, .green = 0.759219, .blue = 0.998291 },
+	{ .red = 0.902564, .green = 0.759219, .blue = 0.998291 },
+	{ .red = 0.937485, .green = 0.757021, .blue = 0.999023 },
+	{ .red = 0.969231, .green = 0.752381, .blue = 0.998535 },
+	{ .red = 0.998535, .green = 0.745543, .blue = 0.997070 },
+	{ .red = 0.999023, .green = 0.741392, .blue = 0.968987 },
+	{ .red = 0.998535, .green = 0.731624, .blue = 0.941880 },
+	{ .red = 0.041270, .green = 0.550916, .blue = 0.978266 },
+	{ .red = 0.103297, .green = 0.564835, .blue = 0.998535 },
+	{ .red = 0.258852, .green = 0.602198, .blue = 0.998779 },
+	{ .red = 0.406838, .green = 0.658364, .blue = 0.999023 },
+	{ .red = 0.557021, .green = 0.725275, .blue = 0.997558 },
+	{ .red = 0.723321, .green = 0.814652, .blue = 0.999512 },
+	{ .red = 0.749695, .green = 0.814408, .blue = 0.998046 },
+	{ .red = 0.782173, .green = 0.817094, .blue = 0.999512 },
+	{ .red = 0.816117, .green = 0.819292, .blue = 0.998291 },
+	{ .red = 0.850061, .green = 0.821245, .blue = 0.998779 },
+	{ .red = 0.883028, .green = 0.822222, .blue = 0.998779 },
+	{ .red = 0.914286, .green = 0.821734, .blue = 0.999023 },
+	{ .red = 0.943590, .green = 0.819536, .blue = 0.998779 },
+	{ .red = 0.970696, .green = 0.814896, .blue = 0.998046 },
+	{ .red = 0.998779, .green = 0.807570, .blue = 0.999512 },
+	{ .red = 0.999267, .green = 0.803907, .blue = 0.975092 },
+	{ .red = 0.999512, .green = 0.794872, .blue = 0.952869 },
+	{ .red = 0.051282, .green = 0.621490, .blue = 0.980220 },
+	{ .red = 0.091087, .green = 0.631013, .blue = 0.995849 },
+	{ .red = 0.250061, .green = 0.658852, .blue = 0.998535 },
+	{ .red = 0.391941, .green = 0.699634, .blue = 0.998535 },
+	{ .red = 0.526007, .green = 0.746764, .blue = 0.998535 },
+	{ .red = 0.651526, .green = 0.796093, .blue = 0.998291 },
+	{ .red = 0.801954, .green = 0.870818, .blue = 0.999023 },
+	{ .red = 0.820269, .green = 0.868620, .blue = 0.999512 },
+	{ .red = 0.845910, .green = 0.869841, .blue = 0.998535 },
+	{ .red = 0.872283, .green = 0.871062, .blue = 1.000000 },
+	{ .red = 0.898657, .green = 0.871551, .blue = 0.998779 },
+	{ .red = 0.924542, .green = 0.870818, .blue = 0.999023 },
+	{ .red = 0.948962, .green = 0.868620, .blue = 0.999267 },
+	{ .red = 0.972650, .green = 0.864713, .blue = 0.999267 },
+	{ .red = 0.995849, .green = 0.857875, .blue = 0.999512 },
+	{ .red = 0.999267, .green = 0.853724, .blue = 0.980952 },
+	{ .red = 0.998535, .green = 0.845910, .blue = 0.961416 },
+	{ .red = 0.056899, .green = 0.689866, .blue = 0.983883 },
+	{ .red = 0.083516, .green = 0.694505, .blue = 0.991941 },
+	{ .red = 0.242491, .green = 0.717460, .blue = 0.999267 },
+	{ .red = 0.380952, .green = 0.747253, .blue = 0.999267 },
+	{ .red = 0.507692, .green = 0.781197, .blue = 0.998535 },
+	{ .red = 0.621978, .green = 0.816361, .blue = 0.999267 },
+	{ .red = 0.723321, .green = 0.850061, .blue = 0.999267 },
+	{ .red = 0.823199, .green = 0.889621, .blue = 0.998535 },
+	{ .red = 0.872772, .green = 0.908913, .blue = 0.998535 },
+	{ .red = 0.892308, .green = 0.909402, .blue = 0.998291 },
+	{ .red = 0.913065, .green = 0.909646, .blue = 0.999756 },
+	{ .red = 0.933578, .green = 0.908913, .blue = 0.999267 },
+	{ .red = 0.953602, .green = 0.907204, .blue = 0.998779 },
+	{ .red = 0.973138, .green = 0.903785, .blue = 0.998779 },
+	{ .red = 0.993407, .green = 0.897924, .blue = 0.999512 },
+	{ .red = 0.999023, .green = 0.893284, .blue = 0.985836 },
+	{ .red = 0.999023, .green = 0.885958, .blue = 0.969719 },
+	{ .red = 0.071062, .green = 0.754335, .blue = 0.985348 },
+	{ .red = 0.081807, .green = 0.756288, .blue = 0.989255 },
+	{ .red = 0.237363, .green = 0.774847, .blue = 0.998046 },
+	{ .red = 0.373138, .green = 0.796581, .blue = 0.998779 },
+	{ .red = 0.495971, .green = 0.821245, .blue = 0.998291 },
+	{ .red = 0.603663, .green = 0.846886, .blue = 0.999512 },
+	{ .red = 0.697924, .green = 0.869841, .blue = 0.998779 },
+	{ .red = 0.778266, .green = 0.891819, .blue = 0.999267 },
+	{ .red = 0.849817, .green = 0.913797, .blue = 0.998779 },
+	{ .red = 0.911111, .green = 0.938950, .blue = 0.998535 },
+	{ .red = 0.926252, .green = 0.938950, .blue = 0.998779 },
+	{ .red = 0.942125, .green = 0.938217, .blue = 0.998779 },
+	{ .red = 0.958486, .green = 0.936996, .blue = 0.999023 },
+	{ .red = 0.974847, .green = 0.934310, .blue = 0.999023 },
+	{ .red = 0.991941, .green = 0.929426, .blue = 0.999756 },
+	{ .red = 0.999267, .green = 0.924786, .blue = 0.990232 },
+	{ .red = 0.999512, .green = 0.917705, .blue = 0.976313 },
+	{ .red = 0.089621, .green = 0.815629, .blue = 0.985836 },
+	{ .red = 0.096459, .green = 0.816850, .blue = 0.988278 },
+	{ .red = 0.231502, .green = 0.832967, .blue = 0.999267 },
+	{ .red = 0.368010, .green = 0.847863, .blue = 0.999267 },
+	{ .red = 0.488156, .green = 0.864957, .blue = 0.999267 },
+	{ .red = 0.593651, .green = 0.882051, .blue = 0.998291 },
+	{ .red = 0.682540, .green = 0.898413, .blue = 0.999023 },
+	{ .red = 0.757753, .green = 0.912821, .blue = 0.999512 },
+	{ .red = 0.821490, .green = 0.925275, .blue = 0.999023 },
+	{ .red = 0.875946, .green = 0.937729, .blue = 0.999023 },
+	{ .red = 0.935043, .green = 0.958486, .blue = 0.998535 },
+	{ .red = 0.950916, .green = 0.960684, .blue = 0.998779 },
+	{ .red = 0.963614, .green = 0.959951, .blue = 0.999267 },
+	{ .red = 0.977045, .green = 0.957998, .blue = 0.999756 },
+	{ .red = 0.990232, .green = 0.954579, .blue = 0.999023 },
+	{ .red = 0.998779, .green = 0.949939, .blue = 0.993162 },
+	{ .red = 0.999023, .green = 0.943101, .blue = 0.980952 },
+	{ .red = 0.109402, .green = 0.874969, .blue = 0.986813 },
+	{ .red = 0.114042, .green = 0.875946, .blue = 0.988523 },
+	{ .red = 0.230281, .green = 0.889133, .blue = 0.998779 },
+	{ .red = 0.367277, .green = 0.899145, .blue = 0.999267 },
+	{ .red = 0.486935, .green = 0.909646, .blue = 0.998535 },
+	{ .red = 0.589255, .green = 0.921123, .blue = 0.999023 },
+	{ .red = 0.675214, .green = 0.931624, .blue = 0.999756 },
+	{ .red = 0.748718, .green = 0.939683, .blue = 0.998535 },
+	{ .red = 0.808059, .green = 0.947497, .blue = 0.999023 },
+	{ .red = 0.857143, .green = 0.954090, .blue = 0.999756 },
+	{ .red = 0.899389, .green = 0.959951, .blue = 0.999023 },
+	{ .red = 0.936264, .green = 0.966789, .blue = 0.999512 },
+	{ .red = 0.969231, .green = 0.977534, .blue = 0.999756 },
+	{ .red = 0.979243, .green = 0.976313, .blue = 0.999023 },
+	{ .red = 0.990232, .green = 0.974115, .blue = 0.998779 },
+	{ .red = 0.999267, .green = 0.970208, .blue = 0.995849 },
+	{ .red = 0.998779, .green = 0.963126, .blue = 0.984615 },
+	{ .red = 0.056654, .green = 0.939438, .blue = 0.996093 },
+	{ .red = 0.059585, .green = 0.940659, .blue = 0.997558 },
+	{ .red = 0.231746, .green = 0.944811, .blue = 0.999023 },
+	{ .red = 0.372405, .green = 0.950183, .blue = 0.999512 },
+	{ .red = 0.491819, .green = 0.956044, .blue = 0.999512 },
+	{ .red = 0.595116, .green = 0.960928, .blue = 0.998535 },
+	{ .red = 0.678877, .green = 0.966545, .blue = 0.999267 },
+	{ .red = 0.748962, .green = 0.970696, .blue = 0.999267 },
+	{ .red = 0.808059, .green = 0.973138, .blue = 0.998046 },
+	{ .red = 0.853480, .green = 0.976557, .blue = 0.999023 },
+	{ .red = 0.891819, .green = 0.978510, .blue = 0.998779 },
+	{ .red = 0.923077, .green = 0.980464, .blue = 0.998779 },
+	{ .red = 0.950183, .green = 0.982418, .blue = 0.998779 },
+	{ .red = 0.975092, .green = 0.986081, .blue = 0.999512 },
+	{ .red = 0.991453, .green = 0.989255, .blue = 0.999512 },
+	{ .red = 0.999512, .green = 0.986569, .blue = 0.997802 },
+	{ .red = 0.999023, .green = 0.978510, .blue = 0.988034 },
+	{ .red = 0.093284, .green = 0.995360, .blue = 0.995360 },
+	{ .red = 0.094017, .green = 0.996337, .blue = 0.996337 },
+	{ .red = 0.243468, .green = 0.999267, .blue = 0.998779 },
+	{ .red = 0.395849, .green = 0.998779, .blue = 0.997314 },
+	{ .red = 0.518926, .green = 0.999023, .blue = 0.997070 },
+	{ .red = 0.621978, .green = 0.999023, .blue = 0.996581 },
+	{ .red = 0.706471, .green = 0.998779, .blue = 0.996337 },
+	{ .red = 0.775092, .green = 0.998291, .blue = 0.996337 },
+	{ .red = 0.828083, .green = 0.998535, .blue = 0.997070 },
+	{ .red = 0.868376, .green = 0.999512, .blue = 0.998535 },
+	{ .red = 0.904762, .green = 0.998535, .blue = 0.998046 },
+	{ .red = 0.932112, .green = 0.998779, .blue = 0.998535 },
+	{ .red = 0.955067, .green = 0.998535, .blue = 0.998779 },
+	{ .red = 0.973871, .green = 0.998779, .blue = 0.999023 },
+	{ .red = 0.988278, .green = 0.999267, .blue = 0.999512 },
+	{ .red = 1.000000, .green = 0.999756, .blue = 1.000000 },
+	{ .red = 1.000000, .green = 0.989011, .blue = 0.989744 },
+	{ .red = 0.132357, .green = 0.993651, .blue = 0.945299 },
+	{ .red = 0.139683, .green = 0.998779, .blue = 0.949939 },
+	{ .red = 0.257143, .green = 0.998535, .blue = 0.951160 },
+	{ .red = 0.369963, .green = 0.998779, .blue = 0.953602 },
+	{ .red = 0.473993, .green = 0.999267, .blue = 0.957265 },
+	{ .red = 0.568254, .green = 0.999267, .blue = 0.960928 },
+	{ .red = 0.650305, .green = 0.999023, .blue = 0.964591 },
+	{ .red = 0.719658, .green = 0.998779, .blue = 0.968254 },
+	{ .red = 0.777045, .green = 0.998535, .blue = 0.971673 },
+	{ .red = 0.823443, .green = 0.998779, .blue = 0.974847 },
+	{ .red = 0.861050, .green = 0.999023, .blue = 0.977778 },
+	{ .red = 0.893284, .green = 0.998779, .blue = 0.979731 },
+	{ .red = 0.920879, .green = 0.998046, .blue = 0.980952 },
+	{ .red = 0.942857, .green = 0.998046, .blue = 0.981929 },
+	{ .red = 0.960440, .green = 0.999267, .blue = 0.982173 },
+	{ .red = 0.980220, .green = 0.999756, .blue = 0.981929 },
+	{ .red = 0.998779, .green = 0.997070, .blue = 0.965568 },
+	{ .red = 0.070330, .green = 0.183883, .blue = 0.997802 },
+	{ .red = 0.090842, .green = 0.157753, .blue = 0.999267 },
+	{ .red = 0.143590, .green = 0.090842, .blue = 0.999512 },
+	{ .red = 0.214896, .green = 0.106716, .blue = 0.998535 },
+	{ .red = 0.287912, .green = 0.123321, .blue = 0.999023 },
+	{ .red = 0.360928, .green = 0.135043, .blue = 0.999267 },
+	{ .red = 0.433211, .green = 0.142369, .blue = 0.998535 },
+	{ .red = 0.503785, .green = 0.145055, .blue = 0.998779 },
+	{ .red = 0.570696, .green = 0.139927, .blue = 0.998535 },
+	{ .red = 0.634432, .green = 0.133089, .blue = 0.998291 },
+	{ .red = 0.695482, .green = 0.121123, .blue = 0.999512 },
+	{ .red = 0.751893, .green = 0.101832, .blue = 0.999512 },
+	{ .red = 0.804884, .green = 0.080342, .blue = 0.998291 },
+	{ .red = 0.849328, .green = 0.043223, .blue = 0.990965 },
+	{ .red = 0.897436, .green = 0.040049, .blue = 0.989499 },
+	{ .red = 0.939683, .green = 0.051770, .blue = 0.983883 },
+	{ .red = 0.992430, .green = 0.028816, .blue = 0.991941 },
+	{ .red = 0.082295, .green = 0.205372, .blue = 0.998291 },
+	{ .red = 0.099634, .green = 0.184615, .blue = 0.999023 },
+	{ .red = 0.148230, .green = 0.134799, .blue = 0.999023 },
+	{ .red = 0.218803, .green = 0.145299, .blue = 0.999023 },
+	{ .red = 0.291575, .green = 0.158242, .blue = 0.998779 },
+	{ .red = 0.364835, .green = 0.167766, .blue = 0.999267 },
+	{ .red = 0.437118, .green = 0.174603, .blue = 0.998535 },
+	{ .red = 0.507937, .green = 0.177778, .blue = 0.998535 },
+	{ .red = 0.575336, .green = 0.175336, .blue = 0.999023 },
+	{ .red = 0.639316, .green = 0.170940, .blue = 0.998779 },
+	{ .red = 0.699389, .green = 0.163614, .blue = 0.998779 },
+	{ .red = 0.756288, .green = 0.151404, .blue = 0.999267 },
+	{ .red = 0.809280, .green = 0.139683, .blue = 0.998779 },
+	{ .red = 0.859585, .green = 0.121856, .blue = 0.999023 },
+	{ .red = 0.909402, .green = 0.118681, .blue = 0.999512 },
+	{ .red = 0.956288, .green = 0.117949, .blue = 0.999023 },
+	{ .red = 0.995604, .green = 0.116972, .blue = 0.992918 },
+	{ .red = 0.110379, .green = 0.256899, .blue = 0.998046 },
+	{ .red = 0.132601, .green = 0.259585, .blue = 0.998291 },
+	{ .red = 0.168254, .green = 0.226374, .blue = 0.999756 },
+	{ .red = 0.234921, .green = 0.232967, .blue = 0.998535 },
+	{ .red = 0.306716, .green = 0.242002, .blue = 0.999023 },
+	{ .red = 0.379243, .green = 0.249084, .blue = 0.999267 },
+	{ .red = 0.451770, .green = 0.255922, .blue = 0.998535 },
+	{ .red = 0.522833, .green = 0.260317, .blue = 0.998779 },
+	{ .red = 0.590476, .green = 0.261783, .blue = 0.998535 },
+	{ .red = 0.654701, .green = 0.260806, .blue = 0.999023 },
+	{ .red = 0.714286, .green = 0.258852, .blue = 0.998291 },
+	{ .red = 0.770696, .green = 0.253968, .blue = 0.999023 },
+	{ .red = 0.823443, .green = 0.248352, .blue = 0.999512 },
+	{ .red = 0.872527, .green = 0.240049, .blue = 0.999267 },
+	{ .red = 0.920391, .green = 0.237118, .blue = 0.999512 },
+	{ .red = 0.965812, .green = 0.234921, .blue = 0.999267 },
+	{ .red = 0.998779, .green = 0.232967, .blue = 0.988278 },
+	{ .red = 0.133089, .green = 0.302320, .blue = 0.999023 },
+	{ .red = 0.193651, .green = 0.357509, .blue = 0.998779 },
+	{ .red = 0.213675, .green = 0.332601, .blue = 0.998779 },
+	{ .red = 0.270574, .green = 0.335287, .blue = 0.998535 },
+	{ .red = 0.337485, .green = 0.342125, .blue = 0.998535 },
+	{ .red = 0.408059, .green = 0.349206, .blue = 0.999512 },
+	{ .red = 0.478877, .green = 0.355067, .blue = 0.999267 },
+	{ .red = 0.548718, .green = 0.360928, .blue = 0.998291 },
+	{ .red = 0.615873, .green = 0.364347, .blue = 0.999023 },
+	{ .red = 0.679121, .green = 0.366789, .blue = 0.999023 },
+	{ .red = 0.737729, .green = 0.366789, .blue = 0.998535 },
+	{ .red = 0.793407, .green = 0.366300, .blue = 0.999756 },
+	{ .red = 0.842979, .green = 0.362637, .blue = 0.998291 },
+	{ .red = 0.890354, .green = 0.357509, .blue = 0.998535 },
+	{ .red = 0.936020, .green = 0.353846, .blue = 0.999512 },
+	{ .red = 0.978999, .green = 0.350183, .blue = 0.999756 },
+	{ .red = 0.998779, .green = 0.347253, .blue = 0.977778 },
+	{ .red = 0.093040, .green = 0.288156, .blue = 0.998046 },
+	{ .red = 0.226618, .green = 0.412210, .blue = 0.999023 },
+	{ .red = 0.288400, .green = 0.444933, .blue = 0.999023 },
+	{ .red = 0.329426, .green = 0.441758, .blue = 0.999756 },
+	{ .red = 0.387546, .green = 0.447131, .blue = 0.998535 },
+	{ .red = 0.451526, .green = 0.453480, .blue = 0.998535 },
+	{ .red = 0.518437, .green = 0.459829, .blue = 0.998779 },
+	{ .red = 0.584615, .green = 0.465446, .blue = 0.999023 },
+	{ .red = 0.648596, .green = 0.470330, .blue = 0.998535 },
+	{ .red = 0.709402, .green = 0.474237, .blue = 0.999023 },
+	{ .red = 0.765812, .green = 0.476190, .blue = 0.999267 },
+	{ .red = 0.817338, .green = 0.476435, .blue = 0.998535 },
+	{ .red = 0.865201, .green = 0.474481, .blue = 0.998535 },
+	{ .red = 0.909646, .green = 0.470085, .blue = 0.999267 },
+	{ .red = 0.950672, .green = 0.465446, .blue = 0.998535 },
+	{ .red = 0.990965, .green = 0.460317, .blue = 0.999267 },
+	{ .red = 0.998779, .green = 0.456410, .blue = 0.968010 },
+	{ .red = 0.077411, .green = 0.331380, .blue = 0.993407 },
+	{ .red = 0.165812, .green = 0.384127, .blue = 0.998535 },
+	{ .red = 0.389988, .green = 0.559707, .blue = 0.998535 },
+	{ .red = 0.407326, .green = 0.546032, .blue = 0.998535 },
+	{ .red = 0.454701, .green = 0.550427, .blue = 0.998779 },
+	{ .red = 0.509646, .green = 0.555800, .blue = 0.999023 },
+	{ .red = 0.567766, .green = 0.561416, .blue = 0.997802 },
+	{ .red = 0.627839, .green = 0.567033, .blue = 0.999023 },
+	{ .red = 0.685958, .green = 0.572161, .blue = 0.998779 },
+	{ .red = 0.741148, .green = 0.575580, .blue = 0.998291 },
+	{ .red = 0.793651, .green = 0.578266, .blue = 0.999512 },
+	{ .red = 0.840781, .green = 0.578999, .blue = 0.998291 },
+	{ .red = 0.884982, .green = 0.577289, .blue = 0.999023 },
+	{ .red = 0.926007, .green = 0.573382, .blue = 0.999756 },
+	{ .red = 0.963614, .green = 0.567521, .blue = 0.999267 },
+	{ .red = 0.998291, .green = 0.561172, .blue = 0.997802 },
+	{ .red = 0.999023, .green = 0.556532, .blue = 0.963370 },
+	{ .red = 0.039560, .green = 0.384371, .blue = 0.989499 },
+	{ .red = 0.142369, .green = 0.418803, .blue = 0.998535 },
+	{ .red = 0.308425, .green = 0.517216, .blue = 0.998046 },
+	{ .red = 0.503053, .green = 0.648596, .blue = 0.998046 },
+	{ .red = 0.531868, .green = 0.645665, .blue = 0.998291 },
+	{ .red = 0.575580, .green = 0.650061, .blue = 0.999023 },
+	{ .red = 0.623932, .green = 0.654457, .blue = 0.998779 },
+	{ .red = 0.674237, .green = 0.658852, .blue = 0.998535 },
+	{ .red = 0.724542, .green = 0.663004, .blue = 0.998535 },
+	{ .red = 0.773626, .green = 0.666422, .blue = 0.999512 },
+	{ .red = 0.819048, .green = 0.668620, .blue = 0.998779 },
+	{ .red = 0.861294, .green = 0.668864, .blue = 0.998535 },
+	{ .red = 0.901099, .green = 0.667643, .blue = 0.999512 },
+	{ .red = 0.937241, .green = 0.663736, .blue = 0.999267 },
+	{ .red = 0.970208, .green = 0.657143, .blue = 0.998291 },
+	{ .red = 0.999023, .green = 0.650549, .blue = 0.994139 },
+	{ .red = 0.998291, .green = 0.645421, .blue = 0.962637 },
+	{ .red = 0.046886, .green = 0.449573, .blue = 0.975336 },
+	{ .red = 0.131868, .green = 0.475702, .blue = 0.999512 },
+	{ .red = 0.275214, .green = 0.535287, .blue = 0.998779 },
+	{ .red = 0.451770, .green = 0.634676, .blue = 0.998779 },
+	{ .red = 0.612454, .green = 0.730647, .blue = 0.999267 },
+	{ .red = 0.642735, .green = 0.731380, .blue = 0.998291 },
+	{ .red = 0.680586, .green = 0.734799, .blue = 0.998535 },
+	{ .red = 0.720879, .green = 0.737973, .blue = 0.998535 },
+	{ .red = 0.762393, .green = 0.741148, .blue = 0.999023 },
+	{ .red = 0.803419, .green = 0.743590, .blue = 0.999023 },
+	{ .red = 0.841758, .green = 0.745055, .blue = 0.998046 },
+	{ .red = 0.878388, .green = 0.745299, .blue = 0.998046 },
+	{ .red = 0.913553, .green = 0.743590, .blue = 0.999756 },
+	{ .red = 0.944811, .green = 0.739683, .blue = 0.999023 },
+	{ .red = 0.974847, .green = 0.733333, .blue = 0.999267 },
+	{ .red = 0.999267, .green = 0.726007, .blue = 0.994139 },
+	{ .red = 0.998779, .green = 0.720879, .blue = 0.966545 },
+	{ .red = 0.029548, .green = 0.525031, .blue = 0.994628 },
+	{ .red = 0.130647, .green = 0.539683, .blue = 0.999267 },
+	{ .red = 0.266667, .green = 0.581197, .blue = 0.998779 },
+	{ .red = 0.411477, .green = 0.644200, .blue = 0.999023 },
+	{ .red = 0.571429, .green = 0.725519, .blue = 0.999023 },
+	{ .red = 0.706960, .green = 0.799756, .blue = 0.999267 },
+	{ .red = 0.734066, .green = 0.800733, .blue = 0.999023 },
+	{ .red = 0.765079, .green = 0.802930, .blue = 0.999023 },
+	{ .red = 0.797802, .green = 0.804884, .blue = 0.998535 },
+	{ .red = 0.830525, .green = 0.806593, .blue = 0.998779 },
+	{ .red = 0.862759, .green = 0.807326, .blue = 0.998779 },
+	{ .red = 0.894017, .green = 0.807082, .blue = 0.999756 },
+	{ .red = 0.922344, .green = 0.805372, .blue = 0.998535 },
+	{ .red = 0.949939, .green = 0.801709, .blue = 0.998779 },
+	{ .red = 0.976068, .green = 0.795849, .blue = 0.998779 },
+	{ .red = 0.999023, .green = 0.788278, .blue = 0.995849 },
+	{ .red = 0.998779, .green = 0.783394, .blue = 0.972161 },
+	{ .red = 0.057387, .green = 0.588523, .blue = 0.986081 },
+	{ .red = 0.130891, .green = 0.603175, .blue = 0.998779 },
+	{ .red = 0.261783, .green = 0.633211, .blue = 0.999023 },
+	{ .red = 0.395849, .green = 0.678877, .blue = 0.999023 },
+	{ .red = 0.528694, .green = 0.732112, .blue = 0.998535 },
+	{ .red = 0.660073, .green = 0.790965, .blue = 0.998779 },
+	{ .red = 0.783394, .green = 0.854457, .blue = 0.998779 },
+	{ .red = 0.804884, .green = 0.854701, .blue = 0.999267 },
+	{ .red = 0.829792, .green = 0.855922, .blue = 0.998291 },
+	{ .red = 0.855433, .green = 0.856654, .blue = 0.998291 },
+	{ .red = 0.881319, .green = 0.857143, .blue = 0.998535 },
+	{ .red = 0.906471, .green = 0.856654, .blue = 0.998779 },
+	{ .red = 0.931136, .green = 0.854945, .blue = 0.999267 },
+	{ .red = 0.954579, .green = 0.851526, .blue = 0.999512 },
+	{ .red = 0.976801, .green = 0.846154, .blue = 0.999023 },
+	{ .red = 0.998291, .green = 0.838828, .blue = 0.998046 },
+	{ .red = 0.999023, .green = 0.834188, .blue = 0.977778 },
+	{ .red = 0.065201, .green = 0.652991, .blue = 0.987546 },
+	{ .red = 0.130159, .green = 0.664957, .blue = 0.998779 },
+	{ .red = 0.258120, .green = 0.686691, .blue = 0.998779 },
+	{ .red = 0.386081, .green = 0.720391, .blue = 0.998535 },
+	{ .red = 0.508913, .green = 0.759707, .blue = 0.998291 },
+	{ .red = 0.622711, .green = 0.800244, .blue = 0.998779 },
+	{ .red = 0.726740, .green = 0.840781, .blue = 0.999756 },
+	{ .red = 0.843223, .green = 0.896947, .blue = 0.998291 },
+	{ .red = 0.858364, .green = 0.895726, .blue = 0.998291 },
+	{ .red = 0.877656, .green = 0.895971, .blue = 0.999023 },
+	{ .red = 0.897924, .green = 0.895971, .blue = 0.999023 },
+	{ .red = 0.918193, .green = 0.895482, .blue = 0.998291 },
+	{ .red = 0.938217, .green = 0.893773, .blue = 0.998779 },
+	{ .red = 0.957753, .green = 0.891087, .blue = 0.999023 },
+	{ .red = 0.977045, .green = 0.886203, .blue = 0.999023 },
+	{ .red = 0.996581, .green = 0.879365, .blue = 0.999023 },
+	{ .red = 0.998535, .green = 0.874969, .blue = 0.982906 },
+	{ .red = 0.066667, .green = 0.716239, .blue = 0.991453 },
+	{ .red = 0.130891, .green = 0.724786, .blue = 0.998535 },
+	{ .red = 0.255433, .green = 0.740659, .blue = 0.998535 },
+	{ .red = 0.378755, .green = 0.765568, .blue = 0.998779 },
+	{ .red = 0.494994, .green = 0.794872, .blue = 0.999756 },
+	{ .red = 0.601709, .green = 0.823932, .blue = 0.998046 },
+	{ .red = 0.695482, .green = 0.852747, .blue = 0.999512 },
+	{ .red = 0.778510, .green = 0.879365, .blue = 0.998779 },
+	{ .red = 0.863248, .green = 0.913797, .blue = 0.998046 },
+	{ .red = 0.897924, .green = 0.926496, .blue = 0.998046 },
+	{ .red = 0.912821, .green = 0.926252, .blue = 0.999512 },
+	{ .red = 0.928938, .green = 0.925519, .blue = 0.999512 },
+	{ .red = 0.945299, .green = 0.924298, .blue = 0.999756 },
+	{ .red = 0.961172, .green = 0.922100, .blue = 0.998535 },
+	{ .red = 0.977045, .green = 0.918193, .blue = 0.998535 },
+	{ .red = 0.993895, .green = 0.912332, .blue = 0.998779 },
+	{ .red = 0.999023, .green = 0.907692, .blue = 0.987546 },
+	{ .red = 0.082051, .green = 0.774359, .blue = 0.990232 },
+	{ .red = 0.133578, .green = 0.781929, .blue = 0.997314 },
+	{ .red = 0.252747, .green = 0.794628, .blue = 0.999756 },
+	{ .red = 0.373871, .green = 0.811722, .blue = 0.998535 },
+	{ .red = 0.485714, .green = 0.833211, .blue = 0.999267 },
+	{ .red = 0.587546, .green = 0.854701, .blue = 0.998535 },
+	{ .red = 0.676190, .green = 0.875214, .blue = 0.999023 },
+	{ .red = 0.752381, .green = 0.893529, .blue = 0.998779 },
+	{ .red = 0.817827, .green = 0.910867, .blue = 0.999512 },
+	{ .red = 0.876923, .green = 0.928938, .blue = 0.999023 },
+	{ .red = 0.927228, .green = 0.949695, .blue = 0.999023 },
+	{ .red = 0.938950, .green = 0.948962, .blue = 0.998535 },
+	{ .red = 0.951648, .green = 0.947985, .blue = 0.999023 },
+	{ .red = 0.964835, .green = 0.946520, .blue = 0.999023 },
+	{ .red = 0.978266, .green = 0.943590, .blue = 0.998779 },
+	{ .red = 0.992918, .green = 0.938706, .blue = 0.999512 },
+	{ .red = 0.999267, .green = 0.934066, .blue = 0.991453 },
+	{ .red = 0.082295, .green = 0.832967, .blue = 0.993407 },
+	{ .red = 0.131380, .green = 0.839072, .blue = 0.999023 },
+	{ .red = 0.254457, .green = 0.846398, .blue = 0.998291 },
+	{ .red = 0.370940, .green = 0.859341, .blue = 0.999267 },
+	{ .red = 0.480830, .green = 0.874237, .blue = 0.999267 },
+	{ .red = 0.579976, .green = 0.888400, .blue = 0.997802 },
+	{ .red = 0.664957, .green = 0.902808, .blue = 0.998046 },
+	{ .red = 0.736752, .green = 0.915751, .blue = 0.998779 },
+	{ .red = 0.798291, .green = 0.926740, .blue = 0.998535 },
+	{ .red = 0.849817, .green = 0.936996, .blue = 0.999023 },
+	{ .red = 0.895238, .green = 0.947009, .blue = 0.998779 },
+	{ .red = 0.948230, .green = 0.966545, .blue = 0.998779 },
+	{ .red = 0.958486, .green = 0.966545, .blue = 0.999023 },
+	{ .red = 0.968742, .green = 0.965568, .blue = 0.999267 },
+	{ .red = 0.979976, .green = 0.963370, .blue = 0.999512 },
+	{ .red = 0.991209, .green = 0.959951, .blue = 0.998779 },
+	{ .red = 0.998779, .green = 0.955556, .blue = 0.993651 },
+	{ .red = 0.100855, .green = 0.887424, .blue = 0.992674 },
+	{ .red = 0.133578, .green = 0.893529, .blue = 0.999023 },
+	{ .red = 0.255678, .green = 0.898413, .blue = 0.998779 },
+	{ .red = 0.371673, .green = 0.906960, .blue = 0.999756 },
+	{ .red = 0.481319, .green = 0.915995, .blue = 0.998535 },
+	{ .red = 0.577289, .green = 0.925519, .blue = 0.998535 },
+	{ .red = 0.658852, .green = 0.935531, .blue = 0.999756 },
+	{ .red = 0.729426, .green = 0.942857, .blue = 0.999267 },
+	{ .red = 0.788034, .green = 0.949695, .blue = 0.999023 },
+	{ .red = 0.837118, .green = 0.955067, .blue = 0.998779 },
+	{ .red = 0.877411, .green = 0.960440, .blue = 0.999512 },
+	{ .red = 0.912821, .green = 0.965079, .blue = 0.999023 },
+	{ .red = 0.944567, .green = 0.970940, .blue = 0.999512 },
+	{ .red = 0.973382, .green = 0.980464, .blue = 1.000000 },
+	{ .red = 0.981929, .green = 0.979243, .blue = 0.999023 },
+	{ .red = 0.991209, .green = 0.977045, .blue = 0.998535 },
+	{ .red = 0.999023, .green = 0.973138, .blue = 0.996093 },
+	{ .red = 0.094017, .green = 0.943101, .blue = 0.995604 },
+	{ .red = 0.147253, .green = 0.945299, .blue = 0.997314 },
+	{ .red = 0.258364, .green = 0.950183, .blue = 0.999756 },
+	{ .red = 0.379243, .green = 0.953846, .blue = 0.999267 },
+	{ .red = 0.487668, .green = 0.958974, .blue = 0.999023 },
+	{ .red = 0.582662, .green = 0.963858, .blue = 0.999023 },
+	{ .red = 0.664225, .green = 0.968254, .blue = 0.999023 },
+	{ .red = 0.731868, .green = 0.972161, .blue = 0.999267 },
+	{ .red = 0.788523, .green = 0.975092, .blue = 0.999023 },
+	{ .red = 0.835653, .green = 0.977289, .blue = 0.998535 },
+	{ .red = 0.873260, .green = 0.979731, .blue = 0.999267 },
+	{ .red = 0.905739, .green = 0.981197, .blue = 0.998779 },
+	{ .red = 0.932112, .green = 0.982906, .blue = 0.999023 },
+	{ .red = 0.955800, .green = 0.984371, .blue = 0.998779 },
+	{ .red = 0.977778, .green = 0.987546, .blue = 0.999512 },
+	{ .red = 0.992430, .green = 0.990476, .blue = 0.999512 },
+	{ .red = 0.999756, .green = 0.987546, .blue = 0.998046 },
+	{ .red = 0.094261, .green = 0.996825, .blue = 0.996825 },
+	{ .red = 0.148962, .green = 0.998779, .blue = 0.998535 },
+	{ .red = 0.276679, .green = 0.999267, .blue = 0.998535 },
+	{ .red = 0.403663, .green = 0.998779, .blue = 0.997070 },
+	{ .red = 0.513797, .green = 0.999267, .blue = 0.996825 },
+	{ .red = 0.611233, .green = 0.998779, .blue = 0.996093 },
+	{ .red = 0.691575, .green = 0.998535, .blue = 0.996093 },
+	{ .red = 0.756532, .green = 0.999023, .blue = 0.996825 },
+	{ .red = 0.811233, .green = 0.998535, .blue = 0.996825 },
+	{ .red = 0.853480, .green = 0.998779, .blue = 0.997558 },
+	{ .red = 0.886935, .green = 0.999267, .blue = 0.998535 },
+	{ .red = 0.917216, .green = 0.998535, .blue = 0.998291 },
+	{ .red = 0.940415, .green = 0.998779, .blue = 0.998779 },
+	{ .red = 0.960440, .green = 0.998535, .blue = 0.998779 },
+	{ .red = 0.976557, .green = 0.998779, .blue = 0.999023 },
+	{ .red = 0.989499, .green = 0.999267, .blue = 0.999512 },
+	{ .red = 1.000000, .green = 0.999756, .blue = 1.000000 },
+} };
+
+/*
+ * A 3D LUT table with 17x17x17 entries for DRM_COLOROP_TRAVERSAL_BGR.
+ * It can be generated by scripts/convert_3dlut.py
+ */
+igt_3dlut_t igt_3dlut_17_bgr = { {
+	{ .red = 0.000000, .green = 0.000000, .blue = 0.000000 },
+	{ .red = 0.010745, .green = 0.008059, .blue = 0.156532 },
+	{ .red = 0.015385, .green = 0.007814, .blue = 0.294994 },
+	{ .red = 0.016117, .green = 0.017338, .blue = 0.421490 },
+	{ .red = 0.026618, .green = 0.072039, .blue = 0.524542 },
+	{ .red = 0.000000, .green = 0.082051, .blue = 0.585348 },
+	{ .red = 0.000000, .green = 0.109402, .blue = 0.609035 },
+	{ .red = 0.000000, .green = 0.135287, .blue = 0.610745 },
+	{ .red = 0.005128, .green = 0.142125, .blue = 0.646154 },
+	{ .red = 0.013919, .green = 0.144078, .blue = 0.702808 },
+	{ .red = 0.020269, .green = 0.141148, .blue = 0.786569 },
+	{ .red = 0.035897, .green = 0.070330, .blue = 0.999267 },
+	{ .red = 0.048352, .green = 0.112576, .blue = 0.999756 },
+	{ .red = 0.057631, .green = 0.137973, .blue = 0.999756 },
+	{ .red = 0.064957, .green = 0.155800, .blue = 0.999512 },
+	{ .red = 0.068620, .green = 0.170940, .blue = 0.999023 },
+	{ .red = 0.070330, .green = 0.183883, .blue = 0.997802 },
+	{ .red = 0.016606, .green = 0.179976, .blue = 0.018559 },
+	{ .red = 0.011722, .green = 0.216117, .blue = 0.216117 },
+	{ .red = 0.006838, .green = 0.154090, .blue = 0.289621 },
+	{ .red = 0.000000, .green = 0.143346, .blue = 0.415629 },
+	{ .red = 0.000000, .green = 0.131868, .blue = 0.519414 },
+	{ .red = 0.000000, .green = 0.124786, .blue = 0.581929 },
+	{ .red = 0.000000, .green = 0.134554, .blue = 0.609035 },
+	{ .red = 0.007814, .green = 0.146764, .blue = 0.626129 },
+	{ .red = 0.010989, .green = 0.146520, .blue = 0.684249 },
+	{ .red = 0.016850, .green = 0.143834, .blue = 0.760440 },
+	{ .red = 0.026862, .green = 0.124054, .blue = 0.891331 },
+	{ .red = 0.044689, .green = 0.100855, .blue = 0.999756 },
+	{ .red = 0.054457, .green = 0.128938, .blue = 0.999756 },
+	{ .red = 0.062271, .green = 0.148718, .blue = 0.999756 },
+	{ .red = 0.068620, .green = 0.163370, .blue = 0.999267 },
+	{ .red = 0.071551, .green = 0.176557, .blue = 0.998779 },
+	{ .red = 0.082295, .green = 0.205372, .blue = 0.998291 },
+	{ .red = 0.020757, .green = 0.326984, .blue = 0.023932 },
+	{ .red = 0.013675, .green = 0.354823, .blue = 0.199756 },
+	{ .red = 0.021490, .green = 0.377289, .blue = 0.377289 },
+	{ .red = 0.014164, .green = 0.273993, .blue = 0.389255 },
+	{ .red = 0.010501, .green = 0.247863, .blue = 0.462759 },
+	{ .red = 0.006105, .green = 0.217094, .blue = 0.501099 },
+	{ .red = 0.003175, .green = 0.204884, .blue = 0.562393 },
+	{ .red = 0.000000, .green = 0.198779, .blue = 0.646154 },
+	{ .red = 0.000000, .green = 0.192186, .blue = 0.785348 },
+	{ .red = 0.008791, .green = 0.174359, .blue = 0.940904 },
+	{ .red = 0.045421, .green = 0.169963, .blue = 0.976068 },
+	{ .red = 0.059341, .green = 0.171917, .blue = 0.992430 },
+	{ .red = 0.068376, .green = 0.177289, .blue = 0.998779 },
+	{ .red = 0.077656, .green = 0.189744, .blue = 0.998535 },
+	{ .red = 0.092552, .green = 0.216606, .blue = 0.999267 },
+	{ .red = 0.107204, .green = 0.245177, .blue = 0.998291 },
+	{ .red = 0.110379, .green = 0.256899, .blue = 0.998046 },
+	{ .red = 0.044933, .green = 0.454701, .blue = 0.035409 },
+	{ .red = 0.008303, .green = 0.469841, .blue = 0.183883 },
+	{ .red = 0.024176, .green = 0.494505, .blue = 0.355800 },
+	{ .red = 0.021734, .green = 0.507937, .blue = 0.508181 },
+	{ .red = 0.012943, .green = 0.401954, .blue = 0.514530 },
+	{ .red = 0.015629, .green = 0.348474, .blue = 0.548230 },
+	{ .red = 0.000000, .green = 0.313797, .blue = 0.591941 },
+	{ .red = 0.000000, .green = 0.279365, .blue = 0.617582 },
+	{ .red = 0.006838, .green = 0.260073, .blue = 0.664713 },
+	{ .red = 0.002930, .green = 0.263980, .blue = 0.793162 },
+	{ .red = 0.027839, .green = 0.265690, .blue = 0.957021 },
+	{ .red = 0.059829, .green = 0.254457, .blue = 0.999023 },
+	{ .red = 0.080342, .green = 0.250061, .blue = 0.998779 },
+	{ .red = 0.112821, .green = 0.277411, .blue = 0.998535 },
+	{ .red = 0.130891, .green = 0.296459, .blue = 0.999267 },
+	{ .red = 0.140415, .green = 0.307937, .blue = 0.999023 },
+	{ .red = 0.133089, .green = 0.302320, .blue = 0.999023 },
+	{ .red = 0.071062, .green = 0.569719, .blue = 0.048840 },
+	{ .red = 0.001954, .green = 0.578999, .blue = 0.172405 },
+	{ .red = 0.014408, .green = 0.596093, .blue = 0.335775 },
+	{ .red = 0.029060, .green = 0.611966, .blue = 0.485226 },
+	{ .red = 0.023443, .green = 0.622466, .blue = 0.622711 },
+	{ .red = 0.025885, .green = 0.521123, .blue = 0.631746 },
+	{ .red = 0.024176, .green = 0.450305, .blue = 0.644444 },
+	{ .red = 0.018071, .green = 0.412698, .blue = 0.687179 },
+	{ .red = 0.004151, .green = 0.378755, .blue = 0.725519 },
+	{ .red = 0.012454, .green = 0.347741, .blue = 0.757509 },
+	{ .red = 0.000000, .green = 0.325763, .blue = 0.804884 },
+	{ .red = 0.021245, .green = 0.335531, .blue = 0.952625 },
+	{ .red = 0.060317, .green = 0.321368, .blue = 0.991941 },
+	{ .red = 0.076435, .green = 0.305250, .blue = 0.997802 },
+	{ .red = 0.087668, .green = 0.297192, .blue = 0.996337 },
+	{ .red = 0.088889, .green = 0.288889, .blue = 0.996825 },
+	{ .red = 0.093040, .green = 0.288156, .blue = 0.998046 },
+	{ .red = 0.086935, .green = 0.676679, .blue = 0.055678 },
+	{ .red = 0.012698, .green = 0.683761, .blue = 0.163370 },
+	{ .red = 0.018803, .green = 0.693773, .blue = 0.320635 },
+	{ .red = 0.023443, .green = 0.705739, .blue = 0.465446 },
+	{ .red = 0.023687, .green = 0.717216, .blue = 0.599512 },
+	{ .red = 0.032723, .green = 0.726740, .blue = 0.726740 },
+	{ .red = 0.023443, .green = 0.630525, .blue = 0.738217 },
+	{ .red = 0.026374, .green = 0.556532, .blue = 0.749206 },
+	{ .red = 0.010989, .green = 0.510867, .blue = 0.782662 },
+	{ .red = 0.021734, .green = 0.473016, .blue = 0.816850 },
+	{ .red = 0.013675, .green = 0.440537, .blue = 0.852015 },
+	{ .red = 0.016361, .green = 0.411477, .blue = 0.885714 },
+	{ .red = 0.011233, .green = 0.386569, .blue = 0.918681 },
+	{ .red = 0.028816, .green = 0.370208, .blue = 0.960195 },
+	{ .red = 0.054701, .green = 0.358974, .blue = 0.994628 },
+	{ .red = 0.068864, .green = 0.342125, .blue = 0.990720 },
+	{ .red = 0.077411, .green = 0.331380, .blue = 0.993407 },
+	{ .red = 0.097192, .green = 0.774603, .blue = 0.057875 },
+	{ .red = 0.000000, .green = 0.780952, .blue = 0.154335 },
+	{ .red = 0.015140, .green = 0.785348, .blue = 0.306716 },
+	{ .red = 0.020757, .green = 0.792186, .blue = 0.446642 },
+	{ .red = 0.016850, .green = 0.799756, .blue = 0.576068 },
+	{ .red = 0.018559, .green = 0.807326, .blue = 0.697680 },
+	{ .red = 0.036142, .green = 0.814164, .blue = 0.814164 },
+	{ .red = 0.031990, .green = 0.720391, .blue = 0.823199 },
+	{ .red = 0.023199, .green = 0.647619, .blue = 0.834188 },
+	{ .red = 0.026129, .green = 0.591697, .blue = 0.851282 },
+	{ .red = 0.020024, .green = 0.550427, .blue = 0.878144 },
+	{ .red = 0.010745, .green = 0.514530, .blue = 0.904274 },
+	{ .red = 0.017827, .green = 0.481319, .blue = 0.926007 },
+	{ .red = 0.000000, .green = 0.453968, .blue = 0.951160 },
+	{ .red = 0.025397, .green = 0.424908, .blue = 0.960195 },
+	{ .red = 0.035165, .green = 0.398291, .blue = 0.961905 },
+	{ .red = 0.039560, .green = 0.384371, .blue = 0.989499 },
+	{ .red = 0.101587, .green = 0.846398, .blue = 0.059096 },
+	{ .red = 0.000000, .green = 0.852503, .blue = 0.143834 },
+	{ .red = 0.019292, .green = 0.853724, .blue = 0.288645 },
+	{ .red = 0.026618, .green = 0.856410, .blue = 0.421734 },
+	{ .red = 0.023443, .green = 0.860562, .blue = 0.545055 },
+	{ .red = 0.029792, .green = 0.865201, .blue = 0.660073 },
+	{ .red = 0.026129, .green = 0.870085, .blue = 0.769231 },
+	{ .red = 0.025153, .green = 0.874725, .blue = 0.874725 },
+	{ .red = 0.024176, .green = 0.786081, .blue = 0.881807 },
+	{ .red = 0.019536, .green = 0.715018, .blue = 0.890354 },
+	{ .red = 0.026862, .green = 0.656654, .blue = 0.900366 },
+	{ .red = 0.023932, .green = 0.611966, .blue = 0.918681 },
+	{ .red = 0.017827, .green = 0.573626, .blue = 0.937729 },
+	{ .red = 0.016850, .green = 0.538950, .blue = 0.954823 },
+	{ .red = 0.030037, .green = 0.506227, .blue = 0.965324 },
+	{ .red = 0.028571, .green = 0.478632, .blue = 0.979243 },
+	{ .red = 0.046886, .green = 0.449573, .blue = 0.975336 },
+	{ .red = 0.101832, .green = 0.896215, .blue = 0.062515 },
+	{ .red = 0.018071, .green = 0.901587, .blue = 0.134554 },
+	{ .red = 0.016117, .green = 0.901832, .blue = 0.269109 },
+	{ .red = 0.023932, .green = 0.902564, .blue = 0.394628 },
+	{ .red = 0.026618, .green = 0.904274, .blue = 0.511111 },
+	{ .red = 0.034432, .green = 0.906960, .blue = 0.620024 },
+	{ .red = 0.037363, .green = 0.909646, .blue = 0.722833 },
+	{ .red = 0.031502, .green = 0.913309, .blue = 0.821245 },
+	{ .red = 0.029548, .green = 0.916484, .blue = 0.916239 },
+	{ .red = 0.027350, .green = 0.832967, .blue = 0.921612 },
+	{ .red = 0.026374, .green = 0.764835, .blue = 0.927961 },
+	{ .red = 0.022466, .green = 0.708425, .blue = 0.936508 },
+	{ .red = 0.021734, .green = 0.661294, .blue = 0.947741 },
+	{ .red = 0.024908, .green = 0.621245, .blue = 0.960928 },
+	{ .red = 0.020269, .green = 0.586325, .blue = 0.974847 },
+	{ .red = 0.041270, .green = 0.550916, .blue = 0.978266 },
+	{ .red = 0.029548, .green = 0.525031, .blue = 0.994628 },
+	{ .red = 0.100366, .green = 0.930159, .blue = 0.065201 },
+	{ .red = 0.046642, .green = 0.934554, .blue = 0.127961 },
+	{ .red = 0.018071, .green = 0.935043, .blue = 0.249817 },
+	{ .red = 0.024908, .green = 0.935043, .blue = 0.367521 },
+	{ .red = 0.028327, .green = 0.935531, .blue = 0.477411 },
+	{ .red = 0.028083, .green = 0.936996, .blue = 0.580464 },
+	{ .red = 0.031746, .green = 0.938462, .blue = 0.677411 },
+	{ .red = 0.035409, .green = 0.940415, .blue = 0.769719 },
+	{ .red = 0.029792, .green = 0.942613, .blue = 0.858608 },
+	{ .red = 0.045910, .green = 0.944567, .blue = 0.944567 },
+	{ .red = 0.029548, .green = 0.866667, .blue = 0.948718 },
+	{ .red = 0.033944, .green = 0.801954, .blue = 0.953358 },
+	{ .red = 0.036142, .green = 0.747009, .blue = 0.959463 },
+	{ .red = 0.039560, .green = 0.699634, .blue = 0.966300 },
+	{ .red = 0.043712, .green = 0.659096, .blue = 0.974603 },
+	{ .red = 0.051282, .green = 0.621490, .blue = 0.980220 },
+	{ .red = 0.057387, .green = 0.588523, .blue = 0.986081 },
+	{ .red = 0.095238, .green = 0.952869, .blue = 0.073016 },
+	{ .red = 0.067643, .green = 0.954823, .blue = 0.127473 },
+	{ .red = 0.055678, .green = 0.955311, .blue = 0.235409 },
+	{ .red = 0.041026, .green = 0.956288, .blue = 0.343101 },
+	{ .red = 0.046886, .green = 0.956288, .blue = 0.446154 },
+	{ .red = 0.041758, .green = 0.957265, .blue = 0.543101 },
+	{ .red = 0.035653, .green = 0.958486, .blue = 0.634676 },
+	{ .red = 0.018315, .green = 0.959951, .blue = 0.721856 },
+	{ .red = 0.058364, .green = 0.960440, .blue = 0.804884 },
+	{ .red = 0.032479, .green = 0.962637, .blue = 0.885958 },
+	{ .red = 0.067399, .green = 0.963126, .blue = 0.963126 },
+	{ .red = 0.052259, .green = 0.890598, .blue = 0.966056 },
+	{ .red = 0.032234, .green = 0.830281, .blue = 0.970940 },
+	{ .red = 0.037363, .green = 0.777534, .blue = 0.975580 },
+	{ .red = 0.027350, .green = 0.732601, .blue = 0.982662 },
+	{ .red = 0.056899, .green = 0.689866, .blue = 0.983883 },
+	{ .red = 0.065201, .green = 0.652991, .blue = 0.987546 },
+	{ .red = 0.105983, .green = 0.965324, .blue = 0.085958 },
+	{ .red = 0.082295, .green = 0.968010, .blue = 0.126984 },
+	{ .red = 0.041514, .green = 0.970940, .blue = 0.219780 },
+	{ .red = 0.045665, .green = 0.970940, .blue = 0.320391 },
+	{ .red = 0.049573, .green = 0.970940, .blue = 0.416850 },
+	{ .red = 0.042979, .green = 0.971673, .blue = 0.508181 },
+	{ .red = 0.021001, .green = 0.972894, .blue = 0.595116 },
+	{ .red = 0.023443, .green = 0.973626, .blue = 0.677656 },
+	{ .red = 0.037607, .green = 0.974115, .blue = 0.756288 },
+	{ .red = 0.027106, .green = 0.975336, .blue = 0.832234 },
+	{ .red = 0.083028, .green = 0.974359, .blue = 0.904274 },
+	{ .red = 0.078388, .green = 0.975580, .blue = 0.975580 },
+	{ .red = 0.092552, .green = 0.905983, .blue = 0.975092 },
+	{ .red = 0.062515, .green = 0.850061, .blue = 0.980220 },
+	{ .red = 0.070818, .green = 0.798779, .blue = 0.981929 },
+	{ .red = 0.071062, .green = 0.754335, .blue = 0.985348 },
+	{ .red = 0.066667, .green = 0.716239, .blue = 0.991453 },
+	{ .red = 0.115507, .green = 0.973626, .blue = 0.093040 },
+	{ .red = 0.096703, .green = 0.976068, .blue = 0.126007 },
+	{ .red = 0.058852, .green = 0.979976, .blue = 0.206838 },
+	{ .red = 0.016606, .green = 0.981929, .blue = 0.298413 },
+	{ .red = 0.079609, .green = 0.978510, .blue = 0.390720 },
+	{ .red = 0.070818, .green = 0.979976, .blue = 0.476435 },
+	{ .red = 0.042491, .green = 0.982173, .blue = 0.558242 },
+	{ .red = 0.065934, .green = 0.981441, .blue = 0.636630 },
+	{ .red = 0.033455, .green = 0.983394, .blue = 0.711600 },
+	{ .red = 0.094994, .green = 0.980708, .blue = 0.782173 },
+	{ .red = 0.112332, .green = 0.980220, .blue = 0.850061 },
+	{ .red = 0.119658, .green = 0.980464, .blue = 0.916484 },
+	{ .red = 0.084982, .green = 0.983883, .blue = 0.983883 },
+	{ .red = 0.090354, .green = 0.919414, .blue = 0.983883 },
+	{ .red = 0.076435, .green = 0.865690, .blue = 0.986569 },
+	{ .red = 0.089621, .green = 0.815629, .blue = 0.985836 },
+	{ .red = 0.082051, .green = 0.774359, .blue = 0.990232 },
+	{ .red = 0.122344, .green = 0.979243, .blue = 0.095482 },
+	{ .red = 0.111844, .green = 0.980708, .blue = 0.125031 },
+	{ .red = 0.101343, .green = 0.981685, .blue = 0.199023 },
+	{ .red = 0.100366, .green = 0.982418, .blue = 0.283516 },
+	{ .red = 0.096215, .green = 0.983394, .blue = 0.366789 },
+	{ .red = 0.088156, .green = 0.985104, .blue = 0.447619 },
+	{ .red = 0.088645, .green = 0.985592, .blue = 0.525031 },
+	{ .red = 0.051770, .green = 0.988767, .blue = 0.599267 },
+	{ .red = 0.094994, .green = 0.986081, .blue = 0.670085 },
+	{ .red = 0.033944, .green = 0.990232, .blue = 0.739194 },
+	{ .red = 0.094017, .green = 0.987546, .blue = 0.803663 },
+	{ .red = 0.115018, .green = 0.986325, .blue = 0.865934 },
+	{ .red = 0.130891, .green = 0.985348, .blue = 0.926252 },
+	{ .red = 0.089133, .green = 0.989499, .blue = 0.989499 },
+	{ .red = 0.078388, .green = 0.930647, .blue = 0.990720 },
+	{ .red = 0.109402, .green = 0.874969, .blue = 0.986813 },
+	{ .red = 0.082295, .green = 0.832967, .blue = 0.993407 },
+	{ .red = 0.127717, .green = 0.982906, .blue = 0.095238 },
+	{ .red = 0.122100, .green = 0.983639, .blue = 0.122344 },
+	{ .red = 0.114530, .green = 0.984127, .blue = 0.189255 },
+	{ .red = 0.089377, .green = 0.988767, .blue = 0.264469 },
+	{ .red = 0.108669, .green = 0.986325, .blue = 0.345299 },
+	{ .red = 0.107204, .green = 0.987302, .blue = 0.421490 },
+	{ .red = 0.098168, .green = 0.989011, .blue = 0.494750 },
+	{ .red = 0.107204, .green = 0.988523, .blue = 0.565324 },
+	{ .red = 0.111600, .green = 0.988523, .blue = 0.632723 },
+	{ .red = 0.116728, .green = 0.988523, .blue = 0.697436 },
+	{ .red = 0.102808, .green = 0.990476, .blue = 0.760195 },
+	{ .red = 0.126007, .green = 0.988767, .blue = 0.819292 },
+	{ .red = 0.093773, .green = 0.992430, .blue = 0.879609 },
+	{ .red = 0.135287, .green = 0.989011, .blue = 0.933822 },
+	{ .red = 0.091575, .green = 0.992918, .blue = 0.992918 },
+	{ .red = 0.056654, .green = 0.939438, .blue = 0.996093 },
+	{ .red = 0.100855, .green = 0.887424, .blue = 0.992674 },
+	{ .red = 0.131868, .green = 0.985592, .blue = 0.093284 },
+	{ .red = 0.129182, .green = 0.985592, .blue = 0.118681 },
+	{ .red = 0.109646, .green = 0.988523, .blue = 0.176313 },
+	{ .red = 0.123077, .green = 0.986325, .blue = 0.252503 },
+	{ .red = 0.107937, .green = 0.989744, .blue = 0.324542 },
+	{ .red = 0.113553, .green = 0.989499, .blue = 0.397558 },
+	{ .red = 0.117460, .green = 0.989499, .blue = 0.467399 },
+	{ .red = 0.098657, .green = 0.992430, .blue = 0.534310 },
+	{ .red = 0.095238, .green = 0.993162, .blue = 0.599023 },
+	{ .red = 0.102808, .green = 0.992674, .blue = 0.661050 },
+	{ .red = 0.123321, .green = 0.990965, .blue = 0.720391 },
+	{ .red = 0.133333, .green = 0.990232, .blue = 0.777289 },
+	{ .red = 0.084737, .green = 0.995360, .blue = 0.835653 },
+	{ .red = 0.059341, .green = 0.997070, .blue = 0.891331 },
+	{ .red = 0.135287, .green = 0.991453, .blue = 0.939927 },
+	{ .red = 0.093284, .green = 0.995360, .blue = 0.995360 },
+	{ .red = 0.094017, .green = 0.943101, .blue = 0.995604 },
+	{ .red = 0.135287, .green = 0.987302, .blue = 0.090842 },
+	{ .red = 0.133333, .green = 0.987546, .blue = 0.113553 },
+	{ .red = 0.087424, .green = 0.994872, .blue = 0.160195 },
+	{ .red = 0.126252, .green = 0.988767, .blue = 0.238339 },
+	{ .red = 0.090598, .green = 0.994872, .blue = 0.304274 },
+	{ .red = 0.126740, .green = 0.989988, .blue = 0.376557 },
+	{ .red = 0.118193, .green = 0.991941, .blue = 0.442247 },
+	{ .red = 0.123810, .green = 0.991453, .blue = 0.506716 },
+	{ .red = 0.125519, .green = 0.991453, .blue = 0.568254 },
+	{ .red = 0.126984, .green = 0.991941, .blue = 0.627595 },
+	{ .red = 0.107204, .green = 0.994872, .blue = 0.685226 },
+	{ .red = 0.089377, .green = 0.996825, .blue = 0.741148 },
+	{ .red = 0.111844, .green = 0.994872, .blue = 0.794383 },
+	{ .red = 0.126252, .green = 0.993651, .blue = 0.845421 },
+	{ .red = 0.121368, .green = 0.994628, .blue = 0.896703 },
+	{ .red = 0.132357, .green = 0.993651, .blue = 0.945299 },
+	{ .red = 0.094261, .green = 0.996825, .blue = 0.996825 },
+	{ .red = 0.175580, .green = 0.003419, .blue = 0.006838 },
+	{ .red = 0.173382, .green = 0.005372, .blue = 0.173626 },
+	{ .red = 0.162882, .green = 0.007326, .blue = 0.296215 },
+	{ .red = 0.157509, .green = 0.010989, .blue = 0.424664 },
+	{ .red = 0.152381, .green = 0.013675, .blue = 0.548230 },
+	{ .red = 0.135775, .green = 0.011966, .blue = 0.620024 },
+	{ .red = 0.118193, .green = 0.014652, .blue = 0.668376 },
+	{ .red = 0.102320, .green = 0.017338, .blue = 0.712088 },
+	{ .red = 0.093529, .green = 0.014896, .blue = 0.755067 },
+	{ .red = 0.089377, .green = 0.014896, .blue = 0.805128 },
+	{ .red = 0.089866, .green = 0.018559, .blue = 0.868864 },
+	{ .red = 0.091575, .green = 0.021734, .blue = 0.930159 },
+	{ .red = 0.094505, .green = 0.028571, .blue = 0.988278 },
+	{ .red = 0.093773, .green = 0.086203, .blue = 0.999023 },
+	{ .red = 0.093040, .green = 0.117949, .blue = 0.999267 },
+	{ .red = 0.092063, .green = 0.140415, .blue = 0.999267 },
+	{ .red = 0.090842, .green = 0.157753, .blue = 0.999267 },
+	{ .red = 0.173382, .green = 0.173382, .blue = 0.005861 },
+	{ .red = 0.147253, .green = 0.147009, .blue = 0.147253 },
+	{ .red = 0.150183, .green = 0.137973, .blue = 0.297680 },
+	{ .red = 0.150427, .green = 0.119170, .blue = 0.449084 },
+	{ .red = 0.149939, .green = 0.075702, .blue = 0.603419 },
+	{ .red = 0.139438, .green = 0.014896, .blue = 0.695482 },
+	{ .red = 0.122344, .green = 0.015873, .blue = 0.734310 },
+	{ .red = 0.107937, .green = 0.010256, .blue = 0.770696 },
+	{ .red = 0.099389, .green = 0.015140, .blue = 0.805372 },
+	{ .red = 0.096215, .green = 0.019048, .blue = 0.854457 },
+	{ .red = 0.096215, .green = 0.022955, .blue = 0.912576 },
+	{ .red = 0.097924, .green = 0.025397, .blue = 0.969475 },
+	{ .red = 0.097436, .green = 0.063492, .blue = 0.998535 },
+	{ .red = 0.095726, .green = 0.103297, .blue = 0.999023 },
+	{ .red = 0.094994, .green = 0.128205, .blue = 0.999267 },
+	{ .red = 0.093529, .green = 0.147497, .blue = 0.999023 },
+	{ .red = 0.099634, .green = 0.184615, .blue = 0.999023 },
+	{ .red = 0.161416, .green = 0.325763, .blue = 0.006838 },
+	{ .red = 0.084493, .green = 0.298168, .blue = 0.128694 },
+	{ .red = 0.021245, .green = 0.306960, .blue = 0.308425 },
+	{ .red = 0.069353, .green = 0.284737, .blue = 0.460317 },
+	{ .red = 0.109158, .green = 0.267155, .blue = 0.613675 },
+	{ .red = 0.124054, .green = 0.244689, .blue = 0.767033 },
+	{ .red = 0.129670, .green = 0.212943, .blue = 0.921856 },
+	{ .red = 0.129915, .green = 0.171917, .blue = 0.999023 },
+	{ .red = 0.121123, .green = 0.140904, .blue = 0.999023 },
+	{ .red = 0.113309, .green = 0.120635, .blue = 0.999267 },
+	{ .red = 0.108181, .green = 0.120391, .blue = 0.999023 },
+	{ .red = 0.104518, .green = 0.126252, .blue = 0.999023 },
+	{ .red = 0.103541, .green = 0.143834, .blue = 0.998779 },
+	{ .red = 0.107204, .green = 0.171184, .blue = 0.999267 },
+	{ .red = 0.113309, .green = 0.199756, .blue = 0.999267 },
+	{ .red = 0.121612, .green = 0.229060, .blue = 0.999023 },
+	{ .red = 0.132601, .green = 0.259585, .blue = 0.998291 },
+	{ .red = 0.150427, .green = 0.454945, .blue = 0.008791 },
+	{ .red = 0.012698, .green = 0.454212, .blue = 0.132845 },
+	{ .red = 0.013431, .green = 0.476190, .blue = 0.325763 },
+	{ .red = 0.010989, .green = 0.487424, .blue = 0.488645 },
+	{ .red = 0.021734, .green = 0.403419, .blue = 0.535775 },
+	{ .red = 0.008791, .green = 0.367521, .blue = 0.624176 },
+	{ .red = 0.010745, .green = 0.340904, .blue = 0.729915 },
+	{ .red = 0.000000, .green = 0.350916, .blue = 0.981441 },
+	{ .red = 0.093040, .green = 0.311844, .blue = 0.998291 },
+	{ .red = 0.130891, .green = 0.305495, .blue = 0.998779 },
+	{ .red = 0.155311, .green = 0.313553, .blue = 0.998779 },
+	{ .red = 0.158730, .green = 0.309158, .blue = 0.998779 },
+	{ .red = 0.163370, .green = 0.311111, .blue = 0.998779 },
+	{ .red = 0.168742, .green = 0.317460, .blue = 0.998779 },
+	{ .red = 0.175336, .green = 0.327473, .blue = 0.999267 },
+	{ .red = 0.183639, .green = 0.340659, .blue = 0.999512 },
+	{ .red = 0.193651, .green = 0.357509, .blue = 0.998779 },
+	{ .red = 0.143590, .green = 0.571673, .blue = 0.011722 },
+	{ .red = 0.000000, .green = 0.581197, .blue = 0.134554 },
+	{ .red = 0.021001, .green = 0.594872, .blue = 0.317949 },
+	{ .red = 0.024176, .green = 0.609035, .blue = 0.475214 },
+	{ .red = 0.021978, .green = 0.617827, .blue = 0.618559 },
+	{ .red = 0.020757, .green = 0.525519, .blue = 0.646642 },
+	{ .red = 0.017827, .green = 0.465934, .blue = 0.686935 },
+	{ .red = 0.008303, .green = 0.431502, .blue = 0.752381 },
+	{ .red = 0.006105, .green = 0.402442, .blue = 0.824176 },
+	{ .red = 0.010745, .green = 0.383150, .blue = 0.922100 },
+	{ .red = 0.081074, .green = 0.369475, .blue = 0.997802 },
+	{ .red = 0.125031, .green = 0.357509, .blue = 0.998779 },
+	{ .red = 0.151160, .green = 0.356288, .blue = 0.998535 },
+	{ .red = 0.187546, .green = 0.379731, .blue = 0.998779 },
+	{ .red = 0.211477, .green = 0.399023, .blue = 0.998535 },
+	{ .red = 0.222466, .green = 0.408547, .blue = 0.999023 },
+	{ .red = 0.226618, .green = 0.412210, .blue = 0.999023 },
+	{ .red = 0.139927, .green = 0.680342, .blue = 0.010256 },
+	{ .red = 0.012210, .green = 0.692552, .blue = 0.131136 },
+	{ .red = 0.016361, .green = 0.699878, .blue = 0.307692 },
+	{ .red = 0.017094, .green = 0.709646, .blue = 0.458608 },
+	{ .red = 0.021978, .green = 0.719902, .blue = 0.597558 },
+	{ .red = 0.031258, .green = 0.728205, .blue = 0.728694 },
+	{ .red = 0.021978, .green = 0.636386, .blue = 0.750672 },
+	{ .red = 0.024908, .green = 0.567277, .blue = 0.774603 },
+	{ .red = 0.021734, .green = 0.525031, .blue = 0.821734 },
+	{ .red = 0.009768, .green = 0.491087, .blue = 0.874969 },
+	{ .red = 0.007326, .green = 0.462271, .blue = 0.932601 },
+	{ .red = 0.041514, .green = 0.436386, .blue = 0.987302 },
+	{ .red = 0.100611, .green = 0.415629, .blue = 0.998779 },
+	{ .red = 0.129182, .green = 0.401221, .blue = 0.998779 },
+	{ .red = 0.147497, .green = 0.392918, .blue = 0.998046 },
+	{ .red = 0.156777, .green = 0.386081, .blue = 0.998535 },
+	{ .red = 0.165812, .green = 0.384127, .blue = 0.998535 },
+	{ .red = 0.137973, .green = 0.779243, .blue = 0.008303 },
+	{ .red = 0.008547, .green = 0.791697, .blue = 0.125275 },
+	{ .red = 0.014408, .green = 0.793895, .blue = 0.295726 },
+	{ .red = 0.019292, .green = 0.798535, .blue = 0.441270 },
+	{ .red = 0.012454, .green = 0.804884, .blue = 0.574115 },
+	{ .red = 0.021001, .green = 0.811477, .blue = 0.698657 },
+	{ .red = 0.035409, .green = 0.817338, .blue = 0.817582 },
+	{ .red = 0.032723, .green = 0.726007, .blue = 0.832967 },
+	{ .red = 0.023687, .green = 0.655678, .blue = 0.851282 },
+	{ .red = 0.020269, .green = 0.603419, .blue = 0.878388 },
+	{ .red = 0.019292, .green = 0.562882, .blue = 0.912821 },
+	{ .red = 0.016606, .green = 0.527961, .blue = 0.947497 },
+	{ .red = 0.031746, .green = 0.494750, .blue = 0.975580 },
+	{ .red = 0.079609, .green = 0.471306, .blue = 0.999267 },
+	{ .red = 0.112088, .green = 0.448840, .blue = 0.999267 },
+	{ .red = 0.128938, .green = 0.430525, .blue = 0.998046 },
+	{ .red = 0.142369, .green = 0.418803, .blue = 0.998535 },
+	{ .red = 0.132845, .green = 0.851038, .blue = 0.011966 },
+	{ .red = 0.033455, .green = 0.862027, .blue = 0.118437 },
+	{ .red = 0.018803, .green = 0.862027, .blue = 0.278877 },
+	{ .red = 0.020513, .green = 0.863492, .blue = 0.416850 },
+	{ .red = 0.024664, .green = 0.866178, .blue = 0.542857 },
+	{ .red = 0.022711, .green = 0.870085, .blue = 0.660073 },
+	{ .red = 0.029792, .green = 0.874237, .blue = 0.771184 },
+	{ .red = 0.025885, .green = 0.878144, .blue = 0.878388 },
+	{ .red = 0.025641, .green = 0.790720, .blue = 0.889377 },
+	{ .red = 0.010745, .green = 0.721368, .blue = 0.902808 },
+	{ .red = 0.030281, .green = 0.664469, .blue = 0.917460 },
+	{ .red = 0.026129, .green = 0.620757, .blue = 0.940904 },
+	{ .red = 0.014164, .green = 0.583639, .blue = 0.966056 },
+	{ .red = 0.042002, .green = 0.545788, .blue = 0.978755 },
+	{ .red = 0.082540, .green = 0.520391, .blue = 0.997314 },
+	{ .red = 0.116484, .green = 0.496459, .blue = 0.998291 },
+	{ .red = 0.131868, .green = 0.475702, .blue = 0.999512 },
+	{ .red = 0.122344, .green = 0.900855, .blue = 0.016361 },
+	{ .red = 0.055922, .green = 0.908913, .blue = 0.114774 },
+	{ .red = 0.000000, .green = 0.909402, .blue = 0.260073 },
+	{ .red = 0.027839, .green = 0.908913, .blue = 0.389988 },
+	{ .red = 0.027106, .green = 0.909890, .blue = 0.508913 },
+	{ .red = 0.030037, .green = 0.911600, .blue = 0.619536 },
+	{ .red = 0.033455, .green = 0.913797, .blue = 0.723565 },
+	{ .red = 0.029304, .green = 0.916728, .blue = 0.823199 },
+	{ .red = 0.029792, .green = 0.919658, .blue = 0.919658 },
+	{ .red = 0.028816, .green = 0.836874, .blue = 0.927473 },
+	{ .red = 0.033700, .green = 0.769475, .blue = 0.936508 },
+	{ .red = 0.021490, .green = 0.714286, .blue = 0.948718 },
+	{ .red = 0.030525, .green = 0.667643, .blue = 0.962637 },
+	{ .red = 0.028083, .green = 0.628327, .blue = 0.979243 },
+	{ .red = 0.053480, .green = 0.588767, .blue = 0.984615 },
+	{ .red = 0.103297, .green = 0.564835, .blue = 0.998535 },
+	{ .red = 0.130647, .green = 0.539683, .blue = 0.999267 },
+	{ .red = 0.113309, .green = 0.935043, .blue = 0.025397 },
+	{ .red = 0.069109, .green = 0.940415, .blue = 0.111355 },
+	{ .red = 0.031746, .green = 0.941392, .blue = 0.242247 },
+	{ .red = 0.027350, .green = 0.940659, .blue = 0.363126 },
+	{ .red = 0.031502, .green = 0.940415, .blue = 0.474969 },
+	{ .red = 0.025397, .green = 0.941148, .blue = 0.579487 },
+	{ .red = 0.035165, .green = 0.942125, .blue = 0.677656 },
+	{ .red = 0.037851, .green = 0.943834, .blue = 0.770940 },
+	{ .red = 0.029548, .green = 0.945788, .blue = 0.860562 },
+	{ .red = 0.049817, .green = 0.947009, .blue = 0.947253 },
+	{ .red = 0.029792, .green = 0.869841, .blue = 0.953358 },
+	{ .red = 0.043956, .green = 0.805128, .blue = 0.959219 },
+	{ .red = 0.045665, .green = 0.750916, .blue = 0.967033 },
+	{ .red = 0.051282, .green = 0.703785, .blue = 0.975336 },
+	{ .red = 0.058120, .green = 0.662271, .blue = 0.983639 },
+	{ .red = 0.091087, .green = 0.631013, .blue = 0.995849 },
+	{ .red = 0.130891, .green = 0.603175, .blue = 0.998779 },
+	{ .red = 0.106227, .green = 0.956777, .blue = 0.047619 },
+	{ .red = 0.086447, .green = 0.958974, .blue = 0.115507 },
+	{ .red = 0.051526, .green = 0.961172, .blue = 0.227839 },
+	{ .red = 0.058120, .green = 0.960195, .blue = 0.339438 },
+	{ .red = 0.050061, .green = 0.960440, .blue = 0.443712 },
+	{ .red = 0.052259, .green = 0.960684, .blue = 0.541880 },
+	{ .red = 0.034432, .green = 0.961905, .blue = 0.634432 },
+	{ .red = 0.022466, .green = 0.963126, .blue = 0.722344 },
+	{ .red = 0.063492, .green = 0.962882, .blue = 0.805861 },
+	{ .red = 0.033455, .green = 0.965324, .blue = 0.887668 },
+	{ .red = 0.069597, .green = 0.965324, .blue = 0.965568 },
+	{ .red = 0.062515, .green = 0.892552, .blue = 0.968987 },
+	{ .red = 0.045910, .green = 0.832723, .blue = 0.975092 },
+	{ .red = 0.054212, .green = 0.779731, .blue = 0.980220 },
+	{ .red = 0.032967, .green = 0.736264, .blue = 0.990476 },
+	{ .red = 0.083516, .green = 0.694505, .blue = 0.991941 },
+	{ .red = 0.130159, .green = 0.664957, .blue = 0.998779 },
+	{ .red = 0.112332, .green = 0.969475, .blue = 0.067888 },
+	{ .red = 0.097924, .green = 0.970940, .blue = 0.117949 },
+	{ .red = 0.027350, .green = 0.976313, .blue = 0.212454 },
+	{ .red = 0.069109, .green = 0.973382, .blue = 0.317460 },
+	{ .red = 0.060806, .green = 0.973871, .blue = 0.414652 },
+	{ .red = 0.063980, .green = 0.973871, .blue = 0.506960 },
+	{ .red = 0.021978, .green = 0.976068, .blue = 0.594383 },
+	{ .red = 0.025397, .green = 0.976313, .blue = 0.677411 },
+	{ .red = 0.044200, .green = 0.976557, .blue = 0.756777 },
+	{ .red = 0.027595, .green = 0.977778, .blue = 0.833455 },
+	{ .red = 0.090354, .green = 0.976068, .blue = 0.905495 },
+	{ .red = 0.079853, .green = 0.977534, .blue = 0.977534 },
+	{ .red = 0.097924, .green = 0.907448, .blue = 0.977289 },
+	{ .red = 0.069109, .green = 0.852015, .blue = 0.983394 },
+	{ .red = 0.080342, .green = 0.800244, .blue = 0.985104 },
+	{ .red = 0.081807, .green = 0.756288, .blue = 0.989255 },
+	{ .red = 0.130891, .green = 0.724786, .blue = 0.998535 },
+	{ .red = 0.122100, .green = 0.976557, .blue = 0.080342 },
+	{ .red = 0.107448, .green = 0.978755, .blue = 0.117949 },
+	{ .red = 0.084493, .green = 0.981197, .blue = 0.203663 },
+	{ .red = 0.025153, .green = 0.985592, .blue = 0.294994 },
+	{ .red = 0.084005, .green = 0.981441, .blue = 0.388523 },
+	{ .red = 0.080342, .green = 0.982173, .blue = 0.475214 },
+	{ .red = 0.062027, .green = 0.983883, .blue = 0.557509 },
+	{ .red = 0.073016, .green = 0.983394, .blue = 0.636142 },
+	{ .red = 0.036630, .green = 0.985592, .blue = 0.711844 },
+	{ .red = 0.100122, .green = 0.982418, .blue = 0.782418 },
+	{ .red = 0.116728, .green = 0.981685, .blue = 0.850794 },
+	{ .red = 0.123565, .green = 0.981929, .blue = 0.917460 },
+	{ .red = 0.086203, .green = 0.985592, .blue = 0.985592 },
+	{ .red = 0.094017, .green = 0.920879, .blue = 0.985836 },
+	{ .red = 0.085714, .green = 0.866667, .blue = 0.988523 },
+	{ .red = 0.096459, .green = 0.816850, .blue = 0.988278 },
+	{ .red = 0.133578, .green = 0.781929, .blue = 0.997314 },
+	{ .red = 0.128205, .green = 0.981685, .blue = 0.085714 },
+	{ .red = 0.118926, .green = 0.982906, .blue = 0.117949 },
+	{ .red = 0.111355, .green = 0.983394, .blue = 0.195604 },
+	{ .red = 0.106960, .green = 0.984371, .blue = 0.280830 },
+	{ .red = 0.099389, .green = 0.986081, .blue = 0.364835 },
+	{ .red = 0.099145, .green = 0.986325, .blue = 0.446398 },
+	{ .red = 0.088889, .green = 0.988034, .blue = 0.524298 },
+	{ .red = 0.070574, .green = 0.989744, .blue = 0.598779 },
+	{ .red = 0.094505, .green = 0.988278, .blue = 0.670085 },
+	{ .red = 0.050549, .green = 0.991453, .blue = 0.739194 },
+	{ .red = 0.097192, .green = 0.989011, .blue = 0.804151 },
+	{ .red = 0.118193, .green = 0.987546, .blue = 0.866667 },
+	{ .red = 0.133578, .green = 0.986569, .blue = 0.927228 },
+	{ .red = 0.090110, .green = 0.990720, .blue = 0.990965 },
+	{ .red = 0.081319, .green = 0.931868, .blue = 0.992430 },
+	{ .red = 0.114042, .green = 0.875946, .blue = 0.988523 },
+	{ .red = 0.131380, .green = 0.839072, .blue = 0.999023 },
+	{ .red = 0.132601, .green = 0.984860, .blue = 0.087668 },
+	{ .red = 0.127961, .green = 0.985592, .blue = 0.116484 },
+	{ .red = 0.118193, .green = 0.986325, .blue = 0.185104 },
+	{ .red = 0.097192, .green = 0.990476, .blue = 0.262271 },
+	{ .red = 0.114042, .green = 0.988034, .blue = 0.343590 },
+	{ .red = 0.110623, .green = 0.989011, .blue = 0.420269 },
+	{ .red = 0.103785, .green = 0.990476, .blue = 0.494017 },
+	{ .red = 0.114042, .green = 0.989499, .blue = 0.564835 },
+	{ .red = 0.118193, .green = 0.989499, .blue = 0.632479 },
+	{ .red = 0.120391, .green = 0.989744, .blue = 0.697436 },
+	{ .red = 0.108913, .green = 0.991453, .blue = 0.760195 },
+	{ .red = 0.129670, .green = 0.989744, .blue = 0.819780 },
+	{ .red = 0.096215, .green = 0.993407, .blue = 0.880342 },
+	{ .red = 0.137241, .green = 0.989988, .blue = 0.934554 },
+	{ .red = 0.092552, .green = 0.994139, .blue = 0.994139 },
+	{ .red = 0.059585, .green = 0.940659, .blue = 0.997558 },
+	{ .red = 0.133578, .green = 0.893529, .blue = 0.999023 },
+	{ .red = 0.136020, .green = 0.987057, .blue = 0.087179 },
+	{ .red = 0.133333, .green = 0.987546, .blue = 0.113065 },
+	{ .red = 0.108425, .green = 0.991697, .blue = 0.171673 },
+	{ .red = 0.130647, .green = 0.987790, .blue = 0.251038 },
+	{ .red = 0.115751, .green = 0.990965, .blue = 0.323321 },
+	{ .red = 0.113797, .green = 0.991453, .blue = 0.396093 },
+	{ .red = 0.123321, .green = 0.990476, .blue = 0.466667 },
+	{ .red = 0.107692, .green = 0.993162, .blue = 0.533822 },
+	{ .red = 0.103053, .green = 0.994139, .blue = 0.598535 },
+	{ .red = 0.110134, .green = 0.993407, .blue = 0.660806 },
+	{ .red = 0.125519, .green = 0.991941, .blue = 0.720391 },
+	{ .red = 0.136508, .green = 0.990965, .blue = 0.777534 },
+	{ .red = 0.088156, .green = 0.996337, .blue = 0.835897 },
+	{ .red = 0.062271, .green = 0.998046, .blue = 0.891819 },
+	{ .red = 0.136996, .green = 0.992430, .blue = 0.940659 },
+	{ .red = 0.094017, .green = 0.996337, .blue = 0.996337 },
+	{ .red = 0.147253, .green = 0.945299, .blue = 0.997314 },
+	{ .red = 0.138706, .green = 0.988767, .blue = 0.085226 },
+	{ .red = 0.136508, .green = 0.989011, .blue = 0.108181 },
+	{ .red = 0.103297, .green = 0.999023, .blue = 0.159951 },
+	{ .red = 0.141392, .green = 0.992186, .blue = 0.239805 },
+	{ .red = 0.108181, .green = 0.998535, .blue = 0.305250 },
+	{ .red = 0.142369, .green = 0.992918, .blue = 0.378022 },
+	{ .red = 0.134066, .green = 0.994872, .blue = 0.443956 },
+	{ .red = 0.141148, .green = 0.994139, .blue = 0.508669 },
+	{ .red = 0.142613, .green = 0.993895, .blue = 0.570208 },
+	{ .red = 0.145543, .green = 0.994139, .blue = 0.629548 },
+	{ .red = 0.118681, .green = 0.998535, .blue = 0.687424 },
+	{ .red = 0.127473, .green = 0.997558, .blue = 0.742857 },
+	{ .red = 0.119170, .green = 0.999023, .blue = 0.797070 },
+	{ .red = 0.152381, .green = 0.995360, .blue = 0.847375 },
+	{ .red = 0.153846, .green = 0.996093, .blue = 0.898413 },
+	{ .red = 0.139683, .green = 0.998779, .blue = 0.949939 },
+	{ .red = 0.148962, .green = 0.998779, .blue = 0.998535 },
+	{ .red = 0.338706, .green = 0.015140, .blue = 0.012454 },
+	{ .red = 0.344078, .green = 0.008059, .blue = 0.169719 },
+	{ .red = 0.327961, .green = 0.007570, .blue = 0.328205 },
+	{ .red = 0.316972, .green = 0.011722, .blue = 0.442002 },
+	{ .red = 0.309646, .green = 0.013919, .blue = 0.561172 },
+	{ .red = 0.285470, .green = 0.015385, .blue = 0.642979 },
+	{ .red = 0.258852, .green = 0.016117, .blue = 0.700611 },
+	{ .red = 0.236630, .green = 0.019292, .blue = 0.749451 },
+	{ .red = 0.219780, .green = 0.013431, .blue = 0.796093 },
+	{ .red = 0.205372, .green = 0.019780, .blue = 0.835409 },
+	{ .red = 0.193407, .green = 0.018803, .blue = 0.872283 },
+	{ .red = 0.184860, .green = 0.016850, .blue = 0.913309 },
+	{ .red = 0.178266, .green = 0.020269, .blue = 0.953358 },
+	{ .red = 0.171429, .green = 0.036386, .blue = 0.984127 },
+	{ .red = 0.162393, .green = 0.059585, .blue = 0.994872 },
+	{ .red = 0.152869, .green = 0.076923, .blue = 0.998779 },
+	{ .red = 0.143590, .green = 0.090842, .blue = 0.999512 },
+	{ .red = 0.328205, .green = 0.158974, .blue = 0.007082 },
+	{ .red = 0.326007, .green = 0.137973, .blue = 0.143834 },
+	{ .red = 0.314286, .green = 0.133822, .blue = 0.313553 },
+	{ .red = 0.313309, .green = 0.123077, .blue = 0.451526 },
+	{ .red = 0.312576, .green = 0.102320, .blue = 0.593651 },
+	{ .red = 0.311600, .green = 0.044200, .blue = 0.741148 },
+	{ .red = 0.281319, .green = 0.015873, .blue = 0.794628 },
+	{ .red = 0.253236, .green = 0.020024, .blue = 0.824908 },
+	{ .red = 0.232234, .green = 0.021978, .blue = 0.857631 },
+	{ .red = 0.215629, .green = 0.017338, .blue = 0.889621 },
+	{ .red = 0.202198, .green = 0.019292, .blue = 0.919902 },
+	{ .red = 0.192186, .green = 0.021978, .blue = 0.954335 },
+	{ .red = 0.184615, .green = 0.026129, .blue = 0.989255 },
+	{ .red = 0.173871, .green = 0.056410, .blue = 0.998535 },
+	{ .red = 0.163126, .green = 0.075702, .blue = 0.998535 },
+	{ .red = 0.153114, .green = 0.088889, .blue = 0.998779 },
+	{ .red = 0.148230, .green = 0.134799, .blue = 0.999023 },
+	{ .red = 0.334554, .green = 0.334310, .blue = 0.008791 },
+	{ .red = 0.299389, .green = 0.296947, .blue = 0.134310 },
+	{ .red = 0.295238, .green = 0.294750, .blue = 0.294994 },
+	{ .red = 0.299389, .green = 0.286935, .blue = 0.445665 },
+	{ .red = 0.301587, .green = 0.276190, .blue = 0.595604 },
+	{ .red = 0.302808, .green = 0.260562, .blue = 0.746520 },
+	{ .red = 0.304518, .green = 0.237118, .blue = 0.899389 },
+	{ .red = 0.293040, .green = 0.202442, .blue = 0.998291 },
+	{ .red = 0.261538, .green = 0.170452, .blue = 0.999023 },
+	{ .red = 0.236386, .green = 0.146764, .blue = 0.998535 },
+	{ .red = 0.216361, .green = 0.133333, .blue = 0.999023 },
+	{ .red = 0.200733, .green = 0.131868, .blue = 0.999023 },
+	{ .red = 0.188767, .green = 0.142125, .blue = 0.999023 },
+	{ .red = 0.180220, .green = 0.159707, .blue = 0.999023 },
+	{ .red = 0.174115, .green = 0.180220, .blue = 0.998779 },
+	{ .red = 0.170208, .green = 0.202686, .blue = 0.998779 },
+	{ .red = 0.168254, .green = 0.226374, .blue = 0.999756 },
+	{ .red = 0.310379, .green = 0.465934, .blue = 0.008547 },
+	{ .red = 0.268376, .green = 0.445665, .blue = 0.097924 },
+	{ .red = 0.249817, .green = 0.447375, .blue = 0.280098 },
+	{ .red = 0.224176, .green = 0.446398, .blue = 0.447863 },
+	{ .red = 0.252503, .green = 0.432479, .blue = 0.609280 },
+	{ .red = 0.281807, .green = 0.416117, .blue = 0.761172 },
+	{ .red = 0.288156, .green = 0.401465, .blue = 0.912332 },
+	{ .red = 0.285958, .green = 0.376557, .blue = 1.000000 },
+	{ .red = 0.270574, .green = 0.348474, .blue = 0.999267 },
+	{ .red = 0.255433, .green = 0.327228, .blue = 0.999023 },
+	{ .red = 0.242247, .green = 0.313065, .blue = 0.999023 },
+	{ .red = 0.231746, .green = 0.305495, .blue = 0.998535 },
+	{ .red = 0.224176, .green = 0.303785, .blue = 0.998291 },
+	{ .red = 0.218315, .green = 0.305739, .blue = 0.998291 },
+	{ .red = 0.214652, .green = 0.311111, .blue = 0.998046 },
+	{ .red = 0.212454, .green = 0.319414, .blue = 0.998291 },
+	{ .red = 0.213675, .green = 0.332601, .blue = 0.998779 },
+	{ .red = 0.291087, .green = 0.581929, .blue = 0.010256 },
+	{ .red = 0.224908, .green = 0.591697, .blue = 0.009035 },
+	{ .red = 0.164835, .green = 0.597314, .blue = 0.259585 },
+	{ .red = 0.022466, .green = 0.600244, .blue = 0.432479 },
+	{ .red = 0.017827, .green = 0.599267, .blue = 0.602442 },
+	{ .red = 0.053480, .green = 0.583394, .blue = 0.768498 },
+	{ .red = 0.168010, .green = 0.566056, .blue = 0.926496 },
+	{ .red = 0.230525, .green = 0.522344, .blue = 0.998291 },
+	{ .red = 0.266911, .green = 0.482540, .blue = 0.999756 },
+	{ .red = 0.307937, .green = 0.484005, .blue = 0.999267 },
+	{ .red = 0.303785, .green = 0.465934, .blue = 0.999023 },
+	{ .red = 0.298901, .green = 0.453236, .blue = 0.999023 },
+	{ .red = 0.294017, .green = 0.444444, .blue = 0.998779 },
+	{ .red = 0.290354, .green = 0.439316, .blue = 0.998535 },
+	{ .red = 0.287912, .green = 0.438339, .blue = 0.998779 },
+	{ .red = 0.287179, .green = 0.440537, .blue = 0.999023 },
+	{ .red = 0.288400, .green = 0.444933, .blue = 0.999023 },
+	{ .red = 0.277656, .green = 0.689621, .blue = 0.013675 },
+	{ .red = 0.206593, .green = 0.713797, .blue = 0.012454 },
+	{ .red = 0.010989, .green = 0.734066, .blue = 0.248107 },
+	{ .red = 0.028083, .green = 0.730159, .blue = 0.431502 },
+	{ .red = 0.025397, .green = 0.732601, .blue = 0.589744 },
+	{ .red = 0.025397, .green = 0.734799, .blue = 0.736996 },
+	{ .red = 0.027839, .green = 0.671795, .blue = 0.817338 },
+	{ .red = 0.018315, .green = 0.640049, .blue = 0.930403 },
+	{ .red = 0.158974, .green = 0.600000, .blue = 0.999267 },
+	{ .red = 0.224908, .green = 0.552137, .blue = 0.998535 },
+	{ .red = 0.257143, .green = 0.522344, .blue = 0.999267 },
+	{ .red = 0.283028, .green = 0.508913, .blue = 0.998535 },
+	{ .red = 0.306716, .green = 0.509158, .blue = 0.999512 },
+	{ .red = 0.346032, .green = 0.531868, .blue = 0.998779 },
+	{ .red = 0.382906, .green = 0.557998, .blue = 0.998779 },
+	{ .red = 0.391941, .green = 0.562393, .blue = 0.998535 },
+	{ .red = 0.389988, .green = 0.559707, .blue = 0.998535 },
+	{ .red = 0.265446, .green = 0.785592, .blue = 0.011966 },
+	{ .red = 0.191941, .green = 0.814164, .blue = 0.013675 },
+	{ .red = 0.025885, .green = 0.833700, .blue = 0.246642 },
+	{ .red = 0.031502, .green = 0.827595, .blue = 0.419536 },
+	{ .red = 0.018071, .green = 0.826862, .blue = 0.566789 },
+	{ .red = 0.033700, .green = 0.828571, .blue = 0.702564 },
+	{ .red = 0.031013, .green = 0.830037, .blue = 0.831746 },
+	{ .red = 0.024664, .green = 0.752381, .blue = 0.878144 },
+	{ .red = 0.025153, .green = 0.697192, .blue = 0.934554 },
+	{ .red = 0.092308, .green = 0.655433, .blue = 0.995604 },
+	{ .red = 0.193651, .green = 0.608791, .blue = 0.998779 },
+	{ .red = 0.233211, .green = 0.574115, .blue = 0.999512 },
+	{ .red = 0.256166, .green = 0.548474, .blue = 0.998046 },
+	{ .red = 0.270574, .green = 0.530891, .blue = 0.999023 },
+	{ .red = 0.284737, .green = 0.521612, .blue = 0.998779 },
+	{ .red = 0.298168, .green = 0.518193, .blue = 0.998291 },
+	{ .red = 0.308425, .green = 0.517216, .blue = 0.998046 },
+	{ .red = 0.249084, .green = 0.855189, .blue = 0.008059 },
+	{ .red = 0.175824, .green = 0.882295, .blue = 0.014164 },
+	{ .red = 0.010989, .green = 0.899145, .blue = 0.235409 },
+	{ .red = 0.013431, .green = 0.892796, .blue = 0.396825 },
+	{ .red = 0.021978, .green = 0.889621, .blue = 0.534554 },
+	{ .red = 0.016117, .green = 0.889377, .blue = 0.660317 },
+	{ .red = 0.037851, .green = 0.890110, .blue = 0.778755 },
+	{ .red = 0.028327, .green = 0.891087, .blue = 0.892308 },
+	{ .red = 0.031746, .green = 0.810745, .blue = 0.921123 },
+	{ .red = 0.023199, .green = 0.749206, .blue = 0.955311 },
+	{ .red = 0.067888, .green = 0.696703, .blue = 0.987546 },
+	{ .red = 0.177045, .green = 0.654945, .blue = 0.998779 },
+	{ .red = 0.222222, .green = 0.618315, .blue = 0.998291 },
+	{ .red = 0.245665, .green = 0.589988, .blue = 0.999267 },
+	{ .red = 0.260806, .green = 0.567521, .blue = 0.999023 },
+	{ .red = 0.269353, .green = 0.548962, .blue = 0.997802 },
+	{ .red = 0.275214, .green = 0.535287, .blue = 0.998779 },
+	{ .red = 0.230525, .green = 0.903297, .blue = 0.020024 },
+	{ .red = 0.157509, .green = 0.927717, .blue = 0.016361 },
+	{ .red = 0.000000, .green = 0.941148, .blue = 0.221490 },
+	{ .red = 0.026618, .green = 0.935287, .blue = 0.371429 },
+	{ .red = 0.018803, .green = 0.931868, .blue = 0.499878 },
+	{ .red = 0.031990, .green = 0.929915, .blue = 0.617094 },
+	{ .red = 0.019536, .green = 0.929915, .blue = 0.726740 },
+	{ .red = 0.015873, .green = 0.930647, .blue = 0.831502 },
+	{ .red = 0.030281, .green = 0.930891, .blue = 0.932112 },
+	{ .red = 0.041514, .green = 0.852015, .blue = 0.950672 },
+	{ .red = 0.054212, .green = 0.788278, .blue = 0.970696 },
+	{ .red = 0.048596, .green = 0.739438, .blue = 0.999023 },
+	{ .red = 0.178755, .green = 0.693773, .blue = 0.999512 },
+	{ .red = 0.222222, .green = 0.656654, .blue = 0.998535 },
+	{ .red = 0.245421, .green = 0.626862, .blue = 0.998779 },
+	{ .red = 0.258852, .green = 0.602198, .blue = 0.998779 },
+	{ .red = 0.266667, .green = 0.581197, .blue = 0.998779 },
+	{ .red = 0.211233, .green = 0.936996, .blue = 0.016361 },
+	{ .red = 0.140171, .green = 0.957998, .blue = 0.013431 },
+	{ .red = 0.027106, .green = 0.968010, .blue = 0.207326 },
+	{ .red = 0.039072, .green = 0.963126, .blue = 0.346032 },
+	{ .red = 0.050794, .green = 0.959219, .blue = 0.466178 },
+	{ .red = 0.044444, .green = 0.957509, .blue = 0.575580 },
+	{ .red = 0.025641, .green = 0.957021, .blue = 0.677900 },
+	{ .red = 0.032234, .green = 0.956777, .blue = 0.774847 },
+	{ .red = 0.029792, .green = 0.957265, .blue = 0.868132 },
+	{ .red = 0.062515, .green = 0.956288, .blue = 0.957265 },
+	{ .red = 0.032479, .green = 0.882295, .blue = 0.971429 },
+	{ .red = 0.084005, .green = 0.816850, .blue = 0.979731 },
+	{ .red = 0.113309, .green = 0.769719, .blue = 0.999023 },
+	{ .red = 0.195360, .green = 0.725763, .blue = 0.998535 },
+	{ .red = 0.230525, .green = 0.689621, .blue = 0.999023 },
+	{ .red = 0.250061, .green = 0.658852, .blue = 0.998535 },
+	{ .red = 0.261783, .green = 0.633211, .blue = 0.999023 },
+	{ .red = 0.188034, .green = 0.960195, .blue = 0.012210 },
+	{ .red = 0.125031, .green = 0.976068, .blue = 0.039560 },
+	{ .red = 0.087668, .green = 0.979243, .blue = 0.201465 },
+	{ .red = 0.053480, .green = 0.979731, .blue = 0.323565 },
+	{ .red = 0.062271, .green = 0.976557, .blue = 0.434921 },
+	{ .red = 0.040537, .green = 0.976068, .blue = 0.537241 },
+	{ .red = 0.055189, .green = 0.974359, .blue = 0.632967 },
+	{ .red = 0.060806, .green = 0.973382, .blue = 0.723565 },
+	{ .red = 0.084493, .green = 0.972161, .blue = 0.809524 },
+	{ .red = 0.030769, .green = 0.974847, .blue = 0.894505 },
+	{ .red = 0.078144, .green = 0.972894, .blue = 0.973871 },
+	{ .red = 0.096703, .green = 0.899878, .blue = 0.979487 },
+	{ .red = 0.090110, .green = 0.840537, .blue = 0.988767 },
+	{ .red = 0.164103, .green = 0.794628, .blue = 0.998535 },
+	{ .red = 0.215629, .green = 0.753114, .blue = 0.999267 },
+	{ .red = 0.242491, .green = 0.717460, .blue = 0.999267 },
+	{ .red = 0.258120, .green = 0.686691, .blue = 0.998779 },
+	{ .red = 0.174115, .green = 0.973871, .blue = 0.039560 },
+	{ .red = 0.133333, .green = 0.983639, .blue = 0.070818 },
+	{ .red = 0.115751, .green = 0.984860, .blue = 0.196093 },
+	{ .red = 0.062759, .green = 0.990232, .blue = 0.302564 },
+	{ .red = 0.090598, .green = 0.985836, .blue = 0.406838 },
+	{ .red = 0.083272, .green = 0.985348, .blue = 0.502320 },
+	{ .red = 0.088645, .green = 0.983883, .blue = 0.591941 },
+	{ .red = 0.088400, .green = 0.983639, .blue = 0.676923 },
+	{ .red = 0.071306, .green = 0.984615, .blue = 0.758486 },
+	{ .red = 0.030769, .green = 0.986325, .blue = 0.837363 },
+	{ .red = 0.114286, .green = 0.981929, .blue = 0.909646 },
+	{ .red = 0.086691, .green = 0.983883, .blue = 0.984615 },
+	{ .red = 0.117949, .green = 0.913309, .blue = 0.985592 },
+	{ .red = 0.122100, .green = 0.863492, .blue = 0.999267 },
+	{ .red = 0.203663, .green = 0.815140, .blue = 0.998046 },
+	{ .red = 0.237363, .green = 0.774847, .blue = 0.998046 },
+	{ .red = 0.255433, .green = 0.740659, .blue = 0.998535 },
+	{ .red = 0.165568, .green = 0.981929, .blue = 0.052991 },
+	{ .red = 0.138950, .green = 0.988523, .blue = 0.083272 },
+	{ .red = 0.135043, .green = 0.989988, .blue = 0.190965 },
+	{ .red = 0.119170, .green = 0.989988, .blue = 0.287912 },
+	{ .red = 0.119414, .green = 0.989011, .blue = 0.382173 },
+	{ .red = 0.108181, .green = 0.990232, .blue = 0.470574 },
+	{ .red = 0.101343, .green = 0.990476, .blue = 0.554823 },
+	{ .red = 0.106227, .green = 0.989499, .blue = 0.634921 },
+	{ .red = 0.078144, .green = 0.991941, .blue = 0.711844 },
+	{ .red = 0.120635, .green = 0.988034, .blue = 0.783883 },
+	{ .red = 0.133333, .green = 0.986813, .blue = 0.853480 },
+	{ .red = 0.137241, .green = 0.987057, .blue = 0.921368 },
+	{ .red = 0.091575, .green = 0.990965, .blue = 0.991453 },
+	{ .red = 0.107204, .green = 0.926252, .blue = 0.993162 },
+	{ .red = 0.191941, .green = 0.876923, .blue = 0.998046 },
+	{ .red = 0.231502, .green = 0.832967, .blue = 0.999267 },
+	{ .red = 0.252747, .green = 0.794628, .blue = 0.999756 },
+	{ .red = 0.160928, .green = 0.986813, .blue = 0.061050 },
+	{ .red = 0.142369, .green = 0.991697, .blue = 0.088645 },
+	{ .red = 0.158486, .green = 0.995604, .blue = 0.189499 },
+	{ .red = 0.140171, .green = 0.998046, .blue = 0.275214 },
+	{ .red = 0.144811, .green = 0.995360, .blue = 0.362882 },
+	{ .red = 0.136752, .green = 0.994872, .blue = 0.444933 },
+	{ .red = 0.123321, .green = 0.995360, .blue = 0.523077 },
+	{ .red = 0.114286, .green = 0.995116, .blue = 0.597802 },
+	{ .red = 0.109402, .green = 0.994139, .blue = 0.669597 },
+	{ .red = 0.086691, .green = 0.996337, .blue = 0.739438 },
+	{ .red = 0.112576, .green = 0.993895, .blue = 0.805617 },
+	{ .red = 0.129670, .green = 0.992186, .blue = 0.869109 },
+	{ .red = 0.143101, .green = 0.990965, .blue = 0.930647 },
+	{ .red = 0.094261, .green = 0.995360, .blue = 0.995849 },
+	{ .red = 0.182906, .green = 0.938217, .blue = 0.998535 },
+	{ .red = 0.230281, .green = 0.889133, .blue = 0.998779 },
+	{ .red = 0.254457, .green = 0.846398, .blue = 0.998291 },
+	{ .red = 0.158730, .green = 0.989744, .blue = 0.065690 },
+	{ .red = 0.154335, .green = 0.995360, .blue = 0.098168 },
+	{ .red = 0.172894, .green = 0.999023, .blue = 0.186325 },
+	{ .red = 0.170940, .green = 0.999267, .blue = 0.266911 },
+	{ .red = 0.167033, .green = 0.999267, .blue = 0.346276 },
+	{ .red = 0.162882, .green = 0.999023, .blue = 0.423199 },
+	{ .red = 0.157509, .green = 0.999756, .blue = 0.497192 },
+	{ .red = 0.167521, .green = 0.996825, .blue = 0.568498 },
+	{ .red = 0.163614, .green = 0.997070, .blue = 0.636142 },
+	{ .red = 0.163370, .green = 0.997070, .blue = 0.701343 },
+	{ .red = 0.152381, .green = 0.998779, .blue = 0.764835 },
+	{ .red = 0.155556, .green = 0.998291, .blue = 0.825641 },
+	{ .red = 0.155800, .green = 0.999023, .blue = 0.885226 },
+	{ .red = 0.165812, .green = 0.998535, .blue = 0.942613 },
+	{ .red = 0.176557, .green = 0.998779, .blue = 0.998779 },
+	{ .red = 0.231746, .green = 0.944811, .blue = 0.999023 },
+	{ .red = 0.255678, .green = 0.898413, .blue = 0.998779 },
+	{ .red = 0.157998, .green = 0.991209, .blue = 0.068376 },
+	{ .red = 0.165568, .green = 0.996337, .blue = 0.105250 },
+	{ .red = 0.184860, .green = 0.999267, .blue = 0.183150 },
+	{ .red = 0.190965, .green = 0.998535, .blue = 0.258608 },
+	{ .red = 0.193651, .green = 0.997558, .blue = 0.332601 },
+	{ .red = 0.185348, .green = 0.999756, .blue = 0.403663 },
+	{ .red = 0.188523, .green = 0.998779, .blue = 0.473748 },
+	{ .red = 0.185836, .green = 0.999512, .blue = 0.540904 },
+	{ .red = 0.186813, .green = 0.999267, .blue = 0.605372 },
+	{ .red = 0.188523, .green = 0.999023, .blue = 0.667399 },
+	{ .red = 0.190476, .green = 0.999023, .blue = 0.727228 },
+	{ .red = 0.196825, .green = 0.998535, .blue = 0.784860 },
+	{ .red = 0.200977, .green = 0.998779, .blue = 0.840781 },
+	{ .red = 0.207814, .green = 0.999267, .blue = 0.895238 },
+	{ .red = 0.225397, .green = 0.998535, .blue = 0.947497 },
+	{ .red = 0.243468, .green = 0.999267, .blue = 0.998779 },
+	{ .red = 0.258364, .green = 0.950183, .blue = 0.999756 },
+	{ .red = 0.158486, .green = 0.992186, .blue = 0.069597 },
+	{ .red = 0.170940, .green = 0.997070, .blue = 0.107204 },
+	{ .red = 0.191209, .green = 0.999267, .blue = 0.178022 },
+	{ .red = 0.199267, .green = 0.999023, .blue = 0.248596 },
+	{ .red = 0.199512, .green = 0.999267, .blue = 0.317216 },
+	{ .red = 0.200488, .green = 0.999023, .blue = 0.385348 },
+	{ .red = 0.198779, .green = 0.999756, .blue = 0.451282 },
+	{ .red = 0.203907, .green = 0.999023, .blue = 0.515507 },
+	{ .red = 0.205128, .green = 0.998779, .blue = 0.576801 },
+	{ .red = 0.209280, .green = 0.998291, .blue = 0.636142 },
+	{ .red = 0.209524, .green = 0.999023, .blue = 0.693040 },
+	{ .red = 0.214652, .green = 0.998535, .blue = 0.747985 },
+	{ .red = 0.215873, .green = 0.999512, .blue = 0.801465 },
+	{ .red = 0.226618, .green = 0.999023, .blue = 0.852991 },
+	{ .red = 0.237118, .green = 0.999267, .blue = 0.903053 },
+	{ .red = 0.257143, .green = 0.998535, .blue = 0.951160 },
+	{ .red = 0.276679, .green = 0.999267, .blue = 0.998535 },
+	{ .red = 0.492552, .green = 0.015629, .blue = 0.012454 },
+	{ .red = 0.495971, .green = 0.007814, .blue = 0.163858 },
+	{ .red = 0.486935, .green = 0.006838, .blue = 0.320879 },
+	{ .red = 0.470085, .green = 0.010501, .blue = 0.470085 },
+	{ .red = 0.461294, .green = 0.017338, .blue = 0.580220 },
+	{ .red = 0.425641, .green = 0.014896, .blue = 0.650061 },
+	{ .red = 0.398046, .green = 0.013919, .blue = 0.719170 },
+	{ .red = 0.374359, .green = 0.017338, .blue = 0.783639 },
+	{ .red = 0.352869, .green = 0.013675, .blue = 0.841026 },
+	{ .red = 0.332601, .green = 0.022466, .blue = 0.888889 },
+	{ .red = 0.315263, .green = 0.021245, .blue = 0.934554 },
+	{ .red = 0.300366, .green = 0.012698, .blue = 0.977045 },
+	{ .red = 0.283028, .green = 0.049328, .blue = 0.998535 },
+	{ .red = 0.262515, .green = 0.076190, .blue = 0.996825 },
+	{ .red = 0.245177, .green = 0.088156, .blue = 0.998046 },
+	{ .red = 0.229304, .green = 0.097436, .blue = 0.998535 },
+	{ .red = 0.214896, .green = 0.106716, .blue = 0.998535 },
+	{ .red = 0.484493, .green = 0.155800, .blue = 0.003663 },
+	{ .red = 0.495726, .green = 0.120147, .blue = 0.139438 },
+	{ .red = 0.491331, .green = 0.110379, .blue = 0.310379 },
+	{ .red = 0.476435, .green = 0.096459, .blue = 0.480342 },
+	{ .red = 0.474481, .green = 0.074237, .blue = 0.614652 },
+	{ .red = 0.473260, .green = 0.012210, .blue = 0.750427 },
+	{ .red = 0.441758, .green = 0.019048, .blue = 0.823932 },
+	{ .red = 0.410745, .green = 0.011966, .blue = 0.882051 },
+	{ .red = 0.380464, .green = 0.017582, .blue = 0.924542 },
+	{ .red = 0.353114, .green = 0.023199, .blue = 0.958730 },
+	{ .red = 0.332601, .green = 0.021734, .blue = 0.996825 },
+	{ .red = 0.303541, .green = 0.061050, .blue = 0.992674 },
+	{ .red = 0.282295, .green = 0.079121, .blue = 0.999267 },
+	{ .red = 0.262271, .green = 0.092308, .blue = 0.999023 },
+	{ .red = 0.244689, .green = 0.099878, .blue = 0.998535 },
+	{ .red = 0.229060, .green = 0.106471, .blue = 0.998779 },
+	{ .red = 0.218803, .green = 0.145299, .blue = 0.999023 },
+	{ .red = 0.462027, .green = 0.302564, .blue = 0.005617 },
+	{ .red = 0.474969, .green = 0.293284, .blue = 0.131624 },
+	{ .red = 0.478632, .green = 0.287668, .blue = 0.292308 },
+	{ .red = 0.464957, .green = 0.285470, .blue = 0.460562 },
+	{ .red = 0.465201, .green = 0.278144, .blue = 0.600977 },
+	{ .red = 0.466178, .green = 0.267155, .blue = 0.743590 },
+	{ .red = 0.467399, .green = 0.251282, .blue = 0.888645 },
+	{ .red = 0.453236, .green = 0.226862, .blue = 0.998291 },
+	{ .red = 0.403175, .green = 0.199756, .blue = 0.999023 },
+	{ .red = 0.362882, .green = 0.178510, .blue = 0.999267 },
+	{ .red = 0.329915, .green = 0.165324, .blue = 0.998046 },
+	{ .red = 0.304274, .green = 0.161172, .blue = 0.999512 },
+	{ .red = 0.283761, .green = 0.167277, .blue = 0.999023 },
+	{ .red = 0.267155, .green = 0.178999, .blue = 0.999023 },
+	{ .red = 0.253480, .green = 0.193651, .blue = 0.998291 },
+	{ .red = 0.242979, .green = 0.211966, .blue = 0.998291 },
+	{ .red = 0.234921, .green = 0.232967, .blue = 0.998535 },
+	{ .red = 0.481807, .green = 0.481807, .blue = 0.010501 },
+	{ .red = 0.450794, .green = 0.446154, .blue = 0.105739 },
+	{ .red = 0.447863, .green = 0.444933, .blue = 0.284982 },
+	{ .red = 0.442979, .green = 0.442491, .blue = 0.442735 },
+	{ .red = 0.449084, .green = 0.434676, .blue = 0.593162 },
+	{ .red = 0.453480, .green = 0.425153, .blue = 0.742613 },
+	{ .red = 0.457143, .green = 0.413187, .blue = 0.892308 },
+	{ .red = 0.446886, .green = 0.393407, .blue = 0.998291 },
+	{ .red = 0.409524, .green = 0.365324, .blue = 0.998535 },
+	{ .red = 0.377534, .green = 0.344078, .blue = 0.998779 },
+	{ .red = 0.351404, .green = 0.329182, .blue = 0.999023 },
+	{ .red = 0.329915, .green = 0.320879, .blue = 0.998779 },
+	{ .red = 0.312332, .green = 0.316728, .blue = 0.998535 },
+	{ .red = 0.297680, .green = 0.316239, .blue = 0.998535 },
+	{ .red = 0.286203, .green = 0.319414, .blue = 0.998779 },
+	{ .red = 0.277167, .green = 0.326252, .blue = 0.998779 },
+	{ .red = 0.270574, .green = 0.335287, .blue = 0.998535 },
+	{ .red = 0.449817, .green = 0.599756, .blue = 0.007570 },
+	{ .red = 0.425153, .green = 0.594872, .blue = 0.011722 },
+	{ .red = 0.419048, .green = 0.594383, .blue = 0.263492 },
+	{ .red = 0.401465, .green = 0.595604, .blue = 0.429060 },
+	{ .red = 0.381929, .green = 0.594139, .blue = 0.595849 },
+	{ .red = 0.410012, .green = 0.579487, .blue = 0.757998 },
+	{ .red = 0.436386, .green = 0.564347, .blue = 0.907937 },
+	{ .red = 0.439316, .green = 0.544078, .blue = 0.998291 },
+	{ .red = 0.427350, .green = 0.515263, .blue = 0.999512 },
+	{ .red = 0.411233, .green = 0.492552, .blue = 0.998535 },
+	{ .red = 0.394872, .green = 0.474725, .blue = 0.998535 },
+	{ .red = 0.379243, .green = 0.461294, .blue = 0.998779 },
+	{ .red = 0.365324, .green = 0.451282, .blue = 0.998779 },
+	{ .red = 0.353358, .green = 0.444689, .blue = 0.998779 },
+	{ .red = 0.343346, .green = 0.441514, .blue = 0.999512 },
+	{ .red = 0.335531, .green = 0.440781, .blue = 1.000000 },
+	{ .red = 0.329426, .green = 0.441758, .blue = 0.999756 },
+	{ .red = 0.424420, .green = 0.705983, .blue = 0.010256 },
+	{ .red = 0.401465, .green = 0.724054, .blue = 0.012454 },
+	{ .red = 0.375580, .green = 0.743346, .blue = 0.232723 },
+	{ .red = 0.340659, .green = 0.746764, .blue = 0.411966 },
+	{ .red = 0.294994, .green = 0.748718, .blue = 0.580708 },
+	{ .red = 0.272772, .green = 0.744567, .blue = 0.747985 },
+	{ .red = 0.306471, .green = 0.729426, .blue = 0.915751 },
+	{ .red = 0.372161, .green = 0.682540, .blue = 0.998291 },
+	{ .red = 0.416117, .green = 0.633700, .blue = 0.999023 },
+	{ .red = 0.465201, .green = 0.628571, .blue = 0.998291 },
+	{ .red = 0.463248, .green = 0.609768, .blue = 0.998291 },
+	{ .red = 0.452259, .green = 0.591209, .blue = 0.997802 },
+	{ .red = 0.441514, .green = 0.577045, .blue = 0.998535 },
+	{ .red = 0.431502, .green = 0.565812, .blue = 0.998291 },
+	{ .red = 0.422222, .green = 0.557021, .blue = 0.999023 },
+	{ .red = 0.414164, .green = 0.550672, .blue = 0.999267 },
+	{ .red = 0.407326, .green = 0.546032, .blue = 0.998535 },
+	{ .red = 0.400488, .green = 0.796581, .blue = 0.015140 },
+	{ .red = 0.374359, .green = 0.821978, .blue = 0.010501 },
+	{ .red = 0.303053, .green = 0.878632, .blue = 0.184371 },
+	{ .red = 0.237118, .green = 0.881563, .blue = 0.383639 },
+	{ .red = 0.125763, .green = 0.883028, .blue = 0.552869 },
+	{ .red = 0.036142, .green = 0.872772, .blue = 0.713797 },
+	{ .red = 0.028571, .green = 0.862271, .blue = 0.866911 },
+	{ .red = 0.148718, .green = 0.828083, .blue = 0.998535 },
+	{ .red = 0.323321, .green = 0.742369, .blue = 0.998046 },
+	{ .red = 0.377534, .green = 0.689621, .blue = 0.998046 },
+	{ .red = 0.405861, .green = 0.656410, .blue = 0.998779 },
+	{ .red = 0.426374, .green = 0.637118, .blue = 0.998779 },
+	{ .red = 0.450305, .green = 0.633455, .blue = 0.998779 },
+	{ .red = 0.495238, .green = 0.655189, .blue = 0.999023 },
+	{ .red = 0.524054, .green = 0.670818, .blue = 0.999023 },
+	{ .red = 0.513065, .green = 0.658608, .blue = 0.998535 },
+	{ .red = 0.503053, .green = 0.648596, .blue = 0.998046 },
+	{ .red = 0.372405, .green = 0.862027, .blue = 0.013431 },
+	{ .red = 0.343346, .green = 0.887179, .blue = 0.015629 },
+	{ .red = 0.164591, .green = 0.983883, .blue = 0.092552 },
+	{ .red = 0.047375, .green = 0.970940, .blue = 0.348474 },
+	{ .red = 0.031013, .green = 0.948962, .blue = 0.517216 },
+	{ .red = 0.030525, .green = 0.935043, .blue = 0.662027 },
+	{ .red = 0.036142, .green = 0.926740, .blue = 0.795849 },
+	{ .red = 0.031990, .green = 0.920391, .blue = 0.923810 },
+	{ .red = 0.104518, .green = 0.861783, .blue = 0.998779 },
+	{ .red = 0.298413, .green = 0.784615, .blue = 0.998535 },
+	{ .red = 0.355311, .green = 0.732845, .blue = 0.999267 },
+	{ .red = 0.384860, .green = 0.695482, .blue = 0.998046 },
+	{ .red = 0.402686, .green = 0.668864, .blue = 0.998046 },
+	{ .red = 0.415140, .green = 0.650794, .blue = 0.998779 },
+	{ .red = 0.425397, .green = 0.638584, .blue = 0.998779 },
+	{ .red = 0.438095, .green = 0.633944, .blue = 0.998046 },
+	{ .red = 0.451770, .green = 0.634676, .blue = 0.998779 },
+	{ .red = 0.343101, .green = 0.907937, .blue = 0.014896 },
+	{ .red = 0.312088, .green = 0.930891, .blue = 0.011966 },
+	{ .red = 0.188034, .green = 0.997558, .blue = 0.136264 },
+	{ .red = 0.115507, .green = 0.991453, .blue = 0.332112 },
+	{ .red = 0.078144, .green = 0.980464, .blue = 0.481563 },
+	{ .red = 0.038339, .green = 0.971917, .blue = 0.612943 },
+	{ .red = 0.049573, .green = 0.964103, .blue = 0.733822 },
+	{ .red = 0.066178, .green = 0.958974, .blue = 0.847619 },
+	{ .red = 0.064957, .green = 0.954579, .blue = 0.957265 },
+	{ .red = 0.139683, .green = 0.885714, .blue = 0.998779 },
+	{ .red = 0.294994, .green = 0.816606, .blue = 0.999023 },
+	{ .red = 0.347985, .green = 0.766056, .blue = 0.998046 },
+	{ .red = 0.374359, .green = 0.728694, .blue = 0.999512 },
+	{ .red = 0.390476, .green = 0.698901, .blue = 0.998291 },
+	{ .red = 0.400488, .green = 0.676190, .blue = 0.998779 },
+	{ .red = 0.406838, .green = 0.658364, .blue = 0.999023 },
+	{ .red = 0.411477, .green = 0.644200, .blue = 0.999023 },
+	{ .red = 0.315263, .green = 0.939683, .blue = 0.012698 },
+	{ .red = 0.284249, .green = 0.959951, .blue = 0.014896 },
+	{ .red = 0.232234, .green = 0.999512, .blue = 0.175092 },
+	{ .red = 0.193407, .green = 0.998779, .blue = 0.325763 },
+	{ .red = 0.136508, .green = 0.995849, .blue = 0.451038 },
+	{ .red = 0.112332, .green = 0.988278, .blue = 0.568254 },
+	{ .red = 0.087668, .green = 0.985104, .blue = 0.678632 },
+	{ .red = 0.093529, .green = 0.980708, .blue = 0.782173 },
+	{ .red = 0.035165, .green = 0.980952, .blue = 0.883516 },
+	{ .red = 0.084982, .green = 0.975580, .blue = 0.977534 },
+	{ .red = 0.199267, .green = 0.903541, .blue = 0.998535 },
+	{ .red = 0.306960, .green = 0.841026, .blue = 0.998779 },
+	{ .red = 0.348962, .green = 0.793407, .blue = 0.999023 },
+	{ .red = 0.371184, .green = 0.755800, .blue = 0.999512 },
+	{ .red = 0.384127, .green = 0.725275, .blue = 0.999023 },
+	{ .red = 0.391941, .green = 0.699634, .blue = 0.998535 },
+	{ .red = 0.395849, .green = 0.678877, .blue = 0.999023 },
+	{ .red = 0.286691, .green = 0.961905, .blue = 0.014896 },
+	{ .red = 0.255189, .green = 0.979243, .blue = 0.018071 },
+	{ .red = 0.260562, .green = 0.999512, .blue = 0.200733 },
+	{ .red = 0.243712, .green = 0.999023, .blue = 0.324054 },
+	{ .red = 0.211477, .green = 0.999267, .blue = 0.432234 },
+	{ .red = 0.170696, .green = 0.999756, .blue = 0.534799 },
+	{ .red = 0.150427, .green = 0.994628, .blue = 0.632234 },
+	{ .red = 0.133333, .green = 0.990720, .blue = 0.725031 },
+	{ .red = 0.133822, .green = 0.988523, .blue = 0.815629 },
+	{ .red = 0.130403, .green = 0.987790, .blue = 0.903053 },
+	{ .red = 0.094505, .green = 0.988523, .blue = 0.990232 },
+	{ .red = 0.254212, .green = 0.917705, .blue = 0.998535 },
+	{ .red = 0.325519, .green = 0.860317, .blue = 0.998291 },
+	{ .red = 0.355311, .green = 0.815629, .blue = 0.999512 },
+	{ .red = 0.371917, .green = 0.778266, .blue = 0.998779 },
+	{ .red = 0.380952, .green = 0.747253, .blue = 0.999267 },
+	{ .red = 0.386081, .green = 0.720391, .blue = 0.998535 },
+	{ .red = 0.261783, .green = 0.976557, .blue = 0.017338 },
+	{ .red = 0.234188, .green = 0.989744, .blue = 0.040293 },
+	{ .red = 0.278877, .green = 0.999512, .blue = 0.215629 },
+	{ .red = 0.273260, .green = 0.998779, .blue = 0.320391 },
+	{ .red = 0.256654, .green = 0.999512, .blue = 0.417094 },
+	{ .red = 0.241270, .green = 0.999023, .blue = 0.509646 },
+	{ .red = 0.222466, .green = 0.999023, .blue = 0.598046 },
+	{ .red = 0.201465, .green = 0.999512, .blue = 0.683028 },
+	{ .red = 0.185836, .green = 0.998535, .blue = 0.764835 },
+	{ .red = 0.168010, .green = 0.998535, .blue = 0.844689 },
+	{ .red = 0.169719, .green = 0.995849, .blue = 0.920635 },
+	{ .red = 0.136264, .green = 0.997314, .blue = 0.998535 },
+	{ .red = 0.298901, .green = 0.929426, .blue = 0.999267 },
+	{ .red = 0.343346, .green = 0.876190, .blue = 0.998535 },
+	{ .red = 0.362637, .green = 0.833211, .blue = 0.999023 },
+	{ .red = 0.373138, .green = 0.796581, .blue = 0.998779 },
+	{ .red = 0.378755, .green = 0.765568, .blue = 0.998779 },
+	{ .red = 0.242491, .green = 0.985592, .blue = 0.031502 },
+	{ .red = 0.219048, .green = 0.995360, .blue = 0.053724 },
+	{ .red = 0.289377, .green = 0.999267, .blue = 0.222711 },
+	{ .red = 0.290598, .green = 0.999023, .blue = 0.315018 },
+	{ .red = 0.281807, .green = 0.999512, .blue = 0.401954 },
+	{ .red = 0.273260, .green = 0.999512, .blue = 0.486935 },
+	{ .red = 0.265201, .green = 0.999267, .blue = 0.568254 },
+	{ .red = 0.258364, .green = 0.999023, .blue = 0.646398 },
+	{ .red = 0.252747, .green = 0.999023, .blue = 0.721612 },
+	{ .red = 0.249573, .green = 0.998779, .blue = 0.794139 },
+	{ .red = 0.246398, .green = 0.999512, .blue = 0.864713 },
+	{ .red = 0.252259, .green = 0.999267, .blue = 0.933089 },
+	{ .red = 0.266178, .green = 0.998291, .blue = 0.998535 },
+	{ .red = 0.335775, .green = 0.937485, .blue = 0.998535 },
+	{ .red = 0.357753, .green = 0.888889, .blue = 0.999023 },
+	{ .red = 0.368010, .green = 0.847863, .blue = 0.999267 },
+	{ .red = 0.373871, .green = 0.811722, .blue = 0.998535 },
+	{ .red = 0.228571, .green = 0.990232, .blue = 0.044200 },
+	{ .red = 0.221001, .green = 0.999512, .blue = 0.083516 },
+	{ .red = 0.293040, .green = 0.999267, .blue = 0.223687 },
+	{ .red = 0.298901, .green = 0.998779, .blue = 0.306960 },
+	{ .red = 0.294994, .green = 0.999023, .blue = 0.386813 },
+	{ .red = 0.290354, .green = 0.999512, .blue = 0.464957 },
+	{ .red = 0.288889, .green = 0.998779, .blue = 0.541148 },
+	{ .red = 0.285470, .green = 0.998779, .blue = 0.613919 },
+	{ .red = 0.284737, .green = 0.998535, .blue = 0.684005 },
+	{ .red = 0.285226, .green = 0.998535, .blue = 0.751404 },
+	{ .red = 0.286691, .green = 0.999267, .blue = 0.816850 },
+	{ .red = 0.292796, .green = 0.999756, .blue = 0.880098 },
+	{ .red = 0.309402, .green = 0.999512, .blue = 0.940659 },
+	{ .red = 0.334310, .green = 0.998779, .blue = 0.998291 },
+	{ .red = 0.359463, .green = 0.944567, .blue = 0.998779 },
+	{ .red = 0.367277, .green = 0.899145, .blue = 0.999267 },
+	{ .red = 0.370940, .green = 0.859341, .blue = 0.999267 },
+	{ .red = 0.218071, .green = 0.992674, .blue = 0.052015 },
+	{ .red = 0.226374, .green = 0.999512, .blue = 0.103297 },
+	{ .red = 0.291819, .green = 0.999267, .blue = 0.220513 },
+	{ .red = 0.300366, .green = 0.998779, .blue = 0.296947 },
+	{ .red = 0.298657, .green = 0.999267, .blue = 0.370452 },
+	{ .red = 0.298657, .green = 0.998779, .blue = 0.444200 },
+	{ .red = 0.296947, .green = 0.999023, .blue = 0.515263 },
+	{ .red = 0.295238, .green = 0.999512, .blue = 0.583883 },
+	{ .red = 0.297192, .green = 0.999023, .blue = 0.649817 },
+	{ .red = 0.300366, .green = 0.998535, .blue = 0.713553 },
+	{ .red = 0.304762, .green = 0.998535, .blue = 0.774603 },
+	{ .red = 0.311600, .green = 0.999023, .blue = 0.833944 },
+	{ .red = 0.321123, .green = 0.999756, .blue = 0.891819 },
+	{ .red = 0.344567, .green = 0.999023, .blue = 0.946032 },
+	{ .red = 0.374847, .green = 0.998779, .blue = 0.997802 },
+	{ .red = 0.372405, .green = 0.950183, .blue = 0.999512 },
+	{ .red = 0.371673, .green = 0.906960, .blue = 0.999756 },
+	{ .red = 0.210256, .green = 0.993895, .blue = 0.056654 },
+	{ .red = 0.226862, .green = 0.999512, .blue = 0.110867 },
+	{ .red = 0.286935, .green = 0.999267, .blue = 0.214164 },
+	{ .red = 0.298901, .green = 0.998779, .blue = 0.286203 },
+	{ .red = 0.298168, .green = 0.999267, .blue = 0.354335 },
+	{ .red = 0.298413, .green = 0.999267, .blue = 0.423199 },
+	{ .red = 0.297924, .green = 0.999512, .blue = 0.490354 },
+	{ .red = 0.301343, .green = 0.998535, .blue = 0.555800 },
+	{ .red = 0.302564, .green = 0.998535, .blue = 0.618559 },
+	{ .red = 0.303785, .green = 0.999023, .blue = 0.678877 },
+	{ .red = 0.307692, .green = 0.999023, .blue = 0.736996 },
+	{ .red = 0.313065, .green = 0.999267, .blue = 0.793407 },
+	{ .red = 0.323321, .green = 0.999267, .blue = 0.847863 },
+	{ .red = 0.337241, .green = 0.999512, .blue = 0.900611 },
+	{ .red = 0.363614, .green = 0.998535, .blue = 0.949939 },
+	{ .red = 0.395849, .green = 0.998779, .blue = 0.997314 },
+	{ .red = 0.379243, .green = 0.953846, .blue = 0.999267 },
+	{ .red = 0.204640, .green = 0.994628, .blue = 0.059829 },
+	{ .red = 0.223932, .green = 0.999512, .blue = 0.112088 },
+	{ .red = 0.280586, .green = 0.999512, .blue = 0.206349 },
+	{ .red = 0.294750, .green = 0.998779, .blue = 0.274969 },
+	{ .red = 0.294994, .green = 0.998779, .blue = 0.338462 },
+	{ .red = 0.294994, .green = 0.999512, .blue = 0.403175 },
+	{ .red = 0.295726, .green = 0.999512, .blue = 0.466911 },
+	{ .red = 0.299634, .green = 0.998291, .blue = 0.529426 },
+	{ .red = 0.297924, .green = 0.999512, .blue = 0.589011 },
+	{ .red = 0.302808, .green = 0.998779, .blue = 0.646886 },
+	{ .red = 0.304762, .green = 0.999512, .blue = 0.702564 },
+	{ .red = 0.312332, .green = 0.998535, .blue = 0.756288 },
+	{ .red = 0.320147, .green = 0.998535, .blue = 0.808303 },
+	{ .red = 0.327473, .green = 0.999756, .blue = 0.859096 },
+	{ .red = 0.344811, .green = 0.999267, .blue = 0.907448 },
+	{ .red = 0.369963, .green = 0.998779, .blue = 0.953602 },
+	{ .red = 0.403663, .green = 0.998779, .blue = 0.997070 },
+	{ .red = 0.641026, .green = 0.023687, .blue = 0.013187 },
+	{ .red = 0.640293, .green = 0.014408, .blue = 0.159463 },
+	{ .red = 0.632967, .green = 0.010501, .blue = 0.313065 },
+	{ .red = 0.613675, .green = 0.012210, .blue = 0.456410 },
+	{ .red = 0.584860, .green = 0.014652, .blue = 0.584615 },
+	{ .red = 0.540904, .green = 0.011722, .blue = 0.642979 },
+	{ .red = 0.513797, .green = 0.011477, .blue = 0.711600 },
+	{ .red = 0.493040, .green = 0.020757, .blue = 0.782173 },
+	{ .red = 0.476435, .green = 0.018071, .blue = 0.855189 },
+	{ .red = 0.461294, .green = 0.020757, .blue = 0.925519 },
+	{ .red = 0.441514, .green = 0.028816, .blue = 0.979487 },
+	{ .red = 0.411722, .green = 0.066911, .blue = 0.998535 },
+	{ .red = 0.379976, .green = 0.090110, .blue = 0.998046 },
+	{ .red = 0.352625, .green = 0.102076, .blue = 0.998779 },
+	{ .red = 0.328694, .green = 0.111355, .blue = 0.999512 },
+	{ .red = 0.307204, .green = 0.116239, .blue = 0.999023 },
+	{ .red = 0.287912, .green = 0.123321, .blue = 0.999023 },
+	{ .red = 0.634432, .green = 0.154090, .blue = 0.006593 },
+	{ .red = 0.662759, .green = 0.088156, .blue = 0.134554 },
+	{ .red = 0.663248, .green = 0.059829, .blue = 0.303785 },
+	{ .red = 0.652503, .green = 0.014896, .blue = 0.476435 },
+	{ .red = 0.620513, .green = 0.010256, .blue = 0.626618 },
+	{ .red = 0.585836, .green = 0.015873, .blue = 0.710134 },
+	{ .red = 0.561661, .green = 0.019292, .blue = 0.793895 },
+	{ .red = 0.538706, .green = 0.024420, .blue = 0.871306 },
+	{ .red = 0.518193, .green = 0.020024, .blue = 0.946032 },
+	{ .red = 0.490354, .green = 0.042735, .blue = 0.996581 },
+	{ .red = 0.447375, .green = 0.075946, .blue = 0.999267 },
+	{ .red = 0.410012, .green = 0.095238, .blue = 0.998779 },
+	{ .red = 0.378510, .green = 0.107448, .blue = 0.998535 },
+	{ .red = 0.351648, .green = 0.114530, .blue = 0.999267 },
+	{ .red = 0.327717, .green = 0.120635, .blue = 0.999267 },
+	{ .red = 0.306227, .green = 0.123810, .blue = 0.999267 },
+	{ .red = 0.291575, .green = 0.158242, .blue = 0.998779 },
+	{ .red = 0.587790, .green = 0.288400, .blue = 0.010012 },
+	{ .red = 0.645665, .green = 0.286447, .blue = 0.124298 },
+	{ .red = 0.652747, .green = 0.276679, .blue = 0.289133 },
+	{ .red = 0.645177, .green = 0.271551, .blue = 0.461050 },
+	{ .red = 0.629548, .green = 0.267643, .blue = 0.627839 },
+	{ .red = 0.628816, .green = 0.258608, .blue = 0.764103 },
+	{ .red = 0.628816, .green = 0.246642, .blue = 0.901343 },
+	{ .red = 0.607082, .green = 0.230525, .blue = 0.999512 },
+	{ .red = 0.541148, .green = 0.212943, .blue = 0.998291 },
+	{ .red = 0.488156, .green = 0.198779, .blue = 0.998046 },
+	{ .red = 0.445177, .green = 0.189499, .blue = 0.998779 },
+	{ .red = 0.409768, .green = 0.186813, .blue = 0.998779 },
+	{ .red = 0.380952, .green = 0.189988, .blue = 0.999267 },
+	{ .red = 0.356777, .green = 0.198046, .blue = 0.999023 },
+	{ .red = 0.336752, .green = 0.209035, .blue = 0.999267 },
+	{ .red = 0.319902, .green = 0.223932, .blue = 0.998779 },
+	{ .red = 0.306716, .green = 0.242002, .blue = 0.999023 },
+	{ .red = 0.573382, .green = 0.425397, .blue = 0.012454 },
+	{ .red = 0.626862, .green = 0.443223, .blue = 0.104274 },
+	{ .red = 0.625641, .green = 0.441758, .blue = 0.282295 },
+	{ .red = 0.629060, .green = 0.435897, .blue = 0.440537 },
+	{ .red = 0.614652, .green = 0.434432, .blue = 0.607814 },
+	{ .red = 0.616361, .green = 0.427595, .blue = 0.748718 },
+	{ .red = 0.619048, .green = 0.418071, .blue = 0.891819 },
+	{ .red = 0.604396, .green = 0.402930, .blue = 0.999023 },
+	{ .red = 0.548230, .green = 0.378999, .blue = 0.998291 },
+	{ .red = 0.502564, .green = 0.359951, .blue = 0.998291 },
+	{ .red = 0.464957, .green = 0.346276, .blue = 0.998779 },
+	{ .red = 0.432967, .green = 0.336752, .blue = 0.998046 },
+	{ .red = 0.406349, .green = 0.331136, .blue = 0.998046 },
+	{ .red = 0.384371, .green = 0.329182, .blue = 0.999512 },
+	{ .red = 0.365324, .green = 0.330403, .blue = 0.998779 },
+	{ .red = 0.349939, .green = 0.335287, .blue = 0.999023 },
+	{ .red = 0.337485, .green = 0.342125, .blue = 0.998535 },
+	{ .red = 0.619780, .green = 0.619536, .blue = 0.012943 },
+	{ .red = 0.602442, .green = 0.595849, .blue = 0.011477 },
+	{ .red = 0.599756, .green = 0.594383, .blue = 0.269353 },
+	{ .red = 0.596093, .green = 0.592674, .blue = 0.433700 },
+	{ .red = 0.590965, .green = 0.590232, .blue = 0.590476 },
+	{ .red = 0.598535, .green = 0.582173, .blue = 0.740904 },
+	{ .red = 0.604396, .green = 0.572894, .blue = 0.890110 },
+	{ .red = 0.597314, .green = 0.557021, .blue = 0.998046 },
+	{ .red = 0.561172, .green = 0.529915, .blue = 0.998535 },
+	{ .red = 0.528449, .green = 0.507448, .blue = 0.999267 },
+	{ .red = 0.498657, .green = 0.488645, .blue = 0.998291 },
+	{ .red = 0.472772, .green = 0.473993, .blue = 0.998535 },
+	{ .red = 0.450061, .green = 0.462759, .blue = 0.998779 },
+	{ .red = 0.430037, .green = 0.454701, .blue = 0.998535 },
+	{ .red = 0.413675, .green = 0.450061, .blue = 0.999512 },
+	{ .red = 0.399267, .green = 0.447619, .blue = 0.999023 },
+	{ .red = 0.387546, .green = 0.447131, .blue = 0.998535 },
+	{ .red = 0.582418, .green = 0.727473, .blue = 0.008303 },
+	{ .red = 0.577534, .green = 0.735531, .blue = 0.007326 },
+	{ .red = 0.571917, .green = 0.742857, .blue = 0.240781 },
+	{ .red = 0.567033, .green = 0.741392, .blue = 0.414652 },
+	{ .red = 0.549451, .green = 0.741636, .blue = 0.575824 },
+	{ .red = 0.531624, .green = 0.738706, .blue = 0.740415 },
+	{ .red = 0.558730, .green = 0.721123, .blue = 0.899634 },
+	{ .red = 0.584127, .green = 0.697436, .blue = 0.999512 },
+	{ .red = 0.580708, .green = 0.666422, .blue = 0.998291 },
+	{ .red = 0.565812, .green = 0.640781, .blue = 0.998291 },
+	{ .red = 0.547497, .green = 0.619292, .blue = 0.998535 },
+	{ .red = 0.528694, .green = 0.600977, .blue = 0.998535 },
+	{ .red = 0.510867, .green = 0.586081, .blue = 0.999023 },
+	{ .red = 0.494261, .green = 0.573626, .blue = 0.998046 },
+	{ .red = 0.479121, .green = 0.563614, .blue = 0.998535 },
+	{ .red = 0.465934, .green = 0.556044, .blue = 0.998291 },
+	{ .red = 0.454701, .green = 0.550427, .blue = 0.998779 },
+	{ .red = 0.541880, .green = 0.810989, .blue = 0.007082 },
+	{ .red = 0.535775, .green = 0.830769, .blue = 0.012943 },
+	{ .red = 0.522589, .green = 0.871306, .blue = 0.191453 },
+	{ .red = 0.515507, .green = 0.869597, .blue = 0.380952 },
+	{ .red = 0.483028, .green = 0.870574, .blue = 0.545788 },
+	{ .red = 0.447863, .green = 0.868864, .blue = 0.705983 },
+	{ .red = 0.431013, .green = 0.860562, .blue = 0.864225 },
+	{ .red = 0.467888, .green = 0.830525, .blue = 0.999267 },
+	{ .red = 0.536020, .green = 0.763858, .blue = 0.999023 },
+	{ .red = 0.569475, .green = 0.731868, .blue = 0.998291 },
+	{ .red = 0.610745, .green = 0.734310, .blue = 0.999023 },
+	{ .red = 0.596337, .green = 0.712088, .blue = 0.998779 },
+	{ .red = 0.583150, .green = 0.694750, .blue = 0.998779 },
+	{ .red = 0.569475, .green = 0.679609, .blue = 0.998291 },
+	{ .red = 0.556044, .green = 0.666422, .blue = 0.998046 },
+	{ .red = 0.543590, .green = 0.655433, .blue = 0.999512 },
+	{ .red = 0.531868, .green = 0.645665, .blue = 0.998291 },
+	{ .red = 0.499878, .green = 0.871062, .blue = 0.011966 },
+	{ .red = 0.489866, .green = 0.893284, .blue = 0.011966 },
+	{ .red = 0.449573, .green = 0.973138, .blue = 0.105495 },
+	{ .red = 0.439805, .green = 0.971184, .blue = 0.335775 },
+	{ .red = 0.391209, .green = 0.972405, .blue = 0.503541 },
+	{ .red = 0.339194, .green = 0.970940, .blue = 0.659341 },
+	{ .red = 0.293040, .green = 0.965324, .blue = 0.810989 },
+	{ .red = 0.272772, .green = 0.954090, .blue = 0.959219 },
+	{ .red = 0.436874, .green = 0.869841, .blue = 0.998779 },
+	{ .red = 0.503785, .green = 0.806593, .blue = 0.998779 },
+	{ .red = 0.533822, .green = 0.767766, .blue = 0.998535 },
+	{ .red = 0.552625, .green = 0.743590, .blue = 0.998535 },
+	{ .red = 0.570452, .green = 0.731868, .blue = 0.998535 },
+	{ .red = 0.598046, .green = 0.736264, .blue = 0.998291 },
+	{ .red = 0.642979, .green = 0.759707, .blue = 0.998046 },
+	{ .red = 0.626129, .green = 0.743590, .blue = 0.999023 },
+	{ .red = 0.612454, .green = 0.730647, .blue = 0.999267 },
+	{ .red = 0.458608, .green = 0.913797, .blue = 0.014896 },
+	{ .red = 0.445421, .green = 0.934799, .blue = 0.012454 },
+	{ .red = 0.402442, .green = 0.999512, .blue = 0.128449 },
+	{ .red = 0.416361, .green = 0.999512, .blue = 0.339194 },
+	{ .red = 0.379976, .green = 0.998779, .blue = 0.482295 },
+	{ .red = 0.337973, .green = 0.998535, .blue = 0.614164 },
+	{ .red = 0.287668, .green = 0.998779, .blue = 0.742125 },
+	{ .red = 0.225885, .green = 0.999512, .blue = 0.870818 },
+	{ .red = 0.185348, .green = 0.993407, .blue = 0.998291 },
+	{ .red = 0.431502, .green = 0.895726, .blue = 0.998779 },
+	{ .red = 0.489133, .green = 0.837363, .blue = 0.998779 },
+	{ .red = 0.515263, .green = 0.797070, .blue = 0.998291 },
+	{ .red = 0.529915, .green = 0.768498, .blue = 0.998535 },
+	{ .red = 0.539927, .green = 0.747985, .blue = 0.998535 },
+	{ .red = 0.548474, .green = 0.733822, .blue = 0.998535 },
+	{ .red = 0.557021, .green = 0.725275, .blue = 0.997558 },
+	{ .red = 0.571429, .green = 0.725519, .blue = 0.999023 },
+	{ .red = 0.420757, .green = 0.943590, .blue = 0.013187 },
+	{ .red = 0.406105, .green = 0.961661, .blue = 0.027839 },
+	{ .red = 0.391209, .green = 0.999267, .blue = 0.180220 },
+	{ .red = 0.429060, .green = 0.999023, .blue = 0.356777 },
+	{ .red = 0.405128, .green = 0.999267, .blue = 0.473260 },
+	{ .red = 0.380464, .green = 0.998779, .blue = 0.583883 },
+	{ .red = 0.352625, .green = 0.999023, .blue = 0.690110 },
+	{ .red = 0.324298, .green = 0.999512, .blue = 0.794139 },
+	{ .red = 0.296703, .green = 0.999512, .blue = 0.897680 },
+	{ .red = 0.284005, .green = 0.995849, .blue = 0.998535 },
+	{ .red = 0.441270, .green = 0.914286, .blue = 0.998779 },
+	{ .red = 0.484737, .green = 0.860806, .blue = 0.999512 },
+	{ .red = 0.505006, .green = 0.820269, .blue = 0.998535 },
+	{ .red = 0.515263, .green = 0.789988, .blue = 0.999267 },
+	{ .red = 0.521856, .green = 0.765568, .blue = 0.998291 },
+	{ .red = 0.526007, .green = 0.746764, .blue = 0.998535 },
+	{ .red = 0.528694, .green = 0.732112, .blue = 0.998535 },
+	{ .red = 0.385348, .green = 0.963370, .blue = 0.027350 },
+	{ .red = 0.370696, .green = 0.977778, .blue = 0.047375 },
+	{ .red = 0.386813, .green = 0.999756, .blue = 0.211233 },
+	{ .red = 0.434432, .green = 0.999023, .blue = 0.364103 },
+	{ .red = 0.419536, .green = 0.999512, .blue = 0.463492 },
+	{ .red = 0.404396, .green = 0.999512, .blue = 0.559951 },
+	{ .red = 0.390720, .green = 0.998779, .blue = 0.652747 },
+	{ .red = 0.376068, .green = 0.999267, .blue = 0.742369 },
+	{ .red = 0.367033, .green = 0.998291, .blue = 0.829792 },
+	{ .red = 0.359219, .green = 0.998779, .blue = 0.915751 },
+	{ .red = 0.361416, .green = 0.997070, .blue = 0.998291 },
+	{ .red = 0.456410, .green = 0.928205, .blue = 0.999512 },
+	{ .red = 0.486447, .green = 0.877900, .blue = 0.999023 },
+	{ .red = 0.499145, .green = 0.838584, .blue = 0.998535 },
+	{ .red = 0.505006, .green = 0.807082, .blue = 0.998535 },
+	{ .red = 0.507692, .green = 0.781197, .blue = 0.998535 },
+	{ .red = 0.508913, .green = 0.759707, .blue = 0.998291 },
+	{ .red = 0.355067, .green = 0.976313, .blue = 0.039805 },
+	{ .red = 0.341636, .green = 0.987057, .blue = 0.062027 },
+	{ .red = 0.385104, .green = 0.999512, .blue = 0.230281 },
+	{ .red = 0.435165, .green = 0.999023, .blue = 0.363858 },
+	{ .red = 0.426618, .green = 0.999267, .blue = 0.452015 },
+	{ .red = 0.418071, .green = 0.999267, .blue = 0.538217 },
+	{ .red = 0.411233, .green = 0.998535, .blue = 0.621978 },
+	{ .red = 0.404151, .green = 0.998779, .blue = 0.702320 },
+	{ .red = 0.399512, .green = 0.998779, .blue = 0.780220 },
+	{ .red = 0.398779, .green = 0.999267, .blue = 0.855922 },
+	{ .red = 0.405861, .green = 0.999267, .blue = 0.929182 },
+	{ .red = 0.424176, .green = 0.997314, .blue = 0.997314 },
+	{ .red = 0.473993, .green = 0.937973, .blue = 0.998535 },
+	{ .red = 0.488889, .green = 0.891331, .blue = 0.998779 },
+	{ .red = 0.494017, .green = 0.853480, .blue = 0.998779 },
+	{ .red = 0.495971, .green = 0.821245, .blue = 0.998291 },
+	{ .red = 0.494994, .green = 0.794872, .blue = 0.999756 },
+	{ .red = 0.329182, .green = 0.984371, .blue = 0.047863 },
+	{ .red = 0.317705, .green = 0.992186, .blue = 0.071062 },
+	{ .red = 0.382418, .green = 0.999267, .blue = 0.240049 },
+	{ .red = 0.431013, .green = 0.999023, .blue = 0.358486 },
+	{ .red = 0.427595, .green = 0.998535, .blue = 0.438095 },
+	{ .red = 0.422955, .green = 0.998535, .blue = 0.516972 },
+	{ .red = 0.417094, .green = 0.999756, .blue = 0.593407 },
+	{ .red = 0.415385, .green = 0.999023, .blue = 0.667643 },
+	{ .red = 0.414896, .green = 0.998779, .blue = 0.738950 },
+	{ .red = 0.418803, .green = 0.998291, .blue = 0.807814 },
+	{ .red = 0.424908, .green = 0.999267, .blue = 0.874725 },
+	{ .red = 0.443468, .green = 0.998535, .blue = 0.938217 },
+	{ .red = 0.469353, .green = 0.998046, .blue = 0.997314 },
+	{ .red = 0.486447, .green = 0.945543, .blue = 0.998535 },
+	{ .red = 0.489133, .green = 0.901832, .blue = 0.999023 },
+	{ .red = 0.488156, .green = 0.864957, .blue = 0.999267 },
+	{ .red = 0.485714, .green = 0.833211, .blue = 0.999267 },
+	{ .red = 0.307204, .green = 0.989744, .blue = 0.050549 },
+	{ .red = 0.305250, .green = 0.997314, .blue = 0.091087 },
+	{ .red = 0.376313, .green = 0.999267, .blue = 0.242491 },
+	{ .red = 0.422711, .green = 0.999267, .blue = 0.348718 },
+	{ .red = 0.420269, .green = 0.999756, .blue = 0.421001 },
+	{ .red = 0.419780, .green = 0.998535, .blue = 0.494994 },
+	{ .red = 0.416606, .green = 0.999512, .blue = 0.566056 },
+	{ .red = 0.417338, .green = 0.998535, .blue = 0.635653 },
+	{ .red = 0.418071, .green = 0.998779, .blue = 0.702320 },
+	{ .red = 0.421490, .green = 0.998779, .blue = 0.766789 },
+	{ .red = 0.429304, .green = 0.998779, .blue = 0.828816 },
+	{ .red = 0.442247, .green = 0.999023, .blue = 0.888645 },
+	{ .red = 0.464469, .green = 0.999267, .blue = 0.945543 },
+	{ .red = 0.499389, .green = 0.998779, .blue = 0.997314 },
+	{ .red = 0.492063, .green = 0.951648, .blue = 0.999267 },
+	{ .red = 0.486935, .green = 0.909646, .blue = 0.998535 },
+	{ .red = 0.480830, .green = 0.874237, .blue = 0.999267 },
+	{ .red = 0.287668, .green = 0.993651, .blue = 0.047863 },
+	{ .red = 0.295238, .green = 0.999267, .blue = 0.103053 },
+	{ .red = 0.367277, .green = 0.999023, .blue = 0.239560 },
+	{ .red = 0.410745, .green = 0.999756, .blue = 0.335531 },
+	{ .red = 0.411722, .green = 0.999023, .blue = 0.403907 },
+	{ .red = 0.410256, .green = 0.999512, .blue = 0.472039 },
+	{ .red = 0.410012, .green = 0.999512, .blue = 0.539438 },
+	{ .red = 0.411722, .green = 0.998779, .blue = 0.605128 },
+	{ .red = 0.412943, .green = 0.999023, .blue = 0.668376 },
+	{ .red = 0.416361, .green = 0.999023, .blue = 0.729182 },
+	{ .red = 0.424176, .green = 0.998291, .blue = 0.787790 },
+	{ .red = 0.434188, .green = 0.998535, .blue = 0.844444 },
+	{ .red = 0.449573, .green = 0.999267, .blue = 0.899145 },
+	{ .red = 0.478388, .green = 0.998535, .blue = 0.949939 },
+	{ .red = 0.515018, .green = 0.999023, .blue = 0.997070 },
+	{ .red = 0.491819, .green = 0.956044, .blue = 0.999512 },
+	{ .red = 0.481319, .green = 0.915995, .blue = 0.998535 },
+	{ .red = 0.270085, .green = 0.996825, .blue = 0.038584 },
+	{ .red = 0.285714, .green = 0.999756, .blue = 0.108913 },
+	{ .red = 0.355800, .green = 0.999023, .blue = 0.232967 },
+	{ .red = 0.397070, .green = 0.999756, .blue = 0.321123 },
+	{ .red = 0.400244, .green = 0.998535, .blue = 0.385592 },
+	{ .red = 0.400488, .green = 0.998779, .blue = 0.450061 },
+	{ .red = 0.400733, .green = 0.999023, .blue = 0.513797 },
+	{ .red = 0.401465, .green = 0.999267, .blue = 0.576068 },
+	{ .red = 0.404396, .green = 0.998291, .blue = 0.636142 },
+	{ .red = 0.406105, .green = 0.999267, .blue = 0.694261 },
+	{ .red = 0.411477, .green = 0.999267, .blue = 0.750427 },
+	{ .red = 0.421001, .green = 0.998535, .blue = 0.804640 },
+	{ .red = 0.432234, .green = 0.999023, .blue = 0.856899 },
+	{ .red = 0.450305, .green = 0.999267, .blue = 0.906960 },
+	{ .red = 0.478632, .green = 0.999267, .blue = 0.954335 },
+	{ .red = 0.518926, .green = 0.999023, .blue = 0.997070 },
+	{ .red = 0.487668, .green = 0.958974, .blue = 0.999023 },
+	{ .red = 0.254457, .green = 0.999267, .blue = 0.022466 },
+	{ .red = 0.276190, .green = 0.999756, .blue = 0.110134 },
+	{ .red = 0.342857, .green = 0.999023, .blue = 0.223687 },
+	{ .red = 0.382906, .green = 0.999512, .blue = 0.306227 },
+	{ .red = 0.386569, .green = 0.999023, .blue = 0.367033 },
+	{ .red = 0.388278, .green = 0.998535, .blue = 0.428327 },
+	{ .red = 0.388767, .green = 0.999023, .blue = 0.488889 },
+	{ .red = 0.389988, .green = 0.999023, .blue = 0.548474 },
+	{ .red = 0.392918, .green = 0.998291, .blue = 0.606105 },
+	{ .red = 0.395116, .green = 0.998779, .blue = 0.661783 },
+	{ .red = 0.398046, .green = 0.999267, .blue = 0.715507 },
+	{ .red = 0.404151, .green = 0.999267, .blue = 0.767766 },
+	{ .red = 0.413431, .green = 0.999267, .blue = 0.818071 },
+	{ .red = 0.426374, .green = 0.999267, .blue = 0.866667 },
+	{ .red = 0.446154, .green = 0.999023, .blue = 0.913065 },
+	{ .red = 0.473993, .green = 0.999267, .blue = 0.957265 },
+	{ .red = 0.513797, .green = 0.999267, .blue = 0.996825 },
+	{ .red = 0.734310, .green = 0.049817, .blue = 0.013675 },
+	{ .red = 0.725763, .green = 0.015140, .blue = 0.143834 },
+	{ .red = 0.707937, .green = 0.013431, .blue = 0.280830 },
+	{ .red = 0.688889, .green = 0.015140, .blue = 0.409524 },
+	{ .red = 0.673504, .green = 0.016361, .blue = 0.535043 },
+	{ .red = 0.656654, .green = 0.013187, .blue = 0.655433 },
+	{ .red = 0.607326, .green = 0.011722, .blue = 0.696947 },
+	{ .red = 0.587057, .green = 0.019292, .blue = 0.763614 },
+	{ .red = 0.575580, .green = 0.020757, .blue = 0.839560 },
+	{ .red = 0.566545, .green = 0.018803, .blue = 0.918681 },
+	{ .red = 0.553602, .green = 0.037118, .blue = 0.988523 },
+	{ .red = 0.513065, .green = 0.082784, .blue = 0.996825 },
+	{ .red = 0.475458, .green = 0.106227, .blue = 0.998779 },
+	{ .red = 0.441270, .green = 0.116728, .blue = 0.998535 },
+	{ .red = 0.411233, .green = 0.124298, .blue = 0.998535 },
+	{ .red = 0.384860, .green = 0.130891, .blue = 0.999023 },
+	{ .red = 0.360928, .green = 0.135043, .blue = 0.999267 },
+	{ .red = 0.718437, .green = 0.145543, .blue = 0.004151 },
+	{ .red = 0.815140, .green = 0.010012, .blue = 0.128449 },
+	{ .red = 0.774115, .green = 0.016850, .blue = 0.284005 },
+	{ .red = 0.751160, .green = 0.013919, .blue = 0.432234 },
+	{ .red = 0.728938, .green = 0.013431, .blue = 0.576068 },
+	{ .red = 0.701832, .green = 0.015385, .blue = 0.705495 },
+	{ .red = 0.650549, .green = 0.019048, .blue = 0.755311 },
+	{ .red = 0.632479, .green = 0.021245, .blue = 0.833455 },
+	{ .red = 0.622222, .green = 0.009035, .blue = 0.919658 },
+	{ .red = 0.603663, .green = 0.040537, .blue = 0.989255 },
+	{ .red = 0.556044, .green = 0.086935, .blue = 0.997558 },
+	{ .red = 0.511844, .green = 0.107448, .blue = 0.998535 },
+	{ .red = 0.473504, .green = 0.121612, .blue = 0.998535 },
+	{ .red = 0.439805, .green = 0.127961, .blue = 0.998535 },
+	{ .red = 0.409768, .green = 0.132357, .blue = 0.998291 },
+	{ .red = 0.383639, .green = 0.137241, .blue = 0.998779 },
+	{ .red = 0.364835, .green = 0.167766, .blue = 0.999267 },
+	{ .red = 0.672772, .green = 0.266667, .blue = 0.006105 },
+	{ .red = 0.814164, .green = 0.275702, .blue = 0.115995 },
+	{ .red = 0.823199, .green = 0.261294, .blue = 0.285226 },
+	{ .red = 0.820269, .green = 0.253236, .blue = 0.455922 },
+	{ .red = 0.807326, .green = 0.247863, .blue = 0.628816 },
+	{ .red = 0.792186, .green = 0.238095, .blue = 0.795360 },
+	{ .red = 0.791209, .green = 0.225641, .blue = 0.929426 },
+	{ .red = 0.747253, .green = 0.216361, .blue = 0.999023 },
+	{ .red = 0.670330, .green = 0.210745, .blue = 0.998535 },
+	{ .red = 0.608547, .green = 0.205861, .blue = 0.999267 },
+	{ .red = 0.556777, .green = 0.203175, .blue = 0.999023 },
+	{ .red = 0.513553, .green = 0.203663, .blue = 0.998779 },
+	{ .red = 0.476923, .green = 0.206349, .blue = 0.998535 },
+	{ .red = 0.446154, .green = 0.212943, .blue = 0.998779 },
+	{ .red = 0.420024, .green = 0.222222, .blue = 0.999023 },
+	{ .red = 0.397558, .green = 0.234676, .blue = 0.998779 },
+	{ .red = 0.379243, .green = 0.249084, .blue = 0.999267 },
+	{ .red = 0.676679, .green = 0.400244, .blue = 0.009280 },
+	{ .red = 0.798779, .green = 0.437851, .blue = 0.097924 },
+	{ .red = 0.800000, .green = 0.435653, .blue = 0.276190 },
+	{ .red = 0.806349, .green = 0.426618, .blue = 0.438584 },
+	{ .red = 0.796825, .green = 0.422955, .blue = 0.610745 },
+	{ .red = 0.780952, .green = 0.421001, .blue = 0.774603 },
+	{ .red = 0.781197, .green = 0.413675, .blue = 0.911844 },
+	{ .red = 0.750427, .green = 0.401954, .blue = 0.998046 },
+	{ .red = 0.680830, .green = 0.386325, .blue = 0.999267 },
+	{ .red = 0.624176, .green = 0.371917, .blue = 0.999023 },
+	{ .red = 0.576801, .green = 0.359951, .blue = 0.999512 },
+	{ .red = 0.536020, .green = 0.350672, .blue = 0.998535 },
+	{ .red = 0.501587, .green = 0.344322, .blue = 0.998779 },
+	{ .red = 0.471795, .green = 0.341148, .blue = 0.998291 },
+	{ .red = 0.447131, .green = 0.341392, .blue = 0.999267 },
+	{ .red = 0.425397, .green = 0.343834, .blue = 0.998046 },
+	{ .red = 0.408059, .green = 0.349206, .blue = 0.999512 },
+	{ .red = 0.693284, .green = 0.548962, .blue = 0.011966 },
+	{ .red = 0.776801, .green = 0.590232, .blue = 0.013919 },
+	{ .red = 0.778510, .green = 0.590965, .blue = 0.268620 },
+	{ .red = 0.776801, .green = 0.589255, .blue = 0.431258 },
+	{ .red = 0.778755, .green = 0.583639, .blue = 0.589744 },
+	{ .red = 0.763370, .green = 0.582662, .blue = 0.755067 },
+	{ .red = 0.765812, .green = 0.575580, .blue = 0.895726 },
+	{ .red = 0.749206, .green = 0.562393, .blue = 0.999267 },
+	{ .red = 0.691575, .green = 0.540171, .blue = 0.999267 },
+	{ .red = 0.644444, .green = 0.519414, .blue = 0.998779 },
+	{ .red = 0.603907, .green = 0.501099, .blue = 0.998291 },
+	{ .red = 0.569231, .green = 0.486447, .blue = 0.999023 },
+	{ .red = 0.538217, .green = 0.474237, .blue = 0.998291 },
+	{ .red = 0.511844, .green = 0.465446, .blue = 0.999023 },
+	{ .red = 0.488645, .green = 0.459096, .blue = 0.999267 },
+	{ .red = 0.468864, .green = 0.455433, .blue = 0.998535 },
+	{ .red = 0.451526, .green = 0.453480, .blue = 0.998535 },
+	{ .red = 0.746764, .green = 0.746764, .blue = 0.014408 },
+	{ .red = 0.747009, .green = 0.741392, .blue = 0.013431 },
+	{ .red = 0.746276, .green = 0.738462, .blue = 0.243956 },
+	{ .red = 0.742613, .green = 0.736264, .blue = 0.417338 },
+	{ .red = 0.736996, .green = 0.733089, .blue = 0.575824 },
+	{ .red = 0.729426, .green = 0.728449, .blue = 0.728694 },
+	{ .red = 0.734554, .green = 0.717460, .blue = 0.873748 },
+	{ .red = 0.733089, .green = 0.702808, .blue = 0.998046 },
+	{ .red = 0.700122, .green = 0.675458, .blue = 0.998535 },
+	{ .red = 0.668620, .green = 0.651038, .blue = 0.998535 },
+	{ .red = 0.639072, .green = 0.629548, .blue = 0.998291 },
+	{ .red = 0.611966, .green = 0.611233, .blue = 0.999023 },
+	{ .red = 0.586569, .green = 0.595116, .blue = 0.998046 },
+	{ .red = 0.564347, .green = 0.582173, .blue = 0.998779 },
+	{ .red = 0.543834, .green = 0.571429, .blue = 0.999023 },
+	{ .red = 0.525519, .green = 0.562393, .blue = 0.998535 },
+	{ .red = 0.509646, .green = 0.555800, .blue = 0.999023 },
+	{ .red = 0.689621, .green = 0.826618, .blue = 0.009035 },
+	{ .red = 0.693284, .green = 0.838828, .blue = 0.007326 },
+	{ .red = 0.698657, .green = 0.860562, .blue = 0.196093 },
+	{ .red = 0.693529, .green = 0.858364, .blue = 0.383150 },
+	{ .red = 0.686691, .green = 0.854701, .blue = 0.540904 },
+	{ .red = 0.668132, .green = 0.852015, .blue = 0.693040 },
+	{ .red = 0.649573, .green = 0.845665, .blue = 0.847375 },
+	{ .red = 0.672527, .green = 0.825153, .blue = 0.995604 },
+	{ .red = 0.705006, .green = 0.788523, .blue = 0.998291 },
+	{ .red = 0.696703, .green = 0.762393, .blue = 0.999023 },
+	{ .red = 0.680586, .green = 0.739683, .blue = 0.998535 },
+	{ .red = 0.662271, .green = 0.719414, .blue = 0.999023 },
+	{ .red = 0.643223, .green = 0.701587, .blue = 0.998291 },
+	{ .red = 0.624908, .green = 0.685958, .blue = 0.999023 },
+	{ .red = 0.607326, .green = 0.672039, .blue = 0.997802 },
+	{ .red = 0.590965, .green = 0.660317, .blue = 0.998535 },
+	{ .red = 0.575580, .green = 0.650061, .blue = 0.999023 },
+	{ .red = 0.631013, .green = 0.881563, .blue = 0.011477 },
+	{ .red = 0.631746, .green = 0.899389, .blue = 0.015385 },
+	{ .red = 0.634188, .green = 0.958730, .blue = 0.115751 },
+	{ .red = 0.628327, .green = 0.956532, .blue = 0.337485 },
+	{ .red = 0.620513, .green = 0.952869, .blue = 0.495726 },
+	{ .red = 0.590476, .green = 0.951648, .blue = 0.647131 },
+	{ .red = 0.560928, .green = 0.947497, .blue = 0.794872 },
+	{ .red = 0.546032, .green = 0.937241, .blue = 0.940659 },
+	{ .red = 0.620513, .green = 0.876190, .blue = 0.998291 },
+	{ .red = 0.663736, .green = 0.829304, .blue = 0.999267 },
+	{ .red = 0.690354, .green = 0.808791, .blue = 0.999023 },
+	{ .red = 0.716972, .green = 0.808547, .blue = 0.999267 },
+	{ .red = 0.702320, .green = 0.789499, .blue = 0.999512 },
+	{ .red = 0.687668, .green = 0.772650, .blue = 0.998291 },
+	{ .red = 0.672283, .green = 0.757753, .blue = 0.999512 },
+	{ .red = 0.657387, .green = 0.743834, .blue = 0.999512 },
+	{ .red = 0.642735, .green = 0.731380, .blue = 0.998291 },
+	{ .red = 0.576801, .green = 0.920391, .blue = 0.020024 },
+	{ .red = 0.573871, .green = 0.938950, .blue = 0.016361 },
+	{ .red = 0.564347, .green = 0.998779, .blue = 0.112576 },
+	{ .red = 0.571673, .green = 0.999512, .blue = 0.329670 },
+	{ .red = 0.575580, .green = 0.998535, .blue = 0.483272 },
+	{ .red = 0.545299, .green = 0.999512, .blue = 0.613431 },
+	{ .red = 0.514286, .green = 0.998779, .blue = 0.740171 },
+	{ .red = 0.480098, .green = 0.999023, .blue = 0.867888 },
+	{ .red = 0.453968, .green = 0.994872, .blue = 0.999023 },
+	{ .red = 0.600000, .green = 0.905250, .blue = 0.999023 },
+	{ .red = 0.637363, .green = 0.857631, .blue = 0.997802 },
+	{ .red = 0.654457, .green = 0.828327, .blue = 0.998291 },
+	{ .red = 0.666911, .green = 0.810745, .blue = 0.999512 },
+	{ .red = 0.683028, .green = 0.803419, .blue = 0.998535 },
+	{ .red = 0.725763, .green = 0.821490, .blue = 0.999267 },
+	{ .red = 0.723321, .green = 0.814652, .blue = 0.999512 },
+	{ .red = 0.706960, .green = 0.799756, .blue = 0.999267 },
+	{ .red = 0.527717, .green = 0.947985, .blue = 0.012454 },
+	{ .red = 0.522100, .green = 0.964591, .blue = 0.023932 },
+	{ .red = 0.518926, .green = 0.999023, .blue = 0.174603 },
+	{ .red = 0.552137, .green = 0.999023, .blue = 0.359707 },
+	{ .red = 0.573382, .green = 0.998779, .blue = 0.498413 },
+	{ .red = 0.554823, .green = 0.999267, .blue = 0.602198 },
+	{ .red = 0.535775, .green = 0.999512, .blue = 0.703053 },
+	{ .red = 0.518926, .green = 0.999267, .blue = 0.802442 },
+	{ .red = 0.505739, .green = 0.998779, .blue = 0.901099 },
+	{ .red = 0.497924, .green = 0.996581, .blue = 0.998779 },
+	{ .red = 0.596093, .green = 0.924054, .blue = 0.999023 },
+	{ .red = 0.622711, .green = 0.878877, .blue = 0.998535 },
+	{ .red = 0.634188, .green = 0.846886, .blue = 0.998291 },
+	{ .red = 0.640781, .green = 0.824176, .blue = 0.999267 },
+	{ .red = 0.646154, .green = 0.807082, .blue = 0.998046 },
+	{ .red = 0.651526, .green = 0.796093, .blue = 0.998291 },
+	{ .red = 0.660073, .green = 0.790965, .blue = 0.998779 },
+	{ .red = 0.483272, .green = 0.966789, .blue = 0.018559 },
+	{ .red = 0.476190, .green = 0.979976, .blue = 0.043956 },
+	{ .red = 0.488889, .green = 0.999512, .blue = 0.207082 },
+	{ .red = 0.541880, .green = 0.999512, .blue = 0.377045 },
+	{ .red = 0.568742, .green = 0.998779, .blue = 0.500366 },
+	{ .red = 0.557753, .green = 0.998779, .blue = 0.589011 },
+	{ .red = 0.547741, .green = 0.998291, .blue = 0.675214 },
+	{ .red = 0.536996, .green = 0.999267, .blue = 0.758974 },
+	{ .red = 0.531380, .green = 0.999267, .blue = 0.841514 },
+	{ .red = 0.530891, .green = 0.999756, .blue = 0.922344 },
+	{ .red = 0.541636, .green = 0.997558, .blue = 0.998046 },
+	{ .red = 0.599267, .green = 0.936752, .blue = 0.998779 },
+	{ .red = 0.613919, .green = 0.894505, .blue = 0.998779 },
+	{ .red = 0.619048, .green = 0.862027, .blue = 0.999023 },
+	{ .red = 0.620757, .green = 0.836630, .blue = 0.999512 },
+	{ .red = 0.621978, .green = 0.816361, .blue = 0.999267 },
+	{ .red = 0.622711, .green = 0.800244, .blue = 0.998779 },
+	{ .red = 0.444444, .green = 0.979487, .blue = 0.022955 },
+	{ .red = 0.436142, .green = 0.991209, .blue = 0.041758 },
+	{ .red = 0.467643, .green = 0.999512, .blue = 0.225885 },
+	{ .red = 0.533578, .green = 0.999267, .blue = 0.385104 },
+	{ .red = 0.560440, .green = 0.998535, .blue = 0.493529 },
+	{ .red = 0.553114, .green = 0.999512, .blue = 0.571917 },
+	{ .red = 0.547741, .green = 0.999023, .blue = 0.649328 },
+	{ .red = 0.543590, .green = 0.998535, .blue = 0.724298 },
+	{ .red = 0.541636, .green = 0.998779, .blue = 0.796825 },
+	{ .red = 0.544567, .green = 0.999267, .blue = 0.867643 },
+	{ .red = 0.557265, .green = 0.999023, .blue = 0.935287 },
+	{ .red = 0.578999, .green = 0.997802, .blue = 0.997314 },
+	{ .red = 0.604151, .green = 0.945788, .blue = 0.998046 },
+	{ .red = 0.606838, .green = 0.906227, .blue = 0.999267 },
+	{ .red = 0.606593, .green = 0.873016, .blue = 0.998046 },
+	{ .red = 0.603663, .green = 0.846886, .blue = 0.999512 },
+	{ .red = 0.601709, .green = 0.823932, .blue = 0.998046 },
+	{ .red = 0.412210, .green = 0.985836, .blue = 0.045177 },
+	{ .red = 0.403663, .green = 0.996093, .blue = 0.056654 },
+	{ .red = 0.450061, .green = 0.999512, .blue = 0.235165 },
+	{ .red = 0.524054, .green = 0.999023, .blue = 0.385104 },
+	{ .red = 0.547741, .green = 0.998535, .blue = 0.480342 },
+	{ .red = 0.542857, .green = 0.999756, .blue = 0.551648 },
+	{ .red = 0.540415, .green = 0.999267, .blue = 0.623199 },
+	{ .red = 0.539194, .green = 0.998779, .blue = 0.692063 },
+	{ .red = 0.538706, .green = 0.999267, .blue = 0.758730 },
+	{ .red = 0.544567, .green = 0.998535, .blue = 0.823443 },
+	{ .red = 0.552625, .green = 1.000000, .blue = 0.886203 },
+	{ .red = 0.577045, .green = 0.998291, .blue = 0.944078 },
+	{ .red = 0.605861, .green = 0.998535, .blue = 0.997070 },
+	{ .red = 0.604884, .green = 0.953114, .blue = 0.998779 },
+	{ .red = 0.599512, .green = 0.914530, .blue = 0.998779 },
+	{ .red = 0.593651, .green = 0.882051, .blue = 0.998291 },
+	{ .red = 0.587546, .green = 0.854701, .blue = 0.998535 },
+	{ .red = 0.385348, .green = 0.988767, .blue = 0.060073 },
+	{ .red = 0.382173, .green = 0.999267, .blue = 0.084982 },
+	{ .red = 0.433455, .green = 0.999512, .blue = 0.237363 },
+	{ .red = 0.511111, .green = 0.998779, .blue = 0.378755 },
+	{ .red = 0.531624, .green = 0.998779, .blue = 0.463004 },
+	{ .red = 0.530647, .green = 0.998535, .blue = 0.530647 },
+	{ .red = 0.528449, .green = 0.999267, .blue = 0.596337 },
+	{ .red = 0.528938, .green = 0.998535, .blue = 0.661294 },
+	{ .red = 0.530891, .green = 0.998291, .blue = 0.723810 },
+	{ .red = 0.533578, .green = 0.999267, .blue = 0.784371 },
+	{ .red = 0.541636, .green = 0.999512, .blue = 0.842735 },
+	{ .red = 0.560684, .green = 0.997802, .blue = 0.898168 },
+	{ .red = 0.584615, .green = 0.999267, .blue = 0.951160 },
+	{ .red = 0.621490, .green = 0.999023, .blue = 0.997070 },
+	{ .red = 0.600977, .green = 0.958242, .blue = 0.999512 },
+	{ .red = 0.589255, .green = 0.921123, .blue = 0.999023 },
+	{ .red = 0.579976, .green = 0.888400, .blue = 0.997802 },
+	{ .red = 0.362637, .green = 0.989988, .blue = 0.069353 },
+	{ .red = 0.364347, .green = 0.999756, .blue = 0.100611 },
+	{ .red = 0.416850, .green = 0.999512, .blue = 0.234188 },
+	{ .red = 0.494994, .green = 0.999267, .blue = 0.366789 },
+	{ .red = 0.512576, .green = 0.999512, .blue = 0.442735 },
+	{ .red = 0.513309, .green = 0.998779, .blue = 0.506716 },
+	{ .red = 0.512332, .green = 0.999267, .blue = 0.568987 },
+	{ .red = 0.512821, .green = 0.999512, .blue = 0.630525 },
+	{ .red = 0.514530, .green = 0.999267, .blue = 0.689866 },
+	{ .red = 0.518681, .green = 0.999023, .blue = 0.747497 },
+	{ .red = 0.525031, .green = 0.999267, .blue = 0.803175 },
+	{ .red = 0.538217, .green = 0.998535, .blue = 0.856654 },
+	{ .red = 0.558486, .green = 0.997802, .blue = 0.907204 },
+	{ .red = 0.585104, .green = 0.999512, .blue = 0.955800 },
+	{ .red = 0.626374, .green = 0.999023, .blue = 0.996825 },
+	{ .red = 0.595116, .green = 0.960928, .blue = 0.998535 },
+	{ .red = 0.577289, .green = 0.925519, .blue = 0.998535 },
+	{ .red = 0.343101, .green = 0.990965, .blue = 0.072772 },
+	{ .red = 0.347985, .green = 1.000000, .blue = 0.107204 },
+	{ .red = 0.400000, .green = 0.999756, .blue = 0.227839 },
+	{ .red = 0.476679, .green = 0.999512, .blue = 0.351893 },
+	{ .red = 0.493040, .green = 0.999756, .blue = 0.421978 },
+	{ .red = 0.494994, .green = 0.998535, .blue = 0.482784 },
+	{ .red = 0.495482, .green = 0.998535, .blue = 0.542369 },
+	{ .red = 0.494505, .green = 0.999756, .blue = 0.600244 },
+	{ .red = 0.498657, .green = 0.998291, .blue = 0.657875 },
+	{ .red = 0.501832, .green = 0.998291, .blue = 0.713065 },
+	{ .red = 0.506227, .green = 0.998779, .blue = 0.766300 },
+	{ .red = 0.514286, .green = 0.999023, .blue = 0.817827 },
+	{ .red = 0.527717, .green = 0.999267, .blue = 0.867399 },
+	{ .red = 0.547253, .green = 0.999512, .blue = 0.915018 },
+	{ .red = 0.579487, .green = 0.999267, .blue = 0.958730 },
+	{ .red = 0.621978, .green = 0.999023, .blue = 0.996581 },
+	{ .red = 0.582662, .green = 0.963858, .blue = 0.999023 },
+	{ .red = 0.325763, .green = 0.991941, .blue = 0.073016 },
+	{ .red = 0.332357, .green = 1.000000, .blue = 0.108181 },
+	{ .red = 0.382906, .green = 0.999756, .blue = 0.218803 },
+	{ .red = 0.458120, .green = 0.999267, .blue = 0.336020 },
+	{ .red = 0.474237, .green = 0.999267, .blue = 0.401954 },
+	{ .red = 0.475214, .green = 0.999023, .blue = 0.458608 },
+	{ .red = 0.475458, .green = 0.999512, .blue = 0.515507 },
+	{ .red = 0.477656, .green = 0.998779, .blue = 0.572161 },
+	{ .red = 0.478877, .green = 0.999023, .blue = 0.626862 },
+	{ .red = 0.481074, .green = 0.999267, .blue = 0.679853 },
+	{ .red = 0.487668, .green = 0.998046, .blue = 0.731624 },
+	{ .red = 0.491331, .green = 0.999512, .blue = 0.781197 },
+	{ .red = 0.503541, .green = 0.998291, .blue = 0.829060 },
+	{ .red = 0.515018, .green = 0.999512, .blue = 0.875946 },
+	{ .red = 0.536020, .green = 0.999512, .blue = 0.920147 },
+	{ .red = 0.568254, .green = 0.999267, .blue = 0.960928 },
+	{ .red = 0.611233, .green = 0.998779, .blue = 0.996093 },
+	{ .red = 0.809035, .green = 0.063736, .blue = 0.006105 },
+	{ .red = 0.795360, .green = 0.013919, .blue = 0.129915 },
+	{ .red = 0.769963, .green = 0.010745, .blue = 0.254945 },
+	{ .red = 0.751160, .green = 0.010256, .blue = 0.372894 },
+	{ .red = 0.740171, .green = 0.012698, .blue = 0.489866 },
+	{ .red = 0.732112, .green = 0.019048, .blue = 0.606349 },
+	{ .red = 0.723077, .green = 0.018315, .blue = 0.721123 },
+	{ .red = 0.674725, .green = 0.013187, .blue = 0.756288 },
+	{ .red = 0.653724, .green = 0.021245, .blue = 0.815140 },
+	{ .red = 0.650305, .green = 0.015629, .blue = 0.894994 },
+	{ .red = 0.644933, .green = 0.019292, .blue = 0.973382 },
+	{ .red = 0.608303, .green = 0.079609, .blue = 0.995360 },
+	{ .red = 0.565568, .green = 0.104518, .blue = 0.998291 },
+	{ .red = 0.526740, .green = 0.119902, .blue = 0.998535 },
+	{ .red = 0.492063, .green = 0.131380, .blue = 0.998779 },
+	{ .red = 0.461050, .green = 0.136020, .blue = 0.999267 },
+	{ .red = 0.433211, .green = 0.142369, .blue = 0.998535 },
+	{ .red = 0.794872, .green = 0.140904, .blue = 0.008791 },
+	{ .red = 0.889866, .green = 0.015385, .blue = 0.119902 },
+	{ .red = 0.840781, .green = 0.016606, .blue = 0.260317 },
+	{ .red = 0.814408, .green = 0.010745, .blue = 0.390720 },
+	{ .red = 0.799267, .green = 0.015629, .blue = 0.521612 },
+	{ .red = 0.785592, .green = 0.016850, .blue = 0.650061 },
+	{ .red = 0.767766, .green = 0.019292, .blue = 0.769475 },
+	{ .red = 0.716239, .green = 0.010501, .blue = 0.809035 },
+	{ .red = 0.695971, .green = 0.022466, .blue = 0.875214 },
+	{ .red = 0.691819, .green = 0.021490, .blue = 0.960684 },
+	{ .red = 0.656166, .green = 0.071795, .blue = 0.995116 },
+	{ .red = 0.607814, .green = 0.104029, .blue = 0.998291 },
+	{ .red = 0.564103, .green = 0.120879, .blue = 0.998779 },
+	{ .red = 0.525031, .green = 0.130891, .blue = 0.998535 },
+	{ .red = 0.490842, .green = 0.139683, .blue = 0.999023 },
+	{ .red = 0.460317, .green = 0.145543, .blue = 0.999512 },
+	{ .red = 0.437118, .green = 0.174603, .blue = 0.998535 },
+	{ .red = 0.755067, .green = 0.251038, .blue = 0.005128 },
+	{ .red = 0.982418, .green = 0.259829, .blue = 0.108181 },
+	{ .red = 0.992186, .green = 0.240049, .blue = 0.282784 },
+	{ .red = 0.991941, .green = 0.228327, .blue = 0.452015 },
+	{ .red = 0.982418, .green = 0.221490, .blue = 0.623932 },
+	{ .red = 0.968498, .green = 0.209768, .blue = 0.796581 },
+	{ .red = 0.954090, .green = 0.190476, .blue = 0.962637 },
+	{ .red = 0.874969, .green = 0.194139, .blue = 0.998779 },
+	{ .red = 0.788767, .green = 0.200488, .blue = 0.999023 },
+	{ .red = 0.719170, .green = 0.204396, .blue = 0.998779 },
+	{ .red = 0.660806, .green = 0.207326, .blue = 0.998291 },
+	{ .red = 0.611722, .green = 0.211233, .blue = 0.999023 },
+	{ .red = 0.569475, .green = 0.216117, .blue = 0.998779 },
+	{ .red = 0.532845, .green = 0.222711, .blue = 0.998535 },
+	{ .red = 0.501832, .green = 0.232234, .blue = 0.999023 },
+	{ .red = 0.474969, .green = 0.242491, .blue = 0.999756 },
+	{ .red = 0.451770, .green = 0.255922, .blue = 0.998535 },
+	{ .red = 0.756044, .green = 0.372405, .blue = 0.011477 },
+	{ .red = 0.969719, .green = 0.429304, .blue = 0.088889 },
+	{ .red = 0.972161, .green = 0.425885, .blue = 0.271062 },
+	{ .red = 0.979731, .green = 0.414408, .blue = 0.437118 },
+	{ .red = 0.973871, .green = 0.409280, .blue = 0.608059 },
+	{ .red = 0.959463, .green = 0.406105, .blue = 0.779976 },
+	{ .red = 0.944811, .green = 0.401221, .blue = 0.942613 },
+	{ .red = 0.884249, .green = 0.395604, .blue = 0.999512 },
+	{ .red = 0.802198, .green = 0.387546, .blue = 0.999512 },
+	{ .red = 0.736020, .green = 0.377534, .blue = 0.998779 },
+	{ .red = 0.681074, .green = 0.368254, .blue = 0.999023 },
+	{ .red = 0.634188, .green = 0.360195, .blue = 0.999023 },
+	{ .red = 0.593407, .green = 0.354579, .blue = 0.999023 },
+	{ .red = 0.558242, .green = 0.351404, .blue = 0.998535 },
+	{ .red = 0.527717, .green = 0.350183, .blue = 0.999023 },
+	{ .red = 0.501099, .green = 0.351648, .blue = 0.998046 },
+	{ .red = 0.478877, .green = 0.355067, .blue = 0.999267 },
+	{ .red = 0.781685, .green = 0.513065, .blue = 0.009768 },
+	{ .red = 0.937973, .green = 0.579243, .blue = 0.010501 },
+	{ .red = 0.952381, .green = 0.584615, .blue = 0.264957 },
+	{ .red = 0.951893, .green = 0.581685, .blue = 0.425153 },
+	{ .red = 0.955311, .green = 0.573138, .blue = 0.587057 },
+	{ .red = 0.941880, .green = 0.569475, .blue = 0.756288 },
+	{ .red = 0.923321, .green = 0.566545, .blue = 0.914530 },
+	{ .red = 0.886935, .green = 0.557753, .blue = 0.999267 },
+	{ .red = 0.812210, .green = 0.543590, .blue = 0.999512 },
+	{ .red = 0.753846, .green = 0.526984, .blue = 0.999512 },
+	{ .red = 0.704762, .green = 0.510867, .blue = 0.998779 },
+	{ .red = 0.662515, .green = 0.496703, .blue = 0.998779 },
+	{ .red = 0.625885, .green = 0.484737, .blue = 0.998535 },
+	{ .red = 0.593407, .green = 0.474969, .blue = 0.999023 },
+	{ .red = 0.564835, .green = 0.467888, .blue = 0.998535 },
+	{ .red = 0.539927, .green = 0.462759, .blue = 0.999023 },
+	{ .red = 0.518437, .green = 0.459829, .blue = 0.998779 },
+	{ .red = 0.805128, .green = 0.664469, .blue = 0.017582 },
+	{ .red = 0.863980, .green = 0.696703, .blue = 0.014896 },
+	{ .red = 0.914774, .green = 0.725763, .blue = 0.240049 },
+	{ .red = 0.911111, .green = 0.723321, .blue = 0.411233 },
+	{ .red = 0.906227, .green = 0.719414, .blue = 0.566056 },
+	{ .red = 0.903297, .green = 0.711844, .blue = 0.718681 },
+	{ .red = 0.883761, .green = 0.707692, .blue = 0.874969 },
+	{ .red = 0.877411, .green = 0.696947, .blue = 0.999023 },
+	{ .red = 0.815140, .green = 0.678632, .blue = 0.998291 },
+	{ .red = 0.769475, .green = 0.658120, .blue = 0.999267 },
+	{ .red = 0.730159, .green = 0.638339, .blue = 0.998779 },
+	{ .red = 0.695238, .green = 0.620269, .blue = 0.997802 },
+	{ .red = 0.664225, .green = 0.604151, .blue = 0.998046 },
+	{ .red = 0.636386, .green = 0.590720, .blue = 0.998779 },
+	{ .red = 0.610989, .green = 0.578999, .blue = 0.998779 },
+	{ .red = 0.588278, .green = 0.569231, .blue = 0.998291 },
+	{ .red = 0.567766, .green = 0.561416, .blue = 0.997802 },
+	{ .red = 0.837851, .green = 0.837851, .blue = 0.014652 },
+	{ .red = 0.844444, .green = 0.840049, .blue = 0.013187 },
+	{ .red = 0.855922, .green = 0.845665, .blue = 0.195849 },
+	{ .red = 0.851770, .green = 0.843223, .blue = 0.379976 },
+	{ .red = 0.845665, .green = 0.839072, .blue = 0.536508 },
+	{ .red = 0.837607, .green = 0.833455, .blue = 0.684249 },
+	{ .red = 0.827595, .green = 0.826374, .blue = 0.826618 },
+	{ .red = 0.829548, .green = 0.813187, .blue = 0.961172 },
+	{ .red = 0.810256, .green = 0.791209, .blue = 0.998535 },
+	{ .red = 0.783150, .green = 0.767766, .blue = 0.998535 },
+	{ .red = 0.757021, .green = 0.746276, .blue = 0.999023 },
+	{ .red = 0.731624, .green = 0.726496, .blue = 0.999023 },
+	{ .red = 0.707204, .green = 0.708669, .blue = 0.998291 },
+	{ .red = 0.684249, .green = 0.692552, .blue = 0.999023 },
+	{ .red = 0.662515, .green = 0.678144, .blue = 0.998291 },
+	{ .red = 0.642735, .green = 0.665690, .blue = 0.999023 },
+	{ .red = 0.623932, .green = 0.654457, .blue = 0.998779 },
+	{ .red = 0.765324, .green = 0.892063, .blue = 0.020513 },
+	{ .red = 0.771917, .green = 0.904029, .blue = 0.021734 },
+	{ .red = 0.791209, .green = 0.940904, .blue = 0.121123 },
+	{ .red = 0.786325, .green = 0.938462, .blue = 0.336020 },
+	{ .red = 0.779731, .green = 0.934554, .blue = 0.493040 },
+	{ .red = 0.771673, .green = 0.929182, .blue = 0.636630 },
+	{ .red = 0.752869, .green = 0.924542, .blue = 0.776313 },
+	{ .red = 0.735043, .green = 0.916239, .blue = 0.917949 },
+	{ .red = 0.771673, .green = 0.879609, .blue = 0.999023 },
+	{ .red = 0.795604, .green = 0.854945, .blue = 0.999023 },
+	{ .red = 0.784860, .green = 0.832723, .blue = 0.999512 },
+	{ .red = 0.768987, .green = 0.812698, .blue = 0.999756 },
+	{ .red = 0.751404, .green = 0.794139, .blue = 0.998535 },
+	{ .red = 0.733333, .green = 0.777289, .blue = 0.999267 },
+	{ .red = 0.715263, .green = 0.761905, .blue = 0.999023 },
+	{ .red = 0.697680, .green = 0.747741, .blue = 0.998291 },
+	{ .red = 0.680586, .green = 0.734799, .blue = 0.998535 },
+	{ .red = 0.696703, .green = 0.927717, .blue = 0.015873 },
+	{ .red = 0.700366, .green = 0.942613, .blue = 0.015385 },
+	{ .red = 0.712576, .green = 0.995116, .blue = 0.083028 },
+	{ .red = 0.712821, .green = 0.999512, .blue = 0.307448 },
+	{ .red = 0.710379, .green = 0.999267, .blue = 0.459585 },
+	{ .red = 0.704274, .green = 0.999023, .blue = 0.593162 },
+	{ .red = 0.675214, .green = 0.998779, .blue = 0.724054 },
+	{ .red = 0.644444, .green = 0.996825, .blue = 0.856166 },
+	{ .red = 0.630769, .green = 0.985592, .blue = 0.988767 },
+	{ .red = 0.732601, .green = 0.912332, .blue = 0.998779 },
+	{ .red = 0.759219, .green = 0.877900, .blue = 0.998779 },
+	{ .red = 0.780464, .green = 0.864225, .blue = 0.998535 },
+	{ .red = 0.794872, .green = 0.861538, .blue = 0.999023 },
+	{ .red = 0.780464, .green = 0.844689, .blue = 0.998535 },
+	{ .red = 0.765324, .green = 0.829060, .blue = 0.998046 },
+	{ .red = 0.749695, .green = 0.814408, .blue = 0.998046 },
+	{ .red = 0.734066, .green = 0.800733, .blue = 0.999023 },
+	{ .red = 0.636142, .green = 0.952625, .blue = 0.015873 },
+	{ .red = 0.636386, .green = 0.967033, .blue = 0.025397 },
+	{ .red = 0.640781, .green = 0.999267, .blue = 0.163126 },
+	{ .red = 0.656654, .green = 0.999512, .blue = 0.344567 },
+	{ .red = 0.678632, .green = 0.999267, .blue = 0.492552 },
+	{ .red = 0.692552, .green = 0.999756, .blue = 0.616361 },
+	{ .red = 0.675702, .green = 0.999512, .blue = 0.712088 },
+	{ .red = 0.659829, .green = 0.998779, .blue = 0.807082 },
+	{ .red = 0.646886, .green = 0.998046, .blue = 0.902320 },
+	{ .red = 0.636874, .green = 0.997070, .blue = 0.998779 },
+	{ .red = 0.716484, .green = 0.931624, .blue = 0.998535 },
+	{ .red = 0.734066, .green = 0.895726, .blue = 0.998779 },
+	{ .red = 0.743101, .green = 0.872527, .blue = 0.998535 },
+	{ .red = 0.750916, .green = 0.858120, .blue = 0.998535 },
+	{ .red = 0.765568, .green = 0.854457, .blue = 0.998535 },
+	{ .red = 0.801954, .green = 0.870818, .blue = 0.999023 },
+	{ .red = 0.783394, .green = 0.854457, .blue = 0.998779 },
+	{ .red = 0.582418, .green = 0.969963, .blue = 0.010745 },
+	{ .red = 0.580220, .green = 0.982418, .blue = 0.037118 },
+	{ .red = 0.590232, .green = 0.999756, .blue = 0.199512 },
+	{ .red = 0.621978, .green = 0.999023, .blue = 0.364835 },
+	{ .red = 0.663736, .green = 0.998779, .blue = 0.511355 },
+	{ .red = 0.682295, .green = 0.998535, .blue = 0.619292 },
+	{ .red = 0.672039, .green = 0.998535, .blue = 0.697680 },
+	{ .red = 0.662027, .green = 0.999512, .blue = 0.774603 },
+	{ .red = 0.656654, .green = 0.999267, .blue = 0.851526 },
+	{ .red = 0.658608, .green = 0.998779, .blue = 0.926740 },
+	{ .red = 0.664225, .green = 0.998779, .blue = 0.999267 },
+	{ .red = 0.709158, .green = 0.944811, .blue = 0.999023 },
+	{ .red = 0.717949, .green = 0.908913, .blue = 0.998046 },
+	{ .red = 0.720147, .green = 0.883028, .blue = 0.998291 },
+	{ .red = 0.721368, .green = 0.863980, .blue = 0.999267 },
+	{ .red = 0.723321, .green = 0.850061, .blue = 0.999267 },
+	{ .red = 0.726740, .green = 0.840781, .blue = 0.999756 },
+	{ .red = 0.535531, .green = 0.981197, .blue = 0.023687 },
+	{ .red = 0.531868, .green = 0.991941, .blue = 0.043956 },
+	{ .red = 0.552869, .green = 0.999267, .blue = 0.220513 },
+	{ .red = 0.596581, .green = 0.998779, .blue = 0.373871 },
+	{ .red = 0.652503, .green = 0.998535, .blue = 0.517705 },
+	{ .red = 0.667643, .green = 0.998535, .blue = 0.609035 },
+	{ .red = 0.662271, .green = 0.998291, .blue = 0.678877 },
+	{ .red = 0.657387, .green = 0.998291, .blue = 0.746764 },
+	{ .red = 0.653968, .green = 0.999267, .blue = 0.813431 },
+	{ .red = 0.657875, .green = 0.999023, .blue = 0.878877 },
+	{ .red = 0.671795, .green = 0.998291, .blue = 0.941148 },
+	{ .red = 0.688645, .green = 0.999512, .blue = 0.999023 },
+	{ .red = 0.704762, .green = 0.953602, .blue = 0.999267 },
+	{ .red = 0.704029, .green = 0.918926, .blue = 0.998779 },
+	{ .red = 0.700855, .green = 0.891819, .blue = 0.998535 },
+	{ .red = 0.697924, .green = 0.869841, .blue = 0.998779 },
+	{ .red = 0.695482, .green = 0.852747, .blue = 0.999512 },
+	{ .red = 0.496215, .green = 0.984860, .blue = 0.060562 },
+	{ .red = 0.492796, .green = 0.993162, .blue = 0.077167 },
+	{ .red = 0.522833, .green = 0.998779, .blue = 0.230525 },
+	{ .red = 0.574603, .green = 0.999023, .blue = 0.373871 },
+	{ .red = 0.639072, .green = 0.999267, .blue = 0.513553 },
+	{ .red = 0.649328, .green = 0.998779, .blue = 0.591453 },
+	{ .red = 0.645665, .green = 0.999267, .blue = 0.655189 },
+	{ .red = 0.644444, .green = 0.998535, .blue = 0.718437 },
+	{ .red = 0.643223, .green = 0.999267, .blue = 0.779243 },
+	{ .red = 0.647375, .green = 0.999023, .blue = 0.839072 },
+	{ .red = 0.656654, .green = 0.999512, .blue = 0.896703 },
+	{ .red = 0.680830, .green = 0.998046, .blue = 0.950183 },
+	{ .red = 0.707204, .green = 0.999267, .blue = 0.998046 },
+	{ .red = 0.699878, .green = 0.959463, .blue = 0.999023 },
+	{ .red = 0.690354, .green = 0.926252, .blue = 0.999267 },
+	{ .red = 0.682540, .green = 0.898413, .blue = 0.999023 },
+	{ .red = 0.676190, .green = 0.875214, .blue = 0.999023 },
+	{ .red = 0.461538, .green = 0.989499, .blue = 0.061294 },
+	{ .red = 0.462027, .green = 0.996581, .blue = 0.094505 },
+	{ .red = 0.496703, .green = 0.999023, .blue = 0.232479 },
+	{ .red = 0.553602, .green = 0.998779, .blue = 0.368010 },
+	{ .red = 0.622955, .green = 1.000000, .blue = 0.502076 },
+	{ .red = 0.628571, .green = 0.998779, .blue = 0.569719 },
+	{ .red = 0.626862, .green = 0.998779, .blue = 0.629792 },
+	{ .red = 0.625397, .green = 0.999267, .blue = 0.688645 },
+	{ .red = 0.627106, .green = 0.998535, .blue = 0.746520 },
+	{ .red = 0.630281, .green = 0.998779, .blue = 0.802442 },
+	{ .red = 0.638584, .green = 0.998779, .blue = 0.856654 },
+	{ .red = 0.654701, .green = 0.998291, .blue = 0.908425 },
+	{ .red = 0.679853, .green = 0.999267, .blue = 0.956777 },
+	{ .red = 0.715995, .green = 0.999023, .blue = 0.997314 },
+	{ .red = 0.691331, .green = 0.963614, .blue = 0.999023 },
+	{ .red = 0.675214, .green = 0.931624, .blue = 0.999756 },
+	{ .red = 0.664957, .green = 0.902808, .blue = 0.998046 },
+	{ .red = 0.431013, .green = 0.993407, .blue = 0.054701 },
+	{ .red = 0.435897, .green = 0.998291, .blue = 0.104518 },
+	{ .red = 0.472527, .green = 0.999267, .blue = 0.229304 },
+	{ .red = 0.532357, .green = 0.999023, .blue = 0.357265 },
+	{ .red = 0.600733, .green = 0.999023, .blue = 0.482540 },
+	{ .red = 0.605128, .green = 0.999267, .blue = 0.544811 },
+	{ .red = 0.605617, .green = 0.998291, .blue = 0.602686 },
+	{ .red = 0.604640, .green = 0.999267, .blue = 0.658608 },
+	{ .red = 0.605861, .green = 0.999023, .blue = 0.713797 },
+	{ .red = 0.609035, .green = 0.998779, .blue = 0.767277 },
+	{ .red = 0.613919, .green = 0.999756, .blue = 0.819048 },
+	{ .red = 0.625641, .green = 0.999512, .blue = 0.869353 },
+	{ .red = 0.646398, .green = 0.998535, .blue = 0.916484 },
+	{ .red = 0.674725, .green = 0.999512, .blue = 0.960684 },
+	{ .red = 0.715263, .green = 0.998779, .blue = 0.996825 },
+	{ .red = 0.678877, .green = 0.966545, .blue = 0.999267 },
+	{ .red = 0.658852, .green = 0.935531, .blue = 0.999756 },
+	{ .red = 0.404884, .green = 0.995116, .blue = 0.054212 },
+	{ .red = 0.412210, .green = 0.999267, .blue = 0.107204 },
+	{ .red = 0.450305, .green = 0.999267, .blue = 0.223199 },
+	{ .red = 0.511111, .green = 0.998535, .blue = 0.344078 },
+	{ .red = 0.576557, .green = 0.999023, .blue = 0.459829 },
+	{ .red = 0.580952, .green = 0.999267, .blue = 0.518681 },
+	{ .red = 0.581685, .green = 0.999023, .blue = 0.574359 },
+	{ .red = 0.582418, .green = 0.998535, .blue = 0.628816 },
+	{ .red = 0.582906, .green = 0.999267, .blue = 0.681563 },
+	{ .red = 0.585836, .green = 0.999023, .blue = 0.733089 },
+	{ .red = 0.590232, .green = 0.999267, .blue = 0.783150 },
+	{ .red = 0.598291, .green = 0.999267, .blue = 0.831746 },
+	{ .red = 0.612698, .green = 0.998779, .blue = 0.878144 },
+	{ .red = 0.634432, .green = 0.998291, .blue = 0.922100 },
+	{ .red = 0.664713, .green = 0.999267, .blue = 0.963126 },
+	{ .red = 0.706471, .green = 0.998779, .blue = 0.996337 },
+	{ .red = 0.664225, .green = 0.968254, .blue = 0.999023 },
+	{ .red = 0.384615, .green = 0.993407, .blue = 0.066911 },
+	{ .red = 0.391209, .green = 0.999512, .blue = 0.107204 },
+	{ .red = 0.429548, .green = 0.999023, .blue = 0.215140 },
+	{ .red = 0.489621, .green = 0.998779, .blue = 0.328938 },
+	{ .red = 0.551648, .green = 0.999267, .blue = 0.436386 },
+	{ .red = 0.557753, .green = 0.998779, .blue = 0.493773 },
+	{ .red = 0.557998, .green = 0.999023, .blue = 0.546276 },
+	{ .red = 0.558730, .green = 0.999023, .blue = 0.598779 },
+	{ .red = 0.559951, .green = 0.999023, .blue = 0.650061 },
+	{ .red = 0.562393, .green = 0.998779, .blue = 0.700122 },
+	{ .red = 0.566789, .green = 0.998535, .blue = 0.748962 },
+	{ .red = 0.572405, .green = 0.998779, .blue = 0.795849 },
+	{ .red = 0.581441, .green = 0.999023, .blue = 0.841514 },
+	{ .red = 0.595360, .green = 0.999267, .blue = 0.885470 },
+	{ .red = 0.619536, .green = 0.998291, .blue = 0.926252 },
+	{ .red = 0.650305, .green = 0.999023, .blue = 0.964591 },
+	{ .red = 0.691575, .green = 0.998535, .blue = 0.996093 },
+	{ .red = 0.884982, .green = 0.063492, .blue = 0.019048 },
+	{ .red = 0.861050, .green = 0.012454, .blue = 0.121368 },
+	{ .red = 0.830281, .green = 0.010989, .blue = 0.237118 },
+	{ .red = 0.809280, .green = 0.017094, .blue = 0.346520 },
+	{ .red = 0.794872, .green = 0.012698, .blue = 0.452991 },
+	{ .red = 0.793162, .green = 0.011722, .blue = 0.564103 },
+	{ .red = 0.791209, .green = 0.016606, .blue = 0.675214 },
+	{ .red = 0.786569, .green = 0.021490, .blue = 0.784860 },
+	{ .red = 0.737973, .green = 0.021734, .blue = 0.813919 },
+	{ .red = 0.711844, .green = 0.017094, .blue = 0.861050 },
+	{ .red = 0.708913, .green = 0.015873, .blue = 0.935287 },
+	{ .red = 0.699389, .green = 0.045421, .blue = 1.000000 },
+	{ .red = 0.650061, .green = 0.092552, .blue = 0.998535 },
+	{ .red = 0.607082, .green = 0.114530, .blue = 0.998291 },
+	{ .red = 0.568742, .green = 0.127228, .blue = 0.998291 },
+	{ .red = 0.534554, .green = 0.136508, .blue = 0.999023 },
+	{ .red = 0.503785, .green = 0.145055, .blue = 0.998779 },
+	{ .red = 0.884493, .green = 0.130891, .blue = 0.003175 },
+	{ .red = 0.953358, .green = 0.013919, .blue = 0.114042 },
+	{ .red = 0.900855, .green = 0.010745, .blue = 0.242979 },
+	{ .red = 0.870818, .green = 0.014408, .blue = 0.361172 },
+	{ .red = 0.851282, .green = 0.018559, .blue = 0.476923 },
+	{ .red = 0.846642, .green = 0.017582, .blue = 0.598291 },
+	{ .red = 0.839805, .green = 0.018803, .blue = 0.717216 },
+	{ .red = 0.829304, .green = 0.017827, .blue = 0.830525 },
+	{ .red = 0.777289, .green = 0.015873, .blue = 0.861783 },
+	{ .red = 0.750183, .green = 0.020269, .blue = 0.913065 },
+	{ .red = 0.738706, .green = 0.039316, .blue = 0.980220 },
+	{ .red = 0.697680, .green = 0.084982, .blue = 0.999756 },
+	{ .red = 0.649084, .green = 0.110623, .blue = 0.999512 },
+	{ .red = 0.605372, .green = 0.126007, .blue = 0.998291 },
+	{ .red = 0.567521, .green = 0.136508, .blue = 0.998535 },
+	{ .red = 0.534554, .green = 0.148962, .blue = 0.999512 },
+	{ .red = 0.507937, .green = 0.177778, .blue = 0.998535 },
+	{ .red = 0.844689, .green = 0.239560, .blue = 0.005372 },
+	{ .red = 0.999267, .green = 0.239316, .blue = 0.108913 },
+	{ .red = 0.999512, .green = 0.226862, .blue = 0.259341 },
+	{ .red = 0.998535, .green = 0.216361, .blue = 0.401954 },
+	{ .red = 0.999267, .green = 0.211722, .blue = 0.548230 },
+	{ .red = 0.998779, .green = 0.205617, .blue = 0.697680 },
+	{ .red = 0.999512, .green = 0.192430, .blue = 0.852259 },
+	{ .red = 0.992430, .green = 0.171673, .blue = 0.999023 },
+	{ .red = 0.896215, .green = 0.187302, .blue = 0.998779 },
+	{ .red = 0.820269, .green = 0.196825, .blue = 0.999267 },
+	{ .red = 0.757021, .green = 0.204640, .blue = 0.999512 },
+	{ .red = 0.702320, .green = 0.211966, .blue = 0.998535 },
+	{ .red = 0.655433, .green = 0.219292, .blue = 0.998291 },
+	{ .red = 0.615385, .green = 0.227595, .blue = 0.998779 },
+	{ .red = 0.579976, .green = 0.237118, .blue = 0.998535 },
+	{ .red = 0.549206, .green = 0.247375, .blue = 0.999267 },
+	{ .red = 0.522833, .green = 0.260317, .blue = 0.998779 },
+	{ .red = 0.821001, .green = 0.346520, .blue = 0.010256 },
+	{ .red = 0.999512, .green = 0.387302, .blue = 0.101099 },
+	{ .red = 0.999267, .green = 0.410745, .blue = 0.275458 },
+	{ .red = 0.998779, .green = 0.401221, .blue = 0.416361 },
+	{ .red = 0.998535, .green = 0.399023, .blue = 0.557265 },
+	{ .red = 0.998535, .green = 0.398046, .blue = 0.700366 },
+	{ .red = 0.999023, .green = 0.394139, .blue = 0.848107 },
+	{ .red = 0.999512, .green = 0.385836, .blue = 0.994872 },
+	{ .red = 0.910379, .green = 0.383883, .blue = 0.999267 },
+	{ .red = 0.837363, .green = 0.378510, .blue = 0.999267 },
+	{ .red = 0.776313, .green = 0.372161, .blue = 0.998535 },
+	{ .red = 0.724786, .green = 0.366056, .blue = 0.999023 },
+	{ .red = 0.679609, .green = 0.361661, .blue = 0.998779 },
+	{ .red = 0.640293, .green = 0.358242, .blue = 0.999023 },
+	{ .red = 0.605617, .green = 0.357265, .blue = 0.998779 },
+	{ .red = 0.575580, .green = 0.358486, .blue = 0.999267 },
+	{ .red = 0.548718, .green = 0.360928, .blue = 0.998291 },
+	{ .red = 0.847619, .green = 0.475702, .blue = 0.011233 },
+	{ .red = 0.998535, .green = 0.529670, .blue = 0.074969 },
+	{ .red = 0.999023, .green = 0.544811, .blue = 0.273993 },
+	{ .red = 0.998779, .green = 0.564591, .blue = 0.433944 },
+	{ .red = 0.999267, .green = 0.559219, .blue = 0.570696 },
+	{ .red = 0.998535, .green = 0.557998, .blue = 0.706716 },
+	{ .red = 0.998291, .green = 0.555311, .blue = 0.846886 },
+	{ .red = 0.998779, .green = 0.547741, .blue = 0.987302 },
+	{ .red = 0.919414, .green = 0.541392, .blue = 0.999023 },
+	{ .red = 0.852015, .green = 0.530159, .blue = 0.998779 },
+	{ .red = 0.796825, .green = 0.516972, .blue = 0.998046 },
+	{ .red = 0.750427, .green = 0.504274, .blue = 0.999756 },
+	{ .red = 0.708913, .green = 0.493040, .blue = 0.999512 },
+	{ .red = 0.671795, .green = 0.483272, .blue = 0.998535 },
+	{ .red = 0.639560, .green = 0.475458, .blue = 0.999267 },
+	{ .red = 0.610012, .green = 0.469841, .blue = 0.998046 },
+	{ .red = 0.584615, .green = 0.465446, .blue = 0.999023 },
+	{ .red = 0.863980, .green = 0.608059, .blue = 0.016117 },
+	{ .red = 0.962882, .green = 0.654945, .blue = 0.018315 },
+	{ .red = 0.998779, .green = 0.678877, .blue = 0.254212 },
+	{ .red = 0.998535, .green = 0.687668, .blue = 0.419048 },
+	{ .red = 0.999023, .green = 0.697192, .blue = 0.568498 },
+	{ .red = 0.999267, .green = 0.694017, .blue = 0.704274 },
+	{ .red = 0.998535, .green = 0.690110, .blue = 0.842491 },
+	{ .red = 0.998535, .green = 0.682051, .blue = 0.987057 },
+	{ .red = 0.920635, .green = 0.675702, .blue = 0.998291 },
+	{ .red = 0.862027, .green = 0.661050, .blue = 0.998535 },
+	{ .red = 0.815385, .green = 0.644200, .blue = 0.998779 },
+	{ .red = 0.775336, .green = 0.627595, .blue = 0.999023 },
+	{ .red = 0.739683, .green = 0.612210, .blue = 0.999023 },
+	{ .red = 0.706960, .green = 0.598291, .blue = 0.997802 },
+	{ .red = 0.678144, .green = 0.586325, .blue = 0.998779 },
+	{ .red = 0.651526, .green = 0.575580, .blue = 0.998535 },
+	{ .red = 0.627839, .green = 0.567033, .blue = 0.999023 },
+	{ .red = 0.880586, .green = 0.748474, .blue = 0.010989 },
+	{ .red = 0.921368, .green = 0.771673, .blue = 0.017582 },
+	{ .red = 0.999756, .green = 0.819536, .blue = 0.195116 },
+	{ .red = 0.998779, .green = 0.819048, .blue = 0.372650 },
+	{ .red = 0.996581, .green = 0.816606, .blue = 0.523810 },
+	{ .red = 0.989255, .green = 0.810989, .blue = 0.667155 },
+	{ .red = 0.982662, .green = 0.801954, .blue = 0.809280 },
+	{ .red = 0.961172, .green = 0.795849, .blue = 0.952381 },
+	{ .red = 0.914286, .green = 0.786325, .blue = 0.998291 },
+	{ .red = 0.867399, .green = 0.769719, .blue = 0.998046 },
+	{ .red = 0.831746, .green = 0.750916, .blue = 0.999267 },
+	{ .red = 0.800000, .green = 0.732357, .blue = 0.998535 },
+	{ .red = 0.771429, .green = 0.715018, .blue = 0.999512 },
+	{ .red = 0.744322, .green = 0.698657, .blue = 0.998779 },
+	{ .red = 0.719170, .green = 0.684005, .blue = 0.998535 },
+	{ .red = 0.695971, .green = 0.670818, .blue = 0.998291 },
+	{ .red = 0.674237, .green = 0.658852, .blue = 0.998535 },
+	{ .red = 0.897680, .green = 0.897680, .blue = 0.017338 },
+	{ .red = 0.905739, .green = 0.902564, .blue = 0.015873 },
+	{ .red = 0.931624, .green = 0.919414, .blue = 0.120391 },
+	{ .red = 0.927717, .green = 0.916728, .blue = 0.330647 },
+	{ .red = 0.921856, .green = 0.912821, .blue = 0.484737 },
+	{ .red = 0.914042, .green = 0.907204, .blue = 0.626618 },
+	{ .red = 0.904518, .green = 0.900366, .blue = 0.761905 },
+	{ .red = 0.893040, .green = 0.891819, .blue = 0.892063 },
+	{ .red = 0.890598, .green = 0.876923, .blue = 0.999512 },
+	{ .red = 0.868132, .green = 0.855922, .blue = 0.998046 },
+	{ .red = 0.846398, .green = 0.835897, .blue = 0.999267 },
+	{ .red = 0.824176, .green = 0.816850, .blue = 0.998779 },
+	{ .red = 0.802442, .green = 0.798779, .blue = 0.999023 },
+	{ .red = 0.780952, .green = 0.781929, .blue = 0.998535 },
+	{ .red = 0.760440, .green = 0.766056, .blue = 0.998779 },
+	{ .red = 0.740171, .green = 0.751404, .blue = 0.998779 },
+	{ .red = 0.720879, .green = 0.737973, .blue = 0.998535 },
+	{ .red = 0.818315, .green = 0.934554, .blue = 0.021245 },
+	{ .red = 0.825397, .green = 0.945055, .blue = 0.021245 },
+	{ .red = 0.851526, .green = 0.985104, .blue = 0.032234 },
+	{ .red = 0.853236, .green = 0.991697, .blue = 0.281319 },
+	{ .red = 0.847131, .green = 0.988278, .blue = 0.438584 },
+	{ .red = 0.839805, .green = 0.983150, .blue = 0.577289 },
+	{ .red = 0.831013, .green = 0.976557, .blue = 0.707204 },
+	{ .red = 0.812698, .green = 0.970696, .blue = 0.834432 },
+	{ .red = 0.795604, .green = 0.961661, .blue = 0.963126 },
+	{ .red = 0.844444, .green = 0.917949, .blue = 0.999023 },
+	{ .red = 0.860073, .green = 0.900611, .blue = 0.998291 },
+	{ .red = 0.848107, .green = 0.881807, .blue = 0.998779 },
+	{ .red = 0.832967, .green = 0.864225, .blue = 0.999023 },
+	{ .red = 0.816361, .green = 0.847619, .blue = 0.998291 },
+	{ .red = 0.799267, .green = 0.831990, .blue = 0.999267 },
+	{ .red = 0.782173, .green = 0.817094, .blue = 0.999512 },
+	{ .red = 0.765079, .green = 0.802930, .blue = 0.999023 },
+	{ .red = 0.745543, .green = 0.957265, .blue = 0.017582 },
+	{ .red = 0.749939, .green = 0.969475, .blue = 0.015873 },
+	{ .red = 0.761416, .green = 0.999512, .blue = 0.140659 },
+	{ .red = 0.766789, .green = 0.999023, .blue = 0.325763 },
+	{ .red = 0.774603, .green = 0.998779, .blue = 0.468620 },
+	{ .red = 0.783639, .green = 0.999756, .blue = 0.594628 },
+	{ .red = 0.793162, .green = 0.999512, .blue = 0.710134 },
+	{ .red = 0.775336, .green = 0.998779, .blue = 0.802930 },
+	{ .red = 0.757021, .green = 0.998291, .blue = 0.897924 },
+	{ .red = 0.741392, .green = 0.996825, .blue = 0.998535 },
+	{ .red = 0.812454, .green = 0.938462, .blue = 0.999023 },
+	{ .red = 0.827350, .green = 0.911844, .blue = 0.998291 },
+	{ .red = 0.842979, .green = 0.902808, .blue = 0.999512 },
+	{ .red = 0.849817, .green = 0.897924, .blue = 0.998046 },
+	{ .red = 0.835165, .green = 0.883028, .blue = 0.999023 },
+	{ .red = 0.820269, .green = 0.868620, .blue = 0.999512 },
+	{ .red = 0.804884, .green = 0.854701, .blue = 0.999267 },
+	{ .red = 0.681807, .green = 0.972650, .blue = 0.020269 },
+	{ .red = 0.683272, .green = 0.982662, .blue = 0.048107 },
+	{ .red = 0.692063, .green = 0.999512, .blue = 0.190965 },
+	{ .red = 0.708669, .green = 0.998535, .blue = 0.350916 },
+	{ .red = 0.731868, .green = 0.998291, .blue = 0.490110 },
+	{ .red = 0.759951, .green = 0.999023, .blue = 0.617338 },
+	{ .red = 0.776801, .green = 0.998535, .blue = 0.718193 },
+	{ .red = 0.766545, .green = 0.998535, .blue = 0.788034 },
+	{ .red = 0.757998, .green = 0.998779, .blue = 0.858608 },
+	{ .red = 0.755556, .green = 0.998779, .blue = 0.929915 },
+	{ .red = 0.761905, .green = 0.997558, .blue = 0.998291 },
+	{ .red = 0.796581, .green = 0.950916, .blue = 0.999023 },
+	{ .red = 0.802198, .green = 0.922344, .blue = 0.998779 },
+	{ .red = 0.804884, .green = 0.903053, .blue = 0.998779 },
+	{ .red = 0.809524, .green = 0.891331, .blue = 0.999023 },
+	{ .red = 0.823199, .green = 0.889621, .blue = 0.998535 },
+	{ .red = 0.843223, .green = 0.896947, .blue = 0.998291 },
+	{ .red = 0.626618, .green = 0.981197, .blue = 0.048840 },
+	{ .red = 0.626129, .green = 0.990476, .blue = 0.061294 },
+	{ .red = 0.639805, .green = 0.999267, .blue = 0.213675 },
+	{ .red = 0.666422, .green = 0.999023, .blue = 0.359951 },
+	{ .red = 0.701832, .green = 0.999756, .blue = 0.495726 },
+	{ .red = 0.744811, .green = 0.999267, .blue = 0.624420 },
+	{ .red = 0.758486, .green = 0.998535, .blue = 0.707937 },
+	{ .red = 0.751893, .green = 0.999023, .blue = 0.768010 },
+	{ .red = 0.747741, .green = 0.999023, .blue = 0.828327 },
+	{ .red = 0.748718, .green = 0.999023, .blue = 0.888400 },
+	{ .red = 0.758486, .green = 0.999267, .blue = 0.946520 },
+	{ .red = 0.779243, .green = 0.997802, .blue = 0.997558 },
+	{ .red = 0.786813, .green = 0.958730, .blue = 0.998291 },
+	{ .red = 0.783150, .green = 0.930159, .blue = 0.999023 },
+	{ .red = 0.779976, .green = 0.908425, .blue = 0.999023 },
+	{ .red = 0.778266, .green = 0.891819, .blue = 0.999267 },
+	{ .red = 0.778510, .green = 0.879365, .blue = 0.998779 },
+	{ .red = 0.578999, .green = 0.987057, .blue = 0.055189 },
+	{ .red = 0.578022, .green = 0.993407, .blue = 0.080586 },
+	{ .red = 0.598046, .green = 0.999023, .blue = 0.223687 },
+	{ .red = 0.632479, .green = 0.999267, .blue = 0.360684 },
+	{ .red = 0.677900, .green = 0.999267, .blue = 0.494261 },
+	{ .red = 0.731624, .green = 0.998535, .blue = 0.622955 },
+	{ .red = 0.737241, .green = 0.998535, .blue = 0.689133 },
+	{ .red = 0.733822, .green = 0.998535, .blue = 0.744811 },
+	{ .red = 0.731868, .green = 0.998779, .blue = 0.799512 },
+	{ .red = 0.733333, .green = 0.998779, .blue = 0.853480 },
+	{ .red = 0.740415, .green = 0.999512, .blue = 0.906471 },
+	{ .red = 0.760195, .green = 0.999023, .blue = 0.956044 },
+	{ .red = 0.789255, .green = 0.998046, .blue = 0.997070 },
+	{ .red = 0.776313, .green = 0.964347, .blue = 0.998779 },
+	{ .red = 0.765812, .green = 0.936020, .blue = 0.999023 },
+	{ .red = 0.757753, .green = 0.912821, .blue = 0.999512 },
+	{ .red = 0.752381, .green = 0.893529, .blue = 0.998779 },
+	{ .red = 0.537241, .green = 0.993651, .blue = 0.037363 },
+	{ .red = 0.538706, .green = 0.999512, .blue = 0.084737 },
+	{ .red = 0.562882, .green = 0.999267, .blue = 0.225885 },
+	{ .red = 0.603419, .green = 0.998779, .blue = 0.356288 },
+	{ .red = 0.655678, .green = 0.998779, .blue = 0.485714 },
+	{ .red = 0.712088, .green = 0.999023, .blue = 0.607814 },
+	{ .red = 0.713065, .green = 0.998779, .blue = 0.664713 },
+	{ .red = 0.711355, .green = 0.998535, .blue = 0.717705 },
+	{ .red = 0.710867, .green = 0.998535, .blue = 0.769475 },
+	{ .red = 0.712088, .green = 0.999023, .blue = 0.820024 },
+	{ .red = 0.717949, .green = 0.999267, .blue = 0.869841 },
+	{ .red = 0.731136, .green = 0.999267, .blue = 0.917705 },
+	{ .red = 0.757753, .green = 0.998779, .blue = 0.961416 },
+	{ .red = 0.791941, .green = 0.998046, .blue = 0.996825 },
+	{ .red = 0.764347, .green = 0.968010, .blue = 0.998779 },
+	{ .red = 0.748718, .green = 0.939683, .blue = 0.998535 },
+	{ .red = 0.736752, .green = 0.915751, .blue = 0.998779 },
+	{ .red = 0.502808, .green = 0.991453, .blue = 0.069109 },
+	{ .red = 0.505495, .green = 0.999756, .blue = 0.098901 },
+	{ .red = 0.532357, .green = 0.998779, .blue = 0.224420 },
+	{ .red = 0.575580, .green = 0.999756, .blue = 0.345543 },
+	{ .red = 0.632234, .green = 0.999267, .blue = 0.470818 },
+	{ .red = 0.685958, .green = 0.999267, .blue = 0.583150 },
+	{ .red = 0.687179, .green = 0.999023, .blue = 0.637363 },
+	{ .red = 0.686203, .green = 0.999023, .blue = 0.688156 },
+	{ .red = 0.686447, .green = 0.998779, .blue = 0.738217 },
+	{ .red = 0.687912, .green = 0.999023, .blue = 0.787057 },
+	{ .red = 0.693284, .green = 0.998779, .blue = 0.834921 },
+	{ .red = 0.703053, .green = 0.998779, .blue = 0.881074 },
+	{ .red = 0.721123, .green = 0.998291, .blue = 0.925031 },
+	{ .red = 0.750427, .green = 0.998291, .blue = 0.964591 },
+	{ .red = 0.786813, .green = 0.998046, .blue = 0.996337 },
+	{ .red = 0.748962, .green = 0.970696, .blue = 0.999267 },
+	{ .red = 0.729426, .green = 0.942857, .blue = 0.999267 },
+	{ .red = 0.472772, .green = 0.991453, .blue = 0.074969 },
+	{ .red = 0.476190, .green = 0.999756, .blue = 0.103297 },
+	{ .red = 0.504518, .green = 0.999023, .blue = 0.218315 },
+	{ .red = 0.550183, .green = 0.999267, .blue = 0.333578 },
+	{ .red = 0.608791, .green = 0.999267, .blue = 0.453236 },
+	{ .red = 0.659096, .green = 0.999023, .blue = 0.556777 },
+	{ .red = 0.660562, .green = 0.998779, .blue = 0.608791 },
+	{ .red = 0.659829, .green = 0.999267, .blue = 0.657631 },
+	{ .red = 0.660317, .green = 0.999267, .blue = 0.706471 },
+	{ .red = 0.661783, .green = 0.999267, .blue = 0.753846 },
+	{ .red = 0.665934, .green = 0.999023, .blue = 0.800488 },
+	{ .red = 0.673260, .green = 0.998535, .blue = 0.845421 },
+	{ .red = 0.683761, .green = 0.999512, .blue = 0.889133 },
+	{ .red = 0.705495, .green = 0.998535, .blue = 0.929915 },
+	{ .red = 0.736996, .green = 0.998535, .blue = 0.966789 },
+	{ .red = 0.775092, .green = 0.998291, .blue = 0.996337 },
+	{ .red = 0.731868, .green = 0.972161, .blue = 0.999267 },
+	{ .red = 0.445665, .green = 0.993162, .blue = 0.070330 },
+	{ .red = 0.451282, .green = 0.998535, .blue = 0.107692 },
+	{ .red = 0.478877, .green = 0.999756, .blue = 0.209280 },
+	{ .red = 0.525763, .green = 0.999267, .blue = 0.319902 },
+	{ .red = 0.585348, .green = 0.999023, .blue = 0.434188 },
+	{ .red = 0.632234, .green = 0.999023, .blue = 0.529670 },
+	{ .red = 0.634188, .green = 0.998535, .blue = 0.579976 },
+	{ .red = 0.633700, .green = 0.999023, .blue = 0.627839 },
+	{ .red = 0.633944, .green = 0.999267, .blue = 0.674969 },
+	{ .red = 0.635653, .green = 0.999023, .blue = 0.721612 },
+	{ .red = 0.638584, .green = 0.999023, .blue = 0.766789 },
+	{ .red = 0.643223, .green = 0.999512, .blue = 0.810989 },
+	{ .red = 0.654212, .green = 0.998046, .blue = 0.853724 },
+	{ .red = 0.666178, .green = 0.999023, .blue = 0.894750 },
+	{ .red = 0.687912, .green = 0.998779, .blue = 0.933333 },
+	{ .red = 0.719658, .green = 0.998779, .blue = 0.968254 },
+	{ .red = 0.756532, .green = 0.999023, .blue = 0.996825 },
+	{ .red = 0.963370, .green = 0.056899, .blue = 0.028571 },
+	{ .red = 0.926252, .green = 0.014408, .blue = 0.116239 },
+	{ .red = 0.891575, .green = 0.012210, .blue = 0.224664 },
+	{ .red = 0.865690, .green = 0.018071, .blue = 0.326496 },
+	{ .red = 0.848840, .green = 0.015140, .blue = 0.425641 },
+	{ .red = 0.843223, .green = 0.018071, .blue = 0.527228 },
+	{ .red = 0.844200, .green = 0.016850, .blue = 0.632234 },
+	{ .red = 0.844200, .green = 0.018071, .blue = 0.736996 },
+	{ .red = 0.840537, .green = 0.018071, .blue = 0.839316 },
+	{ .red = 0.792186, .green = 0.014896, .blue = 0.863492 },
+	{ .red = 0.755311, .green = 0.016117, .blue = 0.893040 },
+	{ .red = 0.751648, .green = 0.024908, .blue = 0.959951 },
+	{ .red = 0.724786, .green = 0.070085, .blue = 0.993407 },
+	{ .red = 0.683272, .green = 0.100122, .blue = 0.999512 },
+	{ .red = 0.641758, .green = 0.119170, .blue = 0.998779 },
+	{ .red = 0.604151, .green = 0.130647, .blue = 0.998291 },
+	{ .red = 0.570696, .green = 0.139927, .blue = 0.998535 },
+	{ .red = 0.978755, .green = 0.118681, .blue = 0.013187 },
+	{ .red = 0.988034, .green = 0.051038, .blue = 0.109402 },
+	{ .red = 0.956288, .green = 0.015873, .blue = 0.229304 },
+	{ .red = 0.925275, .green = 0.008791, .blue = 0.338950 },
+	{ .red = 0.903297, .green = 0.018559, .blue = 0.445177 },
+	{ .red = 0.895971, .green = 0.011966, .blue = 0.555067 },
+	{ .red = 0.891575, .green = 0.019292, .blue = 0.665446 },
+	{ .red = 0.886935, .green = 0.019048, .blue = 0.775092 },
+	{ .red = 0.876435, .green = 0.024420, .blue = 0.877411 },
+	{ .red = 0.825885, .green = 0.011477, .blue = 0.903541 },
+	{ .red = 0.786813, .green = 0.024176, .blue = 0.934310 },
+	{ .red = 0.775092, .green = 0.045665, .blue = 0.994139 },
+	{ .red = 0.726740, .green = 0.091575, .blue = 0.998291 },
+	{ .red = 0.681563, .green = 0.113553, .blue = 0.999267 },
+	{ .red = 0.640049, .green = 0.128938, .blue = 0.998535 },
+	{ .red = 0.604396, .green = 0.146520, .blue = 0.998535 },
+	{ .red = 0.575336, .green = 0.175336, .blue = 0.999023 },
+	{ .red = 0.936508, .green = 0.229548, .blue = 0.010012 },
+	{ .red = 0.999756, .green = 0.232723, .blue = 0.114286 },
+	{ .red = 0.999267, .green = 0.223932, .blue = 0.242002 },
+	{ .red = 0.998535, .green = 0.214164, .blue = 0.365079 },
+	{ .red = 0.999756, .green = 0.210745, .blue = 0.490110 },
+	{ .red = 0.999023, .green = 0.208303, .blue = 0.615629 },
+	{ .red = 0.999023, .green = 0.202930, .blue = 0.742613 },
+	{ .red = 0.999756, .green = 0.191209, .blue = 0.873016 },
+	{ .red = 0.993651, .green = 0.173871, .blue = 0.996825 },
+	{ .red = 0.912821, .green = 0.187302, .blue = 0.999512 },
+	{ .red = 0.843712, .green = 0.197558, .blue = 0.999023 },
+	{ .red = 0.786081, .green = 0.208303, .blue = 0.999267 },
+	{ .red = 0.735775, .green = 0.218071, .blue = 0.998779 },
+	{ .red = 0.691819, .green = 0.227595, .blue = 0.998779 },
+	{ .red = 0.653968, .green = 0.238339, .blue = 0.999267 },
+	{ .red = 0.620024, .green = 0.249817, .blue = 0.998291 },
+	{ .red = 0.590476, .green = 0.261783, .blue = 0.998535 },
+	{ .red = 0.872772, .green = 0.322100, .blue = 0.009768 },
+	{ .red = 0.998779, .green = 0.353846, .blue = 0.112088 },
+	{ .red = 0.999267, .green = 0.396825, .blue = 0.274969 },
+	{ .red = 0.999267, .green = 0.390720, .blue = 0.395360 },
+	{ .red = 0.998779, .green = 0.389988, .blue = 0.514774 },
+	{ .red = 0.999267, .green = 0.390965, .blue = 0.632723 },
+	{ .red = 0.999512, .green = 0.390965, .blue = 0.750427 },
+	{ .red = 0.998779, .green = 0.387057, .blue = 0.870085 },
+	{ .red = 0.999512, .green = 0.379243, .blue = 0.989744 },
+	{ .red = 0.927717, .green = 0.376557, .blue = 0.998291 },
+	{ .red = 0.863004, .green = 0.372894, .blue = 0.998779 },
+	{ .red = 0.807082, .green = 0.368742, .blue = 0.998291 },
+	{ .red = 0.759463, .green = 0.365568, .blue = 0.999267 },
+	{ .red = 0.716972, .green = 0.363126, .blue = 0.999512 },
+	{ .red = 0.678877, .green = 0.362149, .blue = 0.998779 },
+	{ .red = 0.645177, .green = 0.362393, .blue = 0.998535 },
+	{ .red = 0.615873, .green = 0.364347, .blue = 0.999023 },
+	{ .red = 0.895238, .green = 0.439072, .blue = 0.011477 },
+	{ .red = 0.999512, .green = 0.474725, .blue = 0.102564 },
+	{ .red = 0.999512, .green = 0.511111, .blue = 0.281563 },
+	{ .red = 0.998779, .green = 0.546032, .blue = 0.435653 },
+	{ .red = 0.999023, .green = 0.545055, .blue = 0.549939 },
+	{ .red = 0.998535, .green = 0.547497, .blue = 0.659829 },
+	{ .red = 0.998046, .green = 0.548718, .blue = 0.765812 },
+	{ .red = 0.998535, .green = 0.545299, .blue = 0.874237 },
+	{ .red = 0.999023, .green = 0.536996, .blue = 0.981441 },
+	{ .red = 0.940171, .green = 0.529182, .blue = 0.998535 },
+	{ .red = 0.880830, .green = 0.519658, .blue = 0.999512 },
+	{ .red = 0.829060, .green = 0.509158, .blue = 0.998291 },
+	{ .red = 0.784860, .green = 0.498657, .blue = 0.998779 },
+	{ .red = 0.745055, .green = 0.489377, .blue = 0.998779 },
+	{ .red = 0.709646, .green = 0.481807, .blue = 0.998779 },
+	{ .red = 0.677656, .green = 0.475458, .blue = 0.999023 },
+	{ .red = 0.648596, .green = 0.470330, .blue = 0.998535 },
+	{ .red = 0.908913, .green = 0.558242, .blue = 0.011722 },
+	{ .red = 0.998779, .green = 0.596337, .blue = 0.077411 },
+	{ .red = 0.999267, .green = 0.619048, .blue = 0.272283 },
+	{ .red = 0.999023, .green = 0.649084, .blue = 0.435653 },
+	{ .red = 0.998046, .green = 0.678877, .blue = 0.581441 },
+	{ .red = 0.998779, .green = 0.679853, .blue = 0.686447 },
+	{ .red = 0.999267, .green = 0.681807, .blue = 0.785348 },
+	{ .red = 0.998291, .green = 0.679121, .blue = 0.883028 },
+	{ .red = 0.998779, .green = 0.669353, .blue = 0.980952 },
+	{ .red = 0.946276, .green = 0.659585, .blue = 0.999512 },
+	{ .red = 0.892796, .green = 0.646886, .blue = 0.998535 },
+	{ .red = 0.848107, .green = 0.632479, .blue = 0.998046 },
+	{ .red = 0.809524, .green = 0.618071, .blue = 0.998779 },
+	{ .red = 0.774359, .green = 0.604640, .blue = 0.999023 },
+	{ .red = 0.742125, .green = 0.592430, .blue = 0.998779 },
+	{ .red = 0.712576, .green = 0.581197, .blue = 0.998535 },
+	{ .red = 0.685958, .green = 0.572161, .blue = 0.998779 },
+	{ .red = 0.917705, .green = 0.678877, .blue = 0.014652 },
+	{ .red = 0.979731, .green = 0.710623, .blue = 0.035897 },
+	{ .red = 0.998779, .green = 0.731380, .blue = 0.249817 },
+	{ .red = 0.999267, .green = 0.747253, .blue = 0.411477 },
+	{ .red = 0.998535, .green = 0.764835, .blue = 0.559951 },
+	{ .red = 0.999756, .green = 0.784860, .blue = 0.692552 },
+	{ .red = 0.998291, .green = 0.787057, .blue = 0.793651 },
+	{ .red = 0.998779, .green = 0.785836, .blue = 0.888645 },
+	{ .red = 0.999023, .green = 0.775824, .blue = 0.985592 },
+	{ .red = 0.946032, .green = 0.767033, .blue = 0.999023 },
+	{ .red = 0.901099, .green = 0.752625, .blue = 0.999023 },
+	{ .red = 0.864225, .green = 0.736264, .blue = 0.998535 },
+	{ .red = 0.831990, .green = 0.719902, .blue = 0.998779 },
+	{ .red = 0.802198, .green = 0.704029, .blue = 0.998779 },
+	{ .red = 0.774603, .green = 0.689133, .blue = 0.999023 },
+	{ .red = 0.748962, .green = 0.675702, .blue = 0.999023 },
+	{ .red = 0.724542, .green = 0.663004, .blue = 0.998535 },
+	{ .red = 0.928205, .green = 0.806105, .blue = 0.019780 },
+	{ .red = 0.957998, .green = 0.823687, .blue = 0.015385 },
+	{ .red = 0.999756, .green = 0.851526, .blue = 0.198779 },
+	{ .red = 0.999023, .green = 0.855678, .blue = 0.365324 },
+	{ .red = 0.998535, .green = 0.859829, .blue = 0.509646 },
+	{ .red = 0.998779, .green = 0.864469, .blue = 0.641758 },
+	{ .red = 0.998291, .green = 0.868376, .blue = 0.763370 },
+	{ .red = 0.998535, .green = 0.867643, .blue = 0.873016 },
+	{ .red = 0.998779, .green = 0.858608, .blue = 0.990476 },
+	{ .red = 0.941636, .green = 0.852015, .blue = 0.999023 },
+	{ .red = 0.906471, .green = 0.836630, .blue = 0.999023 },
+	{ .red = 0.878388, .green = 0.819536, .blue = 0.999512 },
+	{ .red = 0.852503, .green = 0.802198, .blue = 0.998535 },
+	{ .red = 0.828816, .green = 0.785836, .blue = 0.999023 },
+	{ .red = 0.805617, .green = 0.769963, .blue = 0.998779 },
+	{ .red = 0.783639, .green = 0.755067, .blue = 0.999267 },
+	{ .red = 0.762393, .green = 0.741148, .blue = 0.999023 },
+	{ .red = 0.936508, .green = 0.936264, .blue = 0.016850 },
+	{ .red = 0.944078, .green = 0.941392, .blue = 0.016606 },
+	{ .red = 0.975824, .green = 0.963614, .blue = 0.018559 },
+	{ .red = 0.979243, .green = 0.966300, .blue = 0.275458 },
+	{ .red = 0.973871, .green = 0.962637, .blue = 0.429548 },
+	{ .red = 0.967033, .green = 0.957753, .blue = 0.565568 },
+	{ .red = 0.958242, .green = 0.951404, .blue = 0.693773 },
+	{ .red = 0.947985, .green = 0.943834, .blue = 0.816606 },
+	{ .red = 0.936020, .green = 0.934799, .blue = 0.935043 },
+	{ .red = 0.927717, .green = 0.918926, .blue = 0.998779 },
+	{ .red = 0.909646, .green = 0.901099, .blue = 0.998779 },
+	{ .red = 0.891087, .green = 0.883516, .blue = 0.998291 },
+	{ .red = 0.872527, .green = 0.866667, .blue = 0.999023 },
+	{ .red = 0.853480, .green = 0.850305, .blue = 0.999267 },
+	{ .red = 0.834676, .green = 0.834432, .blue = 0.999023 },
+	{ .red = 0.816117, .green = 0.819292, .blue = 0.998291 },
+	{ .red = 0.797802, .green = 0.804884, .blue = 0.998535 },
+	{ .red = 0.855922, .green = 0.961661, .blue = 0.019536 },
+	{ .red = 0.862271, .green = 0.970452, .blue = 0.018071 },
+	{ .red = 0.881563, .green = 0.996825, .blue = 0.102320 },
+	{ .red = 0.883028, .green = 0.999023, .blue = 0.295238 },
+	{ .red = 0.883272, .green = 0.999267, .blue = 0.434432 },
+	{ .red = 0.883028, .green = 0.999023, .blue = 0.556777 },
+	{ .red = 0.881319, .green = 0.998291, .blue = 0.669597 },
+	{ .red = 0.875458, .green = 0.999512, .blue = 0.770208 },
+	{ .red = 0.854457, .green = 0.999267, .blue = 0.874481 },
+	{ .red = 0.838339, .green = 0.989744, .blue = 0.991209 },
+	{ .red = 0.894750, .green = 0.944322, .blue = 0.999023 },
+	{ .red = 0.904029, .green = 0.931380, .blue = 0.998291 },
+	{ .red = 0.891575, .green = 0.915263, .blue = 0.998291 },
+	{ .red = 0.876923, .green = 0.899634, .blue = 0.999023 },
+	{ .red = 0.861538, .green = 0.884493, .blue = 0.999267 },
+	{ .red = 0.845910, .green = 0.869841, .blue = 0.998535 },
+	{ .red = 0.829792, .green = 0.855922, .blue = 0.998291 },
+	{ .red = 0.781929, .green = 0.975824, .blue = 0.016117 },
+	{ .red = 0.785348, .green = 0.983639, .blue = 0.052747 },
+	{ .red = 0.794383, .green = 0.999023, .blue = 0.178266 },
+	{ .red = 0.801465, .green = 0.999267, .blue = 0.332357 },
+	{ .red = 0.811233, .green = 0.998291, .blue = 0.466667 },
+	{ .red = 0.823932, .green = 0.999267, .blue = 0.586569 },
+	{ .red = 0.839072, .green = 0.998535, .blue = 0.698413 },
+	{ .red = 0.854945, .green = 0.999267, .blue = 0.794872 },
+	{ .red = 0.842491, .green = 0.999512, .blue = 0.859829 },
+	{ .red = 0.835165, .green = 0.998291, .blue = 0.928938 },
+	{ .red = 0.833700, .green = 0.998046, .blue = 0.998779 },
+	{ .red = 0.867643, .green = 0.955800, .blue = 0.998535 },
+	{ .red = 0.873016, .green = 0.935287, .blue = 0.999512 },
+	{ .red = 0.885958, .green = 0.928938, .blue = 0.999512 },
+	{ .red = 0.886691, .green = 0.922589, .blue = 0.998291 },
+	{ .red = 0.872772, .green = 0.908913, .blue = 0.998535 },
+	{ .red = 0.858364, .green = 0.895726, .blue = 0.998291 },
+	{ .red = 0.716972, .green = 0.982418, .blue = 0.057143 },
+	{ .red = 0.718926, .green = 0.990476, .blue = 0.069353 },
+	{ .red = 0.728205, .green = 0.999023, .blue = 0.205861 },
+	{ .red = 0.742857, .green = 0.998779, .blue = 0.346032 },
+	{ .red = 0.763370, .green = 0.998779, .blue = 0.475946 },
+	{ .red = 0.788278, .green = 0.999512, .blue = 0.596093 },
+	{ .red = 0.818803, .green = 0.998291, .blue = 0.709646 },
+	{ .red = 0.833944, .green = 0.998779, .blue = 0.788767 },
+	{ .red = 0.826618, .green = 0.999512, .blue = 0.840781 },
+	{ .red = 0.823932, .green = 0.998779, .blue = 0.895482 },
+	{ .red = 0.827595, .green = 0.999512, .blue = 0.949939 },
+	{ .red = 0.844444, .green = 0.998291, .blue = 0.998291 },
+	{ .red = 0.850794, .green = 0.963614, .blue = 0.999023 },
+	{ .red = 0.848352, .green = 0.940171, .blue = 0.999023 },
+	{ .red = 0.847375, .green = 0.923810, .blue = 0.998779 },
+	{ .red = 0.849817, .green = 0.913797, .blue = 0.998779 },
+	{ .red = 0.863248, .green = 0.913797, .blue = 0.998046 },
+	{ .red = 0.662515, .green = 0.991453, .blue = 0.018559 },
+	{ .red = 0.663004, .green = 0.996581, .blue = 0.067643 },
+	{ .red = 0.675702, .green = 0.999023, .blue = 0.217338 },
+	{ .red = 0.697192, .green = 0.999267, .blue = 0.347741 },
+	{ .red = 0.726496, .green = 0.999023, .blue = 0.474725 },
+	{ .red = 0.762393, .green = 0.998779, .blue = 0.596093 },
+	{ .red = 0.801954, .green = 0.999756, .blue = 0.706716 },
+	{ .red = 0.810256, .green = 0.999512, .blue = 0.769963 },
+	{ .red = 0.806349, .green = 0.999267, .blue = 0.817827 },
+	{ .red = 0.805861, .green = 0.998779, .blue = 0.866422 },
+	{ .red = 0.809524, .green = 0.999023, .blue = 0.914286 },
+	{ .red = 0.823443, .green = 0.999512, .blue = 0.960440 },
+	{ .red = 0.849084, .green = 0.998535, .blue = 0.998046 },
+	{ .red = 0.836386, .green = 0.968987, .blue = 0.999512 },
+	{ .red = 0.827595, .green = 0.944567, .blue = 0.999267 },
+	{ .red = 0.821490, .green = 0.925275, .blue = 0.999023 },
+	{ .red = 0.817827, .green = 0.910867, .blue = 0.999512 },
+	{ .red = 0.614408, .green = 0.990232, .blue = 0.068864 },
+	{ .red = 0.616606, .green = 0.999023, .blue = 0.087179 },
+	{ .red = 0.631990, .green = 0.999512, .blue = 0.219048 },
+	{ .red = 0.658852, .green = 0.999512, .blue = 0.342857 },
+	{ .red = 0.695238, .green = 0.999267, .blue = 0.466422 },
+	{ .red = 0.738462, .green = 0.999267, .blue = 0.586081 },
+	{ .red = 0.785104, .green = 0.999512, .blue = 0.696703 },
+	{ .red = 0.785104, .green = 0.999267, .blue = 0.745788 },
+	{ .red = 0.784127, .green = 0.998046, .blue = 0.792430 },
+	{ .red = 0.782906, .green = 0.998779, .blue = 0.836874 },
+	{ .red = 0.785348, .green = 0.999512, .blue = 0.881563 },
+	{ .red = 0.796337, .green = 0.998779, .blue = 0.925519 },
+	{ .red = 0.817094, .green = 0.999267, .blue = 0.966300 },
+	{ .red = 0.848107, .green = 0.998535, .blue = 0.997558 },
+	{ .red = 0.823199, .green = 0.971673, .blue = 0.998535 },
+	{ .red = 0.808059, .green = 0.947497, .blue = 0.999023 },
+	{ .red = 0.798291, .green = 0.926740, .blue = 0.998535 },
+	{ .red = 0.573382, .green = 0.992186, .blue = 0.069353 },
+	{ .red = 0.576557, .green = 0.997802, .blue = 0.104029 },
+	{ .red = 0.594383, .green = 0.999267, .blue = 0.217094 },
+	{ .red = 0.625397, .green = 0.999023, .blue = 0.334799 },
+	{ .red = 0.666667, .green = 0.999267, .blue = 0.453724 },
+	{ .red = 0.715507, .green = 0.999023, .blue = 0.571673 },
+	{ .red = 0.759707, .green = 0.998291, .blue = 0.673016 },
+	{ .red = 0.758730, .green = 0.998535, .blue = 0.718681 },
+	{ .red = 0.757509, .green = 0.998535, .blue = 0.762882 },
+	{ .red = 0.757021, .green = 0.999023, .blue = 0.806105 },
+	{ .red = 0.760195, .green = 0.998779, .blue = 0.849573 },
+	{ .red = 0.765812, .green = 0.999512, .blue = 0.891819 },
+	{ .red = 0.780952, .green = 0.999267, .blue = 0.932601 },
+	{ .red = 0.807326, .green = 0.999023, .blue = 0.969231 },
+	{ .red = 0.841270, .green = 0.998291, .blue = 0.997070 },
+	{ .red = 0.808059, .green = 0.973138, .blue = 0.998046 },
+	{ .red = 0.788034, .green = 0.949695, .blue = 0.999023 },
+	{ .red = 0.536752, .green = 0.997314, .blue = 0.043223 },
+	{ .red = 0.541636, .green = 0.999267, .blue = 0.103297 },
+	{ .red = 0.561416, .green = 0.999267, .blue = 0.211722 },
+	{ .red = 0.594872, .green = 0.999267, .blue = 0.323321 },
+	{ .red = 0.639805, .green = 0.998779, .blue = 0.438584 },
+	{ .red = 0.691819, .green = 0.999023, .blue = 0.552625 },
+	{ .red = 0.731380, .green = 0.998779, .blue = 0.644200 },
+	{ .red = 0.730403, .green = 0.998779, .blue = 0.688400 },
+	{ .red = 0.730159, .green = 0.998535, .blue = 0.732357 },
+	{ .red = 0.730403, .green = 0.998535, .blue = 0.775092 },
+	{ .red = 0.731868, .green = 0.999023, .blue = 0.817094 },
+	{ .red = 0.736752, .green = 0.999023, .blue = 0.858364 },
+	{ .red = 0.747497, .green = 0.998779, .blue = 0.898657 },
+	{ .red = 0.764103, .green = 0.999267, .blue = 0.936996 },
+	{ .red = 0.793407, .green = 0.998779, .blue = 0.970940 },
+	{ .red = 0.828083, .green = 0.998535, .blue = 0.997070 },
+	{ .red = 0.788523, .green = 0.975092, .blue = 0.999023 },
+	{ .red = 0.506716, .green = 0.993407, .blue = 0.070330 },
+	{ .red = 0.510867, .green = 0.999512, .blue = 0.101832 },
+	{ .red = 0.531868, .green = 0.999023, .blue = 0.204884 },
+	{ .red = 0.566789, .green = 0.999512, .blue = 0.310379 },
+	{ .red = 0.613919, .green = 0.998779, .blue = 0.421245 },
+	{ .red = 0.668132, .green = 0.999023, .blue = 0.531624 },
+	{ .red = 0.702076, .green = 0.999267, .blue = 0.613431 },
+	{ .red = 0.701832, .green = 0.999023, .blue = 0.657631 },
+	{ .red = 0.701343, .green = 0.999267, .blue = 0.700611 },
+	{ .red = 0.701343, .green = 0.999512, .blue = 0.742857 },
+	{ .red = 0.704029, .green = 0.998779, .blue = 0.784860 },
+	{ .red = 0.707937, .green = 0.998779, .blue = 0.825641 },
+	{ .red = 0.714774, .green = 0.999023, .blue = 0.865201 },
+	{ .red = 0.726496, .green = 0.999267, .blue = 0.903541 },
+	{ .red = 0.746520, .green = 0.998779, .blue = 0.939683 },
+	{ .red = 0.777045, .green = 0.998535, .blue = 0.971673 },
+	{ .red = 0.811233, .green = 0.998535, .blue = 0.996825 },
+	{ .red = 0.993407, .green = 0.080586, .blue = 0.044689 },
+	{ .red = 0.979976, .green = 0.025397, .blue = 0.111844 },
+	{ .red = 0.944567, .green = 0.013187, .blue = 0.213187 },
+	{ .red = 0.916484, .green = 0.018071, .blue = 0.309402 },
+	{ .red = 0.896703, .green = 0.015629, .blue = 0.402198 },
+	{ .red = 0.882540, .green = 0.017827, .blue = 0.493284 },
+	{ .red = 0.884493, .green = 0.014164, .blue = 0.591209 },
+	{ .red = 0.884493, .green = 0.018559, .blue = 0.688156 },
+	{ .red = 0.884005, .green = 0.021978, .blue = 0.784860 },
+	{ .red = 0.879609, .green = 0.024908, .blue = 0.878632 },
+	{ .red = 0.833455, .green = 0.014164, .blue = 0.900122 },
+	{ .red = 0.786813, .green = 0.024420, .blue = 0.913797 },
+	{ .red = 0.787546, .green = 0.022711, .blue = 0.980708 },
+	{ .red = 0.752869, .green = 0.071551, .blue = 0.999267 },
+	{ .red = 0.710134, .green = 0.102808, .blue = 0.999512 },
+	{ .red = 0.670330, .green = 0.118681, .blue = 0.999023 },
+	{ .red = 0.634432, .green = 0.133089, .blue = 0.998291 },
+	{ .red = 0.995116, .green = 0.126740, .blue = 0.042002 },
+	{ .red = 0.995116, .green = 0.075458, .blue = 0.104274 },
+	{ .red = 0.985836, .green = 0.049084, .blue = 0.214652 },
+	{ .red = 0.969719, .green = 0.015629, .blue = 0.318926 },
+	{ .red = 0.948962, .green = 0.014164, .blue = 0.418315 },
+	{ .red = 0.928449, .green = 0.019292, .blue = 0.513553 },
+	{ .red = 0.927961, .green = 0.017094, .blue = 0.616850 },
+	{ .red = 0.925519, .green = 0.016117, .blue = 0.718926 },
+	{ .red = 0.920635, .green = 0.021001, .blue = 0.818315 },
+	{ .red = 0.911355, .green = 0.023932, .blue = 0.912332 },
+	{ .red = 0.860806, .green = 0.020513, .blue = 0.932357 },
+	{ .red = 0.814896, .green = 0.024176, .blue = 0.949695 },
+	{ .red = 0.793162, .green = 0.060562, .blue = 0.989744 },
+	{ .red = 0.751893, .green = 0.090598, .blue = 0.999512 },
+	{ .red = 0.708913, .green = 0.114042, .blue = 0.999512 },
+	{ .red = 0.670818, .green = 0.138706, .blue = 0.998779 },
+	{ .red = 0.639316, .green = 0.170940, .blue = 0.998779 },
+	{ .red = 0.990720, .green = 0.218315, .blue = 0.031013 },
+	{ .red = 0.999512, .green = 0.231746, .blue = 0.119658 },
+	{ .red = 0.999267, .green = 0.223443, .blue = 0.227839 },
+	{ .red = 0.999512, .green = 0.214652, .blue = 0.336752 },
+	{ .red = 0.999267, .green = 0.211233, .blue = 0.445910 },
+	{ .red = 0.999756, .green = 0.210012, .blue = 0.555800 },
+	{ .red = 0.998535, .green = 0.208791, .blue = 0.664713 },
+	{ .red = 0.999023, .green = 0.203907, .blue = 0.775092 },
+	{ .red = 0.999267, .green = 0.194139, .blue = 0.887424 },
+	{ .red = 0.994628, .green = 0.180220, .blue = 0.995360 },
+	{ .red = 0.924786, .green = 0.191941, .blue = 0.999023 },
+	{ .red = 0.862515, .green = 0.201465, .blue = 0.998779 },
+	{ .red = 0.809524, .green = 0.213675, .blue = 0.999023 },
+	{ .red = 0.763614, .green = 0.225153, .blue = 0.999267 },
+	{ .red = 0.722344, .green = 0.237363, .blue = 0.998291 },
+	{ .red = 0.686447, .green = 0.248596, .blue = 0.998779 },
+	{ .red = 0.654701, .green = 0.260806, .blue = 0.999023 },
+	{ .red = 0.950183, .green = 0.309890, .blue = 0.010256 },
+	{ .red = 0.999267, .green = 0.330891, .blue = 0.118926 },
+	{ .red = 0.999023, .green = 0.385104, .blue = 0.270085 },
+	{ .red = 0.999512, .green = 0.380952, .blue = 0.375580 },
+	{ .red = 0.999756, .green = 0.381197, .blue = 0.481074 },
+	{ .red = 0.998779, .green = 0.383639, .blue = 0.583394 },
+	{ .red = 0.999023, .green = 0.385592, .blue = 0.683516 },
+	{ .red = 0.999023, .green = 0.385348, .blue = 0.783150 },
+	{ .red = 0.999023, .green = 0.381929, .blue = 0.884737 },
+	{ .red = 0.999267, .green = 0.375092, .blue = 0.986081 },
+	{ .red = 0.941148, .green = 0.371673, .blue = 0.998535 },
+	{ .red = 0.882784, .green = 0.368742, .blue = 0.999023 },
+	{ .red = 0.831502, .green = 0.366789, .blue = 0.998535 },
+	{ .red = 0.787302, .green = 0.365324, .blue = 0.999512 },
+	{ .red = 0.747009, .green = 0.364591, .blue = 0.999023 },
+	{ .red = 0.711600, .green = 0.365079, .blue = 0.999512 },
+	{ .red = 0.679121, .green = 0.366789, .blue = 0.999023 },
+	{ .red = 0.929426, .green = 0.404884, .blue = 0.010989 },
+	{ .red = 0.999267, .green = 0.433211, .blue = 0.113797 },
+	{ .red = 0.998291, .green = 0.488400, .blue = 0.285470 },
+	{ .red = 0.998535, .green = 0.529426, .blue = 0.428571 },
+	{ .red = 0.999023, .green = 0.530647, .blue = 0.528694 },
+	{ .red = 0.998535, .green = 0.535043, .blue = 0.623932 },
+	{ .red = 0.999512, .green = 0.538706, .blue = 0.714042 },
+	{ .red = 0.999023, .green = 0.539438, .blue = 0.800977 },
+	{ .red = 0.999023, .green = 0.536020, .blue = 0.889621 },
+	{ .red = 0.998535, .green = 0.528205, .blue = 0.976557 },
+	{ .red = 0.955067, .green = 0.519170, .blue = 0.999023 },
+	{ .red = 0.901587, .green = 0.510867, .blue = 0.999512 },
+	{ .red = 0.854457, .green = 0.502076, .blue = 0.999512 },
+	{ .red = 0.812210, .green = 0.493529, .blue = 0.998535 },
+	{ .red = 0.774603, .green = 0.485714, .blue = 0.998779 },
+	{ .red = 0.740659, .green = 0.479365, .blue = 0.999512 },
+	{ .red = 0.709402, .green = 0.474237, .blue = 0.999023 },
+	{ .red = 0.939927, .green = 0.512576, .blue = 0.014896 },
+	{ .red = 0.999756, .green = 0.539438, .blue = 0.105739 },
+	{ .red = 0.998779, .green = 0.576068, .blue = 0.278632 },
+	{ .red = 0.998779, .green = 0.625885, .blue = 0.444444 },
+	{ .red = 0.998291, .green = 0.659829, .blue = 0.576801 },
+	{ .red = 0.999512, .green = 0.663980, .blue = 0.666667 },
+	{ .red = 0.998779, .green = 0.669353, .blue = 0.748718 },
+	{ .red = 0.998779, .green = 0.671306, .blue = 0.825153 },
+	{ .red = 0.999023, .green = 0.667643, .blue = 0.901343 },
+	{ .red = 0.998535, .green = 0.657387, .blue = 0.975824 },
+	{ .red = 0.961905, .green = 0.645910, .blue = 0.998779 },
+	{ .red = 0.914530, .green = 0.634432, .blue = 0.999023 },
+	{ .red = 0.872772, .green = 0.621734, .blue = 0.998535 },
+	{ .red = 0.836142, .green = 0.608791, .blue = 0.999512 },
+	{ .red = 0.801709, .green = 0.596825, .blue = 0.999023 },
+	{ .red = 0.770208, .green = 0.585592, .blue = 0.998535 },
+	{ .red = 0.741148, .green = 0.575580, .blue = 0.998291 },
+	{ .red = 0.947009, .green = 0.621245, .blue = 0.013675 },
+	{ .red = 0.999267, .green = 0.646642, .blue = 0.085470 },
+	{ .red = 0.998535, .green = 0.669353, .blue = 0.266422 },
+	{ .red = 0.999023, .green = 0.701587, .blue = 0.426129 },
+	{ .red = 0.998291, .green = 0.736752, .blue = 0.575336 },
+	{ .red = 0.998779, .green = 0.767277, .blue = 0.697680 },
+	{ .red = 0.998291, .green = 0.771917, .blue = 0.776557 },
+	{ .red = 0.998291, .green = 0.775824, .blue = 0.847131 },
+	{ .red = 0.999267, .green = 0.773626, .blue = 0.914530 },
+	{ .red = 0.999023, .green = 0.762637, .blue = 0.980708 },
+	{ .red = 0.963858, .green = 0.750672, .blue = 0.998779 },
+	{ .red = 0.922833, .green = 0.737485, .blue = 0.998535 },
+	{ .red = 0.887668, .green = 0.722589, .blue = 0.998535 },
+	{ .red = 0.855922, .green = 0.707692, .blue = 0.998291 },
+	{ .red = 0.826374, .green = 0.693040, .blue = 0.998046 },
+	{ .red = 0.799267, .green = 0.679365, .blue = 0.999267 },
+	{ .red = 0.773626, .green = 0.666422, .blue = 0.999512 },
+	{ .red = 0.951404, .green = 0.731136, .blue = 0.016361 },
+	{ .red = 0.987546, .green = 0.750183, .blue = 0.054945 },
+	{ .red = 0.999023, .green = 0.768498, .blue = 0.244200 },
+	{ .red = 0.999023, .green = 0.785348, .blue = 0.398046 },
+	{ .red = 0.999023, .green = 0.804640, .blue = 0.542125 },
+	{ .red = 0.998779, .green = 0.825397, .blue = 0.672527 },
+	{ .red = 0.999512, .green = 0.848840, .blue = 0.784615 },
+	{ .red = 0.998291, .green = 0.853724, .blue = 0.858364 },
+	{ .red = 0.999023, .green = 0.854212, .blue = 0.923077 },
+	{ .red = 0.997802, .green = 0.844933, .blue = 0.985836 },
+	{ .red = 0.963370, .green = 0.833700, .blue = 0.999512 },
+	{ .red = 0.928449, .green = 0.820024, .blue = 0.998291 },
+	{ .red = 0.900122, .green = 0.804151, .blue = 0.998535 },
+	{ .red = 0.873993, .green = 0.788278, .blue = 0.998779 },
+	{ .red = 0.849328, .green = 0.772894, .blue = 0.999023 },
+	{ .red = 0.825641, .green = 0.757753, .blue = 0.998779 },
+	{ .red = 0.803419, .green = 0.743590, .blue = 0.999023 },
+	{ .red = 0.957998, .green = 0.845665, .blue = 0.023687 },
+	{ .red = 0.978755, .green = 0.858364, .blue = 0.032723 },
+	{ .red = 0.999756, .green = 0.874481, .blue = 0.203419 },
+	{ .red = 0.998535, .green = 0.879365, .blue = 0.355800 },
+	{ .red = 0.998535, .green = 0.885714, .blue = 0.492308 },
+	{ .red = 0.999267, .green = 0.892552, .blue = 0.618071 },
+	{ .red = 0.999267, .green = 0.899878, .blue = 0.733333 },
+	{ .red = 0.998779, .green = 0.908425, .blue = 0.835409 },
+	{ .red = 0.999756, .green = 0.913309, .blue = 0.916972 },
+	{ .red = 0.998291, .green = 0.906960, .blue = 0.991697 },
+	{ .red = 0.960195, .green = 0.897924, .blue = 0.999023 },
+	{ .red = 0.933578, .green = 0.883516, .blue = 0.999023 },
+	{ .red = 0.911355, .green = 0.867888, .blue = 0.998779 },
+	{ .red = 0.890354, .green = 0.852015, .blue = 0.999023 },
+	{ .red = 0.870085, .green = 0.836386, .blue = 0.999023 },
+	{ .red = 0.850061, .green = 0.821245, .blue = 0.998779 },
+	{ .red = 0.830525, .green = 0.806593, .blue = 0.998779 },
+	{ .red = 0.961172, .green = 0.960195, .blue = 0.018559 },
+	{ .red = 0.968010, .green = 0.964835, .blue = 0.018559 },
+	{ .red = 0.992918, .green = 0.982906, .blue = 0.064225 },
+	{ .red = 0.999512, .green = 0.988278, .blue = 0.257631 },
+	{ .red = 0.998535, .green = 0.987790, .blue = 0.396093 },
+	{ .red = 0.999267, .green = 0.988767, .blue = 0.512576 },
+	{ .red = 0.995116, .green = 0.985836, .blue = 0.627350 },
+	{ .red = 0.986081, .green = 0.978999, .blue = 0.743346 },
+	{ .red = 0.975336, .green = 0.971184, .blue = 0.854701 },
+	{ .red = 0.963370, .green = 0.962149, .blue = 0.962393 },
+	{ .red = 0.953114, .green = 0.947253, .blue = 0.998535 },
+	{ .red = 0.937729, .green = 0.931380, .blue = 0.998779 },
+	{ .red = 0.921856, .green = 0.915995, .blue = 0.999267 },
+	{ .red = 0.905495, .green = 0.900611, .blue = 0.999267 },
+	{ .red = 0.888889, .green = 0.885714, .blue = 0.999023 },
+	{ .red = 0.872283, .green = 0.871062, .blue = 1.000000 },
+	{ .red = 0.855433, .green = 0.856654, .blue = 0.998291 },
+	{ .red = 0.882051, .green = 0.978510, .blue = 0.020513 },
+	{ .red = 0.886447, .green = 0.984127, .blue = 0.056410 },
+	{ .red = 0.898901, .green = 0.999756, .blue = 0.152625 },
+	{ .red = 0.899389, .green = 0.998779, .blue = 0.312332 },
+	{ .red = 0.901832, .green = 0.999267, .blue = 0.439316 },
+	{ .red = 0.904762, .green = 0.998779, .blue = 0.555800 },
+	{ .red = 0.908425, .green = 0.999267, .blue = 0.658608 },
+	{ .red = 0.911600, .green = 0.999267, .blue = 0.753846 },
+	{ .red = 0.914530, .green = 0.999023, .blue = 0.841758 },
+	{ .red = 0.906227, .green = 0.998291, .blue = 0.917705 },
+	{ .red = 0.889377, .green = 0.998291, .blue = 0.999267 },
+	{ .red = 0.927961, .green = 0.961661, .blue = 0.999512 },
+	{ .red = 0.932601, .green = 0.951648, .blue = 0.999023 },
+	{ .red = 0.920391, .green = 0.937241, .blue = 0.998535 },
+	{ .red = 0.906716, .green = 0.923321, .blue = 0.998779 },
+	{ .red = 0.892308, .green = 0.909402, .blue = 0.998291 },
+	{ .red = 0.877656, .green = 0.895971, .blue = 0.999023 },
+	{ .red = 0.807570, .green = 0.984127, .blue = 0.063492 },
+	{ .red = 0.810989, .green = 0.990476, .blue = 0.074725 },
+	{ .red = 0.818559, .green = 1.000000, .blue = 0.194139 },
+	{ .red = 0.824664, .green = 0.999512, .blue = 0.330403 },
+	{ .red = 0.834188, .green = 0.999512, .blue = 0.453480 },
+	{ .red = 0.846154, .green = 0.999267, .blue = 0.568254 },
+	{ .red = 0.860806, .green = 0.998535, .blue = 0.675458 },
+	{ .red = 0.877656, .green = 0.999756, .blue = 0.768987 },
+	{ .red = 0.896215, .green = 0.999267, .blue = 0.852503 },
+	{ .red = 0.888400, .green = 0.999023, .blue = 0.899389 },
+	{ .red = 0.885958, .green = 0.999023, .blue = 0.950183 },
+	{ .red = 0.894261, .green = 0.998779, .blue = 0.999267 },
+	{ .red = 0.902808, .green = 0.968010, .blue = 0.999756 },
+	{ .red = 0.903785, .green = 0.950427, .blue = 0.999023 },
+	{ .red = 0.914286, .green = 0.945788, .blue = 0.998535 },
+	{ .red = 0.911111, .green = 0.938950, .blue = 0.998535 },
+	{ .red = 0.897924, .green = 0.926496, .blue = 0.998046 },
+	{ .red = 0.746032, .green = 0.991453, .blue = 0.041758 },
+	{ .red = 0.748230, .green = 0.998291, .blue = 0.056410 },
+	{ .red = 0.755067, .green = 0.999023, .blue = 0.210012 },
+	{ .red = 0.767033, .green = 0.999023, .blue = 0.334799 },
+	{ .red = 0.783883, .green = 0.998779, .blue = 0.455189 },
+	{ .red = 0.805128, .green = 0.999267, .blue = 0.568987 },
+	{ .red = 0.830037, .green = 0.999023, .blue = 0.675702 },
+	{ .red = 0.858120, .green = 0.999512, .blue = 0.771673 },
+	{ .red = 0.872039, .green = 0.999267, .blue = 0.836874 },
+	{ .red = 0.867399, .green = 0.999267, .blue = 0.877656 },
+	{ .red = 0.868620, .green = 0.998046, .blue = 0.920879 },
+	{ .red = 0.874481, .green = 0.999756, .blue = 0.963126 },
+	{ .red = 0.895482, .green = 0.999023, .blue = 0.998779 },
+	{ .red = 0.886447, .green = 0.971917, .blue = 0.998535 },
+	{ .red = 0.879121, .green = 0.951893, .blue = 0.998535 },
+	{ .red = 0.875946, .green = 0.937729, .blue = 0.999023 },
+	{ .red = 0.876923, .green = 0.928938, .blue = 0.999023 },
+	{ .red = 0.690598, .green = 0.989988, .blue = 0.077411 },
+	{ .red = 0.693284, .green = 0.996581, .blue = 0.097436 },
+	{ .red = 0.703297, .green = 0.999267, .blue = 0.212943 },
+	{ .red = 0.719902, .green = 0.998779, .blue = 0.331868 },
+	{ .red = 0.743346, .green = 0.998779, .blue = 0.448352 },
+	{ .red = 0.772161, .green = 0.999512, .blue = 0.560684 },
+	{ .red = 0.805128, .green = 0.999756, .blue = 0.667399 },
+	{ .red = 0.842491, .green = 0.998779, .blue = 0.766545 },
+	{ .red = 0.846154, .green = 0.999267, .blue = 0.813675 },
+	{ .red = 0.844444, .green = 0.998291, .blue = 0.853236 },
+	{ .red = 0.843223, .green = 0.999267, .blue = 0.892063 },
+	{ .red = 0.849817, .green = 0.998779, .blue = 0.931868 },
+	{ .red = 0.865446, .green = 0.999512, .blue = 0.969475 },
+	{ .red = 0.891087, .green = 0.999023, .blue = 0.998779 },
+	{ .red = 0.870574, .green = 0.974603, .blue = 0.998535 },
+	{ .red = 0.857143, .green = 0.954090, .blue = 0.999756 },
+	{ .red = 0.849817, .green = 0.936996, .blue = 0.999023 },
+	{ .red = 0.644444, .green = 0.995604, .blue = 0.051526 },
+	{ .red = 0.647131, .green = 0.998291, .blue = 0.101343 },
+	{ .red = 0.659096, .green = 0.998779, .blue = 0.211722 },
+	{ .red = 0.679609, .green = 0.999512, .blue = 0.322833 },
+	{ .red = 0.708425, .green = 0.998779, .blue = 0.437118 },
+	{ .red = 0.743346, .green = 0.998535, .blue = 0.548962 },
+	{ .red = 0.782906, .green = 0.998535, .blue = 0.655678 },
+	{ .red = 0.819780, .green = 0.999512, .blue = 0.746276 },
+	{ .red = 0.819292, .green = 0.998779, .blue = 0.786813 },
+	{ .red = 0.817582, .green = 0.998779, .blue = 0.824908 },
+	{ .red = 0.818071, .green = 0.998535, .blue = 0.863248 },
+	{ .red = 0.822466, .green = 0.998291, .blue = 0.901343 },
+	{ .red = 0.832234, .green = 0.999023, .blue = 0.938462 },
+	{ .red = 0.854457, .green = 0.999023, .blue = 0.972650 },
+	{ .red = 0.881319, .green = 0.999512, .blue = 0.999023 },
+	{ .red = 0.853480, .green = 0.976557, .blue = 0.999023 },
+	{ .red = 0.837118, .green = 0.955067, .blue = 0.998779 },
+	{ .red = 0.603419, .green = 0.991941, .blue = 0.077900 },
+	{ .red = 0.606838, .green = 0.999023, .blue = 0.102320 },
+	{ .red = 0.620513, .green = 0.999267, .blue = 0.205861 },
+	{ .red = 0.643956, .green = 0.999756, .blue = 0.312332 },
+	{ .red = 0.676435, .green = 0.999512, .blue = 0.421978 },
+	{ .red = 0.715995, .green = 0.998779, .blue = 0.531868 },
+	{ .red = 0.760195, .green = 0.998291, .blue = 0.638095 },
+	{ .red = 0.792430, .green = 0.999023, .blue = 0.718926 },
+	{ .red = 0.790720, .green = 0.999023, .blue = 0.757021 },
+	{ .red = 0.790232, .green = 0.998535, .blue = 0.795604 },
+	{ .red = 0.789499, .green = 0.999267, .blue = 0.832723 },
+	{ .red = 0.791941, .green = 0.999756, .blue = 0.870085 },
+	{ .red = 0.799756, .green = 0.999267, .blue = 0.907204 },
+	{ .red = 0.813431, .green = 0.999512, .blue = 0.942613 },
+	{ .red = 0.840781, .green = 0.998535, .blue = 0.974115 },
+	{ .red = 0.868376, .green = 0.999512, .blue = 0.998535 },
+	{ .red = 0.835653, .green = 0.977289, .blue = 0.998535 },
+	{ .red = 0.568010, .green = 0.993895, .blue = 0.069841 },
+	{ .red = 0.571673, .green = 0.998046, .blue = 0.105006 },
+	{ .red = 0.586325, .green = 0.999756, .blue = 0.198046 },
+	{ .red = 0.611966, .green = 0.999756, .blue = 0.300611 },
+	{ .red = 0.647131, .green = 0.999512, .blue = 0.406105 },
+	{ .red = 0.689621, .green = 0.999267, .blue = 0.512332 },
+	{ .red = 0.736508, .green = 0.999023, .blue = 0.615873 },
+	{ .red = 0.763370, .green = 0.999023, .blue = 0.688400 },
+	{ .red = 0.762149, .green = 0.999023, .blue = 0.726740 },
+	{ .red = 0.761661, .green = 0.998779, .blue = 0.764835 },
+	{ .red = 0.763126, .green = 0.998046, .blue = 0.802930 },
+	{ .red = 0.764347, .green = 0.998779, .blue = 0.839560 },
+	{ .red = 0.768254, .green = 0.999512, .blue = 0.875946 },
+	{ .red = 0.778999, .green = 0.998779, .blue = 0.911600 },
+	{ .red = 0.794383, .green = 0.999756, .blue = 0.945299 },
+	{ .red = 0.823443, .green = 0.998779, .blue = 0.974847 },
+	{ .red = 0.853480, .green = 0.998779, .blue = 0.997558 },
+	{ .red = 0.999267, .green = 0.099145, .blue = 0.054457 },
+	{ .red = 0.991209, .green = 0.059829, .blue = 0.106227 },
+	{ .red = 0.987790, .green = 0.018803, .blue = 0.202442 },
+	{ .red = 0.958730, .green = 0.020024, .blue = 0.293040 },
+	{ .red = 0.936996, .green = 0.017338, .blue = 0.380464 },
+	{ .red = 0.919414, .green = 0.012698, .blue = 0.464713 },
+	{ .red = 0.914286, .green = 0.016361, .blue = 0.552625 },
+	{ .red = 0.915263, .green = 0.016361, .blue = 0.643468 },
+	{ .red = 0.915995, .green = 0.015873, .blue = 0.733822 },
+	{ .red = 0.914530, .green = 0.022955, .blue = 0.822711 },
+	{ .red = 0.910134, .green = 0.024176, .blue = 0.909402 },
+	{ .red = 0.864225, .green = 0.021490, .blue = 0.926496 },
+	{ .red = 0.818315, .green = 0.025885, .blue = 0.937241 },
+	{ .red = 0.803907, .green = 0.040781, .blue = 0.980220 },
+	{ .red = 0.772650, .green = 0.078144, .blue = 0.998291 },
+	{ .red = 0.732357, .green = 0.104274, .blue = 0.998779 },
+	{ .red = 0.695482, .green = 0.121123, .blue = 0.999512 },
+	{ .red = 0.998046, .green = 0.132357, .blue = 0.053236 },
+	{ .red = 0.997802, .green = 0.087179, .blue = 0.099389 },
+	{ .red = 0.996337, .green = 0.066178, .blue = 0.199023 },
+	{ .red = 0.994139, .green = 0.039560, .blue = 0.297680 },
+	{ .red = 0.980220, .green = 0.026129, .blue = 0.391941 },
+	{ .red = 0.962393, .green = 0.014896, .blue = 0.481563 },
+	{ .red = 0.954335, .green = 0.011722, .blue = 0.573138 },
+	{ .red = 0.952869, .green = 0.010989, .blue = 0.667643 },
+	{ .red = 0.949695, .green = 0.016117, .blue = 0.760440 },
+	{ .red = 0.944567, .green = 0.024420, .blue = 0.850794 },
+	{ .red = 0.937485, .green = 0.021001, .blue = 0.938462 },
+	{ .red = 0.886691, .green = 0.027839, .blue = 0.952625 },
+	{ .red = 0.842491, .green = 0.019780, .blue = 0.967521 },
+	{ .red = 0.812943, .green = 0.060317, .blue = 0.993162 },
+	{ .red = 0.772161, .green = 0.092796, .blue = 0.998779 },
+	{ .red = 0.733089, .green = 0.128938, .blue = 0.998779 },
+	{ .red = 0.699389, .green = 0.163614, .blue = 0.998779 },
+	{ .red = 0.998535, .green = 0.207082, .blue = 0.046398 },
+	{ .red = 0.999267, .green = 0.232723, .blue = 0.124054 },
+	{ .red = 0.999512, .green = 0.223687, .blue = 0.216117 },
+	{ .red = 0.999267, .green = 0.215873, .blue = 0.313553 },
+	{ .red = 0.999512, .green = 0.212698, .blue = 0.411722 },
+	{ .red = 0.999756, .green = 0.211966, .blue = 0.509402 },
+	{ .red = 0.998779, .green = 0.211966, .blue = 0.606105 },
+	{ .red = 0.999023, .green = 0.211233, .blue = 0.702808 },
+	{ .red = 0.999267, .green = 0.207326, .blue = 0.800000 },
+	{ .red = 0.998535, .green = 0.199756, .blue = 0.897924 },
+	{ .red = 0.995604, .green = 0.188767, .blue = 0.993895 },
+	{ .red = 0.935043, .green = 0.198779, .blue = 0.999267 },
+	{ .red = 0.877900, .green = 0.207326, .blue = 0.998779 },
+	{ .red = 0.829548, .green = 0.220757, .blue = 0.999023 },
+	{ .red = 0.786569, .green = 0.233211, .blue = 0.999023 },
+	{ .red = 0.748474, .green = 0.246154, .blue = 0.998779 },
+	{ .red = 0.714286, .green = 0.258852, .blue = 0.998291 },
+	{ .red = 0.986813, .green = 0.291819, .blue = 0.030037 },
+	{ .red = 0.999023, .green = 0.314286, .blue = 0.123565 },
+	{ .red = 0.999023, .green = 0.374603, .blue = 0.263004 },
+	{ .red = 0.999023, .green = 0.371917, .blue = 0.357265 },
+	{ .red = 0.999512, .green = 0.372650, .blue = 0.452015 },
+	{ .red = 0.999512, .green = 0.375580, .blue = 0.544078 },
+	{ .red = 0.998779, .green = 0.378755, .blue = 0.632967 },
+	{ .red = 0.998779, .green = 0.380952, .blue = 0.720147 },
+	{ .red = 0.999267, .green = 0.380708, .blue = 0.806838 },
+	{ .red = 0.999023, .green = 0.377778, .blue = 0.895238 },
+	{ .red = 0.999267, .green = 0.371917, .blue = 0.983394 },
+	{ .red = 0.951404, .green = 0.368254, .blue = 0.998779 },
+	{ .red = 0.897924, .green = 0.365568, .blue = 0.999023 },
+	{ .red = 0.851282, .green = 0.365079, .blue = 0.999267 },
+	{ .red = 0.809035, .green = 0.364835, .blue = 0.998291 },
+	{ .red = 0.771673, .green = 0.365812, .blue = 0.998291 },
+	{ .red = 0.737729, .green = 0.366789, .blue = 0.998535 },
+	{ .red = 0.954823, .green = 0.374359, .blue = 0.008547 },
+	{ .red = 0.999512, .green = 0.401221, .blue = 0.119170 },
+	{ .red = 0.999267, .green = 0.472039, .blue = 0.286203 },
+	{ .red = 0.999023, .green = 0.513065, .blue = 0.416606 },
+	{ .red = 0.999023, .green = 0.515995, .blue = 0.506960 },
+	{ .red = 0.999023, .green = 0.521368, .blue = 0.593162 },
+	{ .red = 0.998535, .green = 0.526740, .blue = 0.673260 },
+	{ .red = 0.999512, .green = 0.530159, .blue = 0.749695 },
+	{ .red = 0.999023, .green = 0.530159, .blue = 0.823199 },
+	{ .red = 0.998535, .green = 0.526984, .blue = 0.898657 },
+	{ .red = 0.999023, .green = 0.519658, .blue = 0.973871 },
+	{ .red = 0.965812, .green = 0.510379, .blue = 0.999023 },
+	{ .red = 0.916239, .green = 0.502564, .blue = 0.998291 },
+	{ .red = 0.873748, .green = 0.495238, .blue = 0.999512 },
+	{ .red = 0.834188, .green = 0.488156, .blue = 0.999023 },
+	{ .red = 0.798779, .green = 0.481807, .blue = 0.999512 },
+	{ .red = 0.765812, .green = 0.476190, .blue = 0.999267 },
+	{ .red = 0.962149, .green = 0.471795, .blue = 0.013919 },
+	{ .red = 0.999267, .green = 0.494505, .blue = 0.116728 },
+	{ .red = 0.999512, .green = 0.543346, .blue = 0.279121 },
+	{ .red = 0.999023, .green = 0.610012, .blue = 0.447619 },
+	{ .red = 0.998779, .green = 0.640781, .blue = 0.564347 },
+	{ .red = 0.999512, .green = 0.646886, .blue = 0.644933 },
+	{ .red = 0.998291, .green = 0.653968, .blue = 0.718437 },
+	{ .red = 0.998535, .green = 0.659096, .blue = 0.784860 },
+	{ .red = 0.999267, .green = 0.659585, .blue = 0.847619 },
+	{ .red = 0.999512, .green = 0.655433, .blue = 0.911111 },
+	{ .red = 0.998779, .green = 0.645421, .blue = 0.972161 },
+	{ .red = 0.973871, .green = 0.632967, .blue = 0.999267 },
+	{ .red = 0.929670, .green = 0.622222, .blue = 0.998291 },
+	{ .red = 0.891819, .green = 0.610745, .blue = 0.999756 },
+	{ .red = 0.855678, .green = 0.599267, .blue = 0.998046 },
+	{ .red = 0.822955, .green = 0.588034, .blue = 0.998046 },
+	{ .red = 0.793651, .green = 0.578266, .blue = 0.999512 },
+	{ .red = 0.965812, .green = 0.569719, .blue = 0.018803 },
+	{ .red = 0.998779, .green = 0.589255, .blue = 0.109402 },
+	{ .red = 0.999512, .green = 0.622955, .blue = 0.270818 },
+	{ .red = 0.998535, .green = 0.668620, .blue = 0.430281 },
+	{ .red = 0.999023, .green = 0.719658, .blue = 0.582662 },
+	{ .red = 0.998779, .green = 0.747741, .blue = 0.687912 },
+	{ .red = 0.998535, .green = 0.754823, .blue = 0.757265 },
+	{ .red = 0.999512, .green = 0.761416, .blue = 0.818071 },
+	{ .red = 0.999267, .green = 0.763858, .blue = 0.872527 },
+	{ .red = 0.998535, .green = 0.760195, .blue = 0.925031 },
+	{ .red = 0.998535, .green = 0.748962, .blue = 0.976557 },
+	{ .red = 0.976313, .green = 0.735287, .blue = 0.999267 },
+	{ .red = 0.938950, .green = 0.722833, .blue = 0.999267 },
+	{ .red = 0.905495, .green = 0.709158, .blue = 0.999023 },
+	{ .red = 0.874481, .green = 0.694994, .blue = 0.998535 },
+	{ .red = 0.845665, .green = 0.681563, .blue = 0.998046 },
+	{ .red = 0.819048, .green = 0.668620, .blue = 0.998779 },
+	{ .red = 0.970452, .green = 0.669597, .blue = 0.013187 },
+	{ .red = 0.999023, .green = 0.686203, .blue = 0.094261 },
+	{ .red = 0.998779, .green = 0.706716, .blue = 0.257143 },
+	{ .red = 0.999512, .green = 0.736508, .blue = 0.408547 },
+	{ .red = 0.999267, .green = 0.769475, .blue = 0.553846 },
+	{ .red = 0.999512, .green = 0.803907, .blue = 0.683516 },
+	{ .red = 0.999267, .green = 0.831502, .blue = 0.781929 },
+	{ .red = 0.998535, .green = 0.837851, .blue = 0.841270 },
+	{ .red = 0.998535, .green = 0.842735, .blue = 0.892063 },
+	{ .red = 0.999267, .green = 0.841026, .blue = 0.938706 },
+	{ .red = 0.999756, .green = 0.830037, .blue = 0.984127 },
+	{ .red = 0.974603, .green = 0.817094, .blue = 0.998046 },
+	{ .red = 0.944078, .green = 0.803907, .blue = 0.999023 },
+	{ .red = 0.915995, .green = 0.789255, .blue = 0.998535 },
+	{ .red = 0.890354, .green = 0.774115, .blue = 0.999023 },
+	{ .red = 0.865446, .green = 0.759219, .blue = 0.998291 },
+	{ .red = 0.841758, .green = 0.745055, .blue = 0.998046 },
+	{ .red = 0.971184, .green = 0.768987, .blue = 0.027839 },
+	{ .red = 0.998779, .green = 0.785104, .blue = 0.063736 },
+	{ .red = 0.999267, .green = 0.795849, .blue = 0.237118 },
+	{ .red = 0.999267, .green = 0.811477, .blue = 0.380220 },
+	{ .red = 0.999023, .green = 0.829548, .blue = 0.517460 },
+	{ .red = 0.998535, .green = 0.848596, .blue = 0.644933 },
+	{ .red = 0.998535, .green = 0.869597, .blue = 0.756288 },
+	{ .red = 0.999512, .green = 0.893284, .blue = 0.848352 },
+	{ .red = 0.999756, .green = 0.898901, .blue = 0.902320 },
+	{ .red = 0.999512, .green = 0.901099, .blue = 0.947497 },
+	{ .red = 0.999512, .green = 0.892063, .blue = 0.989988 },
+	{ .red = 0.973871, .green = 0.880586, .blue = 0.999023 },
+	{ .red = 0.948230, .green = 0.866911, .blue = 0.999267 },
+	{ .red = 0.925031, .green = 0.852259, .blue = 0.998291 },
+	{ .red = 0.903785, .green = 0.837118, .blue = 0.999023 },
+	{ .red = 0.883028, .green = 0.822222, .blue = 0.998779 },
+	{ .red = 0.862759, .green = 0.807326, .blue = 0.998779 },
+	{ .red = 0.976801, .green = 0.873504, .blue = 0.019048 },
+	{ .red = 0.992186, .green = 0.883028, .blue = 0.030525 },
+	{ .red = 0.999512, .green = 0.891087, .blue = 0.205861 },
+	{ .red = 0.999267, .green = 0.896215, .blue = 0.342613 },
+	{ .red = 0.999023, .green = 0.902564, .blue = 0.470085 },
+	{ .red = 0.999023, .green = 0.909158, .blue = 0.590476 },
+	{ .red = 0.998291, .green = 0.916239, .blue = 0.702076 },
+	{ .red = 0.999023, .green = 0.924786, .blue = 0.800244 },
+	{ .red = 0.999512, .green = 0.935775, .blue = 0.884493 },
+	{ .red = 0.999756, .green = 0.943590, .blue = 0.946032 },
+	{ .red = 0.998291, .green = 0.939194, .blue = 0.993162 },
+	{ .red = 0.972650, .green = 0.928938, .blue = 0.999267 },
+	{ .red = 0.951648, .green = 0.915263, .blue = 0.998291 },
+	{ .red = 0.933822, .green = 0.900611, .blue = 0.999512 },
+	{ .red = 0.916239, .green = 0.885958, .blue = 0.999512 },
+	{ .red = 0.898657, .green = 0.871551, .blue = 0.998779 },
+	{ .red = 0.881319, .green = 0.857143, .blue = 0.998535 },
+	{ .red = 0.976313, .green = 0.975092, .blue = 0.019048 },
+	{ .red = 0.982173, .green = 0.979243, .blue = 0.019048 },
+	{ .red = 0.996093, .green = 0.989499, .blue = 0.129426 },
+	{ .red = 0.999512, .green = 0.992674, .blue = 0.273260 },
+	{ .red = 0.997558, .green = 0.991453, .blue = 0.399267 },
+	{ .red = 0.999756, .green = 0.993407, .blue = 0.503785 },
+	{ .red = 0.999267, .green = 0.992918, .blue = 0.606838 },
+	{ .red = 0.999512, .green = 0.993162, .blue = 0.700855 },
+	{ .red = 0.998046, .green = 0.992186, .blue = 0.789988 },
+	{ .red = 0.992186, .green = 0.988034, .blue = 0.881563 },
+	{ .red = 0.980464, .green = 0.978999, .blue = 0.979243 },
+	{ .red = 0.969475, .green = 0.965324, .blue = 0.999023 },
+	{ .red = 0.956044, .green = 0.951404, .blue = 0.999023 },
+	{ .red = 0.941880, .green = 0.937241, .blue = 0.998779 },
+	{ .red = 0.927717, .green = 0.923321, .blue = 0.999512 },
+	{ .red = 0.913065, .green = 0.909646, .blue = 0.999756 },
+	{ .red = 0.897924, .green = 0.895971, .blue = 0.999023 },
+	{ .red = 0.897924, .green = 0.985836, .blue = 0.071551 },
+	{ .red = 0.902076, .green = 0.990476, .blue = 0.083028 },
+	{ .red = 0.909890, .green = 0.999512, .blue = 0.181929 },
+	{ .red = 0.910623, .green = 0.998779, .blue = 0.317216 },
+	{ .red = 0.913309, .green = 0.998779, .blue = 0.435409 },
+	{ .red = 0.917216, .green = 0.998779, .blue = 0.544078 },
+	{ .red = 0.921856, .green = 0.998535, .blue = 0.644200 },
+	{ .red = 0.927228, .green = 0.998779, .blue = 0.733089 },
+	{ .red = 0.932845, .green = 0.999267, .blue = 0.813675 },
+	{ .red = 0.940171, .green = 0.999267, .blue = 0.888645 },
+	{ .red = 0.939194, .green = 0.998291, .blue = 0.945788 },
+	{ .red = 0.934799, .green = 0.998779, .blue = 0.999267 },
+	{ .red = 0.949206, .green = 0.972894, .blue = 0.999756 },
+	{ .red = 0.950916, .green = 0.964591, .blue = 0.999023 },
+	{ .red = 0.938950, .green = 0.951648, .blue = 0.998779 },
+	{ .red = 0.926252, .green = 0.938950, .blue = 0.998779 },
+	{ .red = 0.912821, .green = 0.926252, .blue = 0.999512 },
+	{ .red = 0.828327, .green = 0.990965, .blue = 0.062515 },
+	{ .red = 0.831746, .green = 0.996825, .blue = 0.069597 },
+	{ .red = 0.836142, .green = 0.999512, .blue = 0.201709 },
+	{ .red = 0.841514, .green = 0.999512, .blue = 0.321856 },
+	{ .red = 0.849573, .green = 0.999512, .blue = 0.435409 },
+	{ .red = 0.859829, .green = 0.999023, .blue = 0.544322 },
+	{ .red = 0.872527, .green = 0.999267, .blue = 0.644200 },
+	{ .red = 0.887179, .green = 0.999267, .blue = 0.736264 },
+	{ .red = 0.904762, .green = 0.998291, .blue = 0.821245 },
+	{ .red = 0.923077, .green = 0.998779, .blue = 0.890842 },
+	{ .red = 0.918193, .green = 0.998535, .blue = 0.925763 },
+	{ .red = 0.917216, .green = 0.999756, .blue = 0.963858 },
+	{ .red = 0.933089, .green = 0.998779, .blue = 0.999023 },
+	{ .red = 0.926740, .green = 0.975092, .blue = 0.998779 },
+	{ .red = 0.923565, .green = 0.960440, .blue = 0.999267 },
+	{ .red = 0.935043, .green = 0.958486, .blue = 0.998535 },
+	{ .red = 0.927228, .green = 0.949695, .blue = 0.999023 },
+	{ .red = 0.768010, .green = 0.994383, .blue = 0.055189 },
+	{ .red = 0.770208, .green = 0.997558, .blue = 0.093773 },
+	{ .red = 0.776068, .green = 0.999512, .blue = 0.206105 },
+	{ .red = 0.785348, .green = 0.999023, .blue = 0.319902 },
+	{ .red = 0.798779, .green = 0.999267, .blue = 0.430037 },
+	{ .red = 0.816117, .green = 0.998535, .blue = 0.538462 },
+	{ .red = 0.836386, .green = 0.998535, .blue = 0.639316 },
+	{ .red = 0.859829, .green = 0.998291, .blue = 0.733333 },
+	{ .red = 0.885958, .green = 0.999023, .blue = 0.816361 },
+	{ .red = 0.897192, .green = 0.999023, .blue = 0.869109 },
+	{ .red = 0.894017, .green = 0.999023, .blue = 0.902076 },
+	{ .red = 0.894750, .green = 0.999023, .blue = 0.936752 },
+	{ .red = 0.906471, .green = 0.998535, .blue = 0.971429 },
+	{ .red = 0.927473, .green = 0.998779, .blue = 0.998779 },
+	{ .red = 0.909158, .green = 0.977045, .blue = 0.998535 },
+	{ .red = 0.899389, .green = 0.959951, .blue = 0.999023 },
+	{ .red = 0.895238, .green = 0.947009, .blue = 0.998779 },
+	{ .red = 0.714530, .green = 0.992674, .blue = 0.076435 },
+	{ .red = 0.717949, .green = 0.998779, .blue = 0.098168 },
+	{ .red = 0.725275, .green = 0.999023, .blue = 0.205128 },
+	{ .red = 0.738217, .green = 0.999267, .blue = 0.312088 },
+	{ .red = 0.756532, .green = 0.999023, .blue = 0.419780 },
+	{ .red = 0.779731, .green = 0.998535, .blue = 0.526496 },
+	{ .red = 0.806593, .green = 0.998779, .blue = 0.627350 },
+	{ .red = 0.836874, .green = 0.998291, .blue = 0.722344 },
+	{ .red = 0.869353, .green = 0.999023, .blue = 0.806349 },
+	{ .red = 0.870330, .green = 0.999023, .blue = 0.843468 },
+	{ .red = 0.868376, .green = 0.999023, .blue = 0.876190 },
+	{ .red = 0.869597, .green = 0.998535, .blue = 0.909890 },
+	{ .red = 0.874481, .green = 0.999512, .blue = 0.943346 },
+	{ .red = 0.892063, .green = 0.999023, .blue = 0.975336 },
+	{ .red = 0.917949, .green = 0.998535, .blue = 0.998291 },
+	{ .red = 0.891819, .green = 0.978510, .blue = 0.998779 },
+	{ .red = 0.877411, .green = 0.960440, .blue = 0.999512 },
+	{ .red = 0.669109, .green = 0.994139, .blue = 0.070085 },
+	{ .red = 0.672039, .green = 0.997802, .blue = 0.105006 },
+	{ .red = 0.681319, .green = 0.999267, .blue = 0.200000 },
+	{ .red = 0.697192, .green = 0.999512, .blue = 0.302076 },
+	{ .red = 0.719658, .green = 0.999023, .blue = 0.407326 },
+	{ .red = 0.747497, .green = 0.998535, .blue = 0.511355 },
+	{ .red = 0.779243, .green = 0.998779, .blue = 0.611477 },
+	{ .red = 0.814896, .green = 0.998291, .blue = 0.706471 },
+	{ .red = 0.844444, .green = 0.999267, .blue = 0.782173 },
+	{ .red = 0.841758, .green = 0.999756, .blue = 0.814408 },
+	{ .red = 0.842247, .green = 0.998291, .blue = 0.849084 },
+	{ .red = 0.842247, .green = 0.998535, .blue = 0.881563 },
+	{ .red = 0.846398, .green = 0.998535, .blue = 0.914774 },
+	{ .red = 0.857143, .green = 0.998535, .blue = 0.947253 },
+	{ .red = 0.876190, .green = 0.999756, .blue = 0.977289 },
+	{ .red = 0.904762, .green = 0.998535, .blue = 0.998046 },
+	{ .red = 0.873260, .green = 0.979731, .blue = 0.999267 },
+	{ .red = 0.629304, .green = 0.995116, .blue = 0.065446 },
+	{ .red = 0.632479, .green = 0.998779, .blue = 0.099389 },
+	{ .red = 0.642735, .green = 0.999267, .blue = 0.193407 },
+	{ .red = 0.661050, .green = 0.999512, .blue = 0.291087 },
+	{ .red = 0.686447, .green = 0.998779, .blue = 0.392918 },
+	{ .red = 0.718193, .green = 0.998291, .blue = 0.494750 },
+	{ .red = 0.753602, .green = 0.999023, .blue = 0.592918 },
+	{ .red = 0.792186, .green = 0.999512, .blue = 0.685714 },
+	{ .red = 0.816117, .green = 0.999267, .blue = 0.752381 },
+	{ .red = 0.814896, .green = 0.998779, .blue = 0.786325 },
+	{ .red = 0.813919, .green = 0.998535, .blue = 0.819536 },
+	{ .red = 0.813919, .green = 0.999023, .blue = 0.852503 },
+	{ .red = 0.815873, .green = 0.999512, .blue = 0.885470 },
+	{ .red = 0.822955, .green = 0.999512, .blue = 0.918437 },
+	{ .red = 0.836874, .green = 0.999267, .blue = 0.949939 },
+	{ .red = 0.861050, .green = 0.999023, .blue = 0.977778 },
+	{ .red = 0.886935, .green = 0.999267, .blue = 0.998535 },
+	{ .red = 0.999267, .green = 0.110623, .blue = 0.060317 },
+	{ .red = 0.995849, .green = 0.075214, .blue = 0.101099 },
+	{ .red = 0.999267, .green = 0.049573, .blue = 0.188767 },
+	{ .red = 0.980952, .green = 0.036386, .blue = 0.274725 },
+	{ .red = 0.968742, .green = 0.017094, .blue = 0.359463 },
+	{ .red = 0.952625, .green = 0.016606, .blue = 0.440293 },
+	{ .red = 0.936752, .green = 0.018559, .blue = 0.517460 },
+	{ .red = 0.937241, .green = 0.020024, .blue = 0.601954 },
+	{ .red = 0.938462, .green = 0.018315, .blue = 0.686203 },
+	{ .red = 0.938706, .green = 0.019292, .blue = 0.769963 },
+	{ .red = 0.937241, .green = 0.025153, .blue = 0.852259 },
+	{ .red = 0.933822, .green = 0.021245, .blue = 0.933578 },
+	{ .red = 0.889377, .green = 0.023199, .blue = 0.947497 },
+	{ .red = 0.847131, .green = 0.021001, .blue = 0.958730 },
+	{ .red = 0.823687, .green = 0.038828, .blue = 0.987302 },
+	{ .red = 0.787790, .green = 0.079365, .blue = 0.995604 },
+	{ .red = 0.751893, .green = 0.101832, .blue = 0.999512 },
+	{ .red = 0.999023, .green = 0.135775, .blue = 0.059096 },
+	{ .red = 0.998779, .green = 0.094505, .blue = 0.094750 },
+	{ .red = 0.999267, .green = 0.077656, .blue = 0.184860 },
+	{ .red = 0.991697, .green = 0.063736, .blue = 0.273748 },
+	{ .red = 0.986081, .green = 0.047619, .blue = 0.361905 },
+	{ .red = 0.985836, .green = 0.024420, .blue = 0.451038 },
+	{ .red = 0.970208, .green = 0.020513, .blue = 0.532357 },
+	{ .red = 0.970696, .green = 0.017827, .blue = 0.620757 },
+	{ .red = 0.968987, .green = 0.019048, .blue = 0.707204 },
+	{ .red = 0.967033, .green = 0.019048, .blue = 0.792918 },
+	{ .red = 0.962882, .green = 0.025153, .blue = 0.876679 },
+	{ .red = 0.957021, .green = 0.018559, .blue = 0.957998 },
+	{ .red = 0.909402, .green = 0.025397, .blue = 0.970696 },
+	{ .red = 0.863248, .green = 0.031013, .blue = 0.978999 },
+	{ .red = 0.831746, .green = 0.055922, .blue = 0.998535 },
+	{ .red = 0.791941, .green = 0.111844, .blue = 0.999756 },
+	{ .red = 0.756288, .green = 0.151404, .blue = 0.999267 },
+	{ .red = 0.998779, .green = 0.197802, .blue = 0.054701 },
+	{ .red = 0.999267, .green = 0.234188, .blue = 0.127228 },
+	{ .red = 0.998535, .green = 0.223687, .blue = 0.205861 },
+	{ .red = 0.999023, .green = 0.217338, .blue = 0.294261 },
+	{ .red = 0.999267, .green = 0.214652, .blue = 0.383394 },
+	{ .red = 0.999512, .green = 0.214164, .blue = 0.472039 },
+	{ .red = 0.999267, .green = 0.214408, .blue = 0.559707 },
+	{ .red = 0.999756, .green = 0.215140, .blue = 0.646886 },
+	{ .red = 0.999023, .green = 0.214652, .blue = 0.732845 },
+	{ .red = 0.999267, .green = 0.211722, .blue = 0.819536 },
+	{ .red = 0.998535, .green = 0.206105, .blue = 0.906716 },
+	{ .red = 0.996337, .green = 0.197802, .blue = 0.992918 },
+	{ .red = 0.943101, .green = 0.206838, .blue = 0.999023 },
+	{ .red = 0.891087, .green = 0.215140, .blue = 0.998779 },
+	{ .red = 0.845665, .green = 0.227595, .blue = 0.998535 },
+	{ .red = 0.806349, .green = 0.241026, .blue = 0.999023 },
+	{ .red = 0.770696, .green = 0.253968, .blue = 0.999023 },
+	{ .red = 0.997802, .green = 0.273504, .blue = 0.044444 },
+	{ .red = 0.999756, .green = 0.302320, .blue = 0.127228 },
+	{ .red = 0.998779, .green = 0.364347, .blue = 0.254701 },
+	{ .red = 0.998535, .green = 0.362882, .blue = 0.339927 },
+	{ .red = 0.999756, .green = 0.364347, .blue = 0.426618 },
+	{ .red = 0.999023, .green = 0.367521, .blue = 0.510867 },
+	{ .red = 0.998535, .green = 0.371184, .blue = 0.591941 },
+	{ .red = 0.999267, .green = 0.374603, .blue = 0.671062 },
+	{ .red = 0.998535, .green = 0.376557, .blue = 0.747497 },
+	{ .red = 0.999023, .green = 0.376313, .blue = 0.824420 },
+	{ .red = 0.999023, .green = 0.373871, .blue = 0.903053 },
+	{ .red = 0.999267, .green = 0.368987, .blue = 0.981441 },
+	{ .red = 0.959463, .green = 0.365568, .blue = 0.998535 },
+	{ .red = 0.910623, .green = 0.362637, .blue = 0.999512 },
+	{ .red = 0.866911, .green = 0.363126, .blue = 0.999023 },
+	{ .red = 0.827595, .green = 0.364347, .blue = 0.998535 },
+	{ .red = 0.793407, .green = 0.366300, .blue = 0.999756 },
+	{ .red = 0.975092, .green = 0.347985, .blue = 0.019048 },
+	{ .red = 0.998779, .green = 0.377045, .blue = 0.124054 },
+	{ .red = 0.999267, .green = 0.458608, .blue = 0.284737 },
+	{ .red = 0.999267, .green = 0.497192, .blue = 0.402198 },
+	{ .red = 0.999267, .green = 0.500855, .blue = 0.485226 },
+	{ .red = 0.999267, .green = 0.506960, .blue = 0.564591 },
+	{ .red = 0.998779, .green = 0.513065, .blue = 0.638828 },
+	{ .red = 0.999756, .green = 0.518193, .blue = 0.708181 },
+	{ .red = 0.998779, .green = 0.520879, .blue = 0.773626 },
+	{ .red = 0.999023, .green = 0.520635, .blue = 0.838828 },
+	{ .red = 0.998535, .green = 0.517460, .blue = 0.905250 },
+	{ .red = 0.999512, .green = 0.510867, .blue = 0.972161 },
+	{ .red = 0.973382, .green = 0.501587, .blue = 0.998291 },
+	{ .red = 0.928205, .green = 0.493773, .blue = 0.998535 },
+	{ .red = 0.887912, .green = 0.487668, .blue = 0.998535 },
+	{ .red = 0.851526, .green = 0.481563, .blue = 0.999267 },
+	{ .red = 0.817338, .green = 0.476435, .blue = 0.998535 },
+	{ .red = 0.978755, .green = 0.436386, .blue = 0.010256 },
+	{ .red = 0.998779, .green = 0.457875, .blue = 0.120879 },
+	{ .red = 0.998779, .green = 0.516972, .blue = 0.276679 },
+	{ .red = 0.999023, .green = 0.596825, .blue = 0.446642 },
+	{ .red = 0.998779, .green = 0.621734, .blue = 0.547497 },
+	{ .red = 0.999023, .green = 0.628571, .blue = 0.621978 },
+	{ .red = 0.998535, .green = 0.636874, .blue = 0.690110 },
+	{ .red = 0.998779, .green = 0.643468, .blue = 0.751160 },
+	{ .red = 0.998779, .green = 0.647131, .blue = 0.807326 },
+	{ .red = 0.999023, .green = 0.646642, .blue = 0.860806 },
+	{ .red = 0.998291, .green = 0.642491, .blue = 0.915263 },
+	{ .red = 0.998779, .green = 0.632967, .blue = 0.969231 },
+	{ .red = 0.981685, .green = 0.620024, .blue = 0.998535 },
+	{ .red = 0.942125, .green = 0.609524, .blue = 0.999267 },
+	{ .red = 0.905250, .green = 0.599267, .blue = 0.998291 },
+	{ .red = 0.872527, .green = 0.588767, .blue = 0.999267 },
+	{ .red = 0.840781, .green = 0.578999, .blue = 0.998291 },
+	{ .red = 0.982173, .green = 0.526252, .blue = 0.008547 },
+	{ .red = 0.999756, .green = 0.543101, .blue = 0.117705 },
+	{ .red = 0.999267, .green = 0.585104, .blue = 0.269353 },
+	{ .red = 0.998535, .green = 0.642735, .blue = 0.428327 },
+	{ .red = 0.999512, .green = 0.706471, .blue = 0.583394 },
+	{ .red = 0.998779, .green = 0.727961, .blue = 0.672039 },
+	{ .red = 0.999756, .green = 0.736020, .blue = 0.735531 },
+	{ .red = 0.999756, .green = 0.744322, .blue = 0.791697 },
+	{ .red = 0.998779, .green = 0.749451, .blue = 0.840293 },
+	{ .red = 0.999512, .green = 0.749939, .blue = 0.885470 },
+	{ .red = 0.998291, .green = 0.745788, .blue = 0.929670 },
+	{ .red = 0.998291, .green = 0.734310, .blue = 0.972894 },
+	{ .red = 0.984615, .green = 0.719658, .blue = 0.998779 },
+	{ .red = 0.950427, .green = 0.707692, .blue = 0.999512 },
+	{ .red = 0.918681, .green = 0.694750, .blue = 0.999023 },
+	{ .red = 0.888889, .green = 0.681807, .blue = 0.998291 },
+	{ .red = 0.861294, .green = 0.668864, .blue = 0.998535 },
+	{ .red = 0.977534, .green = 0.613675, .blue = 0.030281 },
+	{ .red = 0.999023, .green = 0.629304, .blue = 0.111355 },
+	{ .red = 0.999023, .green = 0.657875, .blue = 0.259341 },
+	{ .red = 0.999023, .green = 0.698657, .blue = 0.409768 },
+	{ .red = 0.999756, .green = 0.743346, .blue = 0.555800 },
+	{ .red = 0.999023, .green = 0.789499, .blue = 0.687424 },
+	{ .red = 0.998535, .green = 0.812210, .blue = 0.768987 },
+	{ .red = 0.998291, .green = 0.820024, .blue = 0.822222 },
+	{ .red = 0.998535, .green = 0.827106, .blue = 0.867643 },
+	{ .red = 0.998291, .green = 0.829792, .blue = 0.906471 },
+	{ .red = 0.998535, .green = 0.826374, .blue = 0.944078 },
+	{ .red = 0.998779, .green = 0.814652, .blue = 0.979976 },
+	{ .red = 0.983883, .green = 0.800244, .blue = 0.998779 },
+	{ .red = 0.954090, .green = 0.787546, .blue = 0.998046 },
+	{ .red = 0.928205, .green = 0.773626, .blue = 0.999267 },
+	{ .red = 0.902564, .green = 0.759219, .blue = 0.998291 },
+	{ .red = 0.878388, .green = 0.745299, .blue = 0.998046 },
+	{ .red = 0.978022, .green = 0.703541, .blue = 0.039805 },
+	{ .red = 0.999512, .green = 0.717705, .blue = 0.100611 },
+	{ .red = 0.999023, .green = 0.735043, .blue = 0.245665 },
+	{ .red = 0.998779, .green = 0.760684, .blue = 0.386813 },
+	{ .red = 0.998779, .green = 0.789988, .blue = 0.525275 },
+	{ .red = 0.998779, .green = 0.820513, .blue = 0.652991 },
+	{ .red = 0.998046, .green = 0.852015, .blue = 0.762882 },
+	{ .red = 0.999023, .green = 0.875946, .blue = 0.840537 },
+	{ .red = 0.999267, .green = 0.882784, .blue = 0.885714 },
+	{ .red = 0.998535, .green = 0.888156, .blue = 0.923077 },
+	{ .red = 0.998779, .green = 0.887179, .blue = 0.955556 },
+	{ .red = 0.999023, .green = 0.876679, .blue = 0.986569 },
+	{ .red = 0.981685, .green = 0.863492, .blue = 0.998046 },
+	{ .red = 0.957509, .green = 0.850549, .blue = 0.998291 },
+	{ .red = 0.935287, .green = 0.836142, .blue = 0.998291 },
+	{ .red = 0.914286, .green = 0.821734, .blue = 0.999023 },
+	{ .red = 0.894017, .green = 0.807082, .blue = 0.999756 },
+	{ .red = 0.985348, .green = 0.798535, .blue = 0.021001 },
+	{ .red = 0.997558, .green = 0.806838, .blue = 0.086447 },
+	{ .red = 0.999267, .green = 0.816850, .blue = 0.228327 },
+	{ .red = 0.999756, .green = 0.830769, .blue = 0.359219 },
+	{ .red = 0.999267, .green = 0.846398, .blue = 0.488400 },
+	{ .red = 0.999267, .green = 0.863248, .blue = 0.610256 },
+	{ .red = 0.998535, .green = 0.881074, .blue = 0.720879 },
+	{ .red = 0.998779, .green = 0.900611, .blue = 0.815140 },
+	{ .red = 0.999023, .green = 0.923077, .blue = 0.891575 },
+	{ .red = 0.999756, .green = 0.929182, .blue = 0.931624 },
+	{ .red = 0.999512, .green = 0.931868, .blue = 0.963614 },
+	{ .red = 0.998779, .green = 0.924054, .blue = 0.991453 },
+	{ .red = 0.980708, .green = 0.912088, .blue = 0.998535 },
+	{ .red = 0.960928, .green = 0.899145, .blue = 0.998779 },
+	{ .red = 0.942613, .green = 0.884982, .blue = 0.999512 },
+	{ .red = 0.924542, .green = 0.870818, .blue = 0.999023 },
+	{ .red = 0.906471, .green = 0.856654, .blue = 0.998779 },
+	{ .red = 0.985592, .green = 0.891331, .blue = 0.045177 },
+	{ .red = 0.992918, .green = 0.895971, .blue = 0.077167 },
+	{ .red = 0.999267, .green = 0.903541, .blue = 0.204151 },
+	{ .red = 0.999267, .green = 0.908425, .blue = 0.327228 },
+	{ .red = 0.999267, .green = 0.914042, .blue = 0.445177 },
+	{ .red = 0.999023, .green = 0.919902, .blue = 0.558730 },
+	{ .red = 0.999267, .green = 0.926496, .blue = 0.664713 },
+	{ .red = 0.999023, .green = 0.933333, .blue = 0.761905 },
+	{ .red = 0.999267, .green = 0.942125, .blue = 0.846886 },
+	{ .red = 0.999023, .green = 0.953602, .blue = 0.917705 },
+	{ .red = 0.998535, .green = 0.963126, .blue = 0.964835 },
+	{ .red = 0.999756, .green = 0.959463, .blue = 0.995849 },
+	{ .red = 0.980220, .green = 0.948962, .blue = 0.998779 },
+	{ .red = 0.964103, .green = 0.936020, .blue = 0.999023 },
+	{ .red = 0.948474, .green = 0.922589, .blue = 0.998535 },
+	{ .red = 0.933578, .green = 0.908913, .blue = 0.999267 },
+	{ .red = 0.918193, .green = 0.895482, .blue = 0.998291 },
+	{ .red = 0.985348, .green = 0.983883, .blue = 0.019048 },
+	{ .red = 0.988767, .green = 0.986325, .blue = 0.056410 },
+	{ .red = 0.994628, .green = 0.991209, .blue = 0.168010 },
+	{ .red = 0.997558, .green = 0.993895, .blue = 0.281807 },
+	{ .red = 0.997070, .green = 0.993895, .blue = 0.392186 },
+	{ .red = 0.998046, .green = 0.994628, .blue = 0.491331 },
+	{ .red = 0.999023, .green = 0.995116, .blue = 0.585836 },
+	{ .red = 0.998046, .green = 0.994383, .blue = 0.677900 },
+	{ .red = 0.999512, .green = 0.995360, .blue = 0.758974 },
+	{ .red = 0.998779, .green = 0.994628, .blue = 0.837851 },
+	{ .red = 0.998535, .green = 0.995116, .blue = 0.907937 },
+	{ .red = 0.990476, .green = 0.989255, .blue = 0.989499 },
+	{ .red = 0.979731, .green = 0.976557, .blue = 0.999023 },
+	{ .red = 0.967766, .green = 0.963858, .blue = 0.999267 },
+	{ .red = 0.955067, .green = 0.951160, .blue = 0.999023 },
+	{ .red = 0.942125, .green = 0.938217, .blue = 0.998779 },
+	{ .red = 0.928938, .green = 0.925519, .blue = 0.999512 },
+	{ .red = 0.910134, .green = 0.990965, .blue = 0.080342 },
+	{ .red = 0.913797, .green = 0.995116, .blue = 0.087424 },
+	{ .red = 0.917949, .green = 0.999512, .blue = 0.194383 },
+	{ .red = 0.918681, .green = 0.998779, .blue = 0.312576 },
+	{ .red = 0.920635, .green = 0.998291, .blue = 0.422955 },
+	{ .red = 0.925031, .green = 0.999512, .blue = 0.523321 },
+	{ .red = 0.929915, .green = 0.999756, .blue = 0.617582 },
+	{ .red = 0.934799, .green = 0.998291, .blue = 0.706960 },
+	{ .red = 0.940904, .green = 0.999512, .blue = 0.782173 },
+	{ .red = 0.947253, .green = 0.999023, .blue = 0.853968 },
+	{ .red = 0.956288, .green = 0.999512, .blue = 0.918193 },
+	{ .red = 0.957753, .green = 0.999267, .blue = 0.962149 },
+	{ .red = 0.963126, .green = 0.998535, .blue = 0.999023 },
+	{ .red = 0.962637, .green = 0.979487, .blue = 0.999512 },
+	{ .red = 0.962393, .green = 0.972650, .blue = 0.999512 },
+	{ .red = 0.950916, .green = 0.960684, .blue = 0.998779 },
+	{ .red = 0.938950, .green = 0.948962, .blue = 0.998535 },
+	{ .red = 0.844933, .green = 0.995849, .blue = 0.049817 },
+	{ .red = 0.847863, .green = 0.999756, .blue = 0.079609 },
+	{ .red = 0.849573, .green = 0.999023, .blue = 0.201465 },
+	{ .red = 0.854212, .green = 0.999756, .blue = 0.308181 },
+	{ .red = 0.860562, .green = 0.999023, .blue = 0.414896 },
+	{ .red = 0.869109, .green = 0.998779, .blue = 0.516484 },
+	{ .red = 0.879853, .green = 0.998779, .blue = 0.611966 },
+	{ .red = 0.892063, .green = 0.999267, .blue = 0.699389 },
+	{ .red = 0.905739, .green = 0.999267, .blue = 0.779731 },
+	{ .red = 0.922344, .green = 0.998535, .blue = 0.854212 },
+	{ .red = 0.939438, .green = 0.999023, .blue = 0.913797 },
+	{ .red = 0.936264, .green = 0.998535, .blue = 0.941880 },
+	{ .red = 0.936996, .green = 0.999756, .blue = 0.972405 },
+	{ .red = 0.955800, .green = 0.998535, .blue = 0.998779 },
+	{ .red = 0.941148, .green = 0.979487, .blue = 0.998779 },
+	{ .red = 0.936264, .green = 0.966789, .blue = 0.999512 },
+	{ .red = 0.948230, .green = 0.966545, .blue = 0.998779 },
+	{ .red = 0.784615, .green = 0.992674, .blue = 0.083272 },
+	{ .red = 0.788034, .green = 0.997802, .blue = 0.102808 },
+	{ .red = 0.792674, .green = 0.999512, .blue = 0.198291 },
+	{ .red = 0.799756, .green = 0.998779, .blue = 0.302808 },
+	{ .red = 0.810501, .green = 0.999267, .blue = 0.404151 },
+	{ .red = 0.824176, .green = 0.999023, .blue = 0.504762 },
+	{ .red = 0.840781, .green = 0.999023, .blue = 0.600488 },
+	{ .red = 0.859585, .green = 0.998535, .blue = 0.690598 },
+	{ .red = 0.880098, .green = 0.999512, .blue = 0.771184 },
+	{ .red = 0.904029, .green = 0.999267, .blue = 0.845910 },
+	{ .red = 0.914042, .green = 0.998535, .blue = 0.890842 },
+	{ .red = 0.910379, .green = 0.999512, .blue = 0.917216 },
+	{ .red = 0.912088, .green = 0.999267, .blue = 0.947253 },
+	{ .red = 0.925275, .green = 0.998046, .blue = 0.976557 },
+	{ .red = 0.945055, .green = 0.998779, .blue = 0.998779 },
+	{ .red = 0.923077, .green = 0.980464, .blue = 0.998779 },
+	{ .red = 0.912821, .green = 0.965079, .blue = 0.999023 },
+	{ .red = 0.735287, .green = 0.995849, .blue = 0.063492 },
+	{ .red = 0.737729, .green = 0.999023, .blue = 0.098657 },
+	{ .red = 0.743346, .green = 0.998779, .blue = 0.195360 },
+	{ .red = 0.753358, .green = 0.999267, .blue = 0.293040 },
+	{ .red = 0.767766, .green = 0.999267, .blue = 0.392186 },
+	{ .red = 0.786081, .green = 0.999267, .blue = 0.490598 },
+	{ .red = 0.807570, .green = 0.999023, .blue = 0.586081 },
+	{ .red = 0.831746, .green = 0.999023, .blue = 0.676190 },
+	{ .red = 0.858852, .green = 0.998291, .blue = 0.760195 },
+	{ .red = 0.887668, .green = 0.999023, .blue = 0.833944 },
+	{ .red = 0.887424, .green = 0.998535, .blue = 0.864469 },
+	{ .red = 0.885470, .green = 0.998779, .blue = 0.892308 },
+	{ .red = 0.886203, .green = 0.998779, .blue = 0.921368 },
+	{ .red = 0.892063, .green = 0.999023, .blue = 0.950916 },
+	{ .red = 0.910379, .green = 0.998046, .blue = 0.978510 },
+	{ .red = 0.932112, .green = 0.998779, .blue = 0.998535 },
+	{ .red = 0.905739, .green = 0.981197, .blue = 0.998779 },
+	{ .red = 0.690110, .green = 0.992186, .blue = 0.084249 },
+	{ .red = 0.693284, .green = 0.997802, .blue = 0.101832 },
+	{ .red = 0.700611, .green = 0.999512, .blue = 0.187302 },
+	{ .red = 0.712821, .green = 0.999512, .blue = 0.282051 },
+	{ .red = 0.730159, .green = 0.999023, .blue = 0.378999 },
+	{ .red = 0.752381, .green = 0.998779, .blue = 0.476190 },
+	{ .red = 0.777778, .green = 0.999267, .blue = 0.569475 },
+	{ .red = 0.806105, .green = 0.999756, .blue = 0.658364 },
+	{ .red = 0.837851, .green = 0.999023, .blue = 0.743101 },
+	{ .red = 0.861294, .green = 0.999756, .blue = 0.806838 },
+	{ .red = 0.859829, .green = 0.999267, .blue = 0.836142 },
+	{ .red = 0.858852, .green = 0.998535, .blue = 0.865690 },
+	{ .red = 0.859096, .green = 0.998779, .blue = 0.894750 },
+	{ .red = 0.863248, .green = 0.998779, .blue = 0.924542 },
+	{ .red = 0.872527, .green = 0.999267, .blue = 0.953358 },
+	{ .red = 0.893284, .green = 0.998779, .blue = 0.979731 },
+	{ .red = 0.917216, .green = 0.998535, .blue = 0.998291 },
+	{ .red = 0.999267, .green = 0.116972, .blue = 0.064225 },
+	{ .red = 0.998046, .green = 0.084005, .blue = 0.096703 },
+	{ .red = 0.999512, .green = 0.070085, .blue = 0.176313 },
+	{ .red = 0.992430, .green = 0.054701, .blue = 0.257631 },
+	{ .red = 0.986813, .green = 0.037118, .blue = 0.338217 },
+	{ .red = 0.978999, .green = 0.017582, .blue = 0.416850 },
+	{ .red = 0.958974, .green = 0.017827, .blue = 0.488156 },
+	{ .red = 0.956288, .green = 0.015140, .blue = 0.565568 },
+	{ .red = 0.956044, .green = 0.019048, .blue = 0.643712 },
+	{ .red = 0.956532, .green = 0.018803, .blue = 0.721856 },
+	{ .red = 0.956777, .green = 0.019292, .blue = 0.799756 },
+	{ .red = 0.954823, .green = 0.026129, .blue = 0.875946 },
+	{ .red = 0.952625, .green = 0.016606, .blue = 0.952381 },
+	{ .red = 0.910379, .green = 0.020757, .blue = 0.964835 },
+	{ .red = 0.868132, .green = 0.026374, .blue = 0.972894 },
+	{ .red = 0.841514, .green = 0.033211, .blue = 0.994383 },
+	{ .red = 0.804884, .green = 0.080342, .blue = 0.998291 },
+	{ .red = 0.999512, .green = 0.136752, .blue = 0.063004 },
+	{ .red = 0.999267, .green = 0.099145, .blue = 0.091331 },
+	{ .red = 0.999267, .green = 0.087424, .blue = 0.172894 },
+	{ .red = 0.996337, .green = 0.073748, .blue = 0.255433 },
+	{ .red = 0.992186, .green = 0.061050, .blue = 0.336996 },
+	{ .red = 0.995360, .green = 0.042735, .blue = 0.420513 },
+	{ .red = 0.979731, .green = 0.038095, .blue = 0.495726 },
+	{ .red = 0.985104, .green = 0.015873, .blue = 0.579976 },
+	{ .red = 0.977534, .green = 0.033211, .blue = 0.656410 },
+	{ .red = 0.979243, .green = 0.028327, .blue = 0.738217 },
+	{ .red = 0.980708, .green = 0.018071, .blue = 0.819780 },
+	{ .red = 0.977534, .green = 0.022955, .blue = 0.897680 },
+	{ .red = 0.970696, .green = 0.023687, .blue = 0.971429 },
+	{ .red = 0.926984, .green = 0.025153, .blue = 0.984127 },
+	{ .red = 0.875458, .green = 0.046642, .blue = 0.981929 },
+	{ .red = 0.845421, .green = 0.091575, .blue = 0.997558 },
+	{ .red = 0.809280, .green = 0.139683, .blue = 0.998779 },
+	{ .red = 0.998535, .green = 0.189988, .blue = 0.060073 },
+	{ .red = 0.999267, .green = 0.233211, .blue = 0.128449 },
+	{ .red = 0.999267, .green = 0.222955, .blue = 0.197070 },
+	{ .red = 0.998779, .green = 0.218315, .blue = 0.277411 },
+	{ .red = 0.998535, .green = 0.216117, .blue = 0.359463 },
+	{ .red = 0.999267, .green = 0.215873, .blue = 0.441026 },
+	{ .red = 0.999267, .green = 0.216606, .blue = 0.521368 },
+	{ .red = 0.999267, .green = 0.217582, .blue = 0.600488 },
+	{ .red = 0.998779, .green = 0.219048, .blue = 0.678632 },
+	{ .red = 0.999267, .green = 0.218803, .blue = 0.756777 },
+	{ .red = 0.999023, .green = 0.216606, .blue = 0.834676 },
+	{ .red = 0.999023, .green = 0.212698, .blue = 0.914042 },
+	{ .red = 0.997070, .green = 0.206593, .blue = 0.991697 },
+	{ .red = 0.949939, .green = 0.214896, .blue = 0.999023 },
+	{ .red = 0.902808, .green = 0.222955, .blue = 0.999512 },
+	{ .red = 0.859829, .green = 0.234188, .blue = 0.998535 },
+	{ .red = 0.823443, .green = 0.248352, .blue = 0.999512 },
+	{ .red = 0.996825, .green = 0.256410, .blue = 0.052015 },
+	{ .red = 0.999267, .green = 0.292796, .blue = 0.129670 },
+	{ .red = 0.998779, .green = 0.354090, .blue = 0.245910 },
+	{ .red = 0.999023, .green = 0.353602, .blue = 0.323565 },
+	{ .red = 0.998535, .green = 0.355556, .blue = 0.403419 },
+	{ .red = 0.999023, .green = 0.358974, .blue = 0.481807 },
+	{ .red = 0.999756, .green = 0.363126, .blue = 0.557509 },
+	{ .red = 0.998535, .green = 0.366789, .blue = 0.629304 },
+	{ .red = 0.998779, .green = 0.370208, .blue = 0.699878 },
+	{ .red = 0.998779, .green = 0.371917, .blue = 0.768987 },
+	{ .red = 0.999512, .green = 0.371673, .blue = 0.838584 },
+	{ .red = 0.998779, .green = 0.369963, .blue = 0.908913 },
+	{ .red = 0.999023, .green = 0.365812, .blue = 0.979976 },
+	{ .red = 0.965568, .green = 0.362393, .blue = 0.998535 },
+	{ .red = 0.920635, .green = 0.360195, .blue = 0.999267 },
+	{ .red = 0.879365, .green = 0.360684, .blue = 0.998046 },
+	{ .red = 0.842979, .green = 0.362637, .blue = 0.998291 },
+	{ .red = 0.998535, .green = 0.328938, .blue = 0.032723 },
+	{ .red = 0.998535, .green = 0.357265, .blue = 0.126496 },
+	{ .red = 0.999756, .green = 0.446398, .blue = 0.280830 },
+	{ .red = 0.998046, .green = 0.481074, .blue = 0.386081 },
+	{ .red = 0.999756, .green = 0.485470, .blue = 0.463004 },
+	{ .red = 0.999267, .green = 0.491575, .blue = 0.537485 },
+	{ .red = 0.998779, .green = 0.498413, .blue = 0.607082 },
+	{ .red = 0.998535, .green = 0.504274, .blue = 0.671795 },
+	{ .red = 0.999512, .green = 0.508669, .blue = 0.733333 },
+	{ .red = 0.999267, .green = 0.510623, .blue = 0.791941 },
+	{ .red = 0.999023, .green = 0.510134, .blue = 0.850305 },
+	{ .red = 0.999267, .green = 0.507448, .blue = 0.910623 },
+	{ .red = 0.999756, .green = 0.501343, .blue = 0.970696 },
+	{ .red = 0.979243, .green = 0.492308, .blue = 0.998291 },
+	{ .red = 0.937729, .green = 0.484737, .blue = 0.998779 },
+	{ .red = 0.900122, .green = 0.479365, .blue = 0.999023 },
+	{ .red = 0.865201, .green = 0.474481, .blue = 0.998535 },
+	{ .red = 0.978755, .green = 0.401709, .blue = 0.023199 },
+	{ .red = 0.999023, .green = 0.427595, .blue = 0.121123 },
+	{ .red = 0.998779, .green = 0.495971, .blue = 0.273016 },
+	{ .red = 0.999512, .green = 0.584615, .blue = 0.441514 },
+	{ .red = 0.998291, .green = 0.601954, .blue = 0.527717 },
+	{ .red = 0.998779, .green = 0.609524, .blue = 0.597802 },
+	{ .red = 0.999512, .green = 0.618071, .blue = 0.662027 },
+	{ .red = 0.998779, .green = 0.625641, .blue = 0.720147 },
+	{ .red = 0.998779, .green = 0.631258, .blue = 0.772650 },
+	{ .red = 0.999512, .green = 0.633700, .blue = 0.822222 },
+	{ .red = 0.999023, .green = 0.632479, .blue = 0.869841 },
+	{ .red = 0.998291, .green = 0.628571, .blue = 0.918681 },
+	{ .red = 0.999756, .green = 0.619536, .blue = 0.968010 },
+	{ .red = 0.988034, .green = 0.606593, .blue = 0.998779 },
+	{ .red = 0.950916, .green = 0.596337, .blue = 0.999023 },
+	{ .red = 0.916484, .green = 0.586813, .blue = 0.998779 },
+	{ .red = 0.884982, .green = 0.577289, .blue = 0.999023 },
+	{ .red = 0.983150, .green = 0.484737, .blue = 0.024664 },
+	{ .red = 0.999756, .green = 0.504518, .blue = 0.119902 },
+	{ .red = 0.998291, .green = 0.553358, .blue = 0.264469 },
+	{ .red = 0.999267, .green = 0.621734, .blue = 0.423443 },
+	{ .red = 0.999267, .green = 0.694261, .blue = 0.579487 },
+	{ .red = 0.998779, .green = 0.706960, .blue = 0.651770 },
+	{ .red = 0.998535, .green = 0.715995, .blue = 0.711844 },
+	{ .red = 0.998535, .green = 0.725031, .blue = 0.765079 },
+	{ .red = 0.998291, .green = 0.731868, .blue = 0.811722 },
+	{ .red = 0.998535, .green = 0.735287, .blue = 0.853236 },
+	{ .red = 0.999512, .green = 0.734310, .blue = 0.892552 },
+	{ .red = 0.999023, .green = 0.729670, .blue = 0.932357 },
+	{ .red = 0.999023, .green = 0.718681, .blue = 0.970696 },
+	{ .red = 0.990476, .green = 0.703541, .blue = 0.998046 },
+	{ .red = 0.958974, .green = 0.691819, .blue = 0.999023 },
+	{ .red = 0.928694, .green = 0.679853, .blue = 0.998779 },
+	{ .red = 0.901099, .green = 0.667643, .blue = 0.999512 },
+	{ .red = 0.981685, .green = 0.565568, .blue = 0.033700 },
+	{ .red = 0.998779, .green = 0.582418, .blue = 0.116972 },
+	{ .red = 0.999512, .green = 0.617582, .blue = 0.256166 },
+	{ .red = 0.998535, .green = 0.667155, .blue = 0.405128 },
+	{ .red = 0.998291, .green = 0.721612, .blue = 0.552381 },
+	{ .red = 0.999512, .green = 0.777045, .blue = 0.684982 },
+	{ .red = 0.999267, .green = 0.791697, .blue = 0.750672 },
+	{ .red = 0.998291, .green = 0.800733, .blue = 0.800977 },
+	{ .red = 0.999512, .green = 0.808791, .blue = 0.844200 },
+	{ .red = 0.998779, .green = 0.813919, .blue = 0.880830 },
+	{ .red = 0.998779, .green = 0.814164, .blue = 0.913309 },
+	{ .red = 0.999023, .green = 0.809768, .blue = 0.946276 },
+	{ .red = 0.999512, .green = 0.798046, .blue = 0.977534 },
+	{ .red = 0.990476, .green = 0.782662, .blue = 0.998779 },
+	{ .red = 0.962393, .green = 0.770452, .blue = 0.998046 },
+	{ .red = 0.937485, .green = 0.757021, .blue = 0.999023 },
+	{ .red = 0.913553, .green = 0.743590, .blue = 0.999756 },
+	{ .red = 0.982173, .green = 0.648107, .blue = 0.041270 },
+	{ .red = 0.998779, .green = 0.662027, .blue = 0.111600 },
+	{ .red = 0.999267, .green = 0.685470, .blue = 0.245665 },
+	{ .red = 0.998535, .green = 0.719658, .blue = 0.385348 },
+	{ .red = 0.999023, .green = 0.758974, .blue = 0.524542 },
+	{ .red = 0.998779, .green = 0.798535, .blue = 0.652259 },
+	{ .red = 0.998779, .green = 0.838828, .blue = 0.762149 },
+	{ .red = 0.998535, .green = 0.857143, .blue = 0.825397 },
+	{ .red = 0.998535, .green = 0.865201, .blue = 0.867155 },
+	{ .red = 0.999023, .green = 0.871795, .blue = 0.901832 },
+	{ .red = 0.999267, .green = 0.874481, .blue = 0.931136 },
+	{ .red = 0.999023, .green = 0.871306, .blue = 0.957998 },
+	{ .red = 0.999756, .green = 0.860073, .blue = 0.984127 },
+	{ .red = 0.989499, .green = 0.845665, .blue = 0.999756 },
+	{ .red = 0.965079, .green = 0.833211, .blue = 0.998535 },
+	{ .red = 0.943590, .green = 0.819536, .blue = 0.998779 },
+	{ .red = 0.922344, .green = 0.805372, .blue = 0.998535 },
+	{ .red = 0.991453, .green = 0.736020, .blue = 0.022711 },
+	{ .red = 0.998779, .green = 0.743101, .blue = 0.104274 },
+	{ .red = 0.998779, .green = 0.757265, .blue = 0.233211 },
+	{ .red = 0.999023, .green = 0.778755, .blue = 0.362637 },
+	{ .red = 0.998779, .green = 0.803907, .blue = 0.492796 },
+	{ .red = 0.998779, .green = 0.830281, .blue = 0.615873 },
+	{ .red = 0.999512, .green = 0.857387, .blue = 0.724786 },
+	{ .red = 0.998779, .green = 0.885470, .blue = 0.817094 },
+	{ .red = 0.999512, .green = 0.906227, .blue = 0.879853 },
+	{ .red = 0.999756, .green = 0.913065, .blue = 0.915263 },
+	{ .red = 0.999023, .green = 0.918437, .blue = 0.943590 },
+	{ .red = 0.998779, .green = 0.917705, .blue = 0.967033 },
+	{ .red = 0.999267, .green = 0.907937, .blue = 0.989255 },
+	{ .red = 0.986325, .green = 0.894994, .blue = 0.998291 },
+	{ .red = 0.967277, .green = 0.882295, .blue = 0.998779 },
+	{ .red = 0.948962, .green = 0.868620, .blue = 0.999267 },
+	{ .red = 0.931136, .green = 0.854945, .blue = 0.999267 },
+	{ .red = 0.986081, .green = 0.816606, .blue = 0.055922 },
+	{ .red = 0.999023, .green = 0.825885, .blue = 0.093773 },
+	{ .red = 0.998779, .green = 0.832967, .blue = 0.218315 },
+	{ .red = 0.999267, .green = 0.844444, .blue = 0.337729 },
+	{ .red = 0.999267, .green = 0.858120, .blue = 0.457387 },
+	{ .red = 0.999023, .green = 0.872527, .blue = 0.573138 },
+	{ .red = 0.998046, .green = 0.887424, .blue = 0.681074 },
+	{ .red = 0.998779, .green = 0.904029, .blue = 0.775580 },
+	{ .red = 0.998291, .green = 0.921856, .blue = 0.855922 },
+	{ .red = 0.999267, .green = 0.942613, .blue = 0.919414 },
+	{ .red = 0.999512, .green = 0.948718, .blue = 0.950427 },
+	{ .red = 0.998779, .green = 0.951893, .blue = 0.973626 },
+	{ .red = 0.998779, .green = 0.944567, .blue = 0.992918 },
+	{ .red = 0.985592, .green = 0.932601, .blue = 0.999023 },
+	{ .red = 0.969475, .green = 0.920391, .blue = 0.999512 },
+	{ .red = 0.953602, .green = 0.907204, .blue = 0.998779 },
+	{ .red = 0.938217, .green = 0.893773, .blue = 0.998779 },
+	{ .red = 0.988278, .green = 0.902808, .blue = 0.068620 },
+	{ .red = 0.995849, .green = 0.908181, .blue = 0.088889 },
+	{ .red = 0.999512, .green = 0.913309, .blue = 0.199756 },
+	{ .red = 0.999023, .green = 0.916972, .blue = 0.310867 },
+	{ .red = 0.998779, .green = 0.921856, .blue = 0.419536 },
+	{ .red = 0.999023, .green = 0.927228, .blue = 0.525031 },
+	{ .red = 0.999023, .green = 0.932601, .blue = 0.626374 },
+	{ .red = 0.998291, .green = 0.938217, .blue = 0.720879 },
+	{ .red = 0.998535, .green = 0.945055, .blue = 0.805617 },
+	{ .red = 0.998779, .green = 0.953602, .blue = 0.878632 },
+	{ .red = 0.998535, .green = 0.965324, .blue = 0.938950 },
+	{ .red = 0.999023, .green = 0.975092, .blue = 0.976068 },
+	{ .red = 0.999267, .green = 0.972405, .blue = 0.996337 },
+	{ .red = 0.985592, .green = 0.961661, .blue = 0.999267 },
+	{ .red = 0.971917, .green = 0.949451, .blue = 0.999512 },
+	{ .red = 0.958486, .green = 0.936996, .blue = 0.999023 },
+	{ .red = 0.945299, .green = 0.924298, .blue = 0.999756 },
+	{ .red = 0.988278, .green = 0.987790, .blue = 0.063004 },
+	{ .red = 0.990720, .green = 0.989255, .blue = 0.087912 },
+	{ .red = 0.993895, .green = 0.992186, .blue = 0.181929 },
+	{ .red = 0.995849, .green = 0.994383, .blue = 0.281074 },
+	{ .red = 0.997802, .green = 0.996093, .blue = 0.376068 },
+	{ .red = 0.995604, .green = 0.994628, .blue = 0.475458 },
+	{ .red = 0.999023, .green = 0.997070, .blue = 0.557753 },
+	{ .red = 0.998046, .green = 0.995849, .blue = 0.646642 },
+	{ .red = 0.998535, .green = 0.995604, .blue = 0.726984 },
+	{ .red = 0.998291, .green = 0.995360, .blue = 0.802686 },
+	{ .red = 0.998291, .green = 0.995360, .blue = 0.871795 },
+	{ .red = 0.999023, .green = 0.996337, .blue = 0.932601 },
+	{ .red = 0.996337, .green = 0.994872, .blue = 0.995360 },
+	{ .red = 0.986081, .green = 0.983394, .blue = 0.999267 },
+	{ .red = 0.974847, .green = 0.971673, .blue = 0.999023 },
+	{ .red = 0.963614, .green = 0.959951, .blue = 0.999267 },
+	{ .red = 0.951648, .green = 0.947985, .blue = 0.999023 },
+	{ .red = 0.919414, .green = 0.994139, .blue = 0.081319 },
+	{ .red = 0.923565, .green = 0.998779, .blue = 0.087668 },
+	{ .red = 0.924542, .green = 0.999512, .blue = 0.195604 },
+	{ .red = 0.925275, .green = 0.999267, .blue = 0.300855 },
+	{ .red = 0.926740, .green = 0.999023, .blue = 0.403175 },
+	{ .red = 0.929915, .green = 0.999023, .blue = 0.500122 },
+	{ .red = 0.934554, .green = 0.999512, .blue = 0.589499 },
+	{ .red = 0.938950, .green = 0.999023, .blue = 0.674481 },
+	{ .red = 0.944567, .green = 0.999267, .blue = 0.749206 },
+	{ .red = 0.949939, .green = 0.998779, .blue = 0.818559 },
+	{ .red = 0.956532, .green = 0.999267, .blue = 0.879609 },
+	{ .red = 0.966300, .green = 0.999023, .blue = 0.936996 },
+	{ .red = 0.968987, .green = 0.999512, .blue = 0.971917 },
+	{ .red = 0.978022, .green = 0.998779, .blue = 0.999267 },
+	{ .red = 0.970452, .green = 0.983639, .blue = 0.999267 },
+	{ .red = 0.969231, .green = 0.977534, .blue = 0.999756 },
+	{ .red = 0.958486, .green = 0.966545, .blue = 0.999023 },
+	{ .red = 0.857631, .green = 0.997802, .blue = 0.047619 },
+	{ .red = 0.858852, .green = 0.998779, .blue = 0.096947 },
+	{ .red = 0.860562, .green = 0.998779, .blue = 0.195360 },
+	{ .red = 0.864225, .green = 0.999267, .blue = 0.292796 },
+	{ .red = 0.869597, .green = 0.999512, .blue = 0.390476 },
+	{ .red = 0.876190, .green = 0.999023, .blue = 0.486447 },
+	{ .red = 0.884982, .green = 0.999023, .blue = 0.577045 },
+	{ .red = 0.894994, .green = 0.999756, .blue = 0.660073 },
+	{ .red = 0.905983, .green = 0.999267, .blue = 0.738706 },
+	{ .red = 0.918681, .green = 0.999267, .blue = 0.810256 },
+	{ .red = 0.934066, .green = 0.998779, .blue = 0.875946 },
+	{ .red = 0.949695, .green = 0.999023, .blue = 0.928205 },
+	{ .red = 0.947253, .green = 0.998535, .blue = 0.951648 },
+	{ .red = 0.948962, .green = 0.999512, .blue = 0.977534 },
+	{ .red = 0.968254, .green = 0.998535, .blue = 0.998779 },
+	{ .red = 0.950183, .green = 0.982418, .blue = 0.998779 },
+	{ .red = 0.944567, .green = 0.970940, .blue = 0.999512 },
+	{ .red = 0.799512, .green = 0.993407, .blue = 0.085470 },
+	{ .red = 0.803175, .green = 0.998779, .blue = 0.098168 },
+	{ .red = 0.806593, .green = 0.999512, .blue = 0.188278 },
+	{ .red = 0.811722, .green = 0.998535, .blue = 0.285226 },
+	{ .red = 0.820513, .green = 0.999512, .blue = 0.378266 },
+	{ .red = 0.831258, .green = 0.998535, .blue = 0.473504 },
+	{ .red = 0.844444, .green = 0.999512, .blue = 0.562393 },
+	{ .red = 0.859585, .green = 0.998535, .blue = 0.649328 },
+	{ .red = 0.876435, .green = 0.999267, .blue = 0.727473 },
+	{ .red = 0.895238, .green = 0.999267, .blue = 0.800244 },
+	{ .red = 0.917216, .green = 0.998535, .blue = 0.867399 },
+	{ .red = 0.925519, .green = 0.998046, .blue = 0.905739 },
+	{ .red = 0.923077, .green = 0.998046, .blue = 0.928938 },
+	{ .red = 0.924298, .green = 0.998535, .blue = 0.954090 },
+	{ .red = 0.936264, .green = 0.998046, .blue = 0.979976 },
+	{ .red = 0.955067, .green = 0.998535, .blue = 0.998779 },
+	{ .red = 0.932112, .green = 0.982906, .blue = 0.999023 },
+	{ .red = 0.753358, .green = 0.998291, .blue = 0.046154 },
+	{ .red = 0.754823, .green = 0.999023, .blue = 0.095482 },
+	{ .red = 0.758974, .green = 0.998779, .blue = 0.184127 },
+	{ .red = 0.766545, .green = 0.998779, .blue = 0.274969 },
+	{ .red = 0.778022, .green = 0.998779, .blue = 0.367033 },
+	{ .red = 0.792430, .green = 0.998535, .blue = 0.459096 },
+	{ .red = 0.809768, .green = 0.998535, .blue = 0.548718 },
+	{ .red = 0.829304, .green = 0.999023, .blue = 0.633455 },
+	{ .red = 0.851038, .green = 0.998779, .blue = 0.714042 },
+	{ .red = 0.875214, .green = 0.998535, .blue = 0.788278 },
+	{ .red = 0.900611, .green = 0.998779, .blue = 0.853480 },
+	{ .red = 0.898413, .green = 0.999023, .blue = 0.878388 },
+	{ .red = 0.896947, .green = 0.999023, .blue = 0.903541 },
+	{ .red = 0.897924, .green = 0.998779, .blue = 0.929670 },
+	{ .red = 0.903053, .green = 0.999267, .blue = 0.956288 },
+	{ .red = 0.920879, .green = 0.998046, .blue = 0.980952 },
+	{ .red = 0.940415, .green = 0.998779, .blue = 0.998779 },
+	{ .red = 0.999267, .green = 0.121612, .blue = 0.066422 },
+	{ .red = 0.998779, .green = 0.090354, .blue = 0.092552 },
+	{ .red = 0.996337, .green = 0.081074, .blue = 0.164835 },
+	{ .red = 0.999023, .green = 0.063980, .blue = 0.241270 },
+	{ .red = 0.996093, .green = 0.052015, .blue = 0.317460 },
+	{ .red = 0.991453, .green = 0.037851, .blue = 0.391941 },
+	{ .red = 0.981929, .green = 0.022222, .blue = 0.463492 },
+	{ .red = 0.968742, .green = 0.020269, .blue = 0.531380 },
+	{ .red = 0.970696, .green = 0.015140, .blue = 0.605861 },
+	{ .red = 0.971184, .green = 0.014408, .blue = 0.679121 },
+	{ .red = 0.970940, .green = 0.017094, .blue = 0.751648 },
+	{ .red = 0.971429, .green = 0.015385, .blue = 0.824664 },
+	{ .red = 0.969475, .green = 0.023932, .blue = 0.895726 },
+	{ .red = 0.965812, .green = 0.021001, .blue = 0.965568 },
+	{ .red = 0.927473, .green = 0.017582, .blue = 0.978999 },
+	{ .red = 0.881563, .green = 0.039805, .blue = 0.978999 },
+	{ .red = 0.849328, .green = 0.043223, .blue = 0.990965 },
+	{ .red = 0.999512, .green = 0.137729, .blue = 0.065446 },
+	{ .red = 0.999512, .green = 0.105006, .blue = 0.088889 },
+	{ .red = 0.998535, .green = 0.092552, .blue = 0.161905 },
+	{ .red = 0.999267, .green = 0.079121, .blue = 0.238584 },
+	{ .red = 0.997802, .green = 0.070085, .blue = 0.315507 },
+	{ .red = 0.998779, .green = 0.056410, .blue = 0.392430 },
+	{ .red = 0.987546, .green = 0.051282, .blue = 0.463980 },
+	{ .red = 0.989255, .green = 0.030281, .blue = 0.540171 },
+	{ .red = 0.984371, .green = 0.038339, .blue = 0.612698 },
+	{ .red = 0.993162, .green = 0.020269, .blue = 0.693284 },
+	{ .red = 0.981197, .green = 0.043468, .blue = 0.758974 },
+	{ .red = 0.983883, .green = 0.038584, .blue = 0.835165 },
+	{ .red = 0.988523, .green = 0.022955, .blue = 0.914042 },
+	{ .red = 0.981197, .green = 0.026862, .blue = 0.981929 },
+	{ .red = 0.932601, .green = 0.046398, .blue = 0.984860 },
+	{ .red = 0.899878, .green = 0.082295, .blue = 0.999023 },
+	{ .red = 0.859585, .green = 0.121856, .blue = 0.999023 },
+	{ .red = 0.999023, .green = 0.183883, .blue = 0.063248 },
+	{ .red = 0.999267, .green = 0.231502, .blue = 0.128205 },
+	{ .red = 0.999756, .green = 0.221978, .blue = 0.188767 },
+	{ .red = 0.999267, .green = 0.219292, .blue = 0.263248 },
+	{ .red = 0.999756, .green = 0.217338, .blue = 0.339194 },
+	{ .red = 0.999267, .green = 0.217338, .blue = 0.414408 },
+	{ .red = 0.999512, .green = 0.218071, .blue = 0.488889 },
+	{ .red = 0.999023, .green = 0.219048, .blue = 0.561661 },
+	{ .red = 0.999512, .green = 0.221001, .blue = 0.634188 },
+	{ .red = 0.999023, .green = 0.222466, .blue = 0.705250 },
+	{ .red = 0.998779, .green = 0.222711, .blue = 0.775824 },
+	{ .red = 0.999267, .green = 0.221490, .blue = 0.847375 },
+	{ .red = 0.999512, .green = 0.219048, .blue = 0.919902 },
+	{ .red = 0.997558, .green = 0.214652, .blue = 0.990720 },
+	{ .red = 0.955800, .green = 0.222466, .blue = 0.998779 },
+	{ .red = 0.912332, .green = 0.230525, .blue = 0.999756 },
+	{ .red = 0.872527, .green = 0.240049, .blue = 0.999267 },
+	{ .red = 0.998779, .green = 0.243223, .blue = 0.056899 },
+	{ .red = 0.998779, .green = 0.284493, .blue = 0.130403 },
+	{ .red = 0.999267, .green = 0.344078, .blue = 0.236386 },
+	{ .red = 0.999512, .green = 0.344567, .blue = 0.307937 },
+	{ .red = 0.999267, .green = 0.347009, .blue = 0.382418 },
+	{ .red = 0.999023, .green = 0.350427, .blue = 0.455433 },
+	{ .red = 0.999756, .green = 0.354579, .blue = 0.526252 },
+	{ .red = 0.999023, .green = 0.358242, .blue = 0.593895 },
+	{ .red = 0.999023, .green = 0.362149, .blue = 0.659341 },
+	{ .red = 0.999023, .green = 0.365079, .blue = 0.723077 },
+	{ .red = 0.998779, .green = 0.366789, .blue = 0.785836 },
+	{ .red = 0.999267, .green = 0.366545, .blue = 0.849817 },
+	{ .red = 0.999023, .green = 0.365324, .blue = 0.914286 },
+	{ .red = 0.999023, .green = 0.362149, .blue = 0.978999 },
+	{ .red = 0.970940, .green = 0.358730, .blue = 0.999023 },
+	{ .red = 0.929182, .green = 0.357265, .blue = 0.999512 },
+	{ .red = 0.890354, .green = 0.357509, .blue = 0.998535 },
+	{ .red = 0.995116, .green = 0.307937, .blue = 0.044200 },
+	{ .red = 0.999023, .green = 0.340904, .blue = 0.126984 },
+	{ .red = 0.999512, .green = 0.434676, .blue = 0.274969 },
+	{ .red = 0.999023, .green = 0.465446, .blue = 0.369231 },
+	{ .red = 0.998535, .green = 0.469841, .blue = 0.441026 },
+	{ .red = 0.998535, .green = 0.476190, .blue = 0.511111 },
+	{ .red = 0.998779, .green = 0.483028, .blue = 0.577534 },
+	{ .red = 0.999267, .green = 0.489133, .blue = 0.639072 },
+	{ .red = 0.999267, .green = 0.494261, .blue = 0.696947 },
+	{ .red = 0.998779, .green = 0.498168, .blue = 0.751893 },
+	{ .red = 0.998535, .green = 0.499634, .blue = 0.805128 },
+	{ .red = 0.999267, .green = 0.498901, .blue = 0.859096 },
+	{ .red = 0.998535, .green = 0.496459, .blue = 0.914042 },
+	{ .red = 0.999512, .green = 0.491331, .blue = 0.969719 },
+	{ .red = 0.984371, .green = 0.482051, .blue = 0.998779 },
+	{ .red = 0.945299, .green = 0.475214, .blue = 0.999023 },
+	{ .red = 0.909646, .green = 0.470085, .blue = 0.999267 },
+	{ .red = 0.981685, .green = 0.373626, .blue = 0.023687 },
+	{ .red = 0.999512, .green = 0.401954, .blue = 0.119658 },
+	{ .red = 0.999267, .green = 0.476923, .blue = 0.266667 },
+	{ .red = 0.998535, .green = 0.571917, .blue = 0.433211 },
+	{ .red = 0.999512, .green = 0.582173, .blue = 0.505983 },
+	{ .red = 0.999756, .green = 0.589744, .blue = 0.572405 },
+	{ .red = 0.998535, .green = 0.598291, .blue = 0.634188 },
+	{ .red = 0.998779, .green = 0.606593, .blue = 0.690354 },
+	{ .red = 0.999023, .green = 0.612943, .blue = 0.740904 },
+	{ .red = 0.999756, .green = 0.617338, .blue = 0.788034 },
+	{ .red = 0.999267, .green = 0.618803, .blue = 0.831990 },
+	{ .red = 0.998535, .green = 0.617094, .blue = 0.875458 },
+	{ .red = 0.998291, .green = 0.613431, .blue = 0.920635 },
+	{ .red = 0.999023, .green = 0.605128, .blue = 0.965812 },
+	{ .red = 0.991941, .green = 0.592186, .blue = 0.997802 },
+	{ .red = 0.957998, .green = 0.581929, .blue = 0.999023 },
+	{ .red = 0.926007, .green = 0.573382, .blue = 0.999756 },
+	{ .red = 0.981441, .green = 0.448352, .blue = 0.029548 },
+	{ .red = 0.999267, .green = 0.471306, .blue = 0.118681 },
+	{ .red = 0.999512, .green = 0.525763, .blue = 0.256899 },
+	{ .red = 0.999756, .green = 0.602442, .blue = 0.415629 },
+	{ .red = 0.998535, .green = 0.679853, .blue = 0.568987 },
+	{ .red = 0.998779, .green = 0.685470, .blue = 0.629060 },
+	{ .red = 0.998535, .green = 0.694505, .blue = 0.686691 },
+	{ .red = 0.999512, .green = 0.703785, .blue = 0.738462 },
+	{ .red = 0.999756, .green = 0.711600, .blue = 0.784127 },
+	{ .red = 0.999023, .green = 0.716972, .blue = 0.823932 },
+	{ .red = 0.998535, .green = 0.718926, .blue = 0.860562 },
+	{ .red = 0.998779, .green = 0.716972, .blue = 0.895971 },
+	{ .red = 0.999023, .green = 0.712332, .blue = 0.933089 },
+	{ .red = 0.998779, .green = 0.701832, .blue = 0.968254 },
+	{ .red = 0.995604, .green = 0.686447, .blue = 0.998046 },
+	{ .red = 0.964835, .green = 0.674969, .blue = 0.998291 },
+	{ .red = 0.937241, .green = 0.663736, .blue = 0.999267 },
+	{ .red = 0.990476, .green = 0.527228, .blue = 0.024908 },
+	{ .red = 0.999756, .green = 0.542857, .blue = 0.116728 },
+	{ .red = 0.999512, .green = 0.582906, .blue = 0.249817 },
+	{ .red = 0.998535, .green = 0.639805, .blue = 0.396825 },
+	{ .red = 0.999023, .green = 0.703541, .blue = 0.545788 },
+	{ .red = 0.999267, .green = 0.763858, .blue = 0.676923 },
+	{ .red = 0.998779, .green = 0.770452, .blue = 0.729426 },
+	{ .red = 0.999512, .green = 0.779731, .blue = 0.777778 },
+	{ .red = 0.998779, .green = 0.788523, .blue = 0.819780 },
+	{ .red = 0.998535, .green = 0.795116, .blue = 0.855678 },
+	{ .red = 0.998535, .green = 0.798046, .blue = 0.886935 },
+	{ .red = 0.998535, .green = 0.796825, .blue = 0.915995 },
+	{ .red = 0.998779, .green = 0.792186, .blue = 0.946032 },
+	{ .red = 0.999267, .green = 0.780220, .blue = 0.974359 },
+	{ .red = 0.995604, .green = 0.764347, .blue = 0.998535 },
+	{ .red = 0.969231, .green = 0.752381, .blue = 0.998535 },
+	{ .red = 0.944811, .green = 0.739683, .blue = 0.999023 },
+	{ .red = 0.985836, .green = 0.600977, .blue = 0.037851 },
+	{ .red = 0.999267, .green = 0.615385, .blue = 0.113797 },
+	{ .red = 0.999512, .green = 0.643712, .blue = 0.241026 },
+	{ .red = 0.998779, .green = 0.685226, .blue = 0.378999 },
+	{ .red = 0.998291, .green = 0.732357, .blue = 0.518437 },
+	{ .red = 0.998291, .green = 0.779976, .blue = 0.647375 },
+	{ .red = 0.999267, .green = 0.826862, .blue = 0.757021 },
+	{ .red = 0.999267, .green = 0.837118, .blue = 0.806349 },
+	{ .red = 0.998291, .green = 0.845910, .blue = 0.846642 },
+	{ .red = 0.998535, .green = 0.853480, .blue = 0.880586 },
+	{ .red = 0.998291, .green = 0.858120, .blue = 0.908669 },
+	{ .red = 0.999267, .green = 0.858120, .blue = 0.933578 },
+	{ .red = 1.000000, .green = 0.853968, .blue = 0.958486 },
+	{ .red = 0.998046, .green = 0.842735, .blue = 0.979731 },
+	{ .red = 0.994139, .green = 0.827106, .blue = 0.999267 },
+	{ .red = 0.970696, .green = 0.814896, .blue = 0.998046 },
+	{ .red = 0.949939, .green = 0.801709, .blue = 0.998779 },
+	{ .red = 0.993407, .green = 0.680830, .blue = 0.029060 },
+	{ .red = 0.999267, .green = 0.689133, .blue = 0.109402 },
+	{ .red = 0.999756, .green = 0.708181, .blue = 0.230769 },
+	{ .red = 0.999512, .green = 0.736508, .blue = 0.358974 },
+	{ .red = 0.999023, .green = 0.769719, .blue = 0.489377 },
+	{ .red = 0.998779, .green = 0.804151, .blue = 0.613431 },
+	{ .red = 0.998535, .green = 0.838339, .blue = 0.722344 },
+	{ .red = 0.998779, .green = 0.873260, .blue = 0.813919 },
+	{ .red = 0.999267, .green = 0.887912, .blue = 0.863736 },
+	{ .red = 0.999756, .green = 0.895482, .blue = 0.897436 },
+	{ .red = 0.998779, .green = 0.902076, .blue = 0.925031 },
+	{ .red = 0.998291, .green = 0.904518, .blue = 0.947009 },
+	{ .red = 0.999023, .green = 0.901587, .blue = 0.967521 },
+	{ .red = 0.999267, .green = 0.890842, .blue = 0.986569 },
+	{ .red = 0.991697, .green = 0.876679, .blue = 0.999267 },
+	{ .red = 0.972650, .green = 0.864713, .blue = 0.999267 },
+	{ .red = 0.954579, .green = 0.851526, .blue = 0.999512 },
+	{ .red = 0.986569, .green = 0.754090, .blue = 0.054457 },
+	{ .red = 0.999512, .green = 0.764347, .blue = 0.103541 },
+	{ .red = 0.999267, .green = 0.775580, .blue = 0.219536 },
+	{ .red = 0.999512, .green = 0.793162, .blue = 0.337973 },
+	{ .red = 0.999267, .green = 0.814408, .blue = 0.458364 },
+	{ .red = 0.998779, .green = 0.836630, .blue = 0.575824 },
+	{ .red = 0.998291, .green = 0.859829, .blue = 0.683761 },
+	{ .red = 0.998535, .green = 0.883516, .blue = 0.777045 },
+	{ .red = 0.999756, .green = 0.908425, .blue = 0.854212 },
+	{ .red = 0.998779, .green = 0.926496, .blue = 0.906471 },
+	{ .red = 0.999756, .green = 0.932845, .blue = 0.934799 },
+	{ .red = 0.998535, .green = 0.937973, .blue = 0.957021 },
+	{ .red = 0.998779, .green = 0.937485, .blue = 0.974603 },
+	{ .red = 0.999023, .green = 0.928449, .blue = 0.990965 },
+	{ .red = 0.989988, .green = 0.915751, .blue = 0.999512 },
+	{ .red = 0.973138, .green = 0.903785, .blue = 0.998779 },
+	{ .red = 0.957753, .green = 0.891087, .blue = 0.999023 },
+	{ .red = 0.988523, .green = 0.832479, .blue = 0.063248 },
+	{ .red = 0.998779, .green = 0.840537, .blue = 0.097924 },
+	{ .red = 0.999512, .green = 0.846642, .blue = 0.206349 },
+	{ .red = 0.999512, .green = 0.855922, .blue = 0.315995 },
+	{ .red = 0.998779, .green = 0.866667, .blue = 0.426618 },
+	{ .red = 0.999023, .green = 0.879121, .blue = 0.535043 },
+	{ .red = 0.998535, .green = 0.891819, .blue = 0.638339 },
+	{ .red = 0.999023, .green = 0.905495, .blue = 0.731868 },
+	{ .red = 0.998291, .green = 0.919902, .blue = 0.814652 },
+	{ .red = 0.998046, .green = 0.936264, .blue = 0.883272 },
+	{ .red = 0.999023, .green = 0.955311, .blue = 0.937485 },
+	{ .red = 0.998779, .green = 0.961172, .blue = 0.962393 },
+	{ .red = 0.998535, .green = 0.964103, .blue = 0.979976 },
+	{ .red = 0.999023, .green = 0.957265, .blue = 0.994628 },
+	{ .red = 0.988767, .green = 0.946032, .blue = 0.999267 },
+	{ .red = 0.974847, .green = 0.934310, .blue = 0.999023 },
+	{ .red = 0.961172, .green = 0.922100, .blue = 0.998535 },
+	{ .red = 0.990720, .green = 0.912332, .blue = 0.075458 },
+	{ .red = 0.998779, .green = 0.918437, .blue = 0.091575 },
+	{ .red = 0.999267, .green = 0.920635, .blue = 0.191697 },
+	{ .red = 0.999267, .green = 0.924298, .blue = 0.292796 },
+	{ .red = 0.998779, .green = 0.927961, .blue = 0.393162 },
+	{ .red = 0.999512, .green = 0.932845, .blue = 0.490842 },
+	{ .red = 0.999756, .green = 0.937485, .blue = 0.586081 },
+	{ .red = 0.999267, .green = 0.941880, .blue = 0.677167 },
+	{ .red = 0.998535, .green = 0.946764, .blue = 0.761172 },
+	{ .red = 0.999267, .green = 0.953358, .blue = 0.834921 },
+	{ .red = 0.998779, .green = 0.961416, .blue = 0.900122 },
+	{ .red = 0.998779, .green = 0.972405, .blue = 0.952137 },
+	{ .red = 0.999512, .green = 0.981929, .blue = 0.982906 },
+	{ .red = 0.998779, .green = 0.980220, .blue = 0.996581 },
+	{ .red = 0.988278, .green = 0.969475, .blue = 0.999023 },
+	{ .red = 0.977045, .green = 0.957998, .blue = 0.999756 },
+	{ .red = 0.964835, .green = 0.946520, .blue = 0.999023 },
+	{ .red = 0.989499, .green = 0.989255, .blue = 0.080830 },
+	{ .red = 0.991697, .green = 0.991209, .blue = 0.102808 },
+	{ .red = 0.993407, .green = 0.992918, .blue = 0.184615 },
+	{ .red = 0.994872, .green = 0.994628, .blue = 0.273504 },
+	{ .red = 0.999267, .green = 0.998535, .blue = 0.353602 },
+	{ .red = 0.994383, .green = 0.994628, .blue = 0.453724 },
+	{ .red = 0.997314, .green = 0.996825, .blue = 0.531380 },
+	{ .red = 0.997558, .green = 0.996581, .blue = 0.613187 },
+	{ .red = 0.997802, .green = 0.996093, .blue = 0.690354 },
+	{ .red = 0.999267, .green = 0.996825, .blue = 0.760440 },
+	{ .red = 0.998535, .green = 0.995849, .blue = 0.830525 },
+	{ .red = 0.998535, .green = 0.995849, .blue = 0.893040 },
+	{ .red = 0.998779, .green = 0.996581, .blue = 0.948718 },
+	{ .red = 0.999267, .green = 0.998046, .blue = 0.998291 },
+	{ .red = 0.989499, .green = 0.987302, .blue = 0.999512 },
+	{ .red = 0.979243, .green = 0.976313, .blue = 0.999023 },
+	{ .red = 0.968742, .green = 0.965568, .blue = 0.999267 },
+	{ .red = 0.926252, .green = 0.995849, .blue = 0.079365 },
+	{ .red = 0.929670, .green = 0.999512, .blue = 0.093284 },
+	{ .red = 0.929670, .green = 0.999267, .blue = 0.190476 },
+	{ .red = 0.930403, .green = 0.999267, .blue = 0.286447 },
+	{ .red = 0.931624, .green = 0.999267, .blue = 0.381685 },
+	{ .red = 0.934066, .green = 0.999267, .blue = 0.473016 },
+	{ .red = 0.936996, .green = 0.998291, .blue = 0.562149 },
+	{ .red = 0.941636, .green = 0.999023, .blue = 0.641026 },
+	{ .red = 0.946276, .green = 0.998779, .blue = 0.715018 },
+	{ .red = 0.951160, .green = 0.998535, .blue = 0.781929 },
+	{ .red = 0.956532, .green = 0.998779, .blue = 0.842002 },
+	{ .red = 0.962882, .green = 0.998291, .blue = 0.898413 },
+	{ .red = 0.972161, .green = 0.999267, .blue = 0.947497 },
+	{ .red = 0.975336, .green = 0.999756, .blue = 0.977534 },
+	{ .red = 0.985104, .green = 0.999267, .blue = 0.999512 },
+	{ .red = 0.975092, .green = 0.986081, .blue = 0.999512 },
+	{ .red = 0.973382, .green = 0.980464, .blue = 1.000000 },
+	{ .red = 0.866178, .green = 0.995849, .blue = 0.074969 },
+	{ .red = 0.867888, .green = 0.998046, .blue = 0.104029 },
+	{ .red = 0.870085, .green = 0.999267, .blue = 0.185104 },
+	{ .red = 0.872527, .green = 0.999023, .blue = 0.276679 },
+	{ .red = 0.876679, .green = 0.999512, .blue = 0.366789 },
+	{ .red = 0.882295, .green = 0.999267, .blue = 0.456899 },
+	{ .red = 0.889377, .green = 0.999267, .blue = 0.542613 },
+	{ .red = 0.897436, .green = 0.999267, .blue = 0.623687 },
+	{ .red = 0.906471, .green = 0.998779, .blue = 0.699878 },
+	{ .red = 0.916484, .green = 0.999023, .blue = 0.768498 },
+	{ .red = 0.927717, .green = 0.999267, .blue = 0.831746 },
+	{ .red = 0.941636, .green = 0.999267, .blue = 0.889866 },
+	{ .red = 0.956288, .green = 0.998779, .blue = 0.937729 },
+	{ .red = 0.953602, .green = 0.998779, .blue = 0.957509 },
+	{ .red = 0.956044, .green = 0.999512, .blue = 0.980464 },
+	{ .red = 0.973871, .green = 0.998779, .blue = 0.999023 },
+	{ .red = 0.955800, .green = 0.984371, .blue = 0.998779 },
+	{ .red = 0.812698, .green = 0.994383, .blue = 0.081807 },
+	{ .red = 0.815873, .green = 0.999023, .blue = 0.093529 },
+	{ .red = 0.818559, .green = 0.999512, .blue = 0.177778 },
+	{ .red = 0.822711, .green = 0.999023, .blue = 0.266667 },
+	{ .red = 0.829304, .green = 0.999512, .blue = 0.354090 },
+	{ .red = 0.837851, .green = 0.999512, .blue = 0.442247 },
+	{ .red = 0.848352, .green = 0.999023, .blue = 0.527961 },
+	{ .red = 0.860562, .green = 0.999267, .blue = 0.609280 },
+	{ .red = 0.874481, .green = 0.998535, .blue = 0.686935 },
+	{ .red = 0.889377, .green = 0.998779, .blue = 0.757021 },
+	{ .red = 0.906471, .green = 0.998291, .blue = 0.822955 },
+	{ .red = 0.925519, .green = 0.999023, .blue = 0.880830 },
+	{ .red = 0.932357, .green = 0.998535, .blue = 0.914530 },
+	{ .red = 0.930159, .green = 0.998535, .blue = 0.935531 },
+	{ .red = 0.931624, .green = 0.998535, .blue = 0.958730 },
+	{ .red = 0.942857, .green = 0.998046, .blue = 0.981929 },
+	{ .red = 0.960440, .green = 0.998535, .blue = 0.998779 },
+	{ .red = 0.999267, .green = 0.126007, .blue = 0.067643 },
+	{ .red = 0.999267, .green = 0.095726, .blue = 0.088645 },
+	{ .red = 0.997558, .green = 0.086691, .blue = 0.154823 },
+	{ .red = 0.999756, .green = 0.075458, .blue = 0.226129 },
+	{ .red = 0.999512, .green = 0.061538, .blue = 0.297436 },
+	{ .red = 0.989744, .green = 0.053480, .blue = 0.365568 },
+	{ .red = 0.990965, .green = 0.041026, .blue = 0.436386 },
+	{ .red = 0.976801, .green = 0.033700, .blue = 0.499389 },
+	{ .red = 0.980708, .green = 0.019048, .blue = 0.570452 },
+	{ .red = 0.976557, .green = 0.030281, .blue = 0.636630 },
+	{ .red = 0.981441, .green = 0.019048, .blue = 0.707937 },
+	{ .red = 0.978022, .green = 0.030525, .blue = 0.773138 },
+	{ .red = 0.978510, .green = 0.030525, .blue = 0.841270 },
+	{ .red = 0.981441, .green = 0.021001, .blue = 0.912088 },
+	{ .red = 0.976313, .green = 0.024664, .blue = 0.976068 },
+	{ .red = 0.934554, .green = 0.039560, .blue = 0.982173 },
+	{ .red = 0.897436, .green = 0.040049, .blue = 0.989499 },
+	{ .red = 0.999512, .green = 0.139438, .blue = 0.066667 },
+	{ .red = 0.999512, .green = 0.119658, .blue = 0.089621 },
+	{ .red = 0.999756, .green = 0.109158, .blue = 0.155067 },
+	{ .red = 0.999512, .green = 0.100122, .blue = 0.226129 },
+	{ .red = 0.999267, .green = 0.089621, .blue = 0.297192 },
+	{ .red = 0.999267, .green = 0.081319, .blue = 0.368498 },
+	{ .red = 0.995604, .green = 0.077900, .blue = 0.438339 },
+	{ .red = 0.998535, .green = 0.065934, .blue = 0.509646 },
+	{ .red = 0.995604, .green = 0.064957, .blue = 0.578510 },
+	{ .red = 0.994383, .green = 0.064469, .blue = 0.647619 },
+	{ .red = 0.992918, .green = 0.062271, .blue = 0.715751 },
+	{ .red = 0.999756, .green = 0.048352, .blue = 0.790232 },
+	{ .red = 0.985592, .green = 0.056654, .blue = 0.847375 },
+	{ .red = 0.987790, .green = 0.046154, .blue = 0.918437 },
+	{ .red = 0.989744, .green = 0.028816, .blue = 0.990232 },
+	{ .red = 0.947253, .green = 0.084982, .blue = 0.995116 },
+	{ .red = 0.909402, .green = 0.118681, .blue = 0.999512 },
+	{ .red = 0.999267, .green = 0.179487, .blue = 0.064957 },
+	{ .red = 0.999267, .green = 0.230525, .blue = 0.127228 },
+	{ .red = 0.998779, .green = 0.221978, .blue = 0.181441 },
+	{ .red = 0.999267, .green = 0.219292, .blue = 0.249817 },
+	{ .red = 0.999023, .green = 0.218071, .blue = 0.320391 },
+	{ .red = 0.999267, .green = 0.218803, .blue = 0.391209 },
+	{ .red = 0.998779, .green = 0.219292, .blue = 0.460317 },
+	{ .red = 0.999023, .green = 0.220269, .blue = 0.528449 },
+	{ .red = 0.999023, .green = 0.221734, .blue = 0.595360 },
+	{ .red = 0.998535, .green = 0.224176, .blue = 0.661294 },
+	{ .red = 0.999023, .green = 0.225641, .blue = 0.726984 },
+	{ .red = 0.999023, .green = 0.226374, .blue = 0.792186 },
+	{ .red = 0.999267, .green = 0.225885, .blue = 0.857875 },
+	{ .red = 0.999512, .green = 0.224664, .blue = 0.924542 },
+	{ .red = 0.998046, .green = 0.221734, .blue = 0.989988 },
+	{ .red = 0.961172, .green = 0.229060, .blue = 0.999023 },
+	{ .red = 0.920391, .green = 0.237118, .blue = 0.999512 },
+	{ .red = 0.999023, .green = 0.232967, .blue = 0.059829 },
+	{ .red = 0.999023, .green = 0.276923, .blue = 0.129182 },
+	{ .red = 0.999512, .green = 0.335043, .blue = 0.227106 },
+	{ .red = 0.999023, .green = 0.336020, .blue = 0.293040 },
+	{ .red = 0.999512, .green = 0.338217, .blue = 0.362393 },
+	{ .red = 0.998779, .green = 0.341392, .blue = 0.431013 },
+	{ .red = 0.999023, .green = 0.345543, .blue = 0.497680 },
+	{ .red = 0.998291, .green = 0.349451, .blue = 0.561416 },
+	{ .red = 0.998779, .green = 0.353114, .blue = 0.623443 },
+	{ .red = 0.998779, .green = 0.357021, .blue = 0.683516 },
+	{ .red = 0.999267, .green = 0.359463, .blue = 0.742369 },
+	{ .red = 0.998779, .green = 0.360928, .blue = 0.800000 },
+	{ .red = 0.999023, .green = 0.361172, .blue = 0.858608 },
+	{ .red = 0.999023, .green = 0.360440, .blue = 0.918681 },
+	{ .red = 0.999023, .green = 0.357753, .blue = 0.978266 },
+	{ .red = 0.975580, .green = 0.354823, .blue = 0.999512 },
+	{ .red = 0.936020, .green = 0.353846, .blue = 0.999512 },
+	{ .red = 0.996825, .green = 0.291575, .blue = 0.049573 },
+	{ .red = 0.999512, .green = 0.326740, .blue = 0.125763 },
+	{ .red = 0.999512, .green = 0.422711, .blue = 0.267155 },
+	{ .red = 0.999756, .green = 0.450061, .blue = 0.352137 },
+	{ .red = 0.998779, .green = 0.454457, .blue = 0.419536 },
+	{ .red = 0.998535, .green = 0.460317, .blue = 0.485714 },
+	{ .red = 0.999756, .green = 0.466911, .blue = 0.548962 },
+	{ .red = 0.998779, .green = 0.473260, .blue = 0.608059 },
+	{ .red = 0.999023, .green = 0.478877, .blue = 0.663736 },
+	{ .red = 0.998779, .green = 0.483516, .blue = 0.715995 },
+	{ .red = 0.999512, .green = 0.486447, .blue = 0.767033 },
+	{ .red = 0.998779, .green = 0.487424, .blue = 0.815873 },
+	{ .red = 0.998291, .green = 0.486691, .blue = 0.865446 },
+	{ .red = 0.999267, .green = 0.484737, .blue = 0.917705 },
+	{ .red = 0.999023, .green = 0.480342, .blue = 0.968498 },
+	{ .red = 0.988034, .green = 0.471551, .blue = 0.999023 },
+	{ .red = 0.950672, .green = 0.465446, .blue = 0.998535 },
+	{ .red = 0.993895, .green = 0.352869, .blue = 0.025641 },
+	{ .red = 0.998779, .green = 0.381197, .blue = 0.119170 },
+	{ .red = 0.998779, .green = 0.459341, .blue = 0.259341 },
+	{ .red = 0.998535, .green = 0.558486, .blue = 0.421978 },
+	{ .red = 0.999023, .green = 0.562149, .blue = 0.483516 },
+	{ .red = 0.998535, .green = 0.569475, .blue = 0.546764 },
+	{ .red = 0.997802, .green = 0.577778, .blue = 0.606105 },
+	{ .red = 0.999267, .green = 0.586081, .blue = 0.660806 },
+	{ .red = 0.998046, .green = 0.593407, .blue = 0.710134 },
+	{ .red = 0.998779, .green = 0.598779, .blue = 0.755800 },
+	{ .red = 0.999023, .green = 0.601954, .blue = 0.798291 },
+	{ .red = 0.999267, .green = 0.602442, .blue = 0.839316 },
+	{ .red = 0.998779, .green = 0.600733, .blue = 0.879853 },
+	{ .red = 0.998779, .green = 0.597070, .blue = 0.922833 },
+	{ .red = 0.999267, .green = 0.589499, .blue = 0.964835 },
+	{ .red = 0.995360, .green = 0.577045, .blue = 0.997558 },
+	{ .red = 0.963614, .green = 0.567521, .blue = 0.999267 },
+	{ .red = 0.981197, .green = 0.418315, .blue = 0.030525 },
+	{ .red = 0.999267, .green = 0.442491, .blue = 0.115018 },
+	{ .red = 0.998779, .green = 0.500855, .blue = 0.248107 },
+	{ .red = 0.999267, .green = 0.584371, .blue = 0.405372 },
+	{ .red = 0.998291, .green = 0.656654, .blue = 0.546520 },
+	{ .red = 0.998535, .green = 0.663248, .blue = 0.604640 },
+	{ .red = 0.998535, .green = 0.672283, .blue = 0.660317 },
+	{ .red = 0.999512, .green = 0.681563, .blue = 0.711111 },
+	{ .red = 0.998779, .green = 0.690110, .blue = 0.755800 },
+	{ .red = 0.999023, .green = 0.696459, .blue = 0.795604 },
+	{ .red = 0.999267, .green = 0.700122, .blue = 0.831746 },
+	{ .red = 0.998535, .green = 0.700855, .blue = 0.864957 },
+	{ .red = 0.998535, .green = 0.698413, .blue = 0.898168 },
+	{ .red = 0.999267, .green = 0.693773, .blue = 0.933333 },
+	{ .red = 0.999756, .green = 0.683516, .blue = 0.967033 },
+	{ .red = 0.997802, .green = 0.668864, .blue = 0.996337 },
+	{ .red = 0.970208, .green = 0.657143, .blue = 0.998291 },
+	{ .red = 0.995849, .green = 0.493040, .blue = 0.019048 },
+	{ .red = 0.999756, .green = 0.508425, .blue = 0.114042 },
+	{ .red = 0.999267, .green = 0.552381, .blue = 0.241758 },
+	{ .red = 0.999023, .green = 0.615140, .blue = 0.385592 },
+	{ .red = 0.998535, .green = 0.685958, .blue = 0.536020 },
+	{ .red = 0.999512, .green = 0.740171, .blue = 0.653236 },
+	{ .red = 0.999512, .green = 0.748230, .blue = 0.705495 },
+	{ .red = 0.998291, .green = 0.757509, .blue = 0.753114 },
+	{ .red = 0.998535, .green = 0.766789, .blue = 0.794628 },
+	{ .red = 0.998291, .green = 0.774115, .blue = 0.830525 },
+	{ .red = 0.998535, .green = 0.778999, .blue = 0.861783 },
+	{ .red = 0.998535, .green = 0.780220, .blue = 0.889621 },
+	{ .red = 0.999267, .green = 0.777778, .blue = 0.917216 },
+	{ .red = 0.999267, .green = 0.772894, .blue = 0.945543 },
+	{ .red = 0.998779, .green = 0.761416, .blue = 0.971184 },
+	{ .red = 0.998535, .green = 0.745543, .blue = 0.997070 },
+	{ .red = 0.974847, .green = 0.733333, .blue = 0.999267 },
+	{ .red = 0.989011, .green = 0.560684, .blue = 0.032967 },
+	{ .red = 0.999512, .green = 0.575092, .blue = 0.112088 },
+	{ .red = 0.998779, .green = 0.607082, .blue = 0.234188 },
+	{ .red = 0.999023, .green = 0.654945, .blue = 0.369475 },
+	{ .red = 0.999267, .green = 0.708669, .blue = 0.508181 },
+	{ .red = 0.998535, .green = 0.763614, .blue = 0.639072 },
+	{ .red = 0.999267, .green = 0.808547, .blue = 0.740659 },
+	{ .red = 0.999512, .green = 0.816117, .blue = 0.784860 },
+	{ .red = 0.998291, .green = 0.825153, .blue = 0.824420 },
+	{ .red = 0.999267, .green = 0.832967, .blue = 0.858120 },
+	{ .red = 0.999756, .green = 0.838828, .blue = 0.886691 },
+	{ .red = 0.999023, .green = 0.841514, .blue = 0.911111 },
+	{ .red = 0.998779, .green = 0.840293, .blue = 0.933333 },
+	{ .red = 0.999267, .green = 0.835409, .blue = 0.956777 },
+	{ .red = 0.999756, .green = 0.823443, .blue = 0.978266 },
+	{ .red = 0.998779, .green = 0.807570, .blue = 0.999512 },
+	{ .red = 0.976068, .green = 0.795849, .blue = 0.998779 },
+	{ .red = 0.995116, .green = 0.633944, .blue = 0.027106 },
+	{ .red = 0.999023, .green = 0.642735, .blue = 0.109402 },
+	{ .red = 0.999512, .green = 0.665690, .blue = 0.225397 },
+	{ .red = 0.998779, .green = 0.699878, .blue = 0.351893 },
+	{ .red = 0.999023, .green = 0.740171, .blue = 0.482051 },
+	{ .red = 0.999267, .green = 0.781441, .blue = 0.605861 },
+	{ .red = 0.998046, .green = 0.821978, .blue = 0.716239 },
+	{ .red = 0.999267, .green = 0.861538, .blue = 0.807082 },
+	{ .red = 0.998535, .green = 0.868864, .blue = 0.844933 },
+	{ .red = 0.999023, .green = 0.876679, .blue = 0.877900 },
+	{ .red = 0.999023, .green = 0.883761, .blue = 0.905495 },
+	{ .red = 0.998291, .green = 0.887912, .blue = 0.927717 },
+	{ .red = 0.998779, .green = 0.887912, .blue = 0.947253 },
+	{ .red = 0.999023, .green = 0.884005, .blue = 0.966300 },
+	{ .red = 0.998779, .green = 0.872772, .blue = 0.983150 },
+	{ .red = 0.995849, .green = 0.857875, .blue = 0.999512 },
+	{ .red = 0.976801, .green = 0.846154, .blue = 0.999023 },
+	{ .red = 0.987057, .green = 0.700855, .blue = 0.050549 },
+	{ .red = 0.999267, .green = 0.711844, .blue = 0.105250 },
+	{ .red = 0.999267, .green = 0.726740, .blue = 0.215873 },
+	{ .red = 0.999023, .green = 0.749939, .blue = 0.333333 },
+	{ .red = 0.999512, .green = 0.778022, .blue = 0.453968 },
+	{ .red = 0.998291, .green = 0.807326, .blue = 0.572161 },
+	{ .red = 0.998779, .green = 0.837118, .blue = 0.679609 },
+	{ .red = 0.998535, .green = 0.866667, .blue = 0.772405 },
+	{ .red = 0.999023, .green = 0.896703, .blue = 0.849573 },
+	{ .red = 0.999512, .green = 0.908913, .blue = 0.889866 },
+	{ .red = 0.999512, .green = 0.915995, .blue = 0.917705 },
+	{ .red = 0.998779, .green = 0.921856, .blue = 0.940171 },
+	{ .red = 0.998535, .green = 0.924054, .blue = 0.957753 },
+	{ .red = 0.999023, .green = 0.921368, .blue = 0.973871 },
+	{ .red = 0.999267, .green = 0.911355, .blue = 0.988767 },
+	{ .red = 0.993407, .green = 0.897924, .blue = 0.999512 },
+	{ .red = 0.977045, .green = 0.886203, .blue = 0.999023 },
+	{ .red = 0.990476, .green = 0.773871, .blue = 0.052747 },
+	{ .red = 0.999023, .green = 0.781685, .blue = 0.101099 },
+	{ .red = 0.999023, .green = 0.790476, .blue = 0.205617 },
+	{ .red = 0.998779, .green = 0.804884, .blue = 0.314530 },
+	{ .red = 0.999267, .green = 0.822711, .blue = 0.425397 },
+	{ .red = 0.999267, .green = 0.841514, .blue = 0.535287 },
+	{ .red = 0.998779, .green = 0.861050, .blue = 0.639560 },
+	{ .red = 0.998535, .green = 0.881074, .blue = 0.733333 },
+	{ .red = 0.998291, .green = 0.901832, .blue = 0.813675 },
+	{ .red = 0.998779, .green = 0.923810, .blue = 0.880098 },
+	{ .red = 0.998779, .green = 0.939683, .blue = 0.923810 },
+	{ .red = 0.999512, .green = 0.945788, .blue = 0.947497 },
+	{ .red = 0.998535, .green = 0.950427, .blue = 0.965568 },
+	{ .red = 0.999023, .green = 0.949939, .blue = 0.979731 },
+	{ .red = 0.999023, .green = 0.941392, .blue = 0.992430 },
+	{ .red = 0.991941, .green = 0.929426, .blue = 0.999756 },
+	{ .red = 0.977045, .green = 0.918193, .blue = 0.998535 },
+	{ .red = 0.991941, .green = 0.846886, .blue = 0.060073 },
+	{ .red = 0.998779, .green = 0.852503, .blue = 0.096703 },
+	{ .red = 0.999756, .green = 0.857875, .blue = 0.194139 },
+	{ .red = 0.999267, .green = 0.864957, .blue = 0.294750 },
+	{ .red = 0.998779, .green = 0.873993, .blue = 0.396825 },
+	{ .red = 0.998291, .green = 0.884005, .blue = 0.498413 },
+	{ .red = 0.999023, .green = 0.895238, .blue = 0.595604 },
+	{ .red = 0.998291, .green = 0.905983, .blue = 0.687668 },
+	{ .red = 0.999023, .green = 0.918193, .blue = 0.769475 },
+	{ .red = 0.999023, .green = 0.931380, .blue = 0.841270 },
+	{ .red = 0.999023, .green = 0.946032, .blue = 0.901343 },
+	{ .red = 0.999023, .green = 0.963370, .blue = 0.949206 },
+	{ .red = 0.998291, .green = 0.968742, .blue = 0.969963 },
+	{ .red = 0.998535, .green = 0.971673, .blue = 0.983883 },
+	{ .red = 0.999267, .green = 0.965324, .blue = 0.995360 },
+	{ .red = 0.990232, .green = 0.954579, .blue = 0.999023 },
+	{ .red = 0.978266, .green = 0.943590, .blue = 0.998779 },
+	{ .red = 0.992430, .green = 0.920147, .blue = 0.077167 },
+	{ .red = 0.999267, .green = 0.925275, .blue = 0.093040 },
+	{ .red = 0.999512, .green = 0.927228, .blue = 0.182662 },
+	{ .red = 0.998535, .green = 0.929426, .blue = 0.275458 },
+	{ .red = 0.998779, .green = 0.932845, .blue = 0.367766 },
+	{ .red = 0.998779, .green = 0.936752, .blue = 0.459341 },
+	{ .red = 0.998291, .green = 0.940171, .blue = 0.549695 },
+	{ .red = 0.998779, .green = 0.944322, .blue = 0.635409 },
+	{ .red = 0.998535, .green = 0.948230, .blue = 0.716728 },
+	{ .red = 0.998779, .green = 0.953114, .blue = 0.790476 },
+	{ .red = 0.999023, .green = 0.958974, .blue = 0.856654 },
+	{ .red = 0.998779, .green = 0.966545, .blue = 0.913797 },
+	{ .red = 0.999023, .green = 0.976801, .blue = 0.959951 },
+	{ .red = 0.999756, .green = 0.985836, .blue = 0.986569 },
+	{ .red = 0.999267, .green = 0.984127, .blue = 0.997314 },
+	{ .red = 0.990232, .green = 0.974115, .blue = 0.998779 },
+	{ .red = 0.979976, .green = 0.963370, .blue = 0.999512 },
+	{ .red = 0.989988, .green = 0.990232, .blue = 0.089133 },
+	{ .red = 0.991941, .green = 0.991941, .blue = 0.107692 },
+	{ .red = 0.992918, .green = 0.993162, .blue = 0.180952 },
+	{ .red = 0.994139, .green = 0.994628, .blue = 0.262271 },
+	{ .red = 0.998291, .green = 0.998046, .blue = 0.336264 },
+	{ .red = 0.994383, .green = 0.995360, .blue = 0.428816 },
+	{ .red = 0.996093, .green = 0.996337, .blue = 0.504518 },
+	{ .red = 0.998779, .green = 0.998291, .blue = 0.575336 },
+	{ .red = 0.997558, .green = 0.996825, .blue = 0.652991 },
+	{ .red = 0.998291, .green = 0.996825, .blue = 0.721856 },
+	{ .red = 0.998046, .green = 0.995849, .blue = 0.789499 },
+	{ .red = 0.998535, .green = 0.996093, .blue = 0.849817 },
+	{ .red = 0.998291, .green = 0.995849, .blue = 0.907204 },
+	{ .red = 0.998779, .green = 0.996581, .blue = 0.957998 },
+	{ .red = 1.000000, .green = 0.999267, .blue = 0.999512 },
+	{ .red = 0.991453, .green = 0.989255, .blue = 0.999512 },
+	{ .red = 0.981929, .green = 0.979243, .blue = 0.999023 },
+	{ .red = 0.931624, .green = 0.996581, .blue = 0.076190 },
+	{ .red = 0.934310, .green = 0.999512, .blue = 0.092796 },
+	{ .red = 0.934310, .green = 0.999267, .blue = 0.181441 },
+	{ .red = 0.934310, .green = 0.999267, .blue = 0.270818 },
+	{ .red = 0.935775, .green = 0.999512, .blue = 0.358242 },
+	{ .red = 0.937241, .green = 0.999267, .blue = 0.445910 },
+	{ .red = 0.940415, .green = 0.999512, .blue = 0.528205 },
+	{ .red = 0.943834, .green = 0.999512, .blue = 0.606349 },
+	{ .red = 0.947497, .green = 0.998779, .blue = 0.679609 },
+	{ .red = 0.952137, .green = 0.999756, .blue = 0.742613 },
+	{ .red = 0.956288, .green = 0.999267, .blue = 0.803175 },
+	{ .red = 0.960928, .green = 0.998779, .blue = 0.858120 },
+	{ .red = 0.966789, .green = 0.998535, .blue = 0.908913 },
+	{ .red = 0.975336, .green = 0.999512, .blue = 0.953358 },
+	{ .red = 0.978510, .green = 0.999756, .blue = 0.980464 },
+	{ .red = 0.988278, .green = 0.999267, .blue = 0.999512 },
+	{ .red = 0.977778, .green = 0.987546, .blue = 0.999512 },
+	{ .red = 0.873748, .green = 0.995116, .blue = 0.083761 },
+	{ .red = 0.875702, .green = 0.997314, .blue = 0.103785 },
+	{ .red = 0.878388, .green = 0.999512, .blue = 0.172894 },
+	{ .red = 0.880098, .green = 0.999267, .blue = 0.259829 },
+	{ .red = 0.883516, .green = 0.999756, .blue = 0.344078 },
+	{ .red = 0.887424, .green = 0.999023, .blue = 0.429792 },
+	{ .red = 0.893040, .green = 0.999023, .blue = 0.511355 },
+	{ .red = 0.899878, .green = 0.999267, .blue = 0.588278 },
+	{ .red = 0.907448, .green = 0.999512, .blue = 0.660562 },
+	{ .red = 0.915507, .green = 0.998535, .blue = 0.730159 },
+	{ .red = 0.924542, .green = 0.999512, .blue = 0.789744 },
+	{ .red = 0.934799, .green = 0.998291, .blue = 0.849328 },
+	{ .red = 0.947253, .green = 0.999023, .blue = 0.900855 },
+	{ .red = 0.960195, .green = 0.998779, .blue = 0.943590 },
+	{ .red = 0.957509, .green = 0.999023, .blue = 0.961172 },
+	{ .red = 0.960440, .green = 0.999267, .blue = 0.982173 },
+	{ .red = 0.976557, .green = 0.998779, .blue = 0.999023 },
+	{ .red = 0.999512, .green = 0.130647, .blue = 0.067888 },
+	{ .red = 0.999756, .green = 0.100366, .blue = 0.084249 },
+	{ .red = 0.999267, .green = 0.090842, .blue = 0.145543 },
+	{ .red = 0.997314, .green = 0.082784, .blue = 0.211722 },
+	{ .red = 0.995604, .green = 0.071306, .blue = 0.277900 },
+	{ .red = 0.992430, .green = 0.064469, .blue = 0.343834 },
+	{ .red = 0.998046, .green = 0.046642, .blue = 0.411477 },
+	{ .red = 0.985592, .green = 0.042979, .blue = 0.472283 },
+	{ .red = 0.984615, .green = 0.029792, .blue = 0.536508 },
+	{ .red = 0.985104, .green = 0.030281, .blue = 0.601465 },
+	{ .red = 0.982418, .green = 0.036386, .blue = 0.663736 },
+	{ .red = 0.984371, .green = 0.034432, .blue = 0.728694 },
+	{ .red = 0.988767, .green = 0.025641, .blue = 0.795604 },
+	{ .red = 0.979976, .green = 0.045421, .blue = 0.851770 },
+	{ .red = 0.985348, .green = 0.037118, .blue = 0.920391 },
+	{ .red = 0.985104, .green = 0.027106, .blue = 0.984615 },
+	{ .red = 0.939683, .green = 0.051770, .blue = 0.983883 },
+	{ .red = 0.999512, .green = 0.141880, .blue = 0.067399 },
+	{ .red = 0.999512, .green = 0.135287, .blue = 0.091575 },
+	{ .red = 0.999756, .green = 0.123321, .blue = 0.149206 },
+	{ .red = 0.999267, .green = 0.117216, .blue = 0.215140 },
+	{ .red = 0.999023, .green = 0.110867, .blue = 0.281807 },
+	{ .red = 0.999512, .green = 0.105495, .blue = 0.348718 },
+	{ .red = 0.999023, .green = 0.100122, .blue = 0.414896 },
+	{ .red = 0.999512, .green = 0.095238, .blue = 0.480586 },
+	{ .red = 0.999756, .green = 0.091087, .blue = 0.546276 },
+	{ .red = 0.999023, .green = 0.092063, .blue = 0.610989 },
+	{ .red = 0.999756, .green = 0.091819, .blue = 0.676190 },
+	{ .red = 0.998779, .green = 0.092063, .blue = 0.739683 },
+	{ .red = 0.998535, .green = 0.090842, .blue = 0.803663 },
+	{ .red = 0.999023, .green = 0.088645, .blue = 0.868132 },
+	{ .red = 0.994628, .green = 0.089133, .blue = 0.928694 },
+	{ .red = 0.994139, .green = 0.081807, .blue = 0.993407 },
+	{ .red = 0.956288, .green = 0.117949, .blue = 0.999023 },
+	{ .red = 0.999267, .green = 0.176801, .blue = 0.065690 },
+	{ .red = 0.999267, .green = 0.230037, .blue = 0.126252 },
+	{ .red = 0.998779, .green = 0.221490, .blue = 0.174359 },
+	{ .red = 0.999023, .green = 0.219292, .blue = 0.237851 },
+	{ .red = 0.999512, .green = 0.219048, .blue = 0.304274 },
+	{ .red = 0.998779, .green = 0.219048, .blue = 0.369963 },
+	{ .red = 0.999023, .green = 0.220269, .blue = 0.435409 },
+	{ .red = 0.999267, .green = 0.221245, .blue = 0.499389 },
+	{ .red = 0.999023, .green = 0.221978, .blue = 0.561905 },
+	{ .red = 0.999023, .green = 0.224420, .blue = 0.623932 },
+	{ .red = 0.999023, .green = 0.226618, .blue = 0.684982 },
+	{ .red = 0.999023, .green = 0.228327, .blue = 0.745543 },
+	{ .red = 0.999512, .green = 0.229304, .blue = 0.806349 },
+	{ .red = 0.999267, .green = 0.229792, .blue = 0.866667 },
+	{ .red = 0.999756, .green = 0.229548, .blue = 0.928449 },
+	{ .red = 0.998535, .green = 0.227839, .blue = 0.989011 },
+	{ .red = 0.965812, .green = 0.234921, .blue = 0.999267 },
+	{ .red = 0.999023, .green = 0.224176, .blue = 0.061294 },
+	{ .red = 0.999512, .green = 0.269597, .blue = 0.126984 },
+	{ .red = 0.999267, .green = 0.326252, .blue = 0.217827 },
+	{ .red = 0.999267, .green = 0.327473, .blue = 0.279121 },
+	{ .red = 0.999023, .green = 0.329426, .blue = 0.343834 },
+	{ .red = 0.999512, .green = 0.332845, .blue = 0.408791 },
+	{ .red = 0.999512, .green = 0.336508, .blue = 0.472039 },
+	{ .red = 0.999267, .green = 0.340171, .blue = 0.532845 },
+	{ .red = 0.999267, .green = 0.343834, .blue = 0.591453 },
+	{ .red = 0.999023, .green = 0.347741, .blue = 0.648107 },
+	{ .red = 0.998779, .green = 0.350916, .blue = 0.703297 },
+	{ .red = 0.998779, .green = 0.353358, .blue = 0.757753 },
+	{ .red = 0.998779, .green = 0.354579, .blue = 0.811722 },
+	{ .red = 0.999267, .green = 0.355067, .blue = 0.866667 },
+	{ .red = 0.999023, .green = 0.354823, .blue = 0.922344 },
+	{ .red = 0.999023, .green = 0.352625, .blue = 0.978022 },
+	{ .red = 0.978999, .green = 0.350183, .blue = 0.999756 },
+	{ .red = 0.997802, .green = 0.278144, .blue = 0.053480 },
+	{ .red = 0.999267, .green = 0.313309, .blue = 0.123077 },
+	{ .red = 0.999023, .green = 0.410501, .blue = 0.257875 },
+	{ .red = 0.998779, .green = 0.434921, .blue = 0.335287 },
+	{ .red = 0.998779, .green = 0.439072, .blue = 0.398291 },
+	{ .red = 0.999023, .green = 0.444444, .blue = 0.461294 },
+	{ .red = 0.999023, .green = 0.451038, .blue = 0.521856 },
+	{ .red = 0.999512, .green = 0.457143, .blue = 0.579243 },
+	{ .red = 0.999267, .green = 0.462759, .blue = 0.632723 },
+	{ .red = 0.999267, .green = 0.467643, .blue = 0.683516 },
+	{ .red = 0.998535, .green = 0.471551, .blue = 0.731380 },
+	{ .red = 0.999023, .green = 0.473748, .blue = 0.778510 },
+	{ .red = 0.999023, .green = 0.474481, .blue = 0.824908 },
+	{ .red = 0.998535, .green = 0.473993, .blue = 0.871551 },
+	{ .red = 0.999267, .green = 0.472283, .blue = 0.920635 },
+	{ .red = 0.998535, .green = 0.468620, .blue = 0.967766 },
+	{ .red = 0.990965, .green = 0.460317, .blue = 0.999267 },
+	{ .red = 0.993895, .green = 0.334310, .blue = 0.038828 },
+	{ .red = 0.998535, .green = 0.362882, .blue = 0.117460 },
+	{ .red = 0.999512, .green = 0.442491, .blue = 0.250061 },
+	{ .red = 0.999023, .green = 0.539683, .blue = 0.403175 },
+	{ .red = 0.998291, .green = 0.541880, .blue = 0.460562 },
+	{ .red = 0.999023, .green = 0.548962, .blue = 0.520879 },
+	{ .red = 0.999512, .green = 0.557265, .blue = 0.578755 },
+	{ .red = 0.998779, .green = 0.565324, .blue = 0.631746 },
+	{ .red = 0.998535, .green = 0.572894, .blue = 0.680342 },
+	{ .red = 0.998535, .green = 0.578510, .blue = 0.724786 },
+	{ .red = 0.998779, .green = 0.583150, .blue = 0.766545 },
+	{ .red = 0.999756, .green = 0.585104, .blue = 0.806349 },
+	{ .red = 0.999023, .green = 0.585104, .blue = 0.844444 },
+	{ .red = 0.998535, .green = 0.583394, .blue = 0.883272 },
+	{ .red = 0.998779, .green = 0.580220, .blue = 0.924054 },
+	{ .red = 0.998535, .green = 0.573382, .blue = 0.963370 },
+	{ .red = 0.998291, .green = 0.561172, .blue = 0.997802 },
+	{ .red = 0.983150, .green = 0.392918, .blue = 0.029548 },
+	{ .red = 0.999023, .green = 0.417094, .blue = 0.110379 },
+	{ .red = 0.999267, .green = 0.479609, .blue = 0.240049 },
+	{ .red = 0.998779, .green = 0.566300, .blue = 0.392918 },
+	{ .red = 0.999756, .green = 0.633455, .blue = 0.521612 },
+	{ .red = 0.999512, .green = 0.640537, .blue = 0.578755 },
+	{ .red = 0.998046, .green = 0.649573, .blue = 0.633455 },
+	{ .red = 0.999023, .green = 0.658608, .blue = 0.683028 },
+	{ .red = 0.999023, .green = 0.667399, .blue = 0.727473 },
+	{ .red = 0.998779, .green = 0.674237, .blue = 0.767033 },
+	{ .red = 0.998779, .green = 0.679365, .blue = 0.802930 },
+	{ .red = 0.999267, .green = 0.681563, .blue = 0.836142 },
+	{ .red = 0.999267, .green = 0.681319, .blue = 0.867888 },
+	{ .red = 0.999023, .green = 0.678632, .blue = 0.899389 },
+	{ .red = 0.998779, .green = 0.674237, .blue = 0.932845 },
+	{ .red = 0.999023, .green = 0.664713, .blue = 0.964591 },
+	{ .red = 0.999023, .green = 0.650549, .blue = 0.994139 },
+	{ .red = 0.994383, .green = 0.461538, .blue = 0.023687 },
+	{ .red = 0.999512, .green = 0.477900, .blue = 0.109646 },
+	{ .red = 0.999023, .green = 0.524542, .blue = 0.232234 },
+	{ .red = 0.998291, .green = 0.592430, .blue = 0.373626 },
+	{ .red = 0.999267, .green = 0.668620, .blue = 0.523077 },
+	{ .red = 0.999512, .green = 0.716972, .blue = 0.629304 },
+	{ .red = 0.999512, .green = 0.725275, .blue = 0.680342 },
+	{ .red = 0.999267, .green = 0.734554, .blue = 0.726984 },
+	{ .red = 0.998291, .green = 0.743834, .blue = 0.768254 },
+	{ .red = 0.998535, .green = 0.751648, .blue = 0.804640 },
+	{ .red = 0.999023, .green = 0.757265, .blue = 0.836386 },
+	{ .red = 0.998779, .green = 0.760440, .blue = 0.864469 },
+	{ .red = 0.999023, .green = 0.760440, .blue = 0.890842 },
+	{ .red = 0.998779, .green = 0.757509, .blue = 0.916484 },
+	{ .red = 0.999512, .green = 0.752381, .blue = 0.944078 },
+	{ .red = 0.999023, .green = 0.741392, .blue = 0.968987 },
+	{ .red = 0.999267, .green = 0.726007, .blue = 0.994139 },
+	{ .red = 0.992674, .green = 0.526252, .blue = 0.028571 },
+	{ .red = 0.999756, .green = 0.539927, .blue = 0.107937 },
+	{ .red = 0.999023, .green = 0.575092, .blue = 0.225641 },
+	{ .red = 0.998535, .green = 0.627350, .blue = 0.357998 },
+	{ .red = 0.999756, .green = 0.686447, .blue = 0.495238 },
+	{ .red = 0.998291, .green = 0.747253, .blue = 0.627839 },
+	{ .red = 0.999512, .green = 0.786081, .blue = 0.717460 },
+	{ .red = 0.999267, .green = 0.794139, .blue = 0.761416 },
+	{ .red = 0.998779, .green = 0.803175, .blue = 0.800733 },
+	{ .red = 0.999267, .green = 0.811477, .blue = 0.834676 },
+	{ .red = 0.998535, .green = 0.818315, .blue = 0.863736 },
+	{ .red = 0.999023, .green = 0.822222, .blue = 0.888889 },
+	{ .red = 0.998779, .green = 0.822955, .blue = 0.910867 },
+	{ .red = 0.999512, .green = 0.820513, .blue = 0.932601 },
+	{ .red = 0.997802, .green = 0.815873, .blue = 0.953846 },
+	{ .red = 0.999267, .green = 0.803907, .blue = 0.975092 },
+	{ .red = 0.999023, .green = 0.788278, .blue = 0.995849 },
+	{ .red = 0.994628, .green = 0.592918, .blue = 0.029548 },
+	{ .red = 0.999267, .green = 0.602686, .blue = 0.105983 },
+	{ .red = 0.998779, .green = 0.628083, .blue = 0.218315 },
+	{ .red = 0.998779, .green = 0.667643, .blue = 0.342125 },
+	{ .red = 0.999023, .green = 0.713553, .blue = 0.471306 },
+	{ .red = 0.998779, .green = 0.760195, .blue = 0.595116 },
+	{ .red = 0.999512, .green = 0.806838, .blue = 0.706471 },
+	{ .red = 0.999023, .green = 0.841026, .blue = 0.786569 },
+	{ .red = 0.998779, .green = 0.848596, .blue = 0.824176 },
+	{ .red = 0.998291, .green = 0.856899, .blue = 0.856899 },
+	{ .red = 0.999267, .green = 0.863980, .blue = 0.884737 },
+	{ .red = 0.998779, .green = 0.869109, .blue = 0.907937 },
+	{ .red = 0.999512, .green = 0.871306, .blue = 0.927961 },
+	{ .red = 0.998779, .green = 0.869841, .blue = 0.945543 },
+	{ .red = 0.998535, .green = 0.865446, .blue = 0.963858 },
+	{ .red = 0.999267, .green = 0.853724, .blue = 0.980952 },
+	{ .red = 0.998291, .green = 0.838828, .blue = 0.998046 },
+	{ .red = 0.987057, .green = 0.654945, .blue = 0.046642 },
+	{ .red = 0.999023, .green = 0.666422, .blue = 0.103297 },
+	{ .red = 0.999756, .green = 0.684737, .blue = 0.209768 },
+	{ .red = 0.998779, .green = 0.712332, .blue = 0.325763 },
+	{ .red = 0.998535, .green = 0.746032, .blue = 0.446398 },
+	{ .red = 0.999023, .green = 0.781929, .blue = 0.564103 },
+	{ .red = 0.998046, .green = 0.816850, .blue = 0.672039 },
+	{ .red = 0.999023, .green = 0.852015, .blue = 0.765079 },
+	{ .red = 0.999023, .green = 0.884737, .blue = 0.840537 },
+	{ .red = 0.999023, .green = 0.890598, .blue = 0.871551 },
+	{ .red = 0.999756, .green = 0.897924, .blue = 0.899145 },
+	{ .red = 0.999023, .green = 0.904274, .blue = 0.922344 },
+	{ .red = 0.998779, .green = 0.907937, .blue = 0.940904 },
+	{ .red = 0.998779, .green = 0.907937, .blue = 0.956532 },
+	{ .red = 0.999023, .green = 0.904274, .blue = 0.971917 },
+	{ .red = 0.999023, .green = 0.893284, .blue = 0.985836 },
+	{ .red = 0.996581, .green = 0.879365, .blue = 0.999023 },
+	{ .red = 0.995116, .green = 0.725275, .blue = 0.036874 },
+	{ .red = 0.999267, .green = 0.731136, .blue = 0.099634 },
+	{ .red = 0.998779, .green = 0.742857, .blue = 0.201465 },
+	{ .red = 0.999267, .green = 0.761905, .blue = 0.308669 },
+	{ .red = 0.999023, .green = 0.785104, .blue = 0.420269 },
+	{ .red = 0.998535, .green = 0.810012, .blue = 0.531136 },
+	{ .red = 0.999512, .green = 0.835897, .blue = 0.634921 },
+	{ .red = 0.999023, .green = 0.861294, .blue = 0.728449 },
+	{ .red = 0.999267, .green = 0.886691, .blue = 0.807570 },
+	{ .red = 0.999512, .green = 0.913065, .blue = 0.873748 },
+	{ .red = 0.998535, .green = 0.923321, .blue = 0.907692 },
+	{ .red = 0.999756, .green = 0.929670, .blue = 0.931136 },
+	{ .red = 0.998535, .green = 0.935043, .blue = 0.950183 },
+	{ .red = 0.999023, .green = 0.936752, .blue = 0.965079 },
+	{ .red = 0.998291, .green = 0.934554, .blue = 0.977778 },
+	{ .red = 0.999267, .green = 0.924786, .blue = 0.990232 },
+	{ .red = 0.993895, .green = 0.912332, .blue = 0.998779 },
+	{ .red = 0.997558, .green = 0.793651, .blue = 0.031990 },
+	{ .red = 0.999267, .green = 0.796581, .blue = 0.096215 },
+	{ .red = 0.999023, .green = 0.803663, .blue = 0.191941 },
+	{ .red = 0.998779, .green = 0.815140, .blue = 0.292063 },
+	{ .red = 0.998535, .green = 0.829548, .blue = 0.394628 },
+	{ .red = 0.999512, .green = 0.845910, .blue = 0.496947 },
+	{ .red = 0.999023, .green = 0.862271, .blue = 0.596093 },
+	{ .red = 0.999267, .green = 0.879365, .blue = 0.687668 },
+	{ .red = 0.999512, .green = 0.896947, .blue = 0.768987 },
+	{ .red = 0.999023, .green = 0.915018, .blue = 0.839316 },
+	{ .red = 0.998535, .green = 0.934554, .blue = 0.897680 },
+	{ .red = 0.998535, .green = 0.948474, .blue = 0.935287 },
+	{ .red = 0.999267, .green = 0.954090, .blue = 0.955556 },
+	{ .red = 0.998535, .green = 0.958486, .blue = 0.970940 },
+	{ .red = 0.998779, .green = 0.957998, .blue = 0.982662 },
+	{ .red = 0.998779, .green = 0.949939, .blue = 0.993162 },
+	{ .red = 0.992918, .green = 0.938706, .blue = 0.999512 },
+	{ .red = 0.995360, .green = 0.859585, .blue = 0.052259 },
+	{ .red = 0.998535, .green = 0.863004, .blue = 0.094505 },
+	{ .red = 0.999267, .green = 0.866911, .blue = 0.182173 },
+	{ .red = 0.999512, .green = 0.873260, .blue = 0.274481 },
+	{ .red = 0.999512, .green = 0.880830, .blue = 0.368742 },
+	{ .red = 0.999267, .green = 0.889133, .blue = 0.462759 },
+	{ .red = 0.998535, .green = 0.897924, .blue = 0.555556 },
+	{ .red = 0.999023, .green = 0.907448, .blue = 0.642979 },
+	{ .red = 0.999023, .green = 0.916972, .blue = 0.724542 },
+	{ .red = 0.998779, .green = 0.927473, .blue = 0.797802 },
+	{ .red = 0.998779, .green = 0.939194, .blue = 0.861050 },
+	{ .red = 0.999512, .green = 0.952625, .blue = 0.913553 },
+	{ .red = 0.999023, .green = 0.968254, .blue = 0.956288 },
+	{ .red = 0.998779, .green = 0.973382, .blue = 0.974359 },
+	{ .red = 0.998779, .green = 0.976068, .blue = 0.986569 },
+	{ .red = 0.999267, .green = 0.970208, .blue = 0.995849 },
+	{ .red = 0.991209, .green = 0.959951, .blue = 0.998779 },
+	{ .red = 0.993407, .green = 0.926252, .blue = 0.076435 },
+	{ .red = 0.999023, .green = 0.930647, .blue = 0.090598 },
+	{ .red = 0.999756, .green = 0.932601, .blue = 0.171673 },
+	{ .red = 0.998535, .green = 0.933822, .blue = 0.258364 },
+	{ .red = 0.999023, .green = 0.936996, .blue = 0.343590 },
+	{ .red = 0.999023, .green = 0.940171, .blue = 0.428816 },
+	{ .red = 0.999023, .green = 0.943346, .blue = 0.513065 },
+	{ .red = 0.999023, .green = 0.946764, .blue = 0.594872 },
+	{ .red = 0.998291, .green = 0.949451, .blue = 0.673748 },
+	{ .red = 0.999023, .green = 0.953358, .blue = 0.745788 },
+	{ .red = 0.999023, .green = 0.957753, .blue = 0.812454 },
+	{ .red = 0.999267, .green = 0.963126, .blue = 0.871551 },
+	{ .red = 0.998779, .green = 0.969963, .blue = 0.923565 },
+	{ .red = 0.999267, .green = 0.979731, .blue = 0.964835 },
+	{ .red = 1.000000, .green = 0.988034, .blue = 0.988523 },
+	{ .red = 0.999512, .green = 0.986569, .blue = 0.997802 },
+	{ .red = 0.991209, .green = 0.977045, .blue = 0.998535 },
+	{ .red = 0.989988, .green = 0.990965, .blue = 0.092308 },
+	{ .red = 0.991941, .green = 0.992430, .blue = 0.108181 },
+	{ .red = 0.992674, .green = 0.993407, .blue = 0.174115 },
+	{ .red = 0.993651, .green = 0.994383, .blue = 0.248840 },
+	{ .red = 0.995849, .green = 0.996581, .blue = 0.321856 },
+	{ .red = 0.995849, .green = 0.996825, .blue = 0.400000 },
+	{ .red = 0.994383, .green = 0.995604, .blue = 0.479121 },
+	{ .red = 0.997558, .green = 0.997558, .blue = 0.544811 },
+	{ .red = 0.997070, .green = 0.996825, .blue = 0.617338 },
+	{ .red = 0.997070, .green = 0.996337, .blue = 0.685470 },
+	{ .red = 0.999023, .green = 0.997314, .blue = 0.745788 },
+	{ .red = 0.998046, .green = 0.996093, .blue = 0.808547 },
+	{ .red = 0.998779, .green = 0.996337, .blue = 0.863492 },
+	{ .red = 0.998046, .green = 0.995849, .blue = 0.916972 },
+	{ .red = 0.998779, .green = 0.996825, .blue = 0.962637 },
+	{ .red = 1.000000, .green = 0.999756, .blue = 1.000000 },
+	{ .red = 0.992430, .green = 0.990476, .blue = 0.999512 },
+	{ .red = 0.936020, .green = 0.997070, .blue = 0.073016 },
+	{ .red = 0.938462, .green = 0.999512, .blue = 0.088400 },
+	{ .red = 0.938217, .green = 0.999267, .blue = 0.171429 },
+	{ .red = 0.938217, .green = 0.999267, .blue = 0.254945 },
+	{ .red = 0.938950, .green = 0.999512, .blue = 0.337729 },
+	{ .red = 0.940171, .green = 0.999267, .blue = 0.420513 },
+	{ .red = 0.942613, .green = 0.999512, .blue = 0.498413 },
+	{ .red = 0.945055, .green = 0.999023, .blue = 0.575092 },
+	{ .red = 0.948474, .green = 0.998779, .blue = 0.645421 },
+	{ .red = 0.952137, .green = 0.998535, .blue = 0.710134 },
+	{ .red = 0.956288, .green = 0.999267, .blue = 0.766789 },
+	{ .red = 0.960195, .green = 0.999023, .blue = 0.820513 },
+	{ .red = 0.964347, .green = 0.999023, .blue = 0.870085 },
+	{ .red = 0.969719, .green = 0.998779, .blue = 0.916239 },
+	{ .red = 0.977534, .green = 0.999756, .blue = 0.957021 },
+	{ .red = 0.980220, .green = 0.999756, .blue = 0.981929 },
+	{ .red = 0.989499, .green = 0.999267, .blue = 0.999512 },
+	{ .red = 0.999512, .green = 0.134799, .blue = 0.067888 },
+	{ .red = 0.999512, .green = 0.109158, .blue = 0.082051 },
+	{ .red = 0.999756, .green = 0.096215, .blue = 0.137485 },
+	{ .red = 0.998291, .green = 0.087668, .blue = 0.199512 },
+	{ .red = 0.996093, .green = 0.080342, .blue = 0.262027 },
+	{ .red = 0.995604, .green = 0.069841, .blue = 0.324298 },
+	{ .red = 0.999267, .green = 0.059341, .blue = 0.388034 },
+	{ .red = 0.991209, .green = 0.052259, .blue = 0.446886 },
+	{ .red = 0.983883, .green = 0.045177, .blue = 0.504518 },
+	{ .red = 0.994139, .green = 0.026374, .blue = 0.570696 },
+	{ .red = 0.983394, .green = 0.043468, .blue = 0.625153 },
+	{ .red = 0.996093, .green = 0.023443, .blue = 0.693529 },
+	{ .red = 0.983150, .green = 0.047619, .blue = 0.744078 },
+	{ .red = 0.994383, .green = 0.030281, .blue = 0.812454 },
+	{ .red = 0.983883, .green = 0.051038, .blue = 0.863004 },
+	{ .red = 0.985836, .green = 0.050549, .blue = 0.924542 },
+	{ .red = 0.992430, .green = 0.028816, .blue = 0.991941 },
+	{ .red = 0.999512, .green = 0.144567, .blue = 0.067643 },
+	{ .red = 0.999512, .green = 0.148230, .blue = 0.093284 },
+	{ .red = 0.999512, .green = 0.135775, .blue = 0.144322 },
+	{ .red = 0.999267, .green = 0.129915, .blue = 0.205617 },
+	{ .red = 0.999512, .green = 0.126496, .blue = 0.268620 },
+	{ .red = 0.999023, .green = 0.122344, .blue = 0.331136 },
+	{ .red = 0.999023, .green = 0.118926, .blue = 0.393407 },
+	{ .red = 0.998779, .green = 0.115018, .blue = 0.454945 },
+	{ .red = 0.999023, .green = 0.111111, .blue = 0.515995 },
+	{ .red = 0.999756, .green = 0.110867, .blue = 0.577289 },
+	{ .red = 0.999023, .green = 0.112576, .blue = 0.637363 },
+	{ .red = 0.999267, .green = 0.113553, .blue = 0.697680 },
+	{ .red = 0.999023, .green = 0.114774, .blue = 0.757021 },
+	{ .red = 0.998779, .green = 0.115995, .blue = 0.816117 },
+	{ .red = 0.999267, .green = 0.116484, .blue = 0.876190 },
+	{ .red = 0.999023, .green = 0.117460, .blue = 0.935775 },
+	{ .red = 0.995604, .green = 0.116972, .blue = 0.992918 },
+	{ .red = 0.999512, .green = 0.174847, .blue = 0.066422 },
+	{ .red = 0.999267, .green = 0.229304, .blue = 0.124786 },
+	{ .red = 0.999023, .green = 0.220757, .blue = 0.168010 },
+	{ .red = 0.999023, .green = 0.219536, .blue = 0.227106 },
+	{ .red = 0.999512, .green = 0.219048, .blue = 0.289377 },
+	{ .red = 0.998535, .green = 0.219780, .blue = 0.351648 },
+	{ .red = 0.999512, .green = 0.220024, .blue = 0.413187 },
+	{ .red = 0.999512, .green = 0.221490, .blue = 0.473748 },
+	{ .red = 0.999267, .green = 0.221978, .blue = 0.532601 },
+	{ .red = 0.998779, .green = 0.223687, .blue = 0.590720 },
+	{ .red = 0.999267, .green = 0.226374, .blue = 0.648596 },
+	{ .red = 0.999023, .green = 0.228571, .blue = 0.705250 },
+	{ .red = 0.999512, .green = 0.230281, .blue = 0.761661 },
+	{ .red = 0.999267, .green = 0.231990, .blue = 0.817827 },
+	{ .red = 0.999267, .green = 0.232967, .blue = 0.874237 },
+	{ .red = 0.999756, .green = 0.233700, .blue = 0.931624 },
+	{ .red = 0.998779, .green = 0.232967, .blue = 0.988278 },
+	{ .red = 0.999267, .green = 0.217094, .blue = 0.062271 },
+	{ .red = 0.999756, .green = 0.262027, .blue = 0.123810 },
+	{ .red = 0.998535, .green = 0.317949, .blue = 0.209035 },
+	{ .red = 0.999267, .green = 0.318926, .blue = 0.265690 },
+	{ .red = 0.999023, .green = 0.321123, .blue = 0.326496 },
+	{ .red = 0.998779, .green = 0.324054, .blue = 0.387790 },
+	{ .red = 0.999267, .green = 0.327717, .blue = 0.448107 },
+	{ .red = 0.998779, .green = 0.331380, .blue = 0.506227 },
+	{ .red = 0.999756, .green = 0.334554, .blue = 0.562393 },
+	{ .red = 0.999023, .green = 0.337973, .blue = 0.616117 },
+	{ .red = 0.999512, .green = 0.341636, .blue = 0.669109 },
+	{ .red = 0.999756, .green = 0.344567, .blue = 0.720879 },
+	{ .red = 0.999023, .green = 0.346764, .blue = 0.771429 },
+	{ .red = 0.998779, .green = 0.347985, .blue = 0.821978 },
+	{ .red = 0.999756, .green = 0.348718, .blue = 0.873993 },
+	{ .red = 0.999023, .green = 0.348718, .blue = 0.925519 },
+	{ .red = 0.998779, .green = 0.347253, .blue = 0.977778 },
+	{ .red = 0.998779, .green = 0.266178, .blue = 0.055433 },
+	{ .red = 0.999756, .green = 0.301587, .blue = 0.120147 },
+	{ .red = 0.999512, .green = 0.397802, .blue = 0.247863 },
+	{ .red = 0.998779, .green = 0.420024, .blue = 0.318681 },
+	{ .red = 0.998779, .green = 0.423932, .blue = 0.378022 },
+	{ .red = 0.998779, .green = 0.429548, .blue = 0.438095 },
+	{ .red = 0.999512, .green = 0.434921, .blue = 0.496215 },
+	{ .red = 0.999023, .green = 0.441270, .blue = 0.551404 },
+	{ .red = 0.998779, .green = 0.446642, .blue = 0.603175 },
+	{ .red = 0.998779, .green = 0.451282, .blue = 0.652259 },
+	{ .red = 0.998291, .green = 0.455678, .blue = 0.698901 },
+	{ .red = 0.998291, .green = 0.459096, .blue = 0.744078 },
+	{ .red = 0.999267, .green = 0.460806, .blue = 0.788767 },
+	{ .red = 0.999756, .green = 0.461294, .blue = 0.832967 },
+	{ .red = 0.998046, .green = 0.461050, .blue = 0.876190 },
+	{ .red = 0.999267, .green = 0.459585, .blue = 0.923321 },
+	{ .red = 0.998779, .green = 0.456410, .blue = 0.968010 },
+	{ .red = 0.993651, .green = 0.317949, .blue = 0.044444 },
+	{ .red = 0.998779, .green = 0.346032, .blue = 0.114042 },
+	{ .red = 0.998779, .green = 0.426618, .blue = 0.240537 },
+	{ .red = 0.999023, .green = 0.520391, .blue = 0.384127 },
+	{ .red = 0.999023, .green = 0.522344, .blue = 0.437607 },
+	{ .red = 0.999756, .green = 0.528938, .blue = 0.495482 },
+	{ .red = 0.999267, .green = 0.536752, .blue = 0.551160 },
+	{ .red = 0.999023, .green = 0.544322, .blue = 0.603175 },
+	{ .red = 0.999023, .green = 0.551893, .blue = 0.651282 },
+	{ .red = 0.999267, .green = 0.557753, .blue = 0.695238 },
+	{ .red = 0.998291, .green = 0.562882, .blue = 0.736020 },
+	{ .red = 0.998779, .green = 0.566300, .blue = 0.774847 },
+	{ .red = 0.999023, .green = 0.567766, .blue = 0.812210 },
+	{ .red = 0.998779, .green = 0.567277, .blue = 0.848840 },
+	{ .red = 0.999267, .green = 0.565568, .blue = 0.886691 },
+	{ .red = 0.999023, .green = 0.562637, .blue = 0.925275 },
+	{ .red = 0.999023, .green = 0.556532, .blue = 0.963370 },
+	{ .red = 0.980464, .green = 0.369231, .blue = 0.026862 },
+	{ .red = 0.999512, .green = 0.394628, .blue = 0.105250 },
+	{ .red = 0.998779, .green = 0.460073, .blue = 0.231502 },
+	{ .red = 0.999023, .green = 0.548962, .blue = 0.378999 },
+	{ .red = 0.999756, .green = 0.610989, .blue = 0.497924 },
+	{ .red = 0.999023, .green = 0.618071, .blue = 0.552869 },
+	{ .red = 0.998779, .green = 0.626618, .blue = 0.605861 },
+	{ .red = 0.998291, .green = 0.635409, .blue = 0.654457 },
+	{ .red = 0.999023, .green = 0.643956, .blue = 0.699145 },
+	{ .red = 0.998535, .green = 0.651282, .blue = 0.738706 },
+	{ .red = 0.999023, .green = 0.656899, .blue = 0.774847 },
+	{ .red = 0.998535, .green = 0.660562, .blue = 0.807814 },
+	{ .red = 0.999512, .green = 0.661783, .blue = 0.839316 },
+	{ .red = 0.998535, .green = 0.661050, .blue = 0.869109 },
+	{ .red = 0.998535, .green = 0.658120, .blue = 0.899878 },
+	{ .red = 0.999267, .green = 0.653968, .blue = 0.932601 },
+	{ .red = 0.998291, .green = 0.645421, .blue = 0.962637 },
+	{ .red = 0.990232, .green = 0.432723, .blue = 0.023443 },
+	{ .red = 0.998779, .green = 0.450794, .blue = 0.104029 },
+	{ .red = 0.999023, .green = 0.499634, .blue = 0.221978 },
+	{ .red = 0.999267, .green = 0.571917, .blue = 0.361416 },
+	{ .red = 0.999023, .green = 0.651282, .blue = 0.508425 },
+	{ .red = 0.999267, .green = 0.693773, .blue = 0.604151 },
+	{ .red = 0.998535, .green = 0.701832, .blue = 0.653968 },
+	{ .red = 0.999023, .green = 0.710867, .blue = 0.699878 },
+	{ .red = 0.998535, .green = 0.720147, .blue = 0.741392 },
+	{ .red = 0.999023, .green = 0.728205, .blue = 0.778022 },
+	{ .red = 0.999023, .green = 0.734554, .blue = 0.810256 },
+	{ .red = 0.998046, .green = 0.738950, .blue = 0.838828 },
+	{ .red = 0.999267, .green = 0.740659, .blue = 0.865446 },
+	{ .red = 0.999267, .green = 0.739683, .blue = 0.890354 },
+	{ .red = 0.998779, .green = 0.736264, .blue = 0.915507 },
+	{ .red = 0.998535, .green = 0.731624, .blue = 0.941880 },
+	{ .red = 0.998779, .green = 0.720879, .blue = 0.966545 },
+	{ .red = 0.993651, .green = 0.494994, .blue = 0.022222 },
+	{ .red = 0.999756, .green = 0.508669, .blue = 0.102564 },
+	{ .red = 0.999267, .green = 0.546032, .blue = 0.216117 },
+	{ .red = 0.999512, .green = 0.602198, .blue = 0.345055 },
+	{ .red = 0.998291, .green = 0.666422, .blue = 0.482784 },
+	{ .red = 0.998046, .green = 0.731136, .blue = 0.614408 },
+	{ .red = 0.998779, .green = 0.763370, .blue = 0.693284 },
+	{ .red = 0.999023, .green = 0.771673, .blue = 0.736508 },
+	{ .red = 0.999756, .green = 0.780220, .blue = 0.775580 },
+	{ .red = 0.998535, .green = 0.789011, .blue = 0.810012 },
+	{ .red = 0.998535, .green = 0.796093, .blue = 0.840049 },
+	{ .red = 0.998535, .green = 0.801221, .blue = 0.865690 },
+	{ .red = 0.999023, .green = 0.803419, .blue = 0.888645 },
+	{ .red = 0.998779, .green = 0.803175, .blue = 0.909646 },
+	{ .red = 0.999512, .green = 0.799756, .blue = 0.930647 },
+	{ .red = 0.999512, .green = 0.794872, .blue = 0.952869 },
+	{ .red = 0.998779, .green = 0.783394, .blue = 0.972161 },
+	{ .red = 0.993407, .green = 0.556288, .blue = 0.026618 },
+	{ .red = 0.999267, .green = 0.567277, .blue = 0.100855 },
+	{ .red = 0.999023, .green = 0.595360, .blue = 0.209768 },
+	{ .red = 0.999023, .green = 0.638584, .blue = 0.330891 },
+	{ .red = 0.999267, .green = 0.689133, .blue = 0.458608 },
+	{ .red = 0.998535, .green = 0.740659, .blue = 0.582662 },
+	{ .red = 0.998535, .green = 0.791697, .blue = 0.695238 },
+	{ .red = 0.998535, .green = 0.819780, .blue = 0.764591 },
+	{ .red = 0.998535, .green = 0.827595, .blue = 0.801709 },
+	{ .red = 0.998291, .green = 0.835653, .blue = 0.834676 },
+	{ .red = 0.999512, .green = 0.843223, .blue = 0.863004 },
+	{ .red = 0.999023, .green = 0.849084, .blue = 0.887179 },
+	{ .red = 0.999512, .green = 0.852503, .blue = 0.907937 },
+	{ .red = 0.999023, .green = 0.852991, .blue = 0.926007 },
+	{ .red = 0.999023, .green = 0.850549, .blue = 0.943346 },
+	{ .red = 0.998535, .green = 0.845910, .blue = 0.961416 },
+	{ .red = 0.999023, .green = 0.834188, .blue = 0.977778 },
+	{ .red = 0.986813, .green = 0.614652, .blue = 0.041514 },
+	{ .red = 0.999023, .green = 0.626618, .blue = 0.098657 },
+	{ .red = 0.998535, .green = 0.646886, .blue = 0.202930 },
+	{ .red = 0.999267, .green = 0.679365, .blue = 0.315995 },
+	{ .red = 0.998779, .green = 0.717949, .blue = 0.435653 },
+	{ .red = 0.998535, .green = 0.758486, .blue = 0.553358 },
+	{ .red = 0.999756, .green = 0.798291, .blue = 0.660317 },
+	{ .red = 0.998535, .green = 0.837851, .blue = 0.755800 },
+	{ .red = 0.999267, .green = 0.864469, .blue = 0.819536 },
+	{ .red = 0.999512, .green = 0.871551, .blue = 0.851526 },
+	{ .red = 0.999023, .green = 0.878877, .blue = 0.879609 },
+	{ .red = 0.998779, .green = 0.885470, .blue = 0.903297 },
+	{ .red = 0.998535, .green = 0.890110, .blue = 0.922833 },
+	{ .red = 0.999267, .green = 0.891819, .blue = 0.939438 },
+	{ .red = 0.999512, .green = 0.890110, .blue = 0.954579 },
+	{ .red = 0.999023, .green = 0.885958, .blue = 0.969719 },
+	{ .red = 0.998535, .green = 0.874969, .blue = 0.982906 },
+	{ .red = 0.994628, .green = 0.680342, .blue = 0.032967 },
+	{ .red = 0.999023, .green = 0.686935, .blue = 0.095971 },
+	{ .red = 0.999267, .green = 0.701099, .blue = 0.195116 },
+	{ .red = 0.998779, .green = 0.723810, .blue = 0.301343 },
+	{ .red = 0.999267, .green = 0.752381, .blue = 0.412210 },
+	{ .red = 0.999512, .green = 0.782662, .blue = 0.522589 },
+	{ .red = 0.998535, .green = 0.813187, .blue = 0.627595 },
+	{ .red = 0.998535, .green = 0.843223, .blue = 0.720635 },
+	{ .red = 0.998779, .green = 0.873260, .blue = 0.800488 },
+	{ .red = 0.998779, .green = 0.900366, .blue = 0.863248 },
+	{ .red = 0.999267, .green = 0.905983, .blue = 0.890110 },
+	{ .red = 0.999756, .green = 0.912576, .blue = 0.914042 },
+	{ .red = 0.998535, .green = 0.918437, .blue = 0.933822 },
+	{ .red = 0.999512, .green = 0.921368, .blue = 0.949695 },
+	{ .red = 0.999267, .green = 0.921368, .blue = 0.963126 },
+	{ .red = 0.999512, .green = 0.917705, .blue = 0.976313 },
+	{ .red = 0.999023, .green = 0.907692, .blue = 0.987546 },
+	{ .red = 0.990965, .green = 0.740415, .blue = 0.048840 },
+	{ .red = 0.998779, .green = 0.747497, .blue = 0.093773 },
+	{ .red = 0.998779, .green = 0.757021, .blue = 0.187546 },
+	{ .red = 0.999512, .green = 0.772650, .blue = 0.286203 },
+	{ .red = 0.998291, .green = 0.791453, .blue = 0.389255 },
+	{ .red = 0.998779, .green = 0.812698, .blue = 0.492308 },
+	{ .red = 0.998291, .green = 0.834676, .blue = 0.592186 },
+	{ .red = 0.999023, .green = 0.856899, .blue = 0.683516 },
+	{ .red = 0.998291, .green = 0.878877, .blue = 0.765079 },
+	{ .red = 0.999756, .green = 0.901343, .blue = 0.832967 },
+	{ .red = 0.999512, .green = 0.924298, .blue = 0.890842 },
+	{ .red = 0.999267, .green = 0.933089, .blue = 0.919658 },
+	{ .red = 0.999756, .green = 0.938950, .blue = 0.940415 },
+	{ .red = 0.998779, .green = 0.943834, .blue = 0.957021 },
+	{ .red = 0.999023, .green = 0.945299, .blue = 0.969719 },
+	{ .red = 0.999023, .green = 0.943101, .blue = 0.980952 },
+	{ .red = 0.999267, .green = 0.934066, .blue = 0.991453 },
+	{ .red = 0.992918, .green = 0.804151, .blue = 0.052015 },
+	{ .red = 0.998046, .green = 0.809035, .blue = 0.091819 },
+	{ .red = 0.999756, .green = 0.815629, .blue = 0.178266 },
+	{ .red = 0.999267, .green = 0.824664, .blue = 0.271062 },
+	{ .red = 0.999756, .green = 0.836874, .blue = 0.365812 },
+	{ .red = 0.999267, .green = 0.849817, .blue = 0.461538 },
+	{ .red = 0.999512, .green = 0.863980, .blue = 0.554823 },
+	{ .red = 0.998535, .green = 0.878144, .blue = 0.644200 },
+	{ .red = 0.998779, .green = 0.893040, .blue = 0.725275 },
+	{ .red = 0.998291, .green = 0.908425, .blue = 0.797558 },
+	{ .red = 0.999023, .green = 0.924542, .blue = 0.858364 },
+	{ .red = 0.998291, .green = 0.942125, .blue = 0.909890 },
+	{ .red = 0.998779, .green = 0.954579, .blue = 0.943101 },
+	{ .red = 0.998779, .green = 0.959707, .blue = 0.960928 },
+	{ .red = 0.998535, .green = 0.963614, .blue = 0.974603 },
+	{ .red = 0.998779, .green = 0.963126, .blue = 0.984615 },
+	{ .red = 0.998779, .green = 0.955556, .blue = 0.993651 },
+	{ .red = 0.997314, .green = 0.870085, .blue = 0.042491 },
+	{ .red = 0.998291, .green = 0.871551, .blue = 0.088889 },
+	{ .red = 0.999267, .green = 0.875214, .blue = 0.170208 },
+	{ .red = 0.999267, .green = 0.880098, .blue = 0.255922 },
+	{ .red = 0.999023, .green = 0.886203, .blue = 0.343590 },
+	{ .red = 0.999267, .green = 0.893284, .blue = 0.431258 },
+	{ .red = 0.999267, .green = 0.900855, .blue = 0.517949 },
+	{ .red = 0.999267, .green = 0.908669, .blue = 0.601709 },
+	{ .red = 0.999267, .green = 0.916728, .blue = 0.680586 },
+	{ .red = 0.999267, .green = 0.925275, .blue = 0.753358 },
+	{ .red = 0.998535, .green = 0.934554, .blue = 0.819292 },
+	{ .red = 0.998779, .green = 0.945055, .blue = 0.875458 },
+	{ .red = 0.999756, .green = 0.957265, .blue = 0.922344 },
+	{ .red = 0.999023, .green = 0.971673, .blue = 0.960928 },
+	{ .red = 0.999023, .green = 0.976068, .blue = 0.977045 },
+	{ .red = 0.999023, .green = 0.978510, .blue = 0.988034 },
+	{ .red = 0.999023, .green = 0.973138, .blue = 0.996093 },
+	{ .red = 0.994383, .green = 0.931624, .blue = 0.074725 },
+	{ .red = 0.998779, .green = 0.935043, .blue = 0.086447 },
+	{ .red = 0.999756, .green = 0.936996, .blue = 0.160195 },
+	{ .red = 0.998535, .green = 0.937973, .blue = 0.242491 },
+	{ .red = 0.999267, .green = 0.940659, .blue = 0.320635 },
+	{ .red = 0.999023, .green = 0.943346, .blue = 0.401465 },
+	{ .red = 0.999267, .green = 0.946276, .blue = 0.480342 },
+	{ .red = 0.999267, .green = 0.948962, .blue = 0.557509 },
+	{ .red = 0.999023, .green = 0.951404, .blue = 0.632723 },
+	{ .red = 0.999023, .green = 0.954335, .blue = 0.703297 },
+	{ .red = 0.999512, .green = 0.957753, .blue = 0.768742 },
+	{ .red = 0.998535, .green = 0.960928, .blue = 0.830281 },
+	{ .red = 0.999512, .green = 0.966300, .blue = 0.883028 },
+	{ .red = 0.998779, .green = 0.972405, .blue = 0.930403 },
+	{ .red = 0.999267, .green = 0.981441, .blue = 0.968010 },
+	{ .red = 1.000000, .green = 0.989011, .blue = 0.989744 },
+	{ .red = 0.999756, .green = 0.987546, .blue = 0.998046 },
+	{ .red = 0.989988, .green = 0.991209, .blue = 0.092796 },
+	{ .red = 0.991453, .green = 0.992430, .blue = 0.106471 },
+	{ .red = 0.992674, .green = 0.993651, .blue = 0.164591 },
+	{ .red = 0.993407, .green = 0.994383, .blue = 0.235165 },
+	{ .red = 0.994383, .green = 0.995849, .blue = 0.306471 },
+	{ .red = 0.998046, .green = 0.998779, .blue = 0.371429 },
+	{ .red = 0.993895, .green = 0.995360, .blue = 0.453480 },
+	{ .red = 0.996337, .green = 0.997070, .blue = 0.517216 },
+	{ .red = 0.998779, .green = 0.998535, .blue = 0.578999 },
+	{ .red = 0.997070, .green = 0.996825, .blue = 0.648352 },
+	{ .red = 0.999023, .green = 0.997802, .blue = 0.706227 },
+	{ .red = 0.999023, .green = 0.997314, .blue = 0.765812 },
+	{ .red = 0.998535, .green = 0.996337, .blue = 0.822955 },
+	{ .red = 0.998291, .green = 0.996093, .blue = 0.875214 },
+	{ .red = 0.998535, .green = 0.996337, .blue = 0.922589 },
+	{ .red = 0.998779, .green = 0.997070, .blue = 0.965568 },
+	{ .red = 1.000000, .green = 0.999756, .blue = 1.000000 },
+} };
+
+#endif
\ No newline at end of file
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 45d3252eb178..d221adaa046b 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -698,6 +698,8 @@ const char * const igt_colorop_prop_names[IGT_NUM_COLOROP_PROPS] = {
 	[IGT_COLOROP_SIZE] = "SIZE",
 	[IGT_COLOROP_DATA] = "DATA",
 	[IGT_COLOROP_MULTIPLIER] = "MULTIPLIER",
+	[IGT_COLOROP_3DLUT_MODES] = "3DLUT_MODES",
+	[IGT_COLOROP_3DLUT_MODE_INDEX] = "3DLUT_MODE_INDEX",
 	[IGT_COLOROP_NEXT] = "NEXT",
 };
 
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index ced45124f060..b964e2e02333 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -356,6 +356,8 @@ enum igt_atomic_colorop_properties {
 	IGT_COLOROP_SIZE,
 	IGT_COLOROP_DATA,
 	IGT_COLOROP_MULTIPLIER,
+	IGT_COLOROP_3DLUT_MODES,
+	IGT_COLOROP_3DLUT_MODE_INDEX,
 	IGT_COLOROP_NEXT,
 	IGT_NUM_COLOROP_PROPS
 };
diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
index 90348a34595b..23224a54a800 100644
--- a/tests/kms_colorop.c
+++ b/tests/kms_colorop.c
@@ -71,6 +71,8 @@
  * @ctm_3x4_bt709_dec_enc:		BT709 decoding matrix, followed by encoding matrix
  * @multiply_125:			Multiplier by 125
  * @multiply_inv_125:			Multiplier by inverse of 125
+ * @3dlut_17_12_rgb:			3D LUT with length 17, color depth 12, and traversal order = DRM_COLOROP_TRAVERSAL_RGB
+ * @3dlut_17_12_bgr:			3D LUT with length 17, color depth 12, and traversal order = DRM_COLOROP_TRAVERSAL_BGR
  *
  */
 
@@ -241,6 +243,7 @@ static bool can_use_colorop(igt_display_t *display, igt_colorop_t *colorop, kms_
 	case KMS_COLOROP_MULTIPLIER:
 		return (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_MULTIPLIER);
 	case KMS_COLOROP_LUT3D:
+		return (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_3D_LUT);
 	default:
 		return false;
 	}
@@ -329,16 +332,48 @@ static void fill_custom_1dlut(igt_display_t *display, kms_colorop_t *colorop)
 	}
 }
 
+static void configure_3dlut(igt_display_t *display, kms_colorop_t *colorop,
+				  struct drm_mode_3dlut_mode *modes,
+				  uint64_t num_mode) {
+	uint64_t lut_size = 0;
+	uint64_t i;
+	igt_3dlut_norm_t *igt_3dlut;
+
+	/* Convert 3DLUT floating points to u16 required by colorop API */
+	lut_size = colorop->lut3d_mode.lut_size * colorop->lut3d_mode.lut_size * colorop->lut3d_mode.lut_size;
+	igt_3dlut = (igt_3dlut_norm_t *) malloc(sizeof(struct drm_color_lut) * lut_size);
+	for (i = 0; i < lut_size; i++) {
+		struct igt_color_lut_float *lut_f = &colorop->lut3d->lut[i];
+		igt_3dlut->lut[i].red = round (lut_f->red * 0xFFFF);
+		igt_3dlut->lut[i].green = round (lut_f->green * 0xFFFF);
+		igt_3dlut->lut[i].blue = round (lut_f->blue * 0xFFFF);
+	}
+
+	/* find the exact lut mode supported by a kms_colorop_3dlut_* test */
+	for (i = 0; i < num_mode; i++)
+		if (!memcmp(&colorop->lut3d_mode, &modes[i], sizeof(struct drm_mode_3dlut_mode)))
+			break;
+
+	igt_skip_on_f(i == num_mode, "no matching 3dlut mode\n");
+	igt_colorop_set_prop_value(colorop->colorop, IGT_COLOROP_3DLUT_MODE_INDEX, i);
+
+	lut_size = modes[i].lut_stride[0] * modes[i].lut_stride[1] * modes[i].lut_stride[2];
+	igt_colorop_set_3dlut(display, colorop->colorop, igt_3dlut, lut_size * sizeof(struct drm_color_lut));
+	free(igt_3dlut);
+}
+
 static void set_colorop(igt_display_t *display,
 			kms_colorop_t *colorop)
 {
+	drmModePropertyBlobPtr blob = NULL;
+	struct drm_mode_3dlut_mode *modes;
 	uint64_t lut_size = 0;
 	uint64_t mult = 1;
+	uint64_t blob_id;
 
 	igt_assert(colorop->colorop);
 	igt_colorop_set_prop_value(colorop->colorop, IGT_COLOROP_BYPASS, 0);
 
-	/* TODO set to desired value from kms_colorop_t */
 	switch (colorop->type) {
 	case KMS_COLOROP_ENUMERATED_LUT1D:
 		igt_colorop_set_prop_enum(colorop->colorop, IGT_COLOROP_CURVE_1D_TYPE, kms_colorop_lut1d_tf_names[colorop->enumerated_lut1d_info.tf]);
@@ -356,6 +391,13 @@ static void set_colorop(igt_display_t *display,
 		igt_colorop_set_prop_value(colorop->colorop, IGT_COLOROP_MULTIPLIER, mult);
 		break;
 	case KMS_COLOROP_LUT3D:
+		blob_id = igt_colorop_get_prop(display, colorop->colorop, IGT_COLOROP_3DLUT_MODES);
+		igt_assert(blob_id);
+		blob = drmModeGetPropertyBlob(display->drm_fd, blob_id);
+		igt_assert(blob);
+		modes = (struct drm_mode_3dlut_mode *) blob->data;
+		configure_3dlut(display, colorop, modes, blob->length / sizeof(struct drm_mode_3dlut_mode));
+		break;
 	default:
 		igt_fail(IGT_EXIT_FAILURE);
 	}
@@ -557,6 +599,8 @@ igt_main
 		{ { &kms_colorop_ctm_3x4_bt709_dec, &kms_colorop_ctm_3x4_bt709_enc, NULL }, "ctm_3x4_bt709_dec_enc" },
 		{ { &kms_colorop_multiply_125, NULL }, "multiply_125" },
 		{ { &kms_colorop_multiply_inv_125, NULL }, "multiply_inv_125" },
+		{ { &kms_colorop_3dlut_17_12_rgb, NULL }, "3dlut_17_12_rgb" },
+		{ { &kms_colorop_3dlut_17_12_bgr, NULL }, "3dlut_17_12_bgr" },
 	};
 
 	struct {
diff --git a/tests/kms_colorop.h b/tests/kms_colorop.h
index 1def86bc3380..f62c6d0797ed 100644
--- a/tests/kms_colorop.h
+++ b/tests/kms_colorop.h
@@ -73,10 +73,13 @@ typedef struct kms_colorop {
 	union {
 		kms_colorop_enumerated_lut1d_info_t enumerated_lut1d_info;
 		igt_1dlut_t *lut1d;
+		igt_3dlut_t *lut3d;
 		const igt_matrix_3x4_t *matrix_3x4;
 		double multiplier;
 	};
 
+	struct drm_mode_3dlut_mode lut3d_mode;
+
 	const char *name;
 
 	igt_pixel_transform transform;
@@ -239,4 +242,34 @@ kms_colorop_t kms_colorop_multiply_inv_125 = {
 	.transform = &igt_color_multiply_inv_125
 };
 
+kms_colorop_t kms_colorop_3dlut_17_12_rgb = {
+	.type =	KMS_COLOROP_LUT3D,
+	.lut3d = &igt_3dlut_17_rgb,
+	.lut3d_mode = {
+		.lut_size = 17,
+		.lut_stride = {17, 17, 17},
+		.interpolation = DRM_COLOROP_TETRAHEDRAL,
+		.color_depth = 12,
+		.color_format = DRM_FORMAT_XRGB16161616,
+		.traversal_order = DRM_COLOROP_TRAVERSAL_RGB,
+	},
+	.name = "3dlut with traversal order DRM_COLOROP_TRAVERSAL_RGB",
+	.transform = &igt_color_3dlut_17_12_rgb,
+};
+
+kms_colorop_t kms_colorop_3dlut_17_12_bgr = {
+	.type =	KMS_COLOROP_LUT3D,
+	.lut3d = &igt_3dlut_17_bgr,
+	.lut3d_mode = {
+		.lut_size = 17,
+		.lut_stride = {17, 17, 17},
+		.interpolation = DRM_COLOROP_TETRAHEDRAL,
+		.color_depth = 12,
+		.color_format = DRM_FORMAT_XRGB16161616,
+		.traversal_order = DRM_COLOROP_TRAVERSAL_BGR,
+	},
+	.name = "3dlut with traversal order DRM_COLOROP_TRAVERSAL_BGR",
+	.transform = &igt_color_3dlut_17_12_bgr,
+};
+
 #endif /* __KMS_COLOROP_H__ */
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 36/37] drm-uapi: Update kernel doc for drm_colorop_type
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (34 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 35/37] tests/kms_colorop: Add 3D LUT subtests Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 20:58 ` [PATCH v5 37/37] drm-uapi: Sync up definition with kernel colorop implementation Harry Wentland
                   ` (3 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Alex Hung

From: Alex Hung <alex.hung@amd.com>

Sync up with kernel documents.

Signed-off-by: Alex Hung <alex.hung@amd.com>
---
 include/drm-uapi/drm_mode.h | 44 +++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/include/drm-uapi/drm_mode.h b/include/drm-uapi/drm_mode.h
index 26d59cf3185a..db4a0848b0b4 100644
--- a/include/drm-uapi/drm_mode.h
+++ b/include/drm-uapi/drm_mode.h
@@ -874,11 +874,55 @@ struct drm_color_lut {
 	__u16 reserved;
 };
 
+/**
+ * enum drm_colorop_type - Type of color operation
+ *
+ *
+ * drm_colorops can be of many different types. Each type behaves differently
+ * and defines a different set of properties. This enum defines all types and
+ * gives a high-level description.
+ */
 enum drm_colorop_type {
+	/**
+	 * @DRM_COLOROP_1D_CURVE:
+	 *
+	 * A 1D curve that is being applied to all color channels. The
+	 * curve is specified via tha CURVE_1D_TYPE colorop property.
+	 */
 	DRM_COLOROP_1D_CURVE,
+
+	/**
+	 * @DRM_COLOROP_1D_LUT:
+	 *
+	 * A simple 1D LUT of uniformly spaced &drm_color_lut entries,
+	 * packed into a blob via the DATA property. The driver's expected
+	 * LUT size is advertised via the SIZE property.
+	 */
 	DRM_COLOROP_1D_LUT,
+
+	/**
+	 * @DRM_COLOROP_CTM_3X4:
+	 *
+	 * A 3x4 matrix. Its values are specified via the
+	 * &drm_color_ctm_3x4 struct provided via the DATA property.
+	 */
 	DRM_COLOROP_CTM_3X4,
+
+	/**
+	 * @DRM_COLOROP_MULTIPLIER:
+	 *
+	 * A simple multiplier, applied to all color values. The
+	 * multiplier is specified as a S31.32 via the MULTIPLIER
+	 * property.
+	 */
 	DRM_COLOROP_MULTIPLIER,
+	/**
+	 * @DRM_COLOROP_3D_LUT:
+	 *
+	 * A 3D LUT of &drm_color_lut entries,
+	 * packed into a blob via the DATA property. The driver's expected
+	 * LUT size is advertised via the SIZE property.
+	 */
 	DRM_COLOROP_3D_LUT,
 };
 
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 37/37] drm-uapi: Sync up definition with kernel colorop implementation
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (35 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 36/37] drm-uapi: Update kernel doc for drm_colorop_type Harry Wentland
@ 2024-08-19 20:58 ` Harry Wentland
  2024-08-19 23:30 ` ✓ CI.xeBAT: success for IGT tests for the KMS Color Pipeline API (rev6) Patchwork
                   ` (2 subsequent siblings)
  39 siblings, 0 replies; 41+ messages in thread
From: Harry Wentland @ 2024-08-19 20:58 UTC (permalink / raw)
  To: igt-dev; +Cc: Alex Hung

From: Alex Hung <alex.hung@amd.com>

Add drm_colorop_lut1d_interpolation_type to IGT.

Signed-off-by: Alex Hung <alex.hung@amd.com>
---
 include/drm-uapi/drm_mode.h | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/include/drm-uapi/drm_mode.h b/include/drm-uapi/drm_mode.h
index db4a0848b0b4..210b273c9beb 100644
--- a/include/drm-uapi/drm_mode.h
+++ b/include/drm-uapi/drm_mode.h
@@ -975,6 +975,19 @@ struct drm_mode_3dlut_mode {
 	__u16 traversal_order;
 };
 
+/**
+ * enum drm_colorop_lut1d_interpolation_type - type of interpolation for 1D LUTs
+ */
+enum drm_colorop_lut1d_interpolation_type {
+	/**
+	 * @DRM_COLOROP_LUT1D_INTERPOLATION_LINEAR:
+	 *
+	 * Linear interpolation. Values between points of the LUT will be
+	 * linearly interpolated.
+	 */
+	DRM_COLOROP_LUT1D_INTERPOLATION_LINEAR,
+};
+
 /**
  * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.
  *
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* ✓ CI.xeBAT: success for IGT tests for the KMS Color Pipeline API (rev6)
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (36 preceding siblings ...)
  2024-08-19 20:58 ` [PATCH v5 37/37] drm-uapi: Sync up definition with kernel colorop implementation Harry Wentland
@ 2024-08-19 23:30 ` Patchwork
  2024-08-19 23:46 ` ✗ Fi.CI.BAT: failure " Patchwork
  2024-08-20  7:49 ` ✗ CI.xeFULL: " Patchwork
  39 siblings, 0 replies; 41+ messages in thread
From: Patchwork @ 2024-08-19 23:30 UTC (permalink / raw)
  To: Harry Wentland; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 866 bytes --]

== Series Details ==

Series: IGT tests for the KMS Color Pipeline API (rev6)
URL   : https://patchwork.freedesktop.org/series/123448/
State : success

== Summary ==

CI Bug Log - changes from XEIGT_7978_BAT -> XEIGTPW_11599_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (9 -> 9)
------------------------------

  No changes in participating hosts


Changes
-------

  No changes found


Build changes
-------------

  * IGT: IGT_7978 -> IGTPW_11599

  IGTPW_11599: 11599
  IGT_7978: 4083a9d8abc80c8a905ffdc20bc76383b1e07e79 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-1798-4d24271792fac837e728f7bb6237a94ee46cc76e: 4d24271792fac837e728f7bb6237a94ee46cc76e

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/index.html

[-- Attachment #2: Type: text/html, Size: 1411 bytes --]

^ permalink raw reply	[flat|nested] 41+ messages in thread

* ✗ Fi.CI.BAT: failure for IGT tests for the KMS Color Pipeline API (rev6)
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (37 preceding siblings ...)
  2024-08-19 23:30 ` ✓ CI.xeBAT: success for IGT tests for the KMS Color Pipeline API (rev6) Patchwork
@ 2024-08-19 23:46 ` Patchwork
  2024-08-20  7:49 ` ✗ CI.xeFULL: " Patchwork
  39 siblings, 0 replies; 41+ messages in thread
From: Patchwork @ 2024-08-19 23:46 UTC (permalink / raw)
  To: Harry Wentland; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 5388 bytes --]

== Series Details ==

Series: IGT tests for the KMS Color Pipeline API (rev6)
URL   : https://patchwork.freedesktop.org/series/123448/
State : failure

== Summary ==

CI Bug Log - changes from IGT_7978 -> IGTPW_11599
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with IGTPW_11599 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_11599, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_11599/index.html

Participating hosts (41 -> 39)
------------------------------

  Missing    (2): bat-kbl-2 fi-snb-2520m 

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in IGTPW_11599:

### IGT changes ###

#### Possible regressions ####

  * igt@i915_selftest@live@client:
    - bat-arlh-2:         [PASS][1] -> [INCOMPLETE][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7978/bat-arlh-2/igt@i915_selftest@live@client.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_11599/bat-arlh-2/igt@i915_selftest@live@client.html

  
Known issues
------------

  Here are the changes found in IGTPW_11599 that come from known issues:

### IGT changes ###

#### Possible fixes ####

  * igt@i915_selftest@live@hangcheck:
    - bat-arls-1:         [DMESG-WARN][3] ([i915#11349] / [i915#11378]) -> [PASS][4]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7978/bat-arls-1/igt@i915_selftest@live@hangcheck.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_11599/bat-arls-1/igt@i915_selftest@live@hangcheck.html

  
#### Warnings ####

  * igt@kms_psr@psr-cursor-plane-move:
    - bat-mtlp-6:         [SKIP][5] ([i915#1072] / [i915#9673] / [i915#9732] / [i915#9792]) -> [SKIP][6] ([i915#1072] / [i915#9732] / [i915#9792]) +3 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7978/bat-mtlp-6/igt@kms_psr@psr-cursor-plane-move.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_11599/bat-mtlp-6/igt@kms_psr@psr-cursor-plane-move.html

  * igt@kms_psr@psr-sprite-plane-onoff:
    - bat-adlp-9:         [SKIP][7] ([i915#1072] / [i915#9673] / [i915#9732]) -> [SKIP][8] ([i915#1072] / [i915#9732]) +3 other tests skip
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7978/bat-adlp-9/igt@kms_psr@psr-sprite-plane-onoff.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_11599/bat-adlp-9/igt@kms_psr@psr-sprite-plane-onoff.html
    - bat-rplp-1:         [SKIP][9] ([i915#1072] / [i915#9673] / [i915#9732]) -> [SKIP][10] ([i915#1072] / [i915#9732]) +3 other tests skip
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7978/bat-rplp-1/igt@kms_psr@psr-sprite-plane-onoff.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_11599/bat-rplp-1/igt@kms_psr@psr-sprite-plane-onoff.html
    - bat-dg2-9:          [SKIP][11] ([i915#1072] / [i915#9673] / [i915#9732]) -> [SKIP][12] ([i915#1072] / [i915#9732]) +3 other tests skip
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7978/bat-dg2-9/igt@kms_psr@psr-sprite-plane-onoff.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_11599/bat-dg2-9/igt@kms_psr@psr-sprite-plane-onoff.html
    - bat-adlp-11:        [SKIP][13] ([i915#1072] / [i915#9673] / [i915#9732]) -> [SKIP][14] ([i915#1072] / [i915#9732]) +3 other tests skip
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7978/bat-adlp-11/igt@kms_psr@psr-sprite-plane-onoff.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_11599/bat-adlp-11/igt@kms_psr@psr-sprite-plane-onoff.html
    - bat-dg2-8:          [SKIP][15] ([i915#1072] / [i915#9673] / [i915#9732]) -> [SKIP][16] ([i915#1072] / [i915#9732]) +3 other tests skip
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7978/bat-dg2-8/igt@kms_psr@psr-sprite-plane-onoff.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_11599/bat-dg2-8/igt@kms_psr@psr-sprite-plane-onoff.html
    - bat-adlm-1:         [SKIP][17] ([i915#1072] / [i915#9673] / [i915#9732]) -> [SKIP][18] ([i915#1072] / [i915#9732]) +3 other tests skip
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7978/bat-adlm-1/igt@kms_psr@psr-sprite-plane-onoff.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_11599/bat-adlm-1/igt@kms_psr@psr-sprite-plane-onoff.html

  
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#11349]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11349
  [i915#11378]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11378
  [i915#9673]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9673
  [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
  [i915#9792]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9792


Build changes
-------------

  * CI: CI-20190529 -> None
  * IGT: IGT_7978 -> IGTPW_11599

  CI-20190529: 20190529
  CI_DRM_15263: 4d24271792fac837e728f7bb6237a94ee46cc76e @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_11599: 11599
  IGT_7978: 4083a9d8abc80c8a905ffdc20bc76383b1e07e79 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_11599/index.html

[-- Attachment #2: Type: text/html, Size: 8500 bytes --]

^ permalink raw reply	[flat|nested] 41+ messages in thread

* ✗ CI.xeFULL: failure for IGT tests for the KMS Color Pipeline API (rev6)
  2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
                   ` (38 preceding siblings ...)
  2024-08-19 23:46 ` ✗ Fi.CI.BAT: failure " Patchwork
@ 2024-08-20  7:49 ` Patchwork
  39 siblings, 0 replies; 41+ messages in thread
From: Patchwork @ 2024-08-20  7:49 UTC (permalink / raw)
  To: Harry Wentland; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 69204 bytes --]

== Series Details ==

Series: IGT tests for the KMS Color Pipeline API (rev6)
URL   : https://patchwork.freedesktop.org/series/123448/
State : failure

== Summary ==

CI Bug Log - changes from XEIGT_7978_full -> XEIGTPW_11599_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with XEIGTPW_11599_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in XEIGTPW_11599_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Participating hosts (4 -> 4)
------------------------------

  No changes in participating hosts

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in XEIGTPW_11599_full:

### IGT changes ###

#### Possible regressions ####

  * igt@kms_colorop@plane-xr24-xr24-bt2020_oetf (NEW):
    - shard-lnl:          NOTRUN -> [SKIP][1] +52 other tests skip
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-8/igt@kms_colorop@plane-xr24-xr24-bt2020_oetf.html

  * igt@kms_colorop@plane-xr24-xr24-pq_eotf-pq_inv_eotf (NEW):
    - {shard-bmg}:        NOTRUN -> [SKIP][2] +55 other tests skip
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-bmg-7/igt@kms_colorop@plane-xr24-xr24-pq_eotf-pq_inv_eotf.html

  * igt@kms_colorop@plane-xr30-xr30-pq_125_eotf (NEW):
    - shard-dg2-set2:     NOTRUN -> [SKIP][3] +8 other tests skip
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_colorop@plane-xr30-xr30-pq_125_eotf.html

  * igt@kms_fb_coherency@memset-crc:
    - shard-dg2-set2:     [PASS][4] -> [CRASH][5] +1 other test crash
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-435/igt@kms_fb_coherency@memset-crc.html
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-435/igt@kms_fb_coherency@memset-crc.html

  * igt@kms_fb_coherency@memset-crc@mmap-offset-wc:
    - shard-lnl:          [PASS][6] -> [CRASH][7] +1 other test crash
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-2/igt@kms_fb_coherency@memset-crc@mmap-offset-wc.html
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-8/igt@kms_fb_coherency@memset-crc@mmap-offset-wc.html

  * igt@xe_exec_threads@threads-userptr:
    - shard-dg2-set2:     [PASS][8] -> [DMESG-WARN][9]
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-433/igt@xe_exec_threads@threads-userptr.html
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@xe_exec_threads@threads-userptr.html

  * igt@xe_pm@d3hot-mmap-vram:
    - shard-dg2-set2:     [PASS][10] -> [FAIL][11]
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-463/igt@xe_pm@d3hot-mmap-vram.html
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@xe_pm@d3hot-mmap-vram.html

  
#### Suppressed ####

  The following results come from untrusted machines, tests, or statuses.
  They do not affect the overall result.

  * igt@kms_fb_coherency@memset-crc:
    - {shard-bmg}:        [PASS][12] -> [CRASH][13] +1 other test crash
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-bmg-8/igt@kms_fb_coherency@memset-crc.html
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-bmg-3/igt@kms_fb_coherency@memset-crc.html

  * igt@kms_flip@2x-flip-vs-suspend-interruptible@ad-dp2-hdmi-a3:
    - {shard-bmg}:        [PASS][14] -> [INCOMPLETE][15]
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-bmg-6/igt@kms_flip@2x-flip-vs-suspend-interruptible@ad-dp2-hdmi-a3.html
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-bmg-6/igt@kms_flip@2x-flip-vs-suspend-interruptible@ad-dp2-hdmi-a3.html

  
New tests
---------

  New tests have been introduced between XEIGT_7978_full and XEIGTPW_11599_full:

### New IGT tests (96) ###

  * igt@kms_colorop@plane-xr24-xr24-3dlut_17_12_bgr:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-3dlut_17_12_rgb:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-bt2020_inv_oetf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-bt2020_inv_oetf-bt2020_oetf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-bt2020_oetf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-bypass:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-ctm_3x4_50_desat:
    - Statuses : 2 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-ctm_3x4_bt709_dec:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-ctm_3x4_bt709_dec_enc:
    - Statuses : 2 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-ctm_3x4_bt709_enc:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-ctm_3x4_bt709_enc_dec:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-ctm_3x4_overdrive:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-ctm_3x4_oversaturate:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-multiply_125:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-multiply_inv_125:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-pq_125_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-pq_125_eotf-pq_125_inv_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-pq_125_eotf-pq_125_inv_eotf-pq_125_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-pq_125_inv_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-pq_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-pq_eotf-pq_inv_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-pq_inv_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-srgb_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-srgb_eotf-srgb_inv_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-srgb_eotf-srgb_inv_eotf-srgb_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-srgb_inv_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-srgb_inv_eotf_lut:
    - Statuses : 2 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr24-xr24-srgb_inv_eotf_lut-srgb_eotf_lut:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-3dlut_17_12_bgr:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-3dlut_17_12_rgb:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-bt2020_inv_oetf:
    - Statuses : 2 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-bt2020_inv_oetf-bt2020_oetf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-bt2020_oetf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-bypass:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-ctm_3x4_50_desat:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-ctm_3x4_bt709_dec:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-ctm_3x4_bt709_dec_enc:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-ctm_3x4_bt709_enc:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-ctm_3x4_bt709_enc_dec:
    - Statuses : 2 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-ctm_3x4_overdrive:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-ctm_3x4_oversaturate:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-multiply_125:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-multiply_inv_125:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-pq_125_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-pq_125_eotf-pq_125_inv_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-pq_125_eotf-pq_125_inv_eotf-pq_125_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-pq_125_inv_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-pq_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-pq_eotf-pq_inv_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-pq_inv_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-srgb_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-srgb_eotf-srgb_inv_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-srgb_eotf-srgb_inv_eotf-srgb_eotf:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-srgb_inv_eotf:
    - Statuses : 2 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-srgb_inv_eotf_lut:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_colorop@plane-xr30-xr30-srgb_inv_eotf_lut-srgb_eotf_lut:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_properties@colorop-properties-atomic:
    - Statuses : 3 pass(s)
    - Exec time: [1.26, 2.91] s

  * igt@kms_properties@colorop-properties-atomic@pipe-a-dp-2:
    - Statuses : 1 pass(s)
    - Exec time: [0.16] s

  * igt@kms_properties@colorop-properties-atomic@pipe-a-dp-4:
    - Statuses : 1 pass(s)
    - Exec time: [0.18] s

  * igt@kms_properties@colorop-properties-atomic@pipe-a-edp-1:
    - Statuses : 1 pass(s)
    - Exec time: [0.41] s

  * igt@kms_properties@colorop-properties-atomic@pipe-a-hdmi-a-3:
    - Statuses : 1 pass(s)
    - Exec time: [0.13] s

  * igt@kms_properties@colorop-properties-atomic@pipe-a-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.20] s

  * igt@kms_properties@colorop-properties-atomic@pipe-b-dp-2:
    - Statuses : 1 pass(s)
    - Exec time: [0.19] s

  * igt@kms_properties@colorop-properties-atomic@pipe-b-dp-4:
    - Statuses : 1 pass(s)
    - Exec time: [0.17] s

  * igt@kms_properties@colorop-properties-atomic@pipe-b-edp-1:
    - Statuses : 1 pass(s)
    - Exec time: [1.31] s

  * igt@kms_properties@colorop-properties-atomic@pipe-b-hdmi-a-3:
    - Statuses : 1 pass(s)
    - Exec time: [0.13] s

  * igt@kms_properties@colorop-properties-atomic@pipe-b-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.13] s

  * igt@kms_properties@colorop-properties-atomic@pipe-c-dp-2:
    - Statuses : 1 pass(s)
    - Exec time: [0.18] s

  * igt@kms_properties@colorop-properties-atomic@pipe-c-dp-4:
    - Statuses : 1 pass(s)
    - Exec time: [0.17] s

  * igt@kms_properties@colorop-properties-atomic@pipe-c-edp-1:
    - Statuses : 1 pass(s)
    - Exec time: [1.19] s

  * igt@kms_properties@colorop-properties-atomic@pipe-c-hdmi-a-3:
    - Statuses : 1 pass(s)
    - Exec time: [0.14] s

  * igt@kms_properties@colorop-properties-atomic@pipe-c-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.14] s

  * igt@kms_properties@colorop-properties-atomic@pipe-d-dp-2:
    - Statuses : 1 pass(s)
    - Exec time: [0.18] s

  * igt@kms_properties@colorop-properties-atomic@pipe-d-dp-4:
    - Statuses : 1 pass(s)
    - Exec time: [0.18] s

  * igt@kms_properties@colorop-properties-atomic@pipe-d-hdmi-a-3:
    - Statuses : 1 pass(s)
    - Exec time: [0.14] s

  * igt@kms_properties@colorop-properties-atomic@pipe-d-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.12] s

  * igt@kms_properties@colorop-properties-legacy:
    - Statuses : 3 pass(s)
    - Exec time: [1.35, 3.92] s

  * igt@kms_properties@colorop-properties-legacy@pipe-a-dp-2:
    - Statuses : 1 pass(s)
    - Exec time: [0.25] s

  * igt@kms_properties@colorop-properties-legacy@pipe-a-dp-4:
    - Statuses : 1 pass(s)
    - Exec time: [0.20] s

  * igt@kms_properties@colorop-properties-legacy@pipe-a-edp-1:
    - Statuses : 1 pass(s)
    - Exec time: [0.52] s

  * igt@kms_properties@colorop-properties-legacy@pipe-a-hdmi-a-3:
    - Statuses : 1 pass(s)
    - Exec time: [0.13] s

  * igt@kms_properties@colorop-properties-legacy@pipe-a-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.32] s

  * igt@kms_properties@colorop-properties-legacy@pipe-b-dp-2:
    - Statuses : 1 pass(s)
    - Exec time: [0.18] s

  * igt@kms_properties@colorop-properties-legacy@pipe-b-dp-4:
    - Statuses : 1 pass(s)
    - Exec time: [0.17] s

  * igt@kms_properties@colorop-properties-legacy@pipe-b-edp-1:
    - Statuses : 1 pass(s)
    - Exec time: [1.25] s

  * igt@kms_properties@colorop-properties-legacy@pipe-b-hdmi-a-3:
    - Statuses : 1 pass(s)
    - Exec time: [0.14] s

  * igt@kms_properties@colorop-properties-legacy@pipe-b-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.14] s

  * igt@kms_properties@colorop-properties-legacy@pipe-c-dp-2:
    - Statuses : 1 pass(s)
    - Exec time: [0.18] s

  * igt@kms_properties@colorop-properties-legacy@pipe-c-dp-4:
    - Statuses : 1 pass(s)
    - Exec time: [0.18] s

  * igt@kms_properties@colorop-properties-legacy@pipe-c-edp-1:
    - Statuses : 1 pass(s)
    - Exec time: [2.15] s

  * igt@kms_properties@colorop-properties-legacy@pipe-c-hdmi-a-3:
    - Statuses : 1 pass(s)
    - Exec time: [0.13] s

  * igt@kms_properties@colorop-properties-legacy@pipe-c-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.12] s

  * igt@kms_properties@colorop-properties-legacy@pipe-d-dp-2:
    - Statuses : 1 pass(s)
    - Exec time: [0.19] s

  * igt@kms_properties@colorop-properties-legacy@pipe-d-dp-4:
    - Statuses : 1 pass(s)
    - Exec time: [0.17] s

  * igt@kms_properties@colorop-properties-legacy@pipe-d-hdmi-a-3:
    - Statuses : 1 pass(s)
    - Exec time: [0.14] s

  * igt@kms_properties@colorop-properties-legacy@pipe-d-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.13] s

  

Known issues
------------

  Here are the changes found in XEIGTPW_11599_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-6:
    - shard-dg2-set2:     [PASS][16] -> [FAIL][17] ([Intel XE#1426]) +1 other test fail
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-463/igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-6.html
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-435/igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-6.html

  * igt@kms_big_joiner@invalid-modeset:
    - shard-lnl:          NOTRUN -> [SKIP][18] ([Intel XE#346])
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-7/igt@kms_big_joiner@invalid-modeset.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-xe2-ccs:
    - shard-dg2-set2:     NOTRUN -> [SKIP][19] ([Intel XE#1201] / [Intel XE#1252])
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-435/igt@kms_ccs@crc-primary-basic-4-tiled-xe2-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-rc-ccs-cc:
    - shard-lnl:          NOTRUN -> [SKIP][20] ([Intel XE#1399]) +1 other test skip
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-5/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-rc-ccs-cc.html

  * igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs@pipe-a-dp-4:
    - shard-dg2-set2:     NOTRUN -> [SKIP][21] ([Intel XE#1201] / [Intel XE#787]) +6 other tests skip
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs@pipe-a-dp-4.html

  * igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs@pipe-d-dp-4:
    - shard-dg2-set2:     NOTRUN -> [SKIP][22] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) +1 other test skip
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs@pipe-d-dp-4.html

  * igt@kms_chamelium_edid@hdmi-edid-read:
    - shard-dg2-set2:     NOTRUN -> [SKIP][23] ([Intel XE#1201] / [Intel XE#373])
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-435/igt@kms_chamelium_edid@hdmi-edid-read.html

  * igt@kms_colorop@plane-xr30-xr30-pq_125_inv_eotf (NEW):
    - shard-dg2-set2:     NOTRUN -> [SKIP][24] ([Intel XE#1201]) +43 other tests skip
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-463/igt@kms_colorop@plane-xr30-xr30-pq_125_inv_eotf.html

  * igt@kms_content_protection@lic-type-1:
    - shard-lnl:          NOTRUN -> [SKIP][25] ([Intel XE#599])
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-6/igt@kms_content_protection@lic-type-1.html

  * igt@kms_cursor_crc@cursor-rapid-movement-32x10:
    - shard-dg2-set2:     NOTRUN -> [SKIP][26] ([Intel XE#1201] / [Intel XE#455]) +1 other test skip
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-463/igt@kms_cursor_crc@cursor-rapid-movement-32x10.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size:
    - shard-lnl:          NOTRUN -> [SKIP][27] ([Intel XE#309])
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-5/igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size.html

  * igt@kms_cursor_legacy@flip-vs-cursor-crc-legacy:
    - shard-lnl:          [PASS][28] -> [FAIL][29] ([Intel XE#1475])
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-6/igt@kms_cursor_legacy@flip-vs-cursor-crc-legacy.html
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-7/igt@kms_cursor_legacy@flip-vs-cursor-crc-legacy.html

  * igt@kms_cursor_legacy@torture-bo@pipe-a:
    - shard-lnl:          [PASS][30] -> [DMESG-WARN][31] ([Intel XE#877]) +1 other test dmesg-warn
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-7/igt@kms_cursor_legacy@torture-bo@pipe-a.html
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-4/igt@kms_cursor_legacy@torture-bo@pipe-a.html

  * igt@kms_flip@2x-absolute-wf_vblank:
    - shard-lnl:          NOTRUN -> [SKIP][32] ([Intel XE#1421])
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-8/igt@kms_flip@2x-absolute-wf_vblank.html

  * igt@kms_flip@blocking-absolute-wf_vblank-interruptible:
    - shard-dg2-set2:     [PASS][33] -> [INCOMPLETE][34] ([Intel XE#1195] / [Intel XE#2049])
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-466/igt@kms_flip@blocking-absolute-wf_vblank-interruptible.html
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@kms_flip@blocking-absolute-wf_vblank-interruptible.html

  * igt@kms_flip@blocking-absolute-wf_vblank-interruptible@c-dp4:
    - shard-dg2-set2:     [PASS][35] -> [INCOMPLETE][36] ([Intel XE#1195])
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-466/igt@kms_flip@blocking-absolute-wf_vblank-interruptible@c-dp4.html
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@kms_flip@blocking-absolute-wf_vblank-interruptible@c-dp4.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling:
    - shard-lnl:          NOTRUN -> [SKIP][37] ([Intel XE#1401] / [Intel XE#1745])
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-1/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling@pipe-a-default-mode:
    - shard-lnl:          NOTRUN -> [SKIP][38] ([Intel XE#1401])
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-1/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling@pipe-a-default-mode.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-mmap-wc:
    - shard-dg2-set2:     NOTRUN -> [SKIP][39] ([Intel XE#1201] / [Intel XE#651])
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-wc:
    - shard-lnl:          NOTRUN -> [SKIP][40] ([Intel XE#656]) +3 other tests skip
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-7/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc:
    - shard-dg2-set2:     NOTRUN -> [SKIP][41] ([Intel XE#1201] / [Intel XE#653]) +2 other tests skip
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc.html

  * igt@kms_pipe_crc_basic@suspend-read-crc:
    - shard-dg2-set2:     [PASS][42] -> [DMESG-WARN][43] ([Intel XE#1162])
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-435/igt@kms_pipe_crc_basic@suspend-read-crc.html
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-435/igt@kms_pipe_crc_basic@suspend-read-crc.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-d-hdmi-a-6:
    - shard-dg2-set2:     [PASS][44] -> [DMESG-WARN][45] ([Intel XE#2019]) +2 other tests dmesg-warn
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-435/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-d-hdmi-a-6.html
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-435/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-d-hdmi-a-6.html

  * igt@kms_plane_scaling@intel-max-src-size:
    - shard-dg2-set2:     [PASS][46] -> [FAIL][47] ([Intel XE#361]) +1 other test fail
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-463/igt@kms_plane_scaling@intel-max-src-size.html
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@kms_plane_scaling@intel-max-src-size.html

  * igt@kms_pm_backlight@fade:
    - shard-lnl:          [PASS][48] -> [SKIP][49] ([Intel XE#870])
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-5/igt@kms_pm_backlight@fade.html
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-7/igt@kms_pm_backlight@fade.html

  * igt@kms_pm_dc@dc5-dpms:
    - shard-lnl:          [PASS][50] -> [FAIL][51] ([Intel XE#718]) +1 other test fail
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-1/igt@kms_pm_dc@dc5-dpms.html
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-8/igt@kms_pm_dc@dc5-dpms.html

  * igt@kms_psr@pr-cursor-blt:
    - shard-dg2-set2:     NOTRUN -> [SKIP][52] ([Intel XE#1201] / [Intel XE#929])
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@kms_psr@pr-cursor-blt.html

  * igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-dp-4:
    - shard-dg2-set2:     [PASS][53] -> [DMESG-WARN][54] ([Intel XE#1551]) +3 other tests dmesg-warn
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-466/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-dp-4.html
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-dp-4.html

  * igt@xe_evict@evict-beng-mixed-many-threads-small:
    - shard-dg2-set2:     [PASS][55] -> [TIMEOUT][56] ([Intel XE#1473] / [Intel XE#402])
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-435/igt@xe_evict@evict-beng-mixed-many-threads-small.html
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-435/igt@xe_evict@evict-beng-mixed-many-threads-small.html

  * igt@xe_evict@evict-beng-threads-large:
    - shard-dg2-set2:     [PASS][57] -> [INCOMPLETE][58] ([Intel XE#1195] / [Intel XE#1473])
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@xe_evict@evict-beng-threads-large.html
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-435/igt@xe_evict@evict-beng-threads-large.html

  * igt@xe_evict@evict-mixed-many-threads-small:
    - shard-dg2-set2:     [PASS][59] -> [TIMEOUT][60] ([Intel XE#1473]) +2 other tests timeout
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@xe_evict@evict-mixed-many-threads-small.html
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@xe_evict@evict-mixed-many-threads-small.html

  * igt@xe_exec_basic@multigpu-once-bindexecqueue-rebind:
    - shard-lnl:          NOTRUN -> [SKIP][61] ([Intel XE#1392])
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-1/igt@xe_exec_basic@multigpu-once-bindexecqueue-rebind.html

  * igt@xe_exec_threads@threads-bal-mixed-fd-userptr:
    - shard-dg2-set2:     [PASS][62] -> [INCOMPLETE][63] ([Intel XE#1169] / [Intel XE#1356])
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-433/igt@xe_exec_threads@threads-bal-mixed-fd-userptr.html
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@xe_exec_threads@threads-bal-mixed-fd-userptr.html

  * igt@xe_live_ktest@xe_migrate@xe_validate_ccs_kunit:
    - shard-dg2-set2:     NOTRUN -> [SKIP][64] ([Intel XE#1201] / [Intel XE#2229])
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@xe_live_ktest@xe_migrate@xe_validate_ccs_kunit.html

  * igt@xe_module_load@force-load:
    - shard-lnl:          NOTRUN -> [SKIP][65] ([Intel XE#378])
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-4/igt@xe_module_load@force-load.html

  * igt@xe_module_load@unload:
    - shard-dg2-set2:     [PASS][66] -> [DMESG-WARN][67] ([Intel XE#1551] / [Intel XE#2019])
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@xe_module_load@unload.html
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-463/igt@xe_module_load@unload.html

  * igt@xe_oa@oa-regs-whitelisted:
    - shard-lnl:          [PASS][68] -> [FAIL][69] ([Intel XE#2514])
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-6/igt@xe_oa@oa-regs-whitelisted.html
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-4/igt@xe_oa@oa-regs-whitelisted.html

  * igt@xe_oa@oa-regs-whitelisted@rcs-0:
    - shard-lnl:          NOTRUN -> [FAIL][70] ([Intel XE#2514])
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-4/igt@xe_oa@oa-regs-whitelisted@rcs-0.html

  * igt@xe_pm@s4-vm-bind-userptr:
    - shard-lnl:          [PASS][71] -> [ABORT][72] ([Intel XE#1794]) +1 other test abort
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-6/igt@xe_pm@s4-vm-bind-userptr.html
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-2/igt@xe_pm@s4-vm-bind-userptr.html

  
#### Possible fixes ####

  * igt@kms_async_flips@alternate-sync-async-flip@pipe-d-hdmi-a-3:
    - {shard-bmg}:        [DMESG-WARN][73] ([Intel XE#1033]) -> [PASS][74] +1 other test pass
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-bmg-3/igt@kms_async_flips@alternate-sync-async-flip@pipe-d-hdmi-a-3.html
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-bmg-1/igt@kms_async_flips@alternate-sync-async-flip@pipe-d-hdmi-a-3.html

  * igt@kms_atomic_transition@modeset-transition-nonblocking-fencing:
    - shard-lnl:          [FAIL][75] ([Intel XE#1701]) -> [PASS][76] +1 other test pass
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-5/igt@kms_atomic_transition@modeset-transition-nonblocking-fencing.html
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-7/igt@kms_atomic_transition@modeset-transition-nonblocking-fencing.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-lnl:          [FAIL][77] ([Intel XE#1426]) -> [PASS][78] +1 other test pass
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-6/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-3/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

  * igt@kms_atomic_transition@plane-toggle-modeset-transition:
    - {shard-bmg}:        [FAIL][79] ([Intel XE#1426]) -> [PASS][80] +1 other test pass
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-bmg-4/igt@kms_atomic_transition@plane-toggle-modeset-transition.html
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-bmg-5/igt@kms_atomic_transition@plane-toggle-modeset-transition.html

  * igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-6:
    - shard-dg2-set2:     [FAIL][81] ([Intel XE#1426]) -> [PASS][82] +1 other test pass
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-463/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-6.html
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-435/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-6.html

  * igt@kms_big_fb@4-tiled-64bpp-rotate-0:
    - shard-lnl:          [FAIL][83] ([Intel XE#1659]) -> [PASS][84]
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-1/igt@kms_big_fb@4-tiled-64bpp-rotate-0.html
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-1/igt@kms_big_fb@4-tiled-64bpp-rotate-0.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-xe2-ccs@pipe-a-dp-2:
    - {shard-bmg}:        [FAIL][85] ([Intel XE#2436]) -> [PASS][86]
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-bmg-2/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-xe2-ccs@pipe-a-dp-2.html
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-bmg-2/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-xe2-ccs@pipe-a-dp-2.html

  * igt@kms_cursor_crc@cursor-suspend:
    - {shard-bmg}:        [INCOMPLETE][87] -> [PASS][88] +3 other tests pass
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-bmg-6/igt@kms_cursor_crc@cursor-suspend.html
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-bmg-8/igt@kms_cursor_crc@cursor-suspend.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-dg2-set2:     [DMESG-WARN][89] ([Intel XE#1551]) -> [PASS][90] +1 other test pass
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-435/igt@kms_flip@flip-vs-suspend-interruptible.html
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-433/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling:
    - {shard-bmg}:        [FAIL][91] -> [PASS][92] +1 other test pass
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-bmg-7/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling.html
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-bmg-7/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling.html

  * igt@kms_frontbuffer_tracking@fbcpsr-suspend:
    - shard-lnl:          [FAIL][93] ([Intel XE#2028]) -> [PASS][94] +5 other tests pass
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-1/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html
   [94]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-5/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html

  * igt@kms_plane@plane-position-hole:
    - shard-lnl:          [DMESG-FAIL][95] ([Intel XE#324]) -> [PASS][96] +1 other test pass
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-4/igt@kms_plane@plane-position-hole.html
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-1/igt@kms_plane@plane-position-hole.html

  * igt@kms_plane@plane-position-hole@pipe-b-plane-1:
    - shard-lnl:          [DMESG-WARN][97] ([Intel XE#324]) -> [PASS][98] +3 other tests pass
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-4/igt@kms_plane@plane-position-hole@pipe-b-plane-1.html
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-1/igt@kms_plane@plane-position-hole@pipe-b-plane-1.html

  * igt@kms_pm_backlight@bad-brightness:
    - shard-lnl:          [SKIP][99] ([Intel XE#870]) -> [PASS][100]
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-3/igt@kms_pm_backlight@bad-brightness.html
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-3/igt@kms_pm_backlight@bad-brightness.html

  * igt@xe_evict@evict-beng-mixed-threads-large:
    - {shard-bmg}:        [TIMEOUT][101] ([Intel XE#1473]) -> [PASS][102] +1 other test pass
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-bmg-8/igt@xe_evict@evict-beng-mixed-threads-large.html
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-bmg-1/igt@xe_evict@evict-beng-mixed-threads-large.html

  * igt@xe_evict@evict-cm-threads-large:
    - shard-dg2-set2:     [INCOMPLETE][103] ([Intel XE#1195] / [Intel XE#1473]) -> [PASS][104]
   [103]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-435/igt@xe_evict@evict-cm-threads-large.html
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-433/igt@xe_evict@evict-cm-threads-large.html

  * igt@xe_exec_compute_mode@many-execqueues-userptr-unmap:
    - {shard-bmg}:        [DMESG-WARN][105] ([Intel XE#877]) -> [PASS][106] +2 other tests pass
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-bmg-8/igt@xe_exec_compute_mode@many-execqueues-userptr-unmap.html
   [106]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-bmg-3/igt@xe_exec_compute_mode@many-execqueues-userptr-unmap.html

  * igt@xe_exec_reset@parallel-gt-reset:
    - {shard-bmg}:        [TIMEOUT][107] ([Intel XE#2105]) -> [PASS][108]
   [107]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-bmg-1/igt@xe_exec_reset@parallel-gt-reset.html
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-bmg-8/igt@xe_exec_reset@parallel-gt-reset.html
    - shard-dg2-set2:     [INCOMPLETE][109] ([Intel XE#2105]) -> [PASS][110]
   [109]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@xe_exec_reset@parallel-gt-reset.html
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@xe_exec_reset@parallel-gt-reset.html

  * igt@xe_live_ktest@xe_migrate:
    - shard-dg2-set2:     [SKIP][111] ([Intel XE#1192] / [Intel XE#1201]) -> [PASS][112] +1 other test pass
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-463/igt@xe_live_ktest@xe_migrate.html
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@xe_live_ktest@xe_migrate.html

  * igt@xe_oa@mmio-triggered-reports:
    - {shard-bmg}:        [FAIL][113] ([Intel XE#2249]) -> [PASS][114] +1 other test pass
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-bmg-2/igt@xe_oa@mmio-triggered-reports.html
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-bmg-3/igt@xe_oa@mmio-triggered-reports.html
    - shard-lnl:          [FAIL][115] ([Intel XE#2249]) -> [PASS][116]
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-2/igt@xe_oa@mmio-triggered-reports.html
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-3/igt@xe_oa@mmio-triggered-reports.html

  * igt@xe_pm@s4-d3hot-basic-exec:
    - shard-lnl:          [ABORT][117] ([Intel XE#1358] / [Intel XE#1607]) -> [PASS][118]
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-2/igt@xe_pm@s4-d3hot-basic-exec.html
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-1/igt@xe_pm@s4-d3hot-basic-exec.html

  * igt@xe_pm@s4-vm-bind-prefetch:
    - shard-dg2-set2:     [DMESG-WARN][119] ([Intel XE#2019]) -> [PASS][120]
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-463/igt@xe_pm@s4-vm-bind-prefetch.html
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@xe_pm@s4-vm-bind-prefetch.html

  
#### Warnings ####

  * igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
    - shard-dg2-set2:     [SKIP][121] ([Intel XE#623]) -> [SKIP][122] ([Intel XE#1201] / [Intel XE#623])
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-435/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html

  * igt@kms_big_fb@4-tiled-32bpp-rotate-270:
    - shard-dg2-set2:     [SKIP][123] ([Intel XE#316]) -> [SKIP][124] ([Intel XE#1201] / [Intel XE#316])
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_big_fb@4-tiled-32bpp-rotate-270.html
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-463/igt@kms_big_fb@4-tiled-32bpp-rotate-270.html

  * igt@kms_big_fb@4-tiled-64bpp-rotate-90:
    - shard-dg2-set2:     [SKIP][125] ([Intel XE#1201] / [Intel XE#316]) -> [SKIP][126] ([Intel XE#316]) +1 other test skip
   [125]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-463/igt@kms_big_fb@4-tiled-64bpp-rotate-90.html
   [126]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_big_fb@4-tiled-64bpp-rotate-90.html

  * igt@kms_big_fb@yf-tiled-32bpp-rotate-180:
    - shard-dg2-set2:     [SKIP][127] ([Intel XE#1124]) -> [SKIP][128] ([Intel XE#1124] / [Intel XE#1201]) +10 other tests skip
   [127]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_big_fb@yf-tiled-32bpp-rotate-180.html
   [128]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@kms_big_fb@yf-tiled-32bpp-rotate-180.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
    - shard-dg2-set2:     [SKIP][129] ([Intel XE#1124] / [Intel XE#1201]) -> [SKIP][130] ([Intel XE#1124]) +10 other tests skip
   [129]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-433/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
   [130]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html

  * igt@kms_bw@connected-linear-tiling-3-displays-2560x1440p:
    - shard-dg2-set2:     [SKIP][131] ([Intel XE#2191]) -> [SKIP][132] ([Intel XE#1201] / [Intel XE#2191]) +1 other test skip
   [131]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_bw@connected-linear-tiling-3-displays-2560x1440p.html
   [132]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@kms_bw@connected-linear-tiling-3-displays-2560x1440p.html

  * igt@kms_bw@linear-tiling-2-displays-2160x1440p:
    - shard-dg2-set2:     [SKIP][133] ([Intel XE#367]) -> [SKIP][134] ([Intel XE#1201] / [Intel XE#367]) +1 other test skip
   [133]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_bw@linear-tiling-2-displays-2160x1440p.html
   [134]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@kms_bw@linear-tiling-2-displays-2160x1440p.html

  * igt@kms_bw@linear-tiling-3-displays-2160x1440p:
    - shard-dg2-set2:     [SKIP][135] ([Intel XE#1201] / [Intel XE#367]) -> [SKIP][136] ([Intel XE#367]) +1 other test skip
   [135]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-466/igt@kms_bw@linear-tiling-3-displays-2160x1440p.html
   [136]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_bw@linear-tiling-3-displays-2160x1440p.html

  * igt@kms_ccs@bad-pixel-format-yf-tiled-ccs:
    - shard-dg2-set2:     [SKIP][137] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) -> [SKIP][138] ([Intel XE#455] / [Intel XE#787]) +21 other tests skip
   [137]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-435/igt@kms_ccs@bad-pixel-format-yf-tiled-ccs.html
   [138]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_ccs@bad-pixel-format-yf-tiled-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-rc-ccs-cc:
    - shard-dg2-set2:     [FAIL][139] ([Intel XE#616]) -> [INCOMPLETE][140] ([Intel XE#1195]) +1 other test incomplete
   [139]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-435/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-rc-ccs-cc.html
   [140]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-435/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-rc-ccs-cc.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-6:
    - shard-dg2-set2:     [SKIP][141] ([Intel XE#1201] / [Intel XE#787]) -> [SKIP][142] ([Intel XE#787]) +76 other tests skip
   [141]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-433/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-6.html
   [142]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-6.html

  * igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-rc-ccs@pipe-d-dp-4:
    - shard-dg2-set2:     [SKIP][143] ([Intel XE#455] / [Intel XE#787]) -> [SKIP][144] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) +25 other tests skip
   [143]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-rc-ccs@pipe-d-dp-4.html
   [144]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-435/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-rc-ccs@pipe-d-dp-4.html

  * igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-rc-ccs@pipe-c-hdmi-a-6:
    - shard-dg2-set2:     [SKIP][145] ([Intel XE#787]) -> [SKIP][146] ([Intel XE#1201] / [Intel XE#787]) +90 other tests skip
   [145]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-rc-ccs@pipe-c-hdmi-a-6.html
   [146]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-433/igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-rc-ccs@pipe-c-hdmi-a-6.html

  * igt@kms_cdclk@plane-scaling@pipe-b-dp-4:
    - shard-dg2-set2:     [SKIP][147] ([Intel XE#1152]) -> [SKIP][148] ([Intel XE#1152] / [Intel XE#1201]) +3 other tests skip
   [147]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_cdclk@plane-scaling@pipe-b-dp-4.html
   [148]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-433/igt@kms_cdclk@plane-scaling@pipe-b-dp-4.html

  * igt@kms_chamelium_hpd@hdmi-hpd:
    - shard-dg2-set2:     [SKIP][149] ([Intel XE#1201] / [Intel XE#373]) -> [SKIP][150] ([Intel XE#373]) +7 other tests skip
   [149]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-466/igt@kms_chamelium_hpd@hdmi-hpd.html
   [150]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_chamelium_hpd@hdmi-hpd.html

  * igt@kms_chamelium_hpd@vga-hpd:
    - shard-dg2-set2:     [SKIP][151] ([Intel XE#373]) -> [SKIP][152] ([Intel XE#1201] / [Intel XE#373]) +8 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_chamelium_hpd@vga-hpd.html
   [152]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@kms_chamelium_hpd@vga-hpd.html

  * igt@kms_content_protection@dp-mst-lic-type-1:
    - shard-dg2-set2:     [SKIP][153] ([Intel XE#307]) -> [SKIP][154] ([Intel XE#1201] / [Intel XE#307])
   [153]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_content_protection@dp-mst-lic-type-1.html
   [154]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@kms_content_protection@dp-mst-lic-type-1.html

  * igt@kms_cursor_crc@cursor-onscreen-512x512:
    - shard-dg2-set2:     [SKIP][155] ([Intel XE#308]) -> [SKIP][156] ([Intel XE#1201] / [Intel XE#308]) +1 other test skip
   [155]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_cursor_crc@cursor-onscreen-512x512.html
   [156]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@kms_cursor_crc@cursor-onscreen-512x512.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - shard-dg2-set2:     [SKIP][157] ([Intel XE#323]) -> [SKIP][158] ([Intel XE#1201] / [Intel XE#323]) +1 other test skip
   [157]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html
   [158]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html

  * igt@kms_dsc@dsc-with-output-formats-with-bpc:
    - shard-dg2-set2:     [SKIP][159] ([Intel XE#455]) -> [SKIP][160] ([Intel XE#1201] / [Intel XE#455]) +10 other tests skip
   [159]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_dsc@dsc-with-output-formats-with-bpc.html
   [160]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-463/igt@kms_dsc@dsc-with-output-formats-with-bpc.html

  * igt@kms_fbcon_fbt@psr:
    - shard-dg2-set2:     [SKIP][161] ([Intel XE#776]) -> [SKIP][162] ([Intel XE#1201] / [Intel XE#776])
   [161]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_fbcon_fbt@psr.html
   [162]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@kms_fbcon_fbt@psr.html

  * igt@kms_feature_discovery@display-4x:
    - shard-dg2-set2:     [SKIP][163] ([Intel XE#1138] / [Intel XE#1201]) -> [SKIP][164] ([Intel XE#1138])
   [163]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-435/igt@kms_feature_discovery@display-4x.html
   [164]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_feature_discovery@display-4x.html

  * igt@kms_feature_discovery@dp-mst:
    - shard-dg2-set2:     [SKIP][165] ([Intel XE#1137]) -> [SKIP][166] ([Intel XE#1137] / [Intel XE#1201])
   [165]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_feature_discovery@dp-mst.html
   [166]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@kms_feature_discovery@dp-mst.html

  * igt@kms_feature_discovery@psr2:
    - shard-dg2-set2:     [SKIP][167] ([Intel XE#1135] / [Intel XE#1201]) -> [SKIP][168] ([Intel XE#1135])
   [167]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-433/igt@kms_feature_discovery@psr2.html
   [168]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_feature_discovery@psr2.html

  * igt@kms_frontbuffer_tracking@drrs-suspend:
    - shard-dg2-set2:     [SKIP][169] ([Intel XE#1201] / [Intel XE#651]) -> [SKIP][170] ([Intel XE#651]) +17 other tests skip
   [169]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-433/igt@kms_frontbuffer_tracking@drrs-suspend.html
   [170]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_frontbuffer_tracking@drrs-suspend.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-render:
    - shard-dg2-set2:     [SKIP][171] ([Intel XE#651]) -> [SKIP][172] ([Intel XE#1201] / [Intel XE#651]) +22 other tests skip
   [171]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-render.html
   [172]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-blt:
    - shard-dg2-set2:     [SKIP][173] ([Intel XE#653]) -> [SKIP][174] ([Intel XE#1201] / [Intel XE#653]) +20 other tests skip
   [173]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-blt.html
   [174]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-tiling-4:
    - shard-dg2-set2:     [SKIP][175] ([Intel XE#1201] / [Intel XE#653]) -> [SKIP][176] ([Intel XE#653]) +21 other tests skip
   [175]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-435/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html
   [176]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html

  * igt@kms_invalid_mode@clock-too-high:
    - shard-lnl:          [SKIP][177] ([Intel XE#1450] / [Intel XE#599]) -> [SKIP][178] ([Intel XE#1450] / [Intel XE#2568] / [Intel XE#599])
   [177]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-7/igt@kms_invalid_mode@clock-too-high.html
   [178]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-4/igt@kms_invalid_mode@clock-too-high.html

  * igt@kms_pm_backlight@fade:
    - shard-dg2-set2:     [SKIP][179] ([Intel XE#870]) -> [SKIP][180] ([Intel XE#1201] / [Intel XE#870])
   [179]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_pm_backlight@fade.html
   [180]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@kms_pm_backlight@fade.html

  * igt@kms_pm_backlight@fade-with-dpms:
    - shard-dg2-set2:     [SKIP][181] ([Intel XE#1201] / [Intel XE#870]) -> [SKIP][182] ([Intel XE#870])
   [181]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-466/igt@kms_pm_backlight@fade-with-dpms.html
   [182]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_pm_backlight@fade-with-dpms.html

  * igt@kms_pm_dc@dc5-psr:
    - shard-dg2-set2:     [SKIP][183] ([Intel XE#1129]) -> [SKIP][184] ([Intel XE#1129] / [Intel XE#1201])
   [183]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_pm_dc@dc5-psr.html
   [184]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@kms_pm_dc@dc5-psr.html

  * igt@kms_psr2_sf@fbc-cursor-plane-update-sf:
    - shard-dg2-set2:     [SKIP][185] ([Intel XE#1201] / [Intel XE#1489]) -> [SKIP][186] ([Intel XE#1489])
   [185]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-433/igt@kms_psr2_sf@fbc-cursor-plane-update-sf.html
   [186]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_psr2_sf@fbc-cursor-plane-update-sf.html

  * igt@kms_psr2_sf@fbc-plane-move-sf-dmg-area:
    - shard-dg2-set2:     [SKIP][187] ([Intel XE#1489]) -> [SKIP][188] ([Intel XE#1201] / [Intel XE#1489]) +3 other tests skip
   [187]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_psr2_sf@fbc-plane-move-sf-dmg-area.html
   [188]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@kms_psr2_sf@fbc-plane-move-sf-dmg-area.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-dg2-set2:     [SKIP][189] ([Intel XE#1122]) -> [SKIP][190] ([Intel XE#1122] / [Intel XE#1201]) +1 other test skip
   [189]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_psr2_su@page_flip-p010.html
   [190]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@kms_psr2_su@page_flip-p010.html

  * igt@kms_psr@fbc-pr-dpms:
    - shard-dg2-set2:     [SKIP][191] ([Intel XE#1201] / [Intel XE#929]) -> [SKIP][192] ([Intel XE#929]) +11 other tests skip
   [191]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-433/igt@kms_psr@fbc-pr-dpms.html
   [192]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_psr@fbc-pr-dpms.html

  * igt@kms_psr@fbc-psr2-cursor-plane-onoff:
    - shard-dg2-set2:     [SKIP][193] ([Intel XE#929]) -> [SKIP][194] ([Intel XE#1201] / [Intel XE#929]) +11 other tests skip
   [193]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_psr@fbc-psr2-cursor-plane-onoff.html
   [194]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-435/igt@kms_psr@fbc-psr2-cursor-plane-onoff.html

  * igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
    - shard-dg2-set2:     [SKIP][195] ([Intel XE#1149]) -> [SKIP][196] ([Intel XE#1149] / [Intel XE#1201])
   [195]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
   [196]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-433/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html

  * igt@kms_rotation_crc@bad-tiling:
    - shard-dg2-set2:     [SKIP][197] ([Intel XE#327]) -> [SKIP][198] ([Intel XE#1201] / [Intel XE#327]) +3 other tests skip
   [197]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@kms_rotation_crc@bad-tiling.html
   [198]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-463/igt@kms_rotation_crc@bad-tiling.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-180:
    - shard-dg2-set2:     [SKIP][199] ([Intel XE#1127] / [Intel XE#1201]) -> [SKIP][200] ([Intel XE#1127])
   [199]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-466/igt@kms_rotation_crc@primary-y-tiled-reflect-x-180.html
   [200]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_rotation_crc@primary-y-tiled-reflect-x-180.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-270:
    - shard-dg2-set2:     [SKIP][201] ([Intel XE#1201] / [Intel XE#327]) -> [SKIP][202] ([Intel XE#327])
   [201]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-463/igt@kms_rotation_crc@primary-y-tiled-reflect-x-270.html
   [202]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_rotation_crc@primary-y-tiled-reflect-x-270.html

  * igt@kms_vrr@flipline:
    - shard-dg2-set2:     [SKIP][203] ([Intel XE#1201] / [Intel XE#455]) -> [SKIP][204] ([Intel XE#455]) +16 other tests skip
   [203]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-434/igt@kms_vrr@flipline.html
   [204]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_vrr@flipline.html

  * igt@kms_vrr@lobf:
    - shard-dg2-set2:     [SKIP][205] ([Intel XE#1201] / [Intel XE#2168]) -> [SKIP][206] ([Intel XE#2168])
   [205]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-463/igt@kms_vrr@lobf.html
   [206]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@kms_vrr@lobf.html

  * igt@kms_writeback@writeback-fb-id:
    - shard-dg2-set2:     [SKIP][207] ([Intel XE#1201] / [Intel XE#756]) -> [SKIP][208] ([Intel XE#1201] / [Intel XE#326] / [Intel XE#756]) +3 other tests skip
   [207]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-434/igt@kms_writeback@writeback-fb-id.html
   [208]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@kms_writeback@writeback-fb-id.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all:
    - shard-dg2-set2:     [SKIP][209] ([Intel XE#1091]) -> [SKIP][210] ([Intel XE#1091] / [Intel XE#1201]) +1 other test skip
   [209]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all.html
   [210]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-463/igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all.html

  * igt@xe_copy_basic@mem-copy-linear-0xfd:
    - shard-dg2-set2:     [SKIP][211] ([Intel XE#1123] / [Intel XE#1201]) -> [SKIP][212] ([Intel XE#1123])
   [211]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-435/igt@xe_copy_basic@mem-copy-linear-0xfd.html
   [212]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@xe_copy_basic@mem-copy-linear-0xfd.html

  * igt@xe_exec_fault_mode@once-bindexecqueue-imm:
    - shard-dg2-set2:     [SKIP][213] ([Intel XE#1201] / [Intel XE#288]) -> [SKIP][214] ([Intel XE#288]) +20 other tests skip
   [213]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-434/igt@xe_exec_fault_mode@once-bindexecqueue-imm.html
   [214]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@xe_exec_fault_mode@once-bindexecqueue-imm.html

  * igt@xe_exec_fault_mode@twice-bindexecqueue-userptr-invalidate-race:
    - shard-dg2-set2:     [SKIP][215] ([Intel XE#288]) -> [SKIP][216] ([Intel XE#1201] / [Intel XE#288]) +26 other tests skip
   [215]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@xe_exec_fault_mode@twice-bindexecqueue-userptr-invalidate-race.html
   [216]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@xe_exec_fault_mode@twice-bindexecqueue-userptr-invalidate-race.html

  * igt@xe_oa@invalid-create-userspace-config:
    - shard-dg2-set2:     [SKIP][217] ([Intel XE#1201] / [Intel XE#2541]) -> [SKIP][218] ([Intel XE#2541]) +2 other tests skip
   [217]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-435/igt@xe_oa@invalid-create-userspace-config.html
   [218]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@xe_oa@invalid-create-userspace-config.html

  * igt@xe_oa@whitelisted-registers-userspace-config:
    - shard-dg2-set2:     [SKIP][219] ([Intel XE#2541]) -> [SKIP][220] ([Intel XE#1201] / [Intel XE#2541]) +5 other tests skip
   [219]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@xe_oa@whitelisted-registers-userspace-config.html
   [220]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-466/igt@xe_oa@whitelisted-registers-userspace-config.html

  * igt@xe_pat@display-vs-wb-transient:
    - shard-dg2-set2:     [SKIP][221] ([Intel XE#1201] / [Intel XE#1337]) -> [SKIP][222] ([Intel XE#1337])
   [221]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-466/igt@xe_pat@display-vs-wb-transient.html
   [222]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@xe_pat@display-vs-wb-transient.html

  * igt@xe_pm@d3cold-basic-exec:
    - shard-dg2-set2:     [SKIP][223] ([Intel XE#1201] / [Intel XE#2284] / [Intel XE#366]) -> [SKIP][224] ([Intel XE#2284] / [Intel XE#366])
   [223]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-434/igt@xe_pm@d3cold-basic-exec.html
   [224]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@xe_pm@d3cold-basic-exec.html

  * igt@xe_pm@d3cold-mmap-vram:
    - shard-dg2-set2:     [SKIP][225] ([Intel XE#2284] / [Intel XE#366]) -> [SKIP][226] ([Intel XE#1201] / [Intel XE#2284] / [Intel XE#366]) +1 other test skip
   [225]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@xe_pm@d3cold-mmap-vram.html
   [226]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@xe_pm@d3cold-mmap-vram.html

  * igt@xe_pm@s3-basic-exec:
    - shard-dg2-set2:     [DMESG-WARN][227] ([Intel XE#1551] / [Intel XE#569]) -> [INCOMPLETE][228] ([Intel XE#1358] / [Intel XE#1551] / [Intel XE#569])
   [227]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-433/igt@xe_pm@s3-basic-exec.html
   [228]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@xe_pm@s3-basic-exec.html

  * igt@xe_pm@s3-vm-bind-unbind-all:
    - shard-dg2-set2:     [DMESG-WARN][229] ([Intel XE#1162] / [Intel XE#569]) -> [DMESG-WARN][230] ([Intel XE#1162] / [Intel XE#1941] / [Intel XE#569])
   [229]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-433/igt@xe_pm@s3-vm-bind-unbind-all.html
   [230]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-432/igt@xe_pm@s3-vm-bind-unbind-all.html

  * igt@xe_query@multigpu-query-config:
    - shard-dg2-set2:     [SKIP][231] ([Intel XE#944]) -> [SKIP][232] ([Intel XE#1201] / [Intel XE#944]) +2 other tests skip
   [231]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-432/igt@xe_query@multigpu-query-config.html
   [232]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@xe_query@multigpu-query-config.html

  * igt@xe_wedged@wedged-at-any-timeout:
    - shard-dg2-set2:     [DMESG-WARN][233] ([Intel XE#1760]) -> [DMESG-FAIL][234] ([Intel XE#1760])
   [233]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-dg2-463/igt@xe_wedged@wedged-at-any-timeout.html
   [234]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-dg2-434/igt@xe_wedged@wedged-at-any-timeout.html
    - shard-lnl:          [DMESG-WARN][235] ([Intel XE#1760]) -> [DMESG-FAIL][236] ([Intel XE#1760])
   [235]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7978/shard-lnl-3/igt@xe_wedged@wedged-at-any-timeout.html
   [236]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/shard-lnl-3/igt@xe_wedged@wedged-at-any-timeout.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [Intel XE#1033]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1033
  [Intel XE#1091]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1091
  [Intel XE#1122]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1122
  [Intel XE#1123]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1123
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
  [Intel XE#1129]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1129
  [Intel XE#1135]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1135
  [Intel XE#1137]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1137
  [Intel XE#1138]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1138
  [Intel XE#1149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1149
  [Intel XE#1152]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1152
  [Intel XE#1162]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1162
  [Intel XE#1169]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1169
  [Intel XE#1192]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1192
  [Intel XE#1195]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1195
  [Intel XE#1201]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1201
  [Intel XE#1252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1252
  [Intel XE#1337]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1337
  [Intel XE#1356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1356
  [Intel XE#1358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1358
  [Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
  [Intel XE#1399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1399
  [Intel XE#1401]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1401
  [Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
  [Intel XE#1426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1426
  [Intel XE#1450]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1450
  [Intel XE#1473]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1473
  [Intel XE#1475]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1475
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
  [Intel XE#1551]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1551
  [Intel XE#1607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1607
  [Intel XE#1659]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1659
  [Intel XE#1701]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1701
  [Intel XE#1745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1745
  [Intel XE#1760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1760
  [Intel XE#1794]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1794
  [Intel XE#1941]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1941
  [Intel XE#2019]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2019
  [Intel XE#2028]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2028
  [Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049
  [Intel XE#2105]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2105
  [Intel XE#2168]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2168
  [Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191
  [Intel XE#2229]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2229
  [Intel XE#2233]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2233
  [Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
  [Intel XE#2244]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2244
  [Intel XE#2249]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2249
  [Intel XE#2251]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2251
  [Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
  [Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
  [Intel XE#2293]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2293
  [Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
  [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
  [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2333]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2333
  [Intel XE#2364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2364
  [Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380
  [Intel XE#2390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2390
  [Intel XE#2429]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2429
  [Intel XE#2436]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2436
  [Intel XE#2472]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2472
  [Intel XE#2514]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2514
  [Intel XE#2541]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2541
  [Intel XE#2568]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2568
  [Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
  [Intel XE#307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/307
  [Intel XE#308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/308
  [Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
  [Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316
  [Intel XE#323]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/323
  [Intel XE#324]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/324
  [Intel XE#326]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/326
  [Intel XE#327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/327
  [Intel XE#346]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/346
  [Intel XE#361]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/361
  [Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
  [Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
  [Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
  [Intel XE#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
  [Intel XE#402]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/402
  [Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
  [Intel XE#498]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/498
  [Intel XE#569]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/569
  [Intel XE#599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/599
  [Intel XE#616]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/616
  [Intel XE#623]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/623
  [Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
  [Intel XE#653]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/653
  [Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
  [Intel XE#718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/718
  [Intel XE#756]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/756
  [Intel XE#776]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/776
  [Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
  [Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
  [Intel XE#877]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/877
  [Intel XE#899]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/899
  [Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
  [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944


Build changes
-------------

  * IGT: IGT_7978 -> IGTPW_11599

  IGTPW_11599: 11599
  IGT_7978: 4083a9d8abc80c8a905ffdc20bc76383b1e07e79 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-1798-4d24271792fac837e728f7bb6237a94ee46cc76e: 4d24271792fac837e728f7bb6237a94ee46cc76e

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_11599/index.html

[-- Attachment #2: Type: text/html, Size: 86746 bytes --]

^ permalink raw reply	[flat|nested] 41+ messages in thread

end of thread, other threads:[~2024-08-20  7:49 UTC | newest]

Thread overview: 41+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-19 20:57 [PATCH v5 00/37] IGT tests for the KMS Color Pipeline API Harry Wentland
2024-08-19 20:57 ` [PATCH v5 01/37] lib/drmtest: Add is_vkms_device() Harry Wentland
2024-08-19 20:57 ` [PATCH v5 02/37] tests/kms_writeback: Fix kms_writeback for VKMS Harry Wentland
2024-08-19 20:57 ` [PATCH v5 03/37] lib/igt_kms: Move get_writeback_formats_blob to lib Harry Wentland
2024-08-19 20:57 ` [PATCH v5 04/37] lib/igt_kms: Introduce DRM_CLIENT_CAP_PLANE_COLOR_PIPELINE Harry Wentland
2024-08-19 20:57 ` [PATCH v5 05/37] include/drm-uapi: Add COLOROP object Harry Wentland
2024-08-19 20:57 ` [PATCH v5 06/37] drm-uapi: Add 3x4 CTM Harry Wentland
2024-08-19 20:57 ` [PATCH v5 07/37] drm-uapi: Add 1D LUT drm_colorop_type Harry Wentland
2024-08-19 20:57 ` [PATCH v5 08/37] lib/igt_kms: Introduce drm_colorop and COLOR_PIPELINE Harry Wentland
2024-08-19 20:57 ` [PATCH v5 09/37] tests/kms_properties: Add colorop properties test Harry Wentland
2024-08-19 20:57 ` [PATCH v5 10/37] igt/color: Add SW color transform functionality Harry Wentland
2024-08-19 20:57 ` [PATCH v5 11/37] lib/igt_fb: Add copy_fb function Harry Wentland
2024-08-19 20:57 ` [PATCH v5 12/37] tests/kms_colorop: Add kms_colorop tests Harry Wentland
2024-08-19 20:57 ` [PATCH v5 13/37] lib/igt_kms: Add support for DATA colorop property Harry Wentland
2024-08-19 20:58 ` [PATCH v5 14/37] lib/igt_color: Add support for 3x4 matrices Harry Wentland
2024-08-19 20:58 ` [PATCH v5 15/37] tests/kms_colorop: Add 3x4 CTM tests Harry Wentland
2024-08-19 20:58 ` [PATCH v5 16/37] tests/kms_colorop: Add bypass test Harry Wentland
2024-08-19 20:58 ` [PATCH v5 17/37] tests/kms_colorop: Parametrize the buffer format Harry Wentland
2024-08-19 20:58 ` [PATCH v5 18/37] tests/kms_colorop: Add 10bpc test and skip if format not supported Harry Wentland
2024-08-19 20:58 ` [PATCH v5 19/37] tests/kms_colorop: Skip if writeback does not support fourcc Harry Wentland
2024-08-19 20:58 ` [PATCH v5 20/37] lib/igt_fb: Allow any non-planar format for igt_copy_fb Harry Wentland
2024-08-19 20:58 ` [PATCH v5 21/37] kms/colorop: Do proper setup and cleanup Harry Wentland
2024-08-19 20:58 ` [PATCH v5 22/37] lib/igt_color: Support color transform for XRGB2101010 Harry Wentland
2024-08-19 20:58 ` [PATCH v5 23/37] tests/kms_colorop: Set wide [13, 13] bracket for comparison on amdgpu Harry Wentland
2024-08-19 20:58 ` [PATCH v5 24/37] lib/igt_color: Add PQ variants for 0-1 and 0-125 range Harry Wentland
2024-08-19 20:58 ` [PATCH v5 25/37] tests/kms_colorop: Add tests for PQ variants Harry Wentland
2024-08-19 20:58 ` [PATCH v5 26/37] lib/igt_kms: increase MAX_NUM_COLOROPS to 128 Harry Wentland
2024-08-19 20:58 ` [PATCH v5 27/37] tests/kms_colorop: Add a sRGB test for EOTF -> Inverse EOTF -> EOTF Harry Wentland
2024-08-19 20:58 ` [PATCH v5 28/37] lib/igt_color: add BT2020/BT709 transfer functions Harry Wentland
2024-08-19 20:58 ` [PATCH v5 29/37] tests/kms_colorop: Add tests for BT2020/BT709 TFs Harry Wentland
2024-08-19 20:58 ` [PATCH v5 30/37] lib/igt_color: Add 1D LUT color transformation support Harry Wentland
2024-08-19 20:58 ` [PATCH v5 31/37] test/kms_colorop: Add tests that exercise the 1D LUT colorops Harry Wentland
2024-08-19 20:58 ` [PATCH v5 32/37] tests/kms_colorop: Add multiplier tests Harry Wentland
2024-08-19 20:58 ` [PATCH v5 33/37] lib/igt_color: Point license header at skia license Harry Wentland
2024-08-19 20:58 ` [PATCH v5 34/37] scripts/convert_3dlut.py Convert a 3D LUT to igt_3dlut_t array for 3D LUT API Harry Wentland
2024-08-19 20:58 ` [PATCH v5 35/37] tests/kms_colorop: Add 3D LUT subtests Harry Wentland
2024-08-19 20:58 ` [PATCH v5 36/37] drm-uapi: Update kernel doc for drm_colorop_type Harry Wentland
2024-08-19 20:58 ` [PATCH v5 37/37] drm-uapi: Sync up definition with kernel colorop implementation Harry Wentland
2024-08-19 23:30 ` ✓ CI.xeBAT: success for IGT tests for the KMS Color Pipeline API (rev6) Patchwork
2024-08-19 23:46 ` ✗ Fi.CI.BAT: failure " Patchwork
2024-08-20  7:49 ` ✗ CI.xeFULL: " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox