summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Plattner <aplattner@nvidia.com>2009-08-21 19:09:07 -0700
committerAaron Plattner <aplattner@nvidia.com>2009-08-21 19:09:07 -0700
commitca8258fe8fa1947dc08a17cdb631767a08ae7222 (patch)
treec2bf55f115920e2c1db4c9acaa9ed9a76bf1a620
parentf10bcc7788fceb14232eb6d71885379fdd9d3ccc (diff)
190.25190.25
-rw-r--r--samples/Makefile3
-rw-r--r--samples/Makefile.inc3
-rw-r--r--samples/nv-control-gvi.c659
-rw-r--r--src/gtk+-2.x/Makefile.inc4
-rw-r--r--src/gtk+-2.x/ctkbanner.c2
-rw-r--r--src/gtk+-2.x/ctkbanner.h1
-rw-r--r--src/gtk+-2.x/ctkclocks.c218
-rw-r--r--src/gtk+-2.x/ctkclocks.h3
-rw-r--r--src/gtk+-2.x/ctkdisplayconfig.c33
-rw-r--r--src/gtk+-2.x/ctkdisplayconfig.h1
-rw-r--r--src/gtk+-2.x/ctkdisplaylayout.h3
-rw-r--r--src/gtk+-2.x/ctkevent.c18
-rw-r--r--src/gtk+-2.x/ctkgpu.c136
-rw-r--r--src/gtk+-2.x/ctkgpu.h4
-rw-r--r--src/gtk+-2.x/ctkgvi.c726
-rw-r--r--src/gtk+-2.x/ctkgvi.h86
-rw-r--r--src/gtk+-2.x/ctkgvo-sync.c4
-rw-r--r--src/gtk+-2.x/ctkgvo.c12
-rw-r--r--src/gtk+-2.x/ctkgvo.h4
-rw-r--r--src/gtk+-2.x/ctklicense.c298
-rw-r--r--src/gtk+-2.x/ctklicense.h75
-rw-r--r--src/gtk+-2.x/ctkwindow.c49
-rw-r--r--src/image_data/Makefile.inc1
-rw-r--r--src/image_data/gvi_pixdata.h1010
-rw-r--r--src/libXNVCtrl/NVCtrl.c40
-rw-r--r--src/libXNVCtrl/NVCtrl.h237
-rw-r--r--src/libXNVCtrl/NVCtrlLib.h40
-rw-r--r--src/libXNVCtrl/nv_control.h10
-rw-r--r--src/parse.c20
29 files changed, 3374 insertions, 326 deletions
diff --git a/samples/Makefile b/samples/Makefile
index b97b942..1d5d350 100644
--- a/samples/Makefile
+++ b/samples/Makefile
@@ -73,7 +73,8 @@ SAMPLES = \
nv-control-events \
nv-control-dpy \
nv-control-targets \
- nv-control-framelock
+ nv-control-framelock \
+ nv-control-gvi
all: $(SAMPLES)
diff --git a/samples/Makefile.inc b/samples/Makefile.inc
index 2225ca2..26f2a3e 100644
--- a/samples/Makefile.inc
+++ b/samples/Makefile.inc
@@ -33,7 +33,8 @@ EXTRA_DIST += \
nv-control-info.c \
nv-control-events.c \
nv-control-targets.c \
- nv-control-framelock.c
+ nv-control-framelock.c \
+ nv-control-gvi.c
dist_list::
@ echo $(SRC) $(EXTRA_DIST)
diff --git a/samples/nv-control-gvi.c b/samples/nv-control-gvi.c
new file mode 100644
index 0000000..9b093ea
--- /dev/null
+++ b/samples/nv-control-gvi.c
@@ -0,0 +1,659 @@
+/*
+ * Copyright (c) 2006-2007 NVIDIA, Corporation
+ *
+ * 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 (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+
+/*
+ * nv-control-gvi.c - NV-CONTROL client that demonstrates how to
+ * interact with the GVI capabilities on an X Server.
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <X11/Xlib.h>
+
+#include "NVCtrl.h"
+#include "NVCtrlLib.h"
+
+
+/*
+ * Decode SDI input value returned.
+ */
+char *SyncTypeName(int value)
+{
+ switch (value) {
+ case NV_CTRL_GVO_SDI_SYNC_INPUT_DETECTED_HD:
+ return "NV_CTRL_GVO_SDI_SYNC_INPUT_DETECTED_HD";
+ break;
+ case NV_CTRL_GVO_SDI_SYNC_INPUT_DETECTED_SD:
+ return "NV_CTRL_GVO_SDI_SYNC_INPUT_DETECTED_SD";
+ break;
+ case NV_CTRL_GVO_SDI_SYNC_INPUT_DETECTED_NONE:
+ return "NV_CTRL_GVO_SDI_SYNC_INPUT_DETECTED_NONE";
+ break;
+ default:
+ return "Invalid Value";
+ break;
+ }
+}
+
+/*
+ * Decode provided signal format.
+ */
+char *VideoFormatName(int value)
+{
+ switch(value) {
+ case NV_CTRL_GVO_VIDEO_FORMAT_487I_59_94_SMPTE259_NTSC:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_480I_59_94_SMPTE259_NTSC";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_576I_50_00_SMPTE259_PAL:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_576I_50_00_SMPTE259_PAL";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_720P_59_94_SMPTE296:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_720P_59_94_SMPTE296";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_720P_60_00_SMPTE296:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_720P_60_00_SMPTE296";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1035I_59_94_SMPTE260:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1035I_59_94_SMPTE260";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1035I_60_00_SMPTE260:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1035I_60_00_SMPTE260";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080I_50_00_SMPTE295:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080I_50_00_SMPTE295";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080I_50_00_SMPTE274:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080I_50_00_SMPTE274";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080I_59_94_SMPTE274:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080I_59_94_SMPTE274";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080I_60_00_SMPTE274:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080I_60_00_SMPTE274";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080P_23_976_SMPTE274:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080P_23_976_SMPTE274";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080P_24_00_SMPTE274:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080P_24_00_SMPTE274";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080P_25_00_SMPTE274:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080P_25_00_SMPTE274";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080P_29_97_SMPTE274:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080P_29_97_SMPTE274";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080P_30_00_SMPTE274:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080P_30_00_SMPTE274";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_720P_50_00_SMPTE296:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_720P_50_00_SMPTE296";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080I_48_00_SMPTE274:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080I_48_00_SMPTE274";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080I_47_96_SMPTE274:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080I_47_96_SMPTE274";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_720P_30_00_SMPTE296:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_720P_30_00_SMPTE296";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_720P_29_97_SMPTE296:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_720P_29_97_SMPTE296";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_720P_25_00_SMPTE296:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_720P_25_00_SMPTE296";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_720P_24_00_SMPTE296:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_720P_24_00_SMPTE296";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_720P_23_98_SMPTE296:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_720P_23_98_SMPTE296";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080PSF_25_00_SMPTE274:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080PSF_25_00_SMPTE274";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080PSF_29_97_SMPTE274:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080PSF_29_97_SMPTE274";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080PSF_30_00_SMPTE274:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080PSF_30_00_SMPTE274";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080PSF_24_00_SMPTE274:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080PSF_24_00_SMPTE274";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_1080PSF_23_98_SMPTE274:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_1080PSF_23_98_SMPTE274";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_2048P_30_00_SMPTE372:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_2048P_30_00_SMPTE372";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_2048P_29_97_SMPTE372:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_2048P_29_97_SMPTE372";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_2048I_60_00_SMPTE372:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_2048I_60_00_SMPTE372";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_2048I_59_94_SMPTE372:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_2048I_59_94_SMPTE372";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_2048P_25_00_SMPTE372:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_2048P_25_00_SMPTE372";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_2048I_50_00_SMPTE372:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_2048I_50_00_SMPTE372";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_2048P_24_00_SMPTE372:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_2048P_24_00_SMPTE372";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_2048P_23_98_SMPTE372:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_2048P_23_98_SMPTE372";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_2048I_48_00_SMPTE372:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_2048I_48_00_SMPTE372";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_2048I_47_96_SMPTE372:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_2048I_47_96_SMPTE372";
+ break;
+ case NV_CTRL_GVO_VIDEO_FORMAT_NONE:
+ return "NV_CTRL_GVO_VIDEO_FORMAT_NONE";
+ break;
+ default:
+ return "Invalid Value";
+ break;
+ }
+}
+
+
+
+/*
+ * do_help()
+ *
+ * Prints some help on how to use this app.
+ *
+ */
+static void do_help(void)
+{
+ printf("usage:\n");
+ printf("-q: query system GVI information.\n");
+ printf("-c <TOPOLOGY>: configure default GVI system topology.\n");
+ printf("-g #: Operate on specific GVI device.\n");
+ printf("\n");
+
+} /* do_help()*/
+
+
+
+/*
+ * do_query()
+ *
+ * Prints information for all GVI devices found on
+ * the given X server.
+ *
+ */
+static void do_query(Display *dpy, int use_gvi)
+{
+ Bool ret;
+ int num_gvi;
+ int gvi;
+ int last_gvi;
+
+ int value;
+ int num_jacks;
+ int jack;
+ int max_channels_per_jack;
+ int channel;
+
+ char *pOut;
+
+
+ /* Query the number of GVI devices on the server */
+
+ ret = XNVCTRLQueryTargetCount(dpy, NV_CTRL_TARGET_TYPE_GVI,
+ &num_gvi);
+ if (!ret) {
+ printf("Failed to query number of GVI devices!\n");
+ return;
+ }
+ printf("Found %d GVI device(s) on server.\n", num_gvi);
+ if ( !num_gvi ) {
+ return;
+ }
+
+ if (use_gvi >= 0 && use_gvi < num_gvi) {
+ /* Only display information about 1 GVI device/ */
+ printf("Querying GVI device %d...\n", use_gvi);
+ gvi = use_gvi;
+ last_gvi = use_gvi;
+ } else {
+ /* Display all GVI devices */
+ printf("Querying all GVI devices...\n");
+ gvi = 0;
+ last_gvi = num_gvi-1;
+ }
+
+ /* Display information about the GVI(s) */
+
+ for (; gvi <= last_gvi; gvi++) {
+
+ printf("\n");
+ printf("- GVI Board %d :\n", gvi);
+
+ ret = XNVCTRLQueryTargetStringAttribute(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ 0, // display_mask
+ NV_CTRL_STRING_GVIO_FIRMWARE_VERSION,
+ &pOut);
+ if (!ret) {
+ printf(" - Failed to query firmware version of GVI %d.\n", gvi);
+ continue;
+ }
+ printf(" - Firmware Version: %s\n", pOut);
+ XFree(pOut);
+ pOut = NULL;
+ /*
+ ret = XNVCTRLQueryTargetAttribute(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ 0, // display_mask
+ NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT,
+ &value);
+ if (!ret) {
+ printf(" - Failed to query requested video format of "
+ "GVI %d.\n", gvi);
+ continue;
+ }
+ printf(" - Requested video format: %d\n", value);
+
+ ret = XNVCTRLQueryTargetAttribute(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ 0, // display_mask
+ NV_CTRL_GVIO_DETECTED_VIDEO_FORMAT,
+ &value);
+ if (!ret) {
+ printf(" - Failed to query detected video format of "
+ "GVI %d.\n", gvi);
+ continue;
+ }
+ printf(" - Detected video format: %d\n", value);
+ */
+
+ ret = XNVCTRLQueryTargetAttribute(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ 0, // display_mask
+ NV_CTRL_GVI_GLOBAL_IDENTIFIER,
+ &value);
+ if (!ret) {
+ printf(" - Failed to query global ID of GVI %d.\n", gvi);
+ continue;
+ }
+ printf(" - Global ID: %d\n", value);
+
+ ret = XNVCTRLQueryTargetAttribute(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ 0, // display_mask
+ NV_CTRL_GVI_NUM_CAPTURE_SURFACES,
+ &value);
+ if (!ret) {
+ printf(" - Failed to number of capture surfaces of GVI %d.\n", gvi);
+ continue;
+ }
+ printf(" - Number of capture surfaces: %d\n", value);
+
+ ret = XNVCTRLQueryTargetAttribute(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ 0, // display_mask
+ NV_CTRL_GVI_MAX_STREAMS,
+ &value);
+ if (!ret) {
+ printf(" - Failed to query max number of streams on "
+ "GVI %d.\n", gvi);
+ continue;
+ }
+ printf(" - Max number of configurable streams: %d\n", value);
+
+ ret = XNVCTRLQueryTargetAttribute(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ 0, // display_mask
+ NV_CTRL_GVI_MAX_LINKS_PER_STREAM,
+ &value);
+ if (!ret) {
+ printf(" - Failed to query max number of links per stream on "
+ "GVI %d.\n", gvi);
+ continue;
+ }
+ printf(" - Max number of links per stream: %d\n", value);
+
+ ret = XNVCTRLQueryTargetAttribute(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ 0, // display_mask
+ NV_CTRL_GVI_NUM_JACKS,
+ &num_jacks);
+ if (!ret) {
+ printf(" - Failed to query number of input jacks on GVI "
+ "%d.\n", gvi);
+ continue;
+ }
+ printf(" - Number of input jacks on device: %d\n", num_jacks);
+
+ ret = XNVCTRLQueryTargetAttribute(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ 0, // display_mask
+ NV_CTRL_GVI_MAX_CHANNELS_PER_JACK,
+ &max_channels_per_jack);
+ if (!ret) {
+ printf(" - Failed to query maximum number of channels per "
+ "jack on GVI %d.\n", gvi);
+ continue;
+ }
+ printf(" - Maximum number of channels per jack on device: %d\n",
+ max_channels_per_jack);
+
+ /* Display per-jack/channel information */
+
+ for (jack = 0; jack < num_jacks; jack++) {
+ printf(" - Jack %d\n", jack);
+
+ for (channel = 0; channel < max_channels_per_jack; channel++) {
+ printf(" - Channel %d\n", channel);
+
+ unsigned int link_definition = ((channel & 0xFFFF)<<16);
+ link_definition |= (jack & 0xFFFF);
+
+ ret = XNVCTRLQueryTargetAttribute(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ link_definition, // display_mask
+ NV_CTRL_GVIO_DETECTED_VIDEO_FORMAT,
+ &value);
+ if (!ret) {
+ printf(" - Failed to query detected video format "
+ "on jack %d, channel %d of GVI %d.\n",
+ jack, channel, gvi);
+ continue;
+ }
+ printf(" - Detected Video Format: %d (%s)\n", value,
+ VideoFormatName(value)
+ );
+
+ ret = XNVCTRLQueryTargetAttribute(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ link_definition, // display_mask
+ NV_CTRL_GVI_DETECTED_CHANNEL_SMPTE352_IDENTIFIER,
+ &value);
+ if (!ret) {
+ printf(" - Failed to query detected SMPTE352 "
+ "Identifier on jack %d, channel %d of GVI %d.\n",
+ jack, channel, gvi);
+ continue;
+ }
+ printf(" - Detected SMPTE352 Identifier: 0x%08x\n",
+ value);
+
+ ret = XNVCTRLQueryTargetAttribute(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ link_definition, // display_mask
+ NV_CTRL_GVI_DETECTED_CHANNEL_BITS_PER_COMPONENT,
+ &value);
+ if (!ret) {
+ printf(" - Failed to query detected bits per "
+ "component on jack %d, channel %d of GVI %d.\n",
+ jack, channel, gvi);
+ continue;
+ }
+ printf(" - Detected bits per component: ");
+ switch (value) {
+ case NV_CTRL_GVI_BITS_PER_COMPONENT_8: printf("8"); break;
+ case NV_CTRL_GVI_BITS_PER_COMPONENT_10: printf("10"); break;
+ case NV_CTRL_GVI_BITS_PER_COMPONENT_12: printf("12"); break;
+ case NV_CTRL_GVI_BITS_PER_COMPONENT_UNKNOWN: /* Fall Through */
+ default:
+ printf("Unknown");
+ break;
+ }
+ printf("\n");
+
+ ret = XNVCTRLQueryTargetAttribute(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ link_definition, // display_mask
+ NV_CTRL_GVI_DETECTED_CHANNEL_COMPONENT_SAMPLING,
+ &value);
+ if (!ret) {
+ printf(" - Failed to query detected component "
+ "sampling on jack %d, channel %d of GVI %d.\n",
+ jack, channel, gvi);
+ continue;
+ }
+ printf(" - Detected component sampling: ");
+ switch (value) {
+ case NV_CTRL_GVI_COMPONENT_SAMPLING_4444: printf("4:4:4:4"); break;
+ case NV_CTRL_GVI_COMPONENT_SAMPLING_4224: printf("4:2:2:4"); break;
+ case NV_CTRL_GVI_COMPONENT_SAMPLING_444: printf("4:4:4"); break;
+ case NV_CTRL_GVI_COMPONENT_SAMPLING_422: printf("4:2:2"); break;
+ case NV_CTRL_GVI_COMPONENT_SAMPLING_420: printf("4:2:0"); break;
+ case NV_CTRL_GVI_COMPONENT_SAMPLING_UNKNOWN: /* Fall Through */
+ default:
+ printf("Unknown");
+ break;
+ }
+ printf("\n");
+
+ ret = XNVCTRLQueryTargetAttribute(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ link_definition, // display_mask
+ NV_CTRL_GVI_DETECTED_CHANNEL_COLOR_SPACE,
+ &value);
+ if (!ret) {
+ printf(" - Failed to query detected color space on "
+ "jack %d, channel %d of GVI %d.\n",
+ jack, channel, gvi);
+ continue;
+ }
+ printf(" - Detected color space: ");
+ switch (value) {
+ case NV_CTRL_GVI_COLOR_SPACE_GBR: printf("GBR"); break;
+ case NV_CTRL_GVI_COLOR_SPACE_GBRA: printf("GBRA"); break;
+ case NV_CTRL_GVI_COLOR_SPACE_GBRD: printf("GBRD"); break;
+ case NV_CTRL_GVI_COLOR_SPACE_YCBCR: printf("YCbCr"); break;
+ case NV_CTRL_GVI_COLOR_SPACE_YCBCRA: printf("YCbCrA"); break;
+ case NV_CTRL_GVI_COLOR_SPACE_YCBCRD: printf("YCbCrD"); break;
+ case NV_CTRL_GVI_COLOR_SPACE_UNKNOWN: /* Fall Through */
+ default:
+ printf("Unknown");
+ break;
+ }
+ printf("\n");
+
+ ret = XNVCTRLQueryTargetAttribute(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ link_definition, // display_mask
+ NV_CTRL_GVI_DETECTED_CHANNEL_LINK_ID,
+ &value);
+ if (!ret) {
+ printf(" - Failed to query detected link ID on "
+ "jack %d, channel %d of GVI %d.\n",
+ jack, channel, gvi);
+ continue;
+ }
+ printf(" - Detected Link ID: Link %d", value);
+ if (value == NV_CTRL_GVI_LINK_ID_UNKNOWN) {
+ printf(" (Unknown)");
+ } else if (value < 26) {
+ printf(" (Link%c)", (int)('A')+value);
+ }
+ printf("\n");
+
+ } /* Done querying per-channel information */
+ } /* Done querying per-jack information */
+
+
+ /* Query stream (link to jack+channel) topology */
+ ret = XNVCTRLStringOperation(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ gvi, // target_id
+ 0, // display_mask
+ NV_CTRL_STRING_OPERATION_GVI_CONFIGURE_STREAMS,
+ NULL, // pIn
+ &pOut);
+ if (!ret || !pOut) {
+ printf(" - Failed to query stream topology configuration of "
+ "GVI %d.\n", gvi);
+ continue;
+ }
+ printf(" - Topology:\n");
+ printf("\n %s\n\n", pOut ? pOut : "No streams are configured.");
+ XFree(pOut);
+ pOut = NULL;
+
+ } /* Done Querying information about GVI devices */
+
+} /* do_query() */
+
+
+
+void do_configure(Display *dpy, int use_gvi, char *pIn)
+{
+ Bool ret;
+ char *pOut = NULL;
+
+
+ if (use_gvi < 0) {
+ use_gvi = 0;
+ }
+
+ printf("Configuring GVI device %d:\n\n", use_gvi);
+ printf("Setting ");
+ if (!pIn) {
+ pIn = "stream=0, link0=jack0.0; "
+ "stream=1, link0=jack1.0; "
+ "stream=2, link0=jack2.0; "
+ "stream=3, link0=jack3.0";
+ printf("default");
+ } else {
+ printf("custom");
+ }
+ printf(" configuration:\n\n");
+ printf(" \"%s\"\n\n", pIn);
+
+ ret = XNVCTRLStringOperation(dpy,
+ NV_CTRL_TARGET_TYPE_GVI,
+ use_gvi, // target_id
+ 0, // display_mask
+ NV_CTRL_STRING_OPERATION_GVI_CONFIGURE_STREAMS,
+ pIn,
+ &pOut);
+ if (!ret || !pOut) {
+ printf(" - Failed to configure stream topology of GVI %d.\n",
+ use_gvi);
+ return;
+ }
+ printf("Topology:\n\n");
+ printf(" %s\n\n", pOut ? pOut : "No streams are configured.");
+ XFree(pOut);
+ pOut = NULL;
+}
+
+
+
+int main(int argc, char *argv[])
+{
+ Display *dpy;
+ Bool ret;
+ int major, minor;
+ int use_gvi = -1;
+ int i;
+ char *topology_str = NULL;
+
+ /*
+ * Open a display connection, and make sure the NV-CONTROL X
+ * extension is present on the screen we want to use.
+ */
+
+ dpy = XOpenDisplay(NULL);
+ if (!dpy) {
+ printf("Cannot open display '%s'.\n", XDisplayName(NULL));
+ return 1;
+ }
+
+ /* Query the NV-CONTROL version */
+
+ ret = XNVCTRLQueryVersion(dpy, &major, &minor);
+ if (ret != True) {
+ printf("The NV-CONTROL X extension does not exist on '%s'.\n",
+ XDisplayName(NULL));
+ return 1;
+ }
+
+ /* Print some information */
+
+ printf("Using NV-CONTROL extension %d.%d on %s\n\n",
+ major, minor, XDisplayName(NULL));
+
+ /* See if user wants a specific GVI device */
+
+ for (i = 0; i < argc; i++) {
+ if ((strcmp(argv[i], "-g") == 0) && ((i+1) < argc)) {
+ use_gvi = strtol(argv[i+1], NULL, 10);
+ }
+ if ((strcmp(argv[i], "-c") == 0) && ((i+1) < argc)) {
+ topology_str = argv[i+1];
+ }
+ }
+
+ /* Do what the user wants */
+
+ ret = 0;
+ for (i = 0; i < argc; i++) {
+ if (strcmp(argv[i], "-q") == 0) {
+ do_query(dpy, use_gvi);
+ ret = 1;
+ break;
+ } else if (strcmp(argv[i], "-c") == 0) {
+ do_configure(dpy, use_gvi, topology_str);
+ ret = 1;
+ break;
+ }
+ }
+ if (!ret) {
+ do_help();
+ }
+
+ return 0;
+}
diff --git a/src/gtk+-2.x/Makefile.inc b/src/gtk+-2.x/Makefile.inc
index b2a3176..44f1ec6 100644
--- a/src/gtk+-2.x/Makefile.inc
+++ b/src/gtk+-2.x/Makefile.inc
@@ -65,6 +65,8 @@ SRC += \
ctkdisplayconfig-utils.c \
ctkgvo-banner.c \
ctkgvo-sync.c \
+ ctklicense.c \
+ ctkgvi.c \
ctkpowersavings.c
@@ -111,6 +113,8 @@ EXTRA_DIST += \
ctkpowersavings.h \
ctkgvo-banner.h \
ctkgvo-sync.h \
+ ctklicense.h \
+ ctkgvi.h \
ctkpowersavings.h
dist_list::
diff --git a/src/gtk+-2.x/ctkbanner.c b/src/gtk+-2.x/ctkbanner.c
index baef5e6..ab0199c 100644
--- a/src/gtk+-2.x/ctkbanner.c
+++ b/src/gtk+-2.x/ctkbanner.c
@@ -52,6 +52,7 @@
#include "help_pixdata.h"
#include "opengl_pixdata.h"
#include "penguin_pixdata.h"
+#include "gvi_pixdata.h"
#include "rotation_pixdata.h"
#include "sdi_pixdata.h"
#include "sdi_shared_sync_bnc_pixdata.h"
@@ -364,6 +365,7 @@ static gboolean select_artwork(BannerArtworkType artwork,
{ BANNER_ARTWORK_FRAMELOCK, FALSE, 16, &framelock_pixdata },
{ BANNER_ARTWORK_GLX, FALSE, 16, &glx_pixdata },
{ BANNER_ARTWORK_GPU, FALSE, 16, &gpu_pixdata },
+ { BANNER_ARTWORK_GVI, FALSE, 16, &gvi_pixdata },
{ BANNER_ARTWORK_HELP, FALSE, 16, &help_pixdata },
{ BANNER_ARTWORK_OPENGL, FALSE, 16, &opengl_pixdata },
{ BANNER_ARTWORK_PENGUIN, TRUE, 16, &penguin_pixdata },
diff --git a/src/gtk+-2.x/ctkbanner.h b/src/gtk+-2.x/ctkbanner.h
index a692ce1..ad4d493 100644
--- a/src/gtk+-2.x/ctkbanner.h
+++ b/src/gtk+-2.x/ctkbanner.h
@@ -61,6 +61,7 @@ typedef enum {
BANNER_ARTWORK_FRAMELOCK,
BANNER_ARTWORK_GLX,
BANNER_ARTWORK_GPU,
+ BANNER_ARTWORK_GVI,
BANNER_ARTWORK_HELP,
BANNER_ARTWORK_OPENGL,
BANNER_ARTWORK_PENGUIN,
diff --git a/src/gtk+-2.x/ctkclocks.c b/src/gtk+-2.x/ctkclocks.c
index fc6dd74..efa7048 100644
--- a/src/gtk+-2.x/ctkclocks.c
+++ b/src/gtk+-2.x/ctkclocks.c
@@ -31,6 +31,7 @@
#include "ctkclocks.h"
+#include "ctklicense.h"
#include "ctkscale.h"
#include "ctkhelp.h"
#include "ctkevent.h"
@@ -82,13 +83,12 @@ static void reset_clocks_clicked(GtkWidget *widget, gpointer user_data);
static void clocks_received(GtkObject *object, gpointer arg1,
gpointer user_data);
-static void license_scrolled(GtkRange *range,
- gpointer user_data);
-
/**** GLOBALS ****************************************************************/
+static gboolean license_accepted = FALSE;
+
/* Tooltips */
static const char * __enable_button_help =
@@ -134,11 +134,6 @@ static const char * __reset_button_help =
/* Messages */
-static const char * __enable_confirm_msg =
-"To use the features on the Clock Frequencies panel you\n"
-"must agree to the terms of the preceding license agreement.\n"
-"Do you agree accept this agreement?";
-
static const char * __detect_confirm_msg =
"To find the best 3D clock frequencies your system supports,\n"
"a series of tests will take place. This testing may take several "
@@ -152,81 +147,6 @@ static const char * __canceled_msg =
"Probing for optimal 3D clock frequencies has been canceled.";
-static const char * __license_pre_msg =
-"Please read the following license agreement.";
-
-static const char * __license_msg =
-"<b>TERMS AND CONDITIONS</b>\n"
-"\n"
-"WARNING: THE SOFTWARE UTILITY YOU ARE ABOUT TO \n"
-"ENABLE (\"UTILITY\") MAY CAUSE SYSTEM DAMAGE AND \n"
-"VOID WARRANTIES. THIS UTILITY RUNS YOUR COMPUTER \n"
-"SYSTEM OUT OF THE MANUFACTURER'S DESIGN \n"
-"SPECIFICATIONS, INCLUDING, BUT NOT LIMITED TO: \n"
-"HIGHER SYSTEM VOLTAGES, ABOVE NORMAL \n"
-"TEMPERATURES, EXCESSIVE FREQUENCIES, AND \n"
-"CHANGES TO BIOS THAT MAY CORRUPT THE BIOS. YOUR \n"
-"COMPUTER'S OPERATING SYSTEM MAY HANG AND RESULT \n"
-"IN DATA LOSS OR CORRUPTED IMAGES. DEPENDING ON \n"
-"THE MANUFACTURER OF YOUR COMPUTER SYSTEM, THE \n"
-"COMPUTER SYSTEM, HARDWARE AND SOFTWARE \n"
-"WARRANTIES MAY BE VOIDED, AND YOU MAY NOT \n"
-"RECEIVE ANY FURTHER MANUFACTURER SUPPORT. \n"
-"NVIDIA DOES NOT PROVIDE CUSTOMER SERVICE SUPPORT \n"
-"FOR THIS UTILITY. IT IS FOR THESE REASONS THAT \n"
-"ABSOLUTELY NO WARRANTY OR GUARANTEE IS EITHER \n"
-"EXPRESS OR IMPLIED. BEFORE ENABLING AND USING, YOU \n"
-"SHOULD DETERMINE THE SUITABILITY OF THE UTILITY \n"
-"FOR YOUR INTENDED USE, AND YOU SHALL ASSUME ALL \n"
-"RESPONSIBILITY IN CONNECTION THEREWITH.\n"
-"\n"
-"\n"
-"<b>DISCLAIMER OF WARRANTIES</b>\n"
-"\n"
-"ALL MATERIALS, INFORMATION, AND SOFTWARE \n"
-"PRODUCTS, INCLUDED IN OR MADE AVAILABLE THROUGH \n"
-"THIS UTILITY ARE PROVIDED \"AS IS\" AND \"AS AVAILABLE\" \n"
-"FOR YOUR USE. THE UTILITY IS PROVIDED WITHOUT \n"
-"WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, \n"
-"INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF \n"
-"MERCHANTABILITY, FITNESS FOR A PARTICULAR \n"
-"PURPOSE, OR NONINFRINGEMENT. NVIDIA AND ITS \n"
-"SUBSIDIARIES DO NOT WARRANT THAT THE UTILITY IS \n"
-"RELIABLE OR CORRECT; THAT ANY DEFECTS OR ERRORS \n"
-"WILL BE CORRECTED; OR THAT THE UTILITY IS FREE OF \n"
-"VIRUSES OR OTHER HARMFUL COMPONENTS. YOUR USE \n"
-"OF THE UTILITY IS SOLELY AT YOUR RISK. BECAUSE SOME \n"
-"JURISDICTIONS DO NOT PERMIT THE EXCLUSION OF \n"
-"CERTAIN WARRANTIES, THESE EXCLUSIONS MAY NOT \n"
-"APPLY TO YOU.\n"
-"\n"
-"\n"
-"<b>LIMITATION OF LIABILITY</b>\n"
-"\n"
-"UNDER NO CIRCUMSTANCES SHALL NVIDIA AND ITS \n"
-"SUBSIDIARIES BE LIABLE FOR ANY DIRECT, INDIRECT, \n"
-"PUNITIVE, INCIDENTAL, SPECIAL, OR CONSEQUENTIAL \n"
-"DAMAGES THAT RESULT FROM THE USE OF, OR INABILITY \n"
-"TO USE, THE UTILITY. THIS LIMITATION APPLIES WHETHER \n"
-"THE ALLEGED LIABILITY IS BASED ON CONTRACT, TORT, \n"
-"NEGLIGENCE, STRICT LIABILITY, OR ANY OTHER BASIS, \n"
-"EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF \n"
-"SUCH DAMAGE. BECAUSE SOME JURISDICTIONS DO NOT \n"
-"ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR \n"
-"CONSEQUENTIAL DAMAGES, NVIDIA'S LIABILITY IN SUCH \n"
-"JURISDICTIONS SHALL BE LIMITED TO THE EXTENT \n"
-"PERMITTED BY LAW. \n"
-"\n"
-"IF YOU HAVE READ, UNDERSTOOD, AND AGREE TO ALL OF \n"
-"THE ABOVE TERMS AND CONDITIONS, CLICK THE \"YES\" \n"
-"BUTTON BELOW. \n"
-"\n"
-"IF YOU DO NOT AGREE WITH ALL OF THE ABOVE TERMS \n"
-"AND CONDITIONS, THEN CLICK ON THE \"NO\" BUTTON \n"
-"BELOW, AND DO NOT ENABLE OR USE THE UTILITY. \n\n";
-
-
-
/**** FUNCTIONS **************************************************************/
@@ -277,8 +197,6 @@ GtkWidget* ctk_clocks_new(NvCtrlAttributeHandle *handle,
GtkWidget *scale;
GtkWidget *menu;
GtkWidget *menu_item;
- GtkWidget *scrollWin;
- GtkWidget *event;
GtkWidget *label;
@@ -370,11 +288,14 @@ GtkWidget* ctk_clocks_new(NvCtrlAttributeHandle *handle,
ctk_object->handle = handle;
ctk_object->ctk_config = ctk_config;
- ctk_object->license_accepted = // = overclocking_enabled
ctk_object->overclocking_enabled = overclocking_enabled;
ctk_object->auto_detection_available = auto_detection_available;
ctk_object->probing_optimal = probing_optimal;
+ if ( overclocking_enabled ) {
+ license_accepted = TRUE;
+ }
+
/* Create the Clock menu widget */
menu = gtk_menu_new();
@@ -538,63 +459,7 @@ GtkWidget* ctk_clocks_new(NvCtrlAttributeHandle *handle,
/* Create the enable dialog */
- ctk_object->enable_dialog =
- gtk_dialog_new_with_buttons("License Agreement",
- GTK_WINDOW(gtk_widget_get_parent(GTK_WIDGET(ctk_object))),
- GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
- GTK_STOCK_YES,
- GTK_RESPONSE_ACCEPT,
- GTK_STOCK_NO,
- GTK_RESPONSE_REJECT,
- NULL
- );
-
- hbox = gtk_hbox_new(TRUE, 10);
- label = gtk_label_new(__license_pre_msg);
-
- gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 10);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(ctk_object->enable_dialog)->vbox),
- hbox, FALSE, FALSE, 10);
-
- scrollWin = gtk_scrolled_window_new(NULL, NULL);
- hbox = gtk_hbox_new(FALSE, 0);
- label = gtk_label_new("");
- event = gtk_event_box_new();
- ctk_object->license_window = scrollWin;
-
- gtk_widget_modify_fg(event, GTK_STATE_NORMAL, &(event->style->text[GTK_STATE_NORMAL]));
- gtk_widget_modify_bg(event, GTK_STATE_NORMAL, &(event->style->base[GTK_STATE_NORMAL]));
-
- gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
- gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
- gtk_label_set_markup(GTK_LABEL(label), __license_msg);
-
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin),
- GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
-
-
- gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
- gtk_container_add(GTK_CONTAINER(event), hbox);
- gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollWin),
- event);
- hbox = gtk_hbox_new(TRUE, 10);
- gtk_box_pack_start(GTK_BOX(hbox), scrollWin, TRUE, TRUE, 10);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(ctk_object->enable_dialog)->vbox),
- hbox, TRUE, TRUE, 10);
-
-
- hbox = gtk_hbox_new(FALSE, 10);
- label = gtk_label_new(__enable_confirm_msg);
-
- gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 15);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(ctk_object->enable_dialog)->vbox),
- hbox, FALSE, FALSE, 10);
-
- g_signal_connect((gpointer)
- GTK_RANGE(GTK_SCROLLED_WINDOW(scrollWin)->vscrollbar),
- "value_changed",
- G_CALLBACK(license_scrolled),
- (gpointer) ctk_object);
+ ctk_object->license_dialog = ctk_license_dialog_new(GTK_WIDGET(ctk_object));
/* Create the auto detect dialog */
@@ -944,48 +809,15 @@ static void overclocking_state_toggled(GtkWidget *widget, gpointer user_data)
/* Verify user knows the risks involved */
- if ( enabled && !ctk_object->license_accepted ) {
-
- /* Reset dialog window size */
-
- gint w, h;
- GdkScreen * s =
- gtk_window_get_screen(GTK_WINDOW(GTK_DIALOG(ctk_object->enable_dialog)));
-
- gtk_window_get_size(GTK_WINDOW(GTK_DIALOG(ctk_object->enable_dialog)),
- &w, &h);
-
- /* Make license dialog default to 75% of the screen height */
-
- h = (gint)(0.55f * gdk_screen_get_height(s));
- w = 1;
+ if ( enabled && !license_accepted ) {
- gtk_window_resize(GTK_WINDOW(GTK_DIALOG(ctk_object->enable_dialog)),
- w, h);
-
- /* Reset scroll bar to the top */
-
- gtk_adjustment_set_value(GTK_ADJUSTMENT(
- GTK_RANGE(
- GTK_SCROLLED_WINDOW(
- ctk_object->license_window)->vscrollbar)->adjustment)
- ,0.0f);
-
-
- /* Disable the YES button */
-
- gtk_dialog_set_response_sensitive(GTK_DIALOG(ctk_object->enable_dialog),
- GTK_RESPONSE_ACCEPT,
- FALSE);
-
- gtk_widget_show_all(ctk_object->enable_dialog);
- result = gtk_dialog_run (GTK_DIALOG(ctk_object->enable_dialog));
- gtk_widget_hide(ctk_object->enable_dialog);
+ result =
+ ctk_license_run_dialog(CTK_LICENSE_DIALOG(ctk_object->license_dialog));
switch (result)
{
case GTK_RESPONSE_ACCEPT:
- ctk_object->license_accepted = TRUE;
+ license_accepted = TRUE;
break;
case GTK_RESPONSE_REJECT:
@@ -1556,29 +1388,3 @@ void ctk_clocks_select(GtkWidget *widget)
__detect_wait_msg);
}
}
-
-
-
-/*****
- *
- * Callback Function - This function gets called when the user scrolls
- * the license agreement text. Once the user has scrolled to the end
- * of the document, the YES button is activated.
- *
- */
-
-static void license_scrolled(GtkRange *range,
- gpointer user_data)
-{
- CtkClocks *ctk_object = CTK_CLOCKS(user_data);
- GtkAdjustment *adj = gtk_range_get_adjustment(range);
-
-
- /* Enable the dialog's "YES" button once user reaches end of license */
- if ( adj->value + adj->page_size >= adj->upper ) {
-
- gtk_dialog_set_response_sensitive(GTK_DIALOG(ctk_object->enable_dialog),
- GTK_RESPONSE_ACCEPT,
- TRUE);
- }
-}
diff --git a/src/gtk+-2.x/ctkclocks.h b/src/gtk+-2.x/ctkclocks.h
index 8898452..2e0d0d4 100644
--- a/src/gtk+-2.x/ctkclocks.h
+++ b/src/gtk+-2.x/ctkclocks.h
@@ -62,10 +62,9 @@ struct _CtkClocks
NvCtrlAttributeHandle *handle;
CtkConfig *ctk_config;
- GtkWidget *enable_dialog;
+ GtkWidget *license_dialog;
GtkWidget *detect_dialog;
- Bool license_accepted;
GtkWidget *license_window;
diff --git a/src/gtk+-2.x/ctkdisplayconfig.c b/src/gtk+-2.x/ctkdisplayconfig.c
index 37763aa..0a9d923 100644
--- a/src/gtk+-2.x/ctkdisplayconfig.c
+++ b/src/gtk+-2.x/ctkdisplayconfig.c
@@ -589,7 +589,7 @@ static int generate_xconf_metamode_str(CtkDisplayConfig *ctk_object,
* metamode first in the list so the X server starts
* in this mode.
*/
- if (!layout->advanced_mode) {
+ if (!ctk_object->advanced_mode) {
metamode_strs = screen_get_metamode_str(screen,
screen->cur_metamode_idx, 1);
len = strlen(metamode_strs);
@@ -610,7 +610,7 @@ static int generate_xconf_metamode_str(CtkDisplayConfig *ctk_object,
if (!(metamode->source & METAMODE_SOURCE_USER)) continue;
/* The current mode was already included */
- if (!layout->advanced_mode &&
+ if (!ctk_object->advanced_mode &&
(metamode_idx == screen->cur_metamode_idx))
continue;
@@ -620,7 +620,7 @@ static int generate_xconf_metamode_str(CtkDisplayConfig *ctk_object,
* smaller that the bounding box of all the metamodes will result
* in an unwanted panning domain being setup for the first mode.
*/
- if ((!layout->advanced_mode) &&
+ if ((!ctk_object->advanced_mode) &&
((metamode->edim[W] > start_width) ||
(metamode->edim[H] > start_height)))
continue;
@@ -2068,10 +2068,9 @@ static void setup_display_modename(CtkDisplayConfig *ctk_object)
{
nvDisplayPtr display = ctk_display_layout_get_selected_display
(CTK_DISPLAY_LAYOUT(ctk_object->obj_layout));
- nvLayoutPtr layout = ctk_object->layout;
- if (!display || !display->screen || !layout->advanced_mode) {
+ if (!display || !display->screen || !ctk_object->advanced_mode) {
gtk_widget_hide(ctk_object->box_display_modename);
return;
}
@@ -2144,7 +2143,6 @@ static void setup_display_refresh_dropdown(CtkDisplayConfig *ctk_object)
nvDisplayPtr display = ctk_display_layout_get_selected_display
(CTK_DISPLAY_LAYOUT(ctk_object->obj_layout));
- nvLayoutPtr layout = ctk_object->layout;
@@ -2245,14 +2243,14 @@ static void setup_display_refresh_dropdown(CtkDisplayConfig *ctk_object)
name = g_strdup("Auto");
/* In advanced mode, all modelines are selectable */
- } else if (count_ref > 1 && layout->advanced_mode) {
+ } else if (count_ref > 1 && ctk_object->advanced_mode) {
gchar *tmp;
tmp = g_strdup_printf("%s (%d)", name, num_ref);
g_free(name);
name = tmp;
/* in simple mode only show one refresh rate */
- } else if (num_ref > 1 && !layout->advanced_mode) {
+ } else if (num_ref > 1 && !ctk_object->advanced_mode) {
continue;
}
@@ -2937,7 +2935,7 @@ static void setup_display_panning(CtkDisplayConfig *ctk_object)
(CTK_DISPLAY_LAYOUT(ctk_object->obj_layout));
- if (!display || !display->screen || !layout->advanced_mode) {
+ if (!display || !display->screen || !ctk_object->advanced_mode) {
gtk_widget_hide(ctk_object->box_display_panning);
return;
}
@@ -3411,7 +3409,6 @@ static void setup_screen_position(CtkDisplayConfig *ctk_object)
static void setup_screen_metamode(CtkDisplayConfig *ctk_object)
{
- nvLayoutPtr layout = ctk_object->layout;
nvScreenPtr screen = ctk_display_layout_get_selected_screen
(CTK_DISPLAY_LAYOUT(ctk_object->obj_layout));
gchar *str;
@@ -3420,7 +3417,7 @@ static void setup_screen_metamode(CtkDisplayConfig *ctk_object)
/* Only show the metamodes in advanced mode for screens
* that support scanout.
*/
- if (!screen || screen->no_scanout || !layout->advanced_mode) {
+ if (!screen || screen->no_scanout || !ctk_object->advanced_mode) {
gtk_widget_hide(ctk_object->box_screen_metamode);
return;
}
@@ -4763,14 +4760,13 @@ static gboolean do_query_remove_display(CtkDisplayConfig *ctk_object,
void do_disable_display(CtkDisplayConfig *ctk_object, nvDisplayPtr display)
{
- nvLayoutPtr layout = ctk_object->layout;
nvGpuPtr gpu = display->gpu;
gchar *str;
gchar *type = display_get_type_str(display->device_mask, 0);
/* Setup the remove display dialog */
- if (layout->advanced_mode) {
+ if (ctk_object->advanced_mode) {
str = g_strdup_printf("Disable the display device %s (%s) "
"on GPU-%d (%s)?",
display->name, type,
@@ -5043,7 +5039,6 @@ static void display_refresh_changed(GtkWidget *widget, gpointer user_data)
gint idx;
nvModeLinePtr modeline;
nvDisplayPtr display;
- nvLayoutPtr layout = ctk_object->layout;
/* Get the modeline and display to set */
@@ -5056,7 +5051,7 @@ static void display_refresh_changed(GtkWidget *widget, gpointer user_data)
/* In Basic view, we assume the user most likely wants
* to change which metamode is being used.
*/
- if (!layout->advanced_mode && (display->screen->num_displays == 1)) {
+ if (!ctk_object->advanced_mode && (display->screen->num_displays == 1)) {
int metamode_idx =
display_find_closest_mode_matching_modeline(display, modeline);
@@ -5095,7 +5090,6 @@ static void display_resolution_changed(GtkWidget *widget, gpointer user_data)
CtkDisplayConfig *ctk_object = CTK_DISPLAY_CONFIG(user_data);
gint idx;
gint last_idx;
- nvLayoutPtr layout = ctk_object->layout;
nvModeLinePtr modeline;
nvDisplayPtr display;
@@ -5120,7 +5114,7 @@ static void display_resolution_changed(GtkWidget *widget, gpointer user_data)
/* In Basic view, we assume the user most likely wants
* to change which metamode is being used.
*/
- if (!layout->advanced_mode && (display->screen->num_displays == 1)) {
+ if (!ctk_object->advanced_mode && (display->screen->num_displays == 1)) {
int metamode_idx =
display_find_closest_mode_matching_modeline(display, modeline);
@@ -7373,15 +7367,14 @@ static void save_clicked(GtkWidget *widget, gpointer user_data)
static void advanced_clicked(GtkWidget *widget, gpointer user_data)
{
CtkDisplayConfig *ctk_object = CTK_DISPLAY_CONFIG(user_data);
- nvLayoutPtr layout = ctk_object->layout;
/* Toggle advanced options for the display */
- layout->advanced_mode = !(layout->advanced_mode);
+ ctk_object->advanced_mode = !(ctk_object->advanced_mode);
/* Show advanced display options */
- if (layout->advanced_mode) {
+ if (ctk_object->advanced_mode) {
gtk_button_set_label(GTK_BUTTON(widget), "Basic...");
ctk_display_layout_set_advanced_mode
(CTK_DISPLAY_LAYOUT(ctk_object->obj_layout), 1);
diff --git a/src/gtk+-2.x/ctkdisplayconfig.h b/src/gtk+-2.x/ctkdisplayconfig.h
index 3c03224..6a35513 100644
--- a/src/gtk+-2.x/ctkdisplayconfig.h
+++ b/src/gtk+-2.x/ctkdisplayconfig.h
@@ -180,6 +180,7 @@ typedef struct _CtkDisplayConfig
GtkWidget *btn_probe;
GtkWidget *btn_advanced;
+ gboolean advanced_mode;
GtkWidget *btn_reset;
diff --git a/src/gtk+-2.x/ctkdisplaylayout.h b/src/gtk+-2.x/ctkdisplaylayout.h
index 6634bf0..bd56d7c 100644
--- a/src/gtk+-2.x/ctkdisplaylayout.h
+++ b/src/gtk+-2.x/ctkdisplaylayout.h
@@ -313,9 +313,6 @@ typedef struct nvGpuRec {
typedef struct nvLayoutRec {
XConfigLayoutPtr conf_layout;
char *filename;
- Bool advanced_mode; /* Allow advanced layout modifications: */
- /* - panning */
- /* - multiple (meta)modes */
NvCtrlAttributeHandle *handle;
diff --git a/src/gtk+-2.x/ctkevent.c b/src/gtk+-2.x/ctkevent.c
index f7ce526..bea446e 100644
--- a/src/gtk+-2.x/ctkevent.c
+++ b/src/gtk+-2.x/ctkevent.c
@@ -270,9 +270,23 @@ static void ctk_event_class_init(CtkEventClass *ctk_event_class)
MAKE_SIGNAL(NV_CTRL_SLI_MOSAIC_MODE_AVAILABLE);
MAKE_SIGNAL(NV_CTRL_GVO_ENABLE_RGB_DATA);
MAKE_SIGNAL(NV_CTRL_IMAGE_SHARPENING_DEFAULT);
- MAKE_SIGNAL(NV_CTRL_GVI_NUM_PORTS);
+ MAKE_SIGNAL(NV_CTRL_GVI_NUM_JACKS);
+ MAKE_SIGNAL(NV_CTRL_GVI_MAX_LINKS_PER_STREAM);
+ MAKE_SIGNAL(NV_CTRL_GVI_DETECTED_CHANNEL_BITS_PER_COMPONENT);
+ MAKE_SIGNAL(NV_CTRL_GVI_REQUESTED_STREAM_BITS_PER_COMPONENT);
+ MAKE_SIGNAL(NV_CTRL_GVI_DETECTED_CHANNEL_COMPONENT_SAMPLING);
+ MAKE_SIGNAL(NV_CTRL_GVI_REQUESTED_STREAM_COMPONENT_SAMPLING);
+ MAKE_SIGNAL(NV_CTRL_GVI_REQUESTED_STREAM_CHROMA_EXPAND);
+ MAKE_SIGNAL(NV_CTRL_GVI_DETECTED_CHANNEL_COLOR_SPACE);
+ MAKE_SIGNAL(NV_CTRL_GVI_DETECTED_CHANNEL_LINK_ID);
+ MAKE_SIGNAL(NV_CTRL_GVI_DETECTED_CHANNEL_SMPTE352_IDENTIFIER);
+ MAKE_SIGNAL(NV_CTRL_GVI_GLOBAL_IDENTIFIER);
MAKE_SIGNAL(NV_CTRL_FRAMELOCK_SYNC_DELAY_RESOLUTION);
MAKE_SIGNAL(NV_CTRL_GPU_POWER_MIZER_MODE);
+ MAKE_SIGNAL(NV_CTRL_GVI_SYNC_OUTPUT_FORMAT);
+ MAKE_SIGNAL(NV_CTRL_GVI_MAX_CHANNELS_PER_JACK);
+ MAKE_SIGNAL(NV_CTRL_GVI_MAX_STREAMS);
+ MAKE_SIGNAL(NV_CTRL_GVI_NUM_CAPTURE_SURFACES);
#undef MAKE_SIGNAL
@@ -283,7 +297,7 @@ static void ctk_event_class_init(CtkEventClass *ctk_event_class)
* knows about.
*/
-#if NV_CTRL_LAST_ATTRIBUTE != NV_CTRL_GPU_POWER_MIZER_MODE
+#if NV_CTRL_LAST_ATTRIBUTE != NV_CTRL_GVI_NUM_CAPTURE_SURFACES
#warning "There are attributes that do not emit signals!"
#endif
diff --git a/src/gtk+-2.x/ctkgpu.c b/src/gtk+-2.x/ctkgpu.c
index 316d11d..b8790db 100644
--- a/src/gtk+-2.x/ctkgpu.c
+++ b/src/gtk+-2.x/ctkgpu.c
@@ -121,6 +121,77 @@ static gchar *make_display_device_list(NvCtrlAttributeHandle *handle,
} /* make_display_device_list() */
+void get_bus_related_info(NvCtrlAttributeHandle *handle,
+ gchar **bus,
+ gchar **pci_bus_id)
+{
+ int tmp, ret;
+ int pci_domain, pci_bus, pci_device, pci_func;
+ gchar *bus_type, *bus_rate, *bus_id;
+ gchar *__pci_bus_id_unknown = "?@?:?:?";
+
+ /* NV_CTRL_BUS_TYPE */
+
+ ret = NvCtrlGetAttribute(handle, NV_CTRL_BUS_TYPE, &tmp);
+ bus_type = NULL;
+ if (ret == NvCtrlSuccess) {
+ if (tmp == NV_CTRL_BUS_TYPE_AGP) bus_type = "AGP";
+ else if (tmp == NV_CTRL_BUS_TYPE_PCI) bus_type = "PCI";
+ else if (tmp == NV_CTRL_BUS_TYPE_PCI_EXPRESS) bus_type = "PCI Express";
+ else if (tmp == NV_CTRL_BUS_TYPE_INTEGRATED) bus_type = "Integrated";
+ }
+
+ /* NV_CTRL_BUS_RATE */
+
+ bus_rate = NULL;
+ if (tmp == NV_CTRL_BUS_TYPE_AGP ||
+ tmp == NV_CTRL_BUS_TYPE_PCI_EXPRESS) {
+ ret = NvCtrlGetAttribute(handle, NV_CTRL_BUS_RATE, &tmp);
+ if (ret == NvCtrlSuccess) {
+ bus_rate = g_strdup_printf("%dX", tmp);
+ }
+ }
+
+ if (bus_rate) {
+ *bus = g_strdup_printf("%s %s", bus_type, bus_rate);
+ g_free(bus_rate);
+ } else {
+ *bus = g_strdup(bus_type);
+ }
+
+ /* NV_CTRL_PCI_DOMAIN & NV_CTRL_PCI_BUS &
+ * NV_CTRL_PCI_DEVICE & NV__CTRL_PCI_FUNCTION
+ */
+
+ bus_id = NULL;
+ ret = NvCtrlGetAttribute(handle, NV_CTRL_PCI_DOMAIN, &pci_domain);
+ if (ret != NvCtrlSuccess) bus_id = __pci_bus_id_unknown;
+
+ ret = NvCtrlGetAttribute(handle, NV_CTRL_PCI_BUS, &pci_bus);
+ if (ret != NvCtrlSuccess) bus_id = __pci_bus_id_unknown;
+
+ ret = NvCtrlGetAttribute(handle, NV_CTRL_PCI_DEVICE, &pci_device);
+ if (ret != NvCtrlSuccess) bus_id = __pci_bus_id_unknown;
+
+ ret = NvCtrlGetAttribute(handle, NV_CTRL_PCI_FUNCTION, &pci_func);
+ if (ret != NvCtrlSuccess) bus_id = __pci_bus_id_unknown;
+
+ if (!bus_id) {
+ if (pci_domain == 0) {
+ bus_id = g_strdup_printf("%d:%d:%d", pci_bus, pci_device,
+ pci_func);
+ } else {
+ bus_id = g_strdup_printf("%d@%d:%d:%d", pci_bus, pci_domain,
+ pci_device, pci_func);
+ }
+ } else {
+ bus_id = g_strdup(__pci_bus_id_unknown);
+ }
+
+ *pci_bus_id = bus_id;
+}
+
+
GtkWidget* ctk_gpu_new(
NvCtrlAttributeHandle *handle,
@@ -138,15 +209,12 @@ GtkWidget* ctk_gpu_new(
GtkWidget *table;
char *product_name, *vbios_version, *video_ram, *irq;
- gchar *bus_type, *bus_rate, *bus;
- int pci_domain, pci_bus, pci_device, pci_func;
+ gchar *bus;
gchar *pci_bus_id;
gchar pci_device_id[ARRAY_ELEMENTS];
gchar pci_vendor_id[ARRAY_ELEMENTS];
int pci_id;
- gchar *__pci_bus_id_unknown = "?@?:?:?";
-
int tmp;
ReturnStatus ret;
@@ -181,64 +249,10 @@ GtkWidget* ctk_gpu_new(
&product_name);
if (ret != NvCtrlSuccess) product_name = NULL;
- /* NV_CTRL_BUS_TYPE */
-
- ret = NvCtrlGetAttribute(handle, NV_CTRL_BUS_TYPE, &tmp);
- bus_type = NULL;
- if (ret == NvCtrlSuccess) {
- if (tmp == NV_CTRL_BUS_TYPE_AGP) bus_type = "AGP";
- else if (tmp == NV_CTRL_BUS_TYPE_PCI) bus_type = "PCI";
- else if (tmp == NV_CTRL_BUS_TYPE_PCI_EXPRESS) bus_type = "PCI Express";
- else if (tmp == NV_CTRL_BUS_TYPE_INTEGRATED) bus_type = "Integrated";
- }
-
- /* NV_CTRL_BUS_RATE */
-
- bus_rate = NULL;
- if (tmp == NV_CTRL_BUS_TYPE_AGP ||
- tmp == NV_CTRL_BUS_TYPE_PCI_EXPRESS) {
- ret = NvCtrlGetAttribute(handle, NV_CTRL_BUS_RATE, &tmp);
- if (ret == NvCtrlSuccess) {
- bus_rate = g_strdup_printf("%dX", tmp);
- }
- }
-
- if (bus_rate) {
- bus = g_strdup_printf("%s %s", bus_type, bus_rate);
- g_free(bus_rate);
- } else {
- bus = g_strdup(bus_type);
- }
-
- /* NV_CTRL_PCI_DOMAIN & NV_CTRL_PCI_BUS &
- * NV_CTRL_PCI_DEVICE & NV__CTRL_PCI_FUNCTION
- */
-
- pci_bus_id = NULL;
- ret = NvCtrlGetAttribute(handle, NV_CTRL_PCI_DOMAIN, &pci_domain);
- if (ret != NvCtrlSuccess) pci_bus_id = __pci_bus_id_unknown;
+ /* Get Bus related information */
+
+ get_bus_related_info(handle, &bus, &pci_bus_id);
- ret = NvCtrlGetAttribute(handle, NV_CTRL_PCI_BUS, &pci_bus);
- if (ret != NvCtrlSuccess) pci_bus_id = __pci_bus_id_unknown;
-
- ret = NvCtrlGetAttribute(handle, NV_CTRL_PCI_DEVICE, &pci_device);
- if (ret != NvCtrlSuccess) pci_bus_id = __pci_bus_id_unknown;
-
- ret = NvCtrlGetAttribute(handle, NV_CTRL_PCI_FUNCTION, &pci_func);
- if (ret != NvCtrlSuccess) pci_bus_id = __pci_bus_id_unknown;
-
- if (!pci_bus_id) {
- if (pci_domain == 0) {
- pci_bus_id = g_strdup_printf("%d:%d:%d", pci_bus, pci_device,
- pci_func);
- } else {
- pci_bus_id = g_strdup_printf("%d@%d:%d:%d", pci_bus, pci_domain,
- pci_device, pci_func);
- }
- } else {
- pci_bus_id = g_strdup(__pci_bus_id_unknown);
- }
-
/* NV_CTRL_PCI_ID */
pci_device_id[ARRAY_ELEMENTS-1] = '\0';
diff --git a/src/gtk+-2.x/ctkgpu.h b/src/gtk+-2.x/ctkgpu.h
index 757ed88..9ccd7a7 100644
--- a/src/gtk+-2.x/ctkgpu.h
+++ b/src/gtk+-2.x/ctkgpu.h
@@ -74,6 +74,10 @@ GtkWidget* ctk_gpu_new (NvCtrlAttributeHandle *handle,
CtrlHandleTarget *t,
CtkEvent *ctk_event);
+void get_bus_related_info(NvCtrlAttributeHandle *handle,
+ gchar **bus,
+ gchar **pci_bus_id);
+
GtkTextBuffer *ctk_gpu_create_help(GtkTextTagTable *);
diff --git a/src/gtk+-2.x/ctkgvi.c b/src/gtk+-2.x/ctkgvi.c
new file mode 100644
index 0000000..bb5992a
--- /dev/null
+++ b/src/gtk+-2.x/ctkgvi.c
@@ -0,0 +1,726 @@
+/*
+ * nvidia-settings: A tool for configuring the NVIDIA X driver on Unix
+ * and Linux systems.
+ *
+ * Copyright (C) 2009 NVIDIA Corporation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of Version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See Version 2
+ * of the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the:
+ *
+ * Free Software Foundation, Inc.
+ * 59 Temple Place - Suite 330
+ * Boston, MA 02111-1307, USA
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <gtk/gtk.h>
+#include <NvCtrlAttributes.h>
+
+#include "msg.h"
+
+#include "ctkutils.h"
+#include "ctkhelp.h"
+#include "ctkgvo.h"
+#include "ctkgvi.h"
+#include "ctkgpu.h"
+#include "ctkbanner.h"
+
+#define DEFAULT_UPDATE_VIDEO_FORMAT_INFO_TIME_INTERVAL 1000
+
+static gboolean update_sdi_input_info(gpointer);
+
+GType ctk_gvi_get_type(void)
+{
+ static GType ctk_gvi_type = 0;
+
+ if (!ctk_gvi_type) {
+ static const GTypeInfo ctk_gvi_info = {
+ sizeof (CtkGviClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ NULL, /* constructor */
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (CtkGvi),
+ 0, /* n_preallocs */
+ NULL, /* instance_init */
+ };
+
+ ctk_gvi_type =
+ g_type_register_static(GTK_TYPE_VBOX, "CtkGvi",
+ &ctk_gvi_info, 0);
+ }
+
+ return ctk_gvi_type;
+
+} /* ctk_gvi_get_type() */
+
+static const GvioFormatName samplingFormatNames[] = {
+ { NV_CTRL_GVI_COMPONENT_SAMPLING_4444, "4:4:4:4"},
+ { NV_CTRL_GVI_COMPONENT_SAMPLING_4224, "4:2:2:4"},
+ { NV_CTRL_GVI_COMPONENT_SAMPLING_444, "4:4:4" },
+ { NV_CTRL_GVI_COMPONENT_SAMPLING_422, "4:2:2" },
+ { NV_CTRL_GVI_COMPONENT_SAMPLING_420, "4:2:0" },
+ { -1, NULL },
+};
+
+static const GvioFormatName bitFormatNames[] = {
+ { NV_CTRL_GVI_BITS_PER_COMPONENT_8, "8 bpc" },
+ { NV_CTRL_GVI_BITS_PER_COMPONENT_10, "10 bpc"},
+ { NV_CTRL_GVI_BITS_PER_COMPONENT_12, "12 bpc"},
+ { -1, NULL },
+};
+
+static const GvioFormatName colorSpaceFormatNames[] = {
+ { NV_CTRL_GVI_COLOR_SPACE_GBR, "GBR" },
+ { NV_CTRL_GVI_COLOR_SPACE_GBRA, "GBRA" },
+ { NV_CTRL_GVI_COLOR_SPACE_GBRD, "GBRD" },
+ { NV_CTRL_GVI_COLOR_SPACE_YCBCR, "YCbCr" },
+ { NV_CTRL_GVI_COLOR_SPACE_YCBCRA, "YCbCrA"},
+ { NV_CTRL_GVI_COLOR_SPACE_YCBCRD, "YCbCrD"},
+ { -1, NULL },
+};
+
+extern const GvioFormatName videoFormatNames[];
+
+
+static gboolean update_sdi_input_info(gpointer user_data);
+
+/*
+ * ctk_gvio_get_format_name() - retrun name of format.
+ */
+const char * ctk_gvio_get_format_name(const GvioFormatName *formatTable,
+ const gint format)
+{
+ int i;
+ for (i = 0; formatTable[i].name; i++) {
+ if (formatTable[i].format == format) {
+ return formatTable[i].name;
+ }
+ }
+ return "Unknown";
+}
+
+
+
+/*
+ * update_sdi_input_info() - Update SDI input information.
+ */
+
+typedef struct {
+ int video_format;
+ int component_sampling;
+ int color_space;
+ int bpc;
+ int link_id;
+} ChannelInfo;
+
+
+static void query_channel_info(CtkGvi *ctk_gvi, int jack, int channel, ChannelInfo *channel_info)
+{
+ gint ret;
+ unsigned int jack_channel = ((channel & 0xFFFF) << 16);
+ jack_channel |= (jack & 0xFFFF);
+
+
+ ret = NvCtrlGetDisplayAttribute(ctk_gvi->handle,
+ jack_channel,
+ NV_CTRL_GVIO_DETECTED_VIDEO_FORMAT,
+ &(channel_info->video_format));
+ if (ret != NvCtrlSuccess) {
+ channel_info->video_format = NV_CTRL_GVIO_VIDEO_FORMAT_NONE;
+ }
+
+ ret = NvCtrlGetDisplayAttribute(ctk_gvi->handle,
+ jack_channel,
+ NV_CTRL_GVI_DETECTED_CHANNEL_COMPONENT_SAMPLING,
+ &(channel_info->component_sampling));
+ if (ret != NvCtrlSuccess) {
+ channel_info->component_sampling =
+ NV_CTRL_GVI_COMPONENT_SAMPLING_UNKNOWN;
+ }
+
+ ret = NvCtrlGetDisplayAttribute(ctk_gvi->handle,
+ jack_channel,
+ NV_CTRL_GVI_DETECTED_CHANNEL_COLOR_SPACE,
+ &(channel_info->color_space));
+ if (ret != NvCtrlSuccess) {
+ channel_info->color_space = NV_CTRL_GVI_COLOR_SPACE_UNKNOWN;
+ }
+
+ ret = NvCtrlGetDisplayAttribute(ctk_gvi->handle,
+ jack_channel,
+ NV_CTRL_GVI_DETECTED_CHANNEL_BITS_PER_COMPONENT,
+ &(channel_info->bpc));
+ if (ret != NvCtrlSuccess) {
+ channel_info->bpc = NV_CTRL_GVI_BITS_PER_COMPONENT_UNKNOWN;
+ }
+
+ ret = NvCtrlGetDisplayAttribute(ctk_gvi->handle,
+ jack_channel,
+ NV_CTRL_GVI_DETECTED_CHANNEL_LINK_ID,
+ &(channel_info->link_id));
+ if (ret != NvCtrlSuccess) {
+ channel_info->link_id = NV_CTRL_GVI_LINK_ID_UNKNOWN;
+ }
+}
+
+
+static void update_sdi_input_info_simple(CtkGvi *ctk_gvi)
+{
+ GtkBox *vbox = GTK_BOX(ctk_gvi->input_info_vbox);
+ GtkWidget *label;
+ gchar *label_str;
+ gint jack;
+ gint channel;
+ const char *vidfmt_str;
+ GtkWidget *box = NULL;
+
+
+ /* If not showing detailed information,
+ * Show single entry for active jack/channel pairs as:
+ *
+ * Jack #, Channel #: VIDEO FORMAT
+ */
+
+ for (jack = 0; jack < ctk_gvi->num_jacks; jack++) {
+ ChannelInfo channel_infos[ctk_gvi->max_channels_per_jack];
+ ChannelInfo *channel_info;
+ int num_active_channels = 0;
+ int show_channel = 0; /* When 0 or 1 active channel detected */
+
+ /* Get information for each channel in the jack. */
+ for (channel = 0; channel < ctk_gvi->max_channels_per_jack;
+ channel++) {
+
+ channel_info = channel_infos + channel;
+ query_channel_info(ctk_gvi, jack, channel, channel_info);
+ if (channel_info->video_format != NV_CTRL_GVIO_VIDEO_FORMAT_NONE) {
+ show_channel = channel;
+ num_active_channels++;
+ }
+ }
+
+ /* Populate the info table */
+
+ if (num_active_channels > 1) {
+ box = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(vbox, box, FALSE, FALSE, 0);
+
+ label_str = g_strdup_printf("Jack %d:", jack+1);
+ label = gtk_label_new(label_str);
+ g_free(label_str);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
+ }
+
+ for (channel = 0; channel < ctk_gvi->max_channels_per_jack;
+ channel++) {
+ channel_info = channel_infos + channel;
+
+ vidfmt_str = ctk_gvio_get_format_name(videoFormatNames,
+ channel_info->video_format);
+
+ if (num_active_channels <= 1) {
+ if (channel != show_channel) continue;
+ label_str = g_strdup_printf("Jack %d: %s", jack+1, vidfmt_str);
+ label = gtk_label_new(label_str);
+ g_free(label_str);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_box_pack_start(vbox, label, FALSE, FALSE, 0);
+
+ } else {
+ label_str = g_strdup_printf("Channel %d: %s",
+ channel+1, vidfmt_str);
+ label = gtk_label_new(label_str);
+ g_free(label_str);
+ gtk_misc_set_padding(GTK_MISC(label), 5, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
+ }
+ }
+ }
+}
+
+
+static void jack_channel_changed(GtkOptionMenu *optionmenu,
+ gpointer user_data)
+{
+ CtkGvi *ctk_gvi = CTK_GVI(user_data);
+ GtkWidget *menu;
+ GtkWidget *menu_item;
+
+ /* Track new selection */
+ menu = gtk_option_menu_get_menu(optionmenu);
+ menu_item = gtk_menu_get_active(GTK_MENU(menu));
+
+ ctk_gvi->cur_jack_channel =
+ GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(menu_item),
+ "JACK_CHANNEL"));
+
+ update_sdi_input_info(ctk_gvi);
+}
+
+
+static GtkWidget *create_jack_channel_menu(CtkGvi *ctk_gvi)
+{
+ GtkWidget *omenu;
+ GtkWidget *menu;
+ GtkWidget *menu_item;
+ gint idx;
+ gchar *label_str;
+ gint jack;
+ gint channel;
+ unsigned int jack_channel;
+ gint selected_idx = 0;
+
+ /* Create the menu */
+
+ omenu = gtk_option_menu_new();
+
+ menu = gtk_menu_new();
+
+ /* Just show all jack/channel pairs in dropdown */
+
+ idx = 0;
+ for (jack = 0; jack < ctk_gvi->num_jacks; jack++) {
+ for (channel = 0; channel < ctk_gvi->max_channels_per_jack;
+ channel++) {
+
+ jack_channel = ((channel & 0xFFFF) << 16);
+ jack_channel |= (jack & 0xFFFF);
+
+
+ label_str = g_strdup_printf("Jack %d, Channel %d",
+ jack+1, channel+1);
+ menu_item = gtk_menu_item_new_with_label(label_str);
+ g_free(label_str);
+
+ g_object_set_data(G_OBJECT(menu_item),
+ "JACK_CHANNEL",
+ GUINT_TO_POINTER(jack_channel));
+
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
+ gtk_widget_show(menu_item);
+
+ if (jack_channel == ctk_gvi->cur_jack_channel) {
+ selected_idx = idx;
+ }
+
+ idx++;
+ }
+ }
+
+ gtk_option_menu_set_menu(GTK_OPTION_MENU(omenu), menu);
+
+ gtk_option_menu_set_history(GTK_OPTION_MENU(omenu), selected_idx);
+
+ g_signal_connect(G_OBJECT(omenu), "changed",
+ G_CALLBACK(jack_channel_changed),
+ (gpointer) ctk_gvi);
+
+ return omenu;
+}
+
+
+static void update_sdi_input_info_all(CtkGvi *ctk_gvi)
+{
+ GtkBox *vbox = GTK_BOX(ctk_gvi->input_info_vbox);
+ GtkWidget *box;
+ GtkWidget *label;
+ gchar *label_str;
+ GtkWidget *table;
+ gint jack;
+ gint channel;
+ const char *str;
+
+ ChannelInfo channel_info;
+
+ jack = ctk_gvi->cur_jack_channel & 0xFFFF;
+ channel = (ctk_gvi->cur_jack_channel >> 16) & 0xFFFF;
+
+ query_channel_info(ctk_gvi, jack, channel, &channel_info);
+
+ box = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), box, FALSE, FALSE, 0);
+
+ table = gtk_table_new(5, 2, FALSE);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 5);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 5);
+
+ gtk_box_pack_start(GTK_BOX(box), table, FALSE, FALSE, 0);
+
+ /* Show channel's information in table format */
+
+ label = gtk_label_new("Video Format:");
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1);
+
+ str = ctk_gvio_get_format_name(videoFormatNames,
+ channel_info.video_format);
+ label_str = g_strdup_printf("%s", str);
+ label = gtk_label_new(label_str);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_table_attach_defaults(GTK_TABLE(table), label, 1, 2, 0, 1);
+ g_free(label_str);
+
+
+ label = gtk_label_new("Component Sampling:");
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
+
+ str = ctk_gvio_get_format_name(samplingFormatNames,
+ channel_info.component_sampling);
+ label_str = g_strdup_printf("%s", str);
+ label = gtk_label_new(label_str);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_table_attach_defaults(GTK_TABLE(table), label, 1, 2, 1, 2);
+ g_free(label_str);
+
+
+ label = gtk_label_new("Color Space:");
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 2, 3);
+
+ str = ctk_gvio_get_format_name(colorSpaceFormatNames,
+ channel_info.color_space);
+ label_str = g_strdup_printf("%s", str);
+ label = gtk_label_new(label_str);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_table_attach_defaults(GTK_TABLE(table), label, 1, 2, 2, 3);
+ g_free(label_str);
+
+
+ label = gtk_label_new("Bits Per Component:");
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 3, 4);
+
+ str = ctk_gvio_get_format_name(bitFormatNames,
+ channel_info.bpc);
+ label_str = g_strdup_printf("%s", str);
+ label = gtk_label_new(label_str);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_table_attach_defaults(GTK_TABLE(table), label, 1, 2, 3, 4);
+ g_free(label_str);
+
+
+ label = gtk_label_new("Link ID:");
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 4, 5);
+
+ if (channel_info.link_id == NV_CTRL_GVI_LINK_ID_UNKNOWN) {
+ label_str = g_strdup_printf("Unknown");
+ } else {
+ label_str = g_strdup_printf("%d", channel_info.link_id);
+ }
+ label = gtk_label_new(label_str);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_table_attach_defaults(GTK_TABLE(table), label, 1, 2, 4, 5);
+ g_free(label_str);
+}
+
+
+static gboolean update_sdi_input_info(gpointer user_data)
+{
+ CtkGvi *ctk_gvi = CTK_GVI(user_data);
+ gboolean show_detailed_info;
+
+ show_detailed_info =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON
+ (ctk_gvi->show_detailed_info_btn));
+
+ /* Dump out the old list */
+
+ ctk_empty_container(ctk_gvi->input_info_vbox);
+
+ if (!show_detailed_info) {
+ gtk_widget_hide_all(GTK_WIDGET(ctk_gvi->jack_channel_omenu));
+ update_sdi_input_info_simple(ctk_gvi);
+ } else {
+ gtk_widget_show_all(GTK_WIDGET(ctk_gvi->jack_channel_omenu));
+ update_sdi_input_info_all(ctk_gvi);
+ }
+
+ gtk_widget_show_all(ctk_gvi->input_info_vbox);
+ return TRUE;
+}
+
+
+static void show_detailed_info_button_toggled(GtkWidget *button,
+ gpointer user_data)
+{
+ CtkGvi *ctk_gvi = CTK_GVI(user_data);
+ gboolean active;
+
+ active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+
+ if (active) {
+ gtk_button_set_label(GTK_BUTTON(button), "Show Condensed Input Info");
+ } else {
+ gtk_button_set_label(GTK_BUTTON(button), "Show Detailed Input Info");
+ }
+
+ update_sdi_input_info(ctk_gvi);
+}
+
+
+GtkWidget* ctk_gvi_new(NvCtrlAttributeHandle *handle,
+ CtkConfig *ctk_config)
+{
+ GObject *object;
+ CtkGvi *ctk_gvi;
+ GtkWidget *hbox, *vbox, *hsep, *hseparator, *table, *button;
+ GtkWidget *banner, *label;
+ gchar *bus, *pci_bus_id, *irq;
+ int tmp;
+ ReturnStatus ret;
+ gchar *firmware_version;
+ gchar *s;
+
+ /* make sure we have a handle */
+
+ g_return_val_if_fail(handle != NULL, NULL);
+
+ /*
+ * get the static data that we will display below
+ */
+
+ /* Firmware Version */
+
+ ret = NvCtrlGetStringAttribute(handle,
+ NV_CTRL_STRING_GVIO_FIRMWARE_VERSION,
+ &firmware_version);
+ if (ret != NvCtrlSuccess) {
+ firmware_version = g_strdup("Unable to determine");
+ }
+
+ /* Get Bus related information */
+
+ get_bus_related_info(handle, &bus, &pci_bus_id);
+
+ /* NV_CTRL_IRQ */
+
+ ret = NvCtrlGetAttribute(handle, NV_CTRL_IRQ, &tmp);
+ if (ret != NvCtrlSuccess) {
+ irq = NULL;
+ } else {
+ irq = g_strdup_printf("%d", tmp);
+ }
+
+ /* create the CtkGvi object */
+
+ object = g_object_new(CTK_TYPE_GVI, NULL);
+
+ ctk_gvi = CTK_GVI(object);
+ ctk_gvi->handle = handle;
+ ctk_gvi->ctk_config = ctk_config;
+
+ /* Query static GVI properties */
+
+ ret = NvCtrlGetAttribute(handle, NV_CTRL_GVI_NUM_JACKS,
+ &(ctk_gvi->num_jacks));
+ if (ret != NvCtrlSuccess) {
+ ctk_gvi->num_jacks = 0;
+ }
+
+ ret = NvCtrlGetAttribute(handle, NV_CTRL_GVI_MAX_CHANNELS_PER_JACK,
+ &(ctk_gvi->max_channels_per_jack));
+ if (ret != NvCtrlSuccess) {
+ ctk_gvi->max_channels_per_jack = 0;
+ }
+
+ /* set container properties for the CtkGvi widget */
+
+ gtk_box_set_spacing(GTK_BOX(ctk_gvi), 5);
+
+ /* banner */
+
+ banner = ctk_banner_image_new(BANNER_ARTWORK_GVI);
+ gtk_box_pack_start(GTK_BOX(object), banner, FALSE, FALSE, 0);
+
+
+ vbox = gtk_vbox_new(FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(object), vbox, TRUE, TRUE, 0);
+
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+
+ label = gtk_label_new("GVI Device Information");
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+ hseparator = gtk_hseparator_new();
+ gtk_box_pack_start(GTK_BOX(hbox), hseparator, TRUE, TRUE, 5);
+
+ table = gtk_table_new(6, 2, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 3);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 15);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 5);
+
+ add_table_row(table, 0,
+ 0, 0.5, "Firmware Version:",
+ 0, 0.5, firmware_version);
+ /* spacing */
+ add_table_row(table, 2,
+ 0, 0.5, "Bus Type:",
+ 0, 0.5, bus);
+ add_table_row(table, 3,
+ 0, 0.5, "Bus ID:",
+ 0, 0.5, pci_bus_id);
+ /* spacing */
+ add_table_row(table, 5,
+ 0, 0.5, "IRQ:",
+ 0, 0.5, irq);
+ g_free(firmware_version);
+ g_free(bus);
+ g_free(pci_bus_id);
+ g_free(irq);
+
+
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+
+ label = gtk_label_new("Input Information");
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+ hsep = gtk_hseparator_new();
+ gtk_box_pack_start(GTK_BOX(hbox), hsep, TRUE, TRUE, 5);
+
+ /* Jack+Channel selection dropdown (hidden in condensed view) */
+
+ ctk_gvi->jack_channel_omenu = create_jack_channel_menu(ctk_gvi);
+ gtk_box_pack_start(GTK_BOX(vbox),
+ ctk_gvi->jack_channel_omenu, FALSE, FALSE, 0);
+
+ /* Jack input info box */
+
+ ctk_gvi->input_info_vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_set_border_width(GTK_CONTAINER(ctk_gvi->input_info_vbox), 5);
+ gtk_box_pack_start(GTK_BOX(vbox),
+ ctk_gvi->input_info_vbox, FALSE, FALSE, 0);
+
+ /* Register a timer callback to update the video format info */
+ s = g_strdup_printf("Graphics Video In (GVI %d)",
+ NvCtrlGetTargetId(handle));
+
+ ctk_config_add_timer(ctk_gvi->ctk_config,
+ DEFAULT_UPDATE_VIDEO_FORMAT_INFO_TIME_INTERVAL,
+ s,
+ (GSourceFunc) update_sdi_input_info,
+ (gpointer) ctk_gvi);
+ g_free(s);
+
+ /* Condensed/Detailed view toggle button */
+
+ button = gtk_toggle_button_new_with_label("Show Detailed Input Info");
+ ctk_gvi->show_detailed_info_btn = button;
+
+ hbox = gtk_hbox_new(FALSE, 5);
+
+ gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5);
+ gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
+
+ g_signal_connect(G_OBJECT(button), "toggled",
+ G_CALLBACK(show_detailed_info_button_toggled),
+ GTK_OBJECT(ctk_gvi));
+
+ gtk_widget_show_all(GTK_WIDGET(ctk_gvi));
+
+ update_sdi_input_info(ctk_gvi);
+
+ return GTK_WIDGET(ctk_gvi);
+}
+
+GtkTextBuffer *ctk_gvi_create_help(GtkTextTagTable *table,
+ CtkGvi *ctk_gvi)
+{
+ GtkTextIter i;
+ GtkTextBuffer *b;
+
+ b = gtk_text_buffer_new(table);
+
+ gtk_text_buffer_get_iter_at_offset(b, &i, 0);
+
+ ctk_help_title(b, &i, "GVI Device Information Help");
+ ctk_help_para(b, &i, "This page in the NVIDIA "
+ "X Server Control Panel describes basic "
+ "information about the Graphics Video In "
+ "(GVI) device.");
+
+ ctk_help_heading(b, &i, "Firmware Version");
+ ctk_help_para(b, &i, "The Firmware Version reports the version "
+ "of the firmware running on the GVI device.");
+
+ ctk_help_heading(b, &i, "Bus Type");
+ ctk_help_para(b, &i, "This is the bus type which is "
+ "used to connect the NVIDIA GVI device to the rest of "
+ "your computer; possible values are AGP, PCI, "
+ "PCI Express and Integrated.");
+
+ ctk_help_heading(b, &i, "Bus ID");
+ ctk_help_para(b, &i, "This is the GVI device's PCI identification string, "
+ "reported in the form 'bus:device:function'. It uniquely "
+ "identifies the GVI device's location in the host system.");
+
+ ctk_help_heading(b, &i, "IRQ");
+ ctk_help_para(b, &i, "This is the interrupt request line assigned to "
+ "this GVI device.");
+
+ ctk_help_heading(b, &i, "Fill A");
+ ctk_help_para(b, &i, "This reports the detected incoming video format on "
+ "first jack on the GVI device.");
+
+ ctk_help_heading(b, &i, "Key A");
+ ctk_help_para(b, &i, "This reports the detected incoming video format on "
+ "second jack on the GVI device.");
+
+ ctk_help_heading(b, &i, "Fill B");
+ ctk_help_para(b, &i, "This reports the detected incoming video format on "
+ "third jack on the GVI device.");
+
+ ctk_help_heading(b, &i, "Key B");
+ ctk_help_para(b, &i, "This reports the detected incoming video format on "
+ "fourth jack on the GVI device.");
+
+ ctk_help_heading(b, &i, "Sync Output");
+ ctk_help_para(b, &i, "This reports the output sync signal from "
+ "the GVI device.");
+
+ ctk_help_finish(b);
+
+ return b;
+}
+
+void ctk_gvi_start_timer(GtkWidget *widget)
+{
+ CtkGvi *ctk_gvi = CTK_GVI(widget);
+
+ /* Start the GVI timer */
+
+ ctk_config_start_timer(ctk_gvi->ctk_config,
+ (GSourceFunc) update_sdi_input_info,
+ (gpointer) ctk_gvi);
+}
+
+void ctk_gvi_stop_timer(GtkWidget *widget)
+{
+ CtkGvi *ctk_gvi = CTK_GVI(widget);
+
+ /* Stop the GVI timer */
+
+ ctk_config_stop_timer(ctk_gvi->ctk_config,
+ (GSourceFunc) update_sdi_input_info,
+ (gpointer) ctk_gvi);
+}
diff --git a/src/gtk+-2.x/ctkgvi.h b/src/gtk+-2.x/ctkgvi.h
new file mode 100644
index 0000000..772f2f9
--- /dev/null
+++ b/src/gtk+-2.x/ctkgvi.h
@@ -0,0 +1,86 @@
+/*
+ * nvidia-settings: A tool for configuring the NVIDIA X driver on Unix
+ * and Linux systems.
+ *
+ * Copyright (C) 2009 NVIDIA Corporation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of Version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See Version 2
+ * of the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the:
+ *
+ * Free Software Foundation, Inc.
+ * 59 Temple Place - Suite 330
+ * Boston, MA 02111-1307, USA
+ *
+ */
+
+#ifndef __CTK_GVI_H__
+#define __CTK_GVI_H__
+
+#include "NvCtrlAttributes.h"
+#include "ctkconfig.h"
+
+G_BEGIN_DECLS
+
+#define CTK_TYPE_GVI (ctk_gvi_get_type())
+
+#define CTK_GVI(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), CTK_TYPE_GVI, CtkGvi))
+
+#define CTK_GVI_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), CTK_TYPE_GVI, CtkGviClass))
+
+#define CTK_IS_GVI(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CTK_TYPE_GVI))
+
+#define CTK_IS_GVI_CLASS(class) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), CTK_TYPE_GVI))
+
+#define CTK_GVI_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), CTK_TYPE_GVI, CtkGviClass))
+
+
+typedef struct _CtkGvi CtkGvi;
+typedef struct _CtkGviClass CtkGviClass;
+
+struct _CtkGvi
+{
+ GtkVBox parent;
+
+ NvCtrlAttributeHandle *handle;
+ CtkConfig *ctk_config;
+
+ int num_jacks;
+ int max_channels_per_jack;
+
+ GtkWidget *jack_channel_omenu;
+
+ GtkWidget *input_info_vbox;
+
+ GtkWidget *show_detailed_info_btn;
+ unsigned int cur_jack_channel;
+};
+
+struct _CtkGviClass
+{
+ GtkVBoxClass parent_class;
+};
+
+GType ctk_gvi_get_type (void) G_GNUC_CONST;
+GtkWidget* ctk_gvi_new (NvCtrlAttributeHandle *, CtkConfig *);
+GtkTextBuffer* ctk_gvi_create_help (GtkTextTagTable *, CtkGvi *);
+
+void ctk_gvi_start_timer (GtkWidget *);
+void ctk_gvi_stop_timer (GtkWidget *);
+
+G_END_DECLS
+
+#endif /* __CTK_GVI_H__ */
diff --git a/src/gtk+-2.x/ctkgvo-sync.c b/src/gtk+-2.x/ctkgvo-sync.c
index f58d61e..5f34015 100644
--- a/src/gtk+-2.x/ctkgvo-sync.c
+++ b/src/gtk+-2.x/ctkgvo-sync.c
@@ -55,7 +55,7 @@
#define SYNC_FORMAT_COMP_BI_LEVEL 2
#define SYNC_FORMAT_COMP_TRI_LEVEL 3
-static const GvoFormatName syncFormatNames[] = {
+static const GvioFormatName syncFormatNames[] = {
{ SYNC_FORMAT_SDI, "SDI Sync" },
{ SYNC_FORMAT_COMP_AUTO, "COMP Sync" },
{ SYNC_FORMAT_COMP_BI_LEVEL, "COMP Sync (Bi-level)" },
@@ -63,7 +63,7 @@ static const GvoFormatName syncFormatNames[] = {
{ -1, NULL },
};
-extern const GvoFormatName videoFormatNames[];
+extern const GvioFormatName videoFormatNames[];
diff --git a/src/gtk+-2.x/ctkgvo.c b/src/gtk+-2.x/ctkgvo.c
index f98d4e1..3709647 100644
--- a/src/gtk+-2.x/ctkgvo.c
+++ b/src/gtk+-2.x/ctkgvo.c
@@ -144,7 +144,7 @@ static void screen_changed_handler(GtkWidget *widget,
* video format table -- should this be moved into NV-CONTROL?
*/
-const GvoFormatName videoFormatNames[] = {
+const GvioFormatName videoFormatNames[] = {
{ NV_CTRL_GVIO_VIDEO_FORMAT_487I_59_94_SMPTE259_NTSC, "720 x 487i 59.94 Hz (SMPTE259) NTSC"},
{ NV_CTRL_GVIO_VIDEO_FORMAT_576I_50_00_SMPTE259_PAL, "720 x 576i 50.00 Hz (SMPTE259) PAL"},
{ NV_CTRL_GVIO_VIDEO_FORMAT_720P_23_98_SMPTE296, "1280 x 720p 23.98 Hz (SMPTE296)" },
@@ -230,7 +230,7 @@ static GvoFormatDetails videoFormatDetails[] = {
};
-static const GvoFormatName dataFormatNames[] = {
+static const GvioFormatName dataFormatNames[] = {
/* Valid for Clone Mode */
{ NV_CTRL_GVO_DATA_FORMAT_R8G8B8_TO_YCRCB444, "RGB -> YCrCb (4:4:4)" },
@@ -273,10 +273,10 @@ static const GvoFormatName dataFormatNames[] = {
/*
- * ctk_gvo_get_video_format_name() - return the name of the given video format
+ * ctk_gvio_get_video_format_name() - return the name of the given video format
*/
-const char *ctk_gvo_get_video_format_name(const gint format)
+const char *ctk_gvio_get_video_format_name(const gint format)
{
gint i;
@@ -288,7 +288,7 @@ const char *ctk_gvo_get_video_format_name(const gint format)
return "Unknown";
-} /* ctk_gvo_get_video_format_name() */
+} /* ctk_gvio_get_video_format_name() */
@@ -1522,7 +1522,7 @@ static void post_output_video_format_changed(CtkGvo *ctk_gvo)
ctk_config_statusbar_message(ctk_gvo->ctk_config,
"Output Video Format set to: %s.",
- ctk_gvo_get_video_format_name
+ ctk_gvio_get_video_format_name
(ctk_gvo->output_video_format));
} /* post_output_video_format_changed() */
diff --git a/src/gtk+-2.x/ctkgvo.h b/src/gtk+-2.x/ctkgvo.h
index ac3727f..f68ffcc 100644
--- a/src/gtk+-2.x/ctkgvo.h
+++ b/src/gtk+-2.x/ctkgvo.h
@@ -114,7 +114,7 @@ struct _CtkGvoClass
typedef struct {
int format;
const char *name;
-} GvoFormatName;
+} GvioFormatName;
typedef struct {
int format;
@@ -136,7 +136,7 @@ gint ctk_gvo_probe (gpointer data);
-const char *ctk_gvo_get_video_format_name(const gint format);
+const char *ctk_gvio_get_video_format_name(const gint format);
const char *ctk_gvo_get_data_format_name(const gint format);
void ctk_gvo_get_video_format_resolution(const gint format, gint *w, gint *h);
diff --git a/src/gtk+-2.x/ctklicense.c b/src/gtk+-2.x/ctklicense.c
new file mode 100644
index 0000000..06846e7
--- /dev/null
+++ b/src/gtk+-2.x/ctklicense.c
@@ -0,0 +1,298 @@
+/*
+ * nvidia-settings: A tool for configuring the NVIDIA X driver on Unix
+ * and Linux systems.
+ *
+ * Copyright (C) 2009 NVIDIA Corporation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of Version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See Version 2
+ * of the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the:
+ *
+ * Free Software Foundation, Inc.
+ * 59 Temple Place - Suite 330
+ * Boston, MA 02111-1307, USA
+ *
+ */
+
+/**** INCLUDES ***************************************************************/
+
+#include <gtk/gtk.h>
+#include <NvCtrlAttributes.h>
+
+#include "ctklicense.h"
+
+#include "ctkconfig.h"
+#include "ctkhelp.h"
+#include "ctkbanner.h"
+
+static const char * __enable_confirm_msg =
+"To use the features on the Clock Frequencies panel you\n"
+"must agree to the terms of the preceding license agreement.\n"
+"Do you accept this agreement?";
+
+static const char * __license_pre_msg =
+"Please read and accept the following license agreement:";
+
+static const char * __license_msg =
+"<b>TERMS AND CONDITIONS</b>\n"
+"\n"
+"WARNING: THE SOFTWARE UTILITY YOU ARE ABOUT TO "
+"ENABLE (\"UTILITY\") MAY CAUSE SYSTEM DAMAGE AND "
+"VOID WARRANTIES. THIS UTILITY RUNS YOUR COMPUTER "
+"SYSTEM OUT OF THE MANUFACTURER'S DESIGN "
+"SPECIFICATIONS, INCLUDING, BUT NOT LIMITED TO: "
+"HIGHER SYSTEM VOLTAGES, ABOVE NORMAL "
+"TEMPERATURES, EXCESSIVE FREQUENCIES, AND "
+"CHANGES TO BIOS THAT MAY CORRUPT THE BIOS. YOUR "
+"COMPUTER'S OPERATING SYSTEM MAY HANG AND RESULT "
+"IN DATA LOSS OR CORRUPTED IMAGES. DEPENDING ON "
+"THE MANUFACTURER OF YOUR COMPUTER SYSTEM, THE "
+"COMPUTER SYSTEM, HARDWARE AND SOFTWARE "
+"WARRANTIES MAY BE VOIDED, AND YOU MAY NOT "
+"RECEIVE ANY FURTHER MANUFACTURER SUPPORT."
+"NVIDIA DOES NOT PROVIDE CUSTOMER SERVICE SUPPORT "
+"FOR THIS UTILITY. IT IS FOR THESE REASONS THAT "
+"ABSOLUTELY NO WARRANTY OR GUARANTEE IS EITHER "
+"EXPRESS OR IMPLIED. BEFORE ENABLING AND USING, YOU "
+"SHOULD DETERMINE THE SUITABILITY OF THE UTILITY "
+"FOR YOUR INTENDED USE, AND YOU SHALL ASSUME ALL "
+"RESPONSIBILITY IN CONNECTION THEREWITH."
+"\n"
+"\n"
+"<b>DISCLAIMER OF WARRANTIES</b>\n"
+"\n"
+"ALL MATERIALS, INFORMATION, AND SOFTWARE "
+"PRODUCTS, INCLUDED IN OR MADE AVAILABLE THROUGH "
+"THIS UTILITY ARE PROVIDED \"AS IS\" AND \"AS AVAILABLE\" "
+"FOR YOUR USE. THE UTILITY IS PROVIDED WITHOUT "
+"WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, "
+"INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF "
+"MERCHANTABILITY, FITNESS FOR A PARTICULAR "
+"PURPOSE, OR NONINFRINGEMENT. NVIDIA AND ITS "
+"SUBSIDIARIES DO NOT WARRANT THAT THE UTILITY IS "
+"RELIABLE OR CORRECT; THAT ANY DEFECTS OR ERRORS "
+"WILL BE CORRECTED; OR THAT THE UTILITY IS FREE OF "
+"VIRUSES OR OTHER HARMFUL COMPONENTS. YOUR USE "
+"OF THE UTILITY IS SOLELY AT YOUR RISK. BECAUSE SOME "
+"JURISDICTIONS DO NOT PERMIT THE EXCLUSION OF "
+"CERTAIN WARRANTIES, THESE EXCLUSIONS MAY NOT "
+"APPLY TO YOU."
+"\n"
+"\n"
+"<b>LIMITATION OF LIABILITY</b>\n"
+"\n"
+"UNDER NO CIRCUMSTANCES SHALL NVIDIA AND ITS "
+"SUBSIDIARIES BE LIABLE FOR ANY DIRECT, INDIRECT, "
+"PUNITIVE, INCIDENTAL, SPECIAL, OR CONSEQUENTIAL "
+"DAMAGES THAT RESULT FROM THE USE OF, OR INABILITY "
+"TO USE, THE UTILITY. THIS LIMITATION APPLIES WHETHER "
+"THE ALLEGED LIABILITY IS BASED ON CONTRACT, TORT, "
+"NEGLIGENCE, STRICT LIABILITY, OR ANY OTHER BASIS, "
+"EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF "
+"SUCH DAMAGE. BECAUSE SOME JURISDICTIONS DO NOT "
+"ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR "
+"CONSEQUENTIAL DAMAGES, NVIDIA'S LIABILITY IN SUCH "
+"JURISDICTIONS SHALL BE LIMITED TO THE EXTENT "
+"PERMITTED BY LAW."
+"\n"
+"IF YOU HAVE READ, UNDERSTOOD, AND AGREE TO ALL OF "
+"THE ABOVE TERMS AND CONDITIONS, CLICK THE \"YES\" "
+"BUTTON BELOW."
+"\n"
+"IF YOU DO NOT AGREE WITH ALL OF THE ABOVE TERMS "
+"AND CONDITIONS, THEN CLICK ON THE \"NO\" BUTTON "
+"BELOW, AND DO NOT ENABLE OR USE THE UTILITY.";
+
+GType ctk_license_dialog_get_type(void)
+{
+ static GType ctk_license_dialog_type = 0;
+
+ if (!ctk_license_dialog_type) {
+ static const GTypeInfo ctk_license_dialog_info = {
+ sizeof (CtkLicenseDialogClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ NULL, /* class_init, */
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (CtkLicenseDialog),
+ 0, /* n_preallocs */
+ NULL, /* instance_init */
+ };
+
+ ctk_license_dialog_type = g_type_register_static(GTK_TYPE_VBOX,
+ "CtkLicenseDialog",
+ &ctk_license_dialog_info,
+ 0);
+ }
+
+ return ctk_license_dialog_type;
+}
+
+
+
+/*****
+ *
+ * Callback Function - This function gets called when the user scrolls
+ * the license agreement text. Once the user has scrolled to the end
+ * of the document, the YES button is activated.
+ *
+ */
+static void license_scrolled(GtkRange *range,
+ gpointer user_data)
+{
+ CtkLicenseDialog *ctk_license_dialog = CTK_LICENSE_DIALOG(user_data);
+ GtkAdjustment *adj = gtk_range_get_adjustment(range);
+
+
+ /* Enable the dialog's "YES" button once user reaches end of license */
+
+ if ( adj->value + adj->page_size >= adj->upper ) {
+
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(
+ ctk_license_dialog->dialog),
+ GTK_RESPONSE_ACCEPT,
+ TRUE);
+ }
+}
+
+
+
+/*****
+ *
+ * ctk_license_run_dialog() - Resize license dialog window and run license
+ * dialog.
+ *
+ */
+gint ctk_license_run_dialog(CtkLicenseDialog *ctk_license_dialog)
+{
+
+ gint w, h;
+ gint result;
+ GdkScreen * s =
+ gtk_window_get_screen(GTK_WINDOW(GTK_DIALOG(ctk_license_dialog->dialog)));
+
+ /* Reset dialog window size */
+
+ gtk_window_get_size(GTK_WINDOW(GTK_DIALOG(ctk_license_dialog->dialog)),
+ &w, &h);
+
+ /* Make license dialog default to 75% of the screen height */
+
+ h = (gint)(0.55f * gdk_screen_get_height(s));
+ w = 1;
+
+ gtk_window_resize(GTK_WINDOW(GTK_DIALOG(ctk_license_dialog->dialog)),
+ w, h);
+
+ /* Reset scroll bar to the top */
+
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(
+ GTK_RANGE(
+ GTK_SCROLLED_WINDOW(ctk_license_dialog->window)->
+ vscrollbar)->adjustment)
+ ,0.0f);
+
+
+ /* Disable the YES button */
+
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(ctk_license_dialog->dialog),
+ GTK_RESPONSE_ACCEPT,
+ FALSE);
+
+ gtk_widget_show_all(ctk_license_dialog->dialog);
+
+ result = gtk_dialog_run (GTK_DIALOG(ctk_license_dialog->dialog));
+
+ gtk_widget_hide_all(ctk_license_dialog->dialog);
+
+ return result;
+}
+
+
+
+GtkWidget* ctk_license_dialog_new(GtkWidget *parent)
+{
+ GObject *object;
+ CtkLicenseDialog *ctk_license_dialog;
+
+ GtkWidget *hbox, *label, *scrollWin, *event;
+
+ object = g_object_new(CTK_TYPE_LICENSE_DIALOG, NULL);
+ ctk_license_dialog = CTK_LICENSE_DIALOG(object);
+
+ /* Create the enable dialog */
+
+ ctk_license_dialog->dialog =
+ gtk_dialog_new_with_buttons("License Agreement",
+ GTK_WINDOW(gtk_widget_get_parent(
+ GTK_WIDGET(parent))),
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_DESTROY_WITH_PARENT |
+ GTK_DIALOG_NO_SEPARATOR,
+ GTK_STOCK_YES,
+ GTK_RESPONSE_ACCEPT,
+ GTK_STOCK_NO,
+ GTK_RESPONSE_REJECT,
+ NULL
+ );
+
+ hbox = gtk_hbox_new(TRUE, 10);
+ label = gtk_label_new(__license_pre_msg);
+
+ gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(
+ ctk_license_dialog->dialog)->vbox),
+ hbox, FALSE, FALSE, 10);
+
+ scrollWin = gtk_scrolled_window_new(NULL, NULL);
+ hbox = gtk_hbox_new(FALSE, 0);
+ label = gtk_label_new("");
+ event = gtk_event_box_new();
+ ctk_license_dialog->window = scrollWin;
+
+ gtk_widget_modify_fg(event, GTK_STATE_NORMAL,
+ &(event->style->text[GTK_STATE_NORMAL]));
+ gtk_widget_modify_bg(event, GTK_STATE_NORMAL,
+ &(event->style->base[GTK_STATE_NORMAL]));
+
+ gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
+ gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
+ gtk_label_set_markup(GTK_LABEL(label), __license_msg);
+
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin),
+ GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(event), hbox);
+ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollWin),
+ event);
+ hbox = gtk_hbox_new(TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(hbox), scrollWin, TRUE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(ctk_license_dialog->dialog)->vbox),
+ hbox, TRUE, TRUE, 10);
+ hbox = gtk_hbox_new(FALSE, 10);
+ label = gtk_label_new(__enable_confirm_msg);
+
+ gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 15);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(ctk_license_dialog->dialog)->vbox),
+ hbox, FALSE, FALSE, 10);
+
+ g_signal_connect((gpointer)
+ GTK_RANGE(GTK_SCROLLED_WINDOW(scrollWin)->vscrollbar),
+ "value_changed",
+ G_CALLBACK(license_scrolled),
+ (gpointer) ctk_license_dialog);
+
+ return GTK_WIDGET(object);
+
+} /* ctk_license_dialog_new() */
+
diff --git a/src/gtk+-2.x/ctklicense.h b/src/gtk+-2.x/ctklicense.h
new file mode 100644
index 0000000..aa53a6f
--- /dev/null
+++ b/src/gtk+-2.x/ctklicense.h
@@ -0,0 +1,75 @@
+/*
+ * nvidia-settings: A tool for configuring the NVIDIA X driver on Unix
+ * and Linux systems.
+ *
+ * Copyright (C) 2009 NVIDIA Corporation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of Version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See Version 2
+ * of the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the:
+ *
+ * Free Software Foundation, Inc.
+ * 59 Temple Place - Suite 330
+ * Boston, MA 02111-1307, USA
+ *
+ */
+
+#ifndef __CTK_LICENSE_DIALOG_H__
+#define __CTK_LICENSE_DIALOG_H__
+
+#include "ctkevent.h"
+#include "ctkconfig.h"
+
+G_BEGIN_DECLS
+
+#define CTK_TYPE_LICENSE_DIALOG (ctk_license_dialog_get_type())
+
+#define CTK_LICENSE_DIALOG(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), CTK_TYPE_LICENSE_DIALOG, \
+ CtkLicenseDialog))
+
+#define CTK_LICENSE_DIALOG_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), CTK_TYPE_LICENSE_DIALOG, \
+ CtkLicenseDialogClass))
+
+#define CTK_IS_LICENSE_DIALOG(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CTK_TYPE_LICENSE_DIALOG))
+
+#define CTK_IS_LICENSE_DIALOG_CLASS(class) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), CTK_TYPE_LICENSE_DIALOG))
+
+#define CTK_LICENSE_DIALOG_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), CTK_TYPE_LICENSE_DIALOG, \
+ CtkLicenseDialogClass))
+
+typedef struct _CtkLicenseDialog CtkLicenseDialog;
+typedef struct _CtkLicenseDialogClass CtkLicenseDialogClass;
+
+struct _CtkLicenseDialog
+{
+ GtkVBox parent;
+
+ GtkWidget *window;
+ GtkWidget *dialog;
+};
+
+struct _CtkLicenseDialogClass
+{
+ GtkVBoxClass parent_class;
+};
+
+GType ctk_license_dialog_get_type (void) G_GNUC_CONST;
+GtkWidget* ctk_license_dialog_new (GtkWidget *object);
+gint ctk_license_run_dialog(CtkLicenseDialog *ctk_license_dialog);
+
+G_END_DECLS
+
+#endif /* __CTK_LICENSE_DIALOG_H__ */
diff --git a/src/gtk+-2.x/ctkwindow.c b/src/gtk+-2.x/ctkwindow.c
index 26620f8..b428d8f 100644
--- a/src/gtk+-2.x/ctkwindow.c
+++ b/src/gtk+-2.x/ctkwindow.c
@@ -37,6 +37,7 @@
#include "ctkwindow.h"
#include "ctkframelock.h"
+#include "ctkgvi.h"
#include "ctkgvo.h"
#include "ctkgvo-sync.h"
#include "ctkgvo-csc.h"
@@ -911,6 +912,54 @@ GtkWidget *ctk_window_new(ParsedAttribute *p, ConfigProperties *conf,
}
+ /* add the per gvi entries into the tree model */
+
+ for (i = 0; i < h->targets[GVI_TARGET].n; i++) {
+
+ gchar *gvi_name;
+ GtkWidget *child;
+ NvCtrlAttributeHandle *gvi_handle = h->targets[GVI_TARGET].t[i].h;
+
+ if (!gvi_handle) continue;
+
+ /* create the gvi entry name */
+
+ if (h->targets[GVI_TARGET].n > 1) {
+ gvi_name = g_strdup_printf("Graphics to Video In %d",
+ NvCtrlGetTargetId(gvi_handle));
+ } else {
+ gvi_name = g_strdup_printf("Graphics to Video In");
+ }
+
+ if (!gvi_name) continue;
+
+ /* create the object for receiving NV-CONTROL events */
+
+ ctk_event = CTK_EVENT(ctk_event_new(gvi_handle));
+
+ /* create the gvi entry */
+
+ gtk_tree_store_append(ctk_window->tree_store, &iter, NULL);
+ gtk_tree_store_set(ctk_window->tree_store, &iter,
+ CTK_WINDOW_LABEL_COLUMN, gvi_name, -1);
+ child = ctk_gvi_new(gvi_handle, ctk_config);
+ gtk_object_ref(GTK_OBJECT(child));
+ gtk_tree_store_set(ctk_window->tree_store, &iter,
+ CTK_WINDOW_WIDGET_COLUMN, child, -1);
+ gtk_tree_store_set(ctk_window->tree_store, &iter,
+ CTK_WINDOW_HELP_COLUMN,
+ ctk_gvi_create_help(tag_table, CTK_GVI(child)), -1);
+ gtk_tree_store_set(ctk_window->tree_store, &iter,
+ CTK_WINDOW_CONFIG_FILE_ATTRIBUTES_FUNC_COLUMN,
+ NULL, -1);
+ gtk_tree_store_set(ctk_window->tree_store, &iter,
+ CTK_WINDOW_SELECT_WIDGET_FUNC_COLUMN,
+ ctk_gvi_start_timer, -1);
+ gtk_tree_store_set(ctk_window->tree_store, &iter,
+ CTK_WINDOW_UNSELECT_WIDGET_FUNC_COLUMN,
+ ctk_gvi_stop_timer, -1);
+
+ }
/*
* add the frame lock page, if any of the X screens support
* frame lock
diff --git a/src/image_data/Makefile.inc b/src/image_data/Makefile.inc
index 611f7ae..32b1dc2 100644
--- a/src/image_data/Makefile.inc
+++ b/src/image_data/Makefile.inc
@@ -54,6 +54,7 @@ EXTRA_DIST += \
opengl_pixdata.h \
penguin_pixdata.h \
png_to_c_header.sh \
+ gvi_pixdata.h \
rj45_input_pixdata.h \
rj45_output_pixdata.h \
rj45_unused_pixdata.h \
diff --git a/src/image_data/gvi_pixdata.h b/src/image_data/gvi_pixdata.h
new file mode 100644
index 0000000..4e05be1
--- /dev/null
+++ b/src/image_data/gvi_pixdata.h
@@ -0,0 +1,1010 @@
+/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
+
+static guint8 gvi_pixdata_pixel_data[] = {
+ 0x09,0x87,0x87,0x87,0x8d,0x9b,0x9a,0x9b,0x9a,0x9e,0x9e,0x9d,0x6e,0xa3,0xa3,
+ 0xa3,0x1e,0xa3,0xa4,0xa3,0x02,0x95,0x96,0x97,0x03,0x91,0x92,0x93,0x0b,0x8c,
+ 0x8c,0x8d,0x06,0x91,0x90,0x90,0x01,0xc7,0x00,0x00,0x00,0x00,0x0a,0xa1,0xa2,
+ 0xa2,0x55,0xb8,0xb7,0xb7,0xc9,0xb7,0xb7,0xb7,0xfa,0xb3,0xb4,0xb4,0xa9,0xac,
+ 0xad,0xad,0x29,0x9e,0x9e,0x9f,0x14,0xa7,0xa6,0xa7,0x67,0xb1,0xb1,0xb2,0x6e,
+ 0xae,0xaf,0xaf,0x20,0xa0,0xa0,0xa0,0x01,0xc6,0x00,0x00,0x00,0x00,0x0a,0x9c,
+ 0x9c,0x9d,0x02,0xaf,0xad,0xae,0x37,0xb5,0xb5,0xb5,0xc2,0xb9,0xba,0xba,0xfe,
+ 0xba,0xba,0xba,0xb6,0xa9,0xaa,0xaa,0x7a,0xaf,0xae,0xaf,0xc2,0xb8,0xb8,0xb9,
+ 0xfd,0xb4,0xb6,0xb5,0xac,0xa7,0xa8,0xa8,0x17,0xc7,0x00,0x00,0x00,0x00,0x0a,
+ 0x9e,0x9f,0x9e,0x03,0xae,0xaf,0xaf,0x30,0xac,0xac,0xac,0x61,0xab,0xab,0xab,
+ 0x63,0xa1,0xa2,0xa2,0x7c,0xb1,0xb1,0xb2,0xee,0xb6,0xb7,0xb6,0xff,0xb6,0xb7,
+ 0xb6,0xfd,0xb5,0xb4,0xb5,0xad,0x98,0x97,0x97,0x10,0xc7,0x00,0x00,0x00,0x00,
+ 0x16,0x89,0x8b,0x8b,0x01,0x8a,0x89,0x8a,0x12,0xa7,0xa6,0xa7,0xa8,0x99,0x9a,
+ 0x9a,0x90,0xa6,0xa6,0xa7,0xd1,0xb4,0xb4,0xb4,0xff,0xb5,0xb6,0xb5,0xff,0xb7,
+ 0xb7,0xb7,0xfb,0xb5,0xb6,0xb5,0xad,0x8d,0xa5,0x94,0x1c,0x22,0xbd,0x4d,0x0e,
+ 0x1c,0xc0,0x47,0x0f,0x2d,0xc7,0x56,0x0f,0x39,0xce,0x61,0x0f,0x44,0xd5,0x6b,
+ 0x0f,0x4f,0xda,0x73,0x0f,0x59,0xdf,0x7b,0x0f,0x63,0xe4,0x85,0x0f,0x6b,0xe6,
+ 0x8b,0x0f,0x74,0xe8,0x94,0x0f,0x54,0xa4,0x6a,0x08,0x2e,0x5c,0x3a,0x01,0x84,
+ 0x00,0x00,0x00,0x00,0x0c,0xcb,0xc1,0xc2,0x01,0xc9,0xc5,0xc5,0x02,0xcd,0xcc,
+ 0xcc,0x04,0xa0,0xba,0xb4,0x0d,0xb9,0xe5,0xcb,0x1b,0xc1,0xef,0xd2,0x1f,0xc5,
+ 0xf2,0xd6,0x1f,0xc2,0xf3,0xd5,0x1c,0xbc,0xf4,0xd2,0x1a,0xb2,0xf3,0xcb,0x16,
+ 0xa5,0xf1,0xc2,0x13,0x9c,0xef,0xbc,0x12,0x82,0x99,0xef,0xba,0x11,0x04,0x98,
+ 0xef,0xba,0x11,0x98,0xef,0xb9,0x11,0x97,0xef,0xb9,0x11,0x97,0xef,0xb8,0x11,
+ 0x82,0x96,0xef,0xb8,0x11,0x02,0x95,0xef,0xb7,0x11,0x94,0xef,0xb7,0x11,0x84,
+ 0x94,0xef,0xb6,0x11,0x82,0x95,0xef,0xb7,0x11,0x03,0x96,0xef,0xb8,0x11,0x96,
+ 0xef,0xb7,0x11,0x96,0xee,0xb8,0x11,0x82,0x97,0xee,0xb8,0x11,0x04,0x98,0xee,
+ 0xb8,0x11,0x98,0xee,0xb9,0x11,0x98,0xee,0xb8,0x11,0x98,0xee,0xb9,0x11,0x84,
+ 0x99,0xee,0xb9,0x11,0x82,0x99,0xee,0xb8,0x11,0x03,0x91,0xe2,0xae,0x10,0x5e,
+ 0x9d,0x6e,0x0d,0x37,0x64,0x41,0x05,0x82,0x00,0x00,0x00,0x01,0x88,0x00,0x00,
+ 0x00,0x00,0x14,0xae,0xae,0xaf,0x47,0xba,0xba,0xba,0xdf,0xb8,0xb8,0xb8,0xff,
+ 0xb6,0xb6,0xb6,0xff,0xb5,0xb5,0xb5,0xff,0xb6,0xb6,0xb7,0xff,0xb7,0xb7,0xb8,
+ 0xfe,0x9d,0xbd,0xa6,0xec,0x3d,0xb9,0x5f,0xde,0x1c,0xb2,0x44,0xdf,0x2b,0xb8,
+ 0x50,0xdf,0x36,0xbe,0x5b,0xe0,0x40,0xc5,0x64,0xe2,0x4a,0xc9,0x6c,0xe1,0x53,
+ 0xce,0x73,0xe0,0x5d,0xd2,0x7b,0xe2,0x63,0xd4,0x81,0xe2,0x6c,0xd8,0x8a,0xe7,
+ 0x51,0x9d,0x64,0x7b,0x2e,0x5b,0x38,0x08,0x85,0x00,0x00,0x00,0x00,0x1b,0xd8,
+ 0xcf,0xd0,0x00,0xd6,0xd2,0xd2,0x02,0x4b,0x87,0x7c,0x50,0x9a,0xe6,0xb8,0xe6,
+ 0x90,0xe0,0xad,0xfe,0x91,0xe1,0xae,0xfa,0x91,0xe1,0xad,0xfa,0x90,0xe1,0xad,
+ 0xfa,0x8e,0xe1,0xad,0xfa,0x8d,0xe2,0xac,0xfa,0x8c,0xe2,0xab,0xfa,0x8b,0xe3,
+ 0xab,0xfa,0x8b,0xe4,0xab,0xfa,0x8a,0xe4,0xab,0xfa,0x89,0xe4,0xaa,0xfa,0x88,
+ 0xe4,0xa9,0xfa,0x87,0xe4,0xa8,0xfa,0x85,0xe4,0xa8,0xfa,0x84,0xe4,0xa6,0xfa,
+ 0x83,0xe3,0xa5,0xfa,0x82,0xe2,0xa4,0xfa,0x81,0xe2,0xa3,0xfa,0x80,0xe2,0xa3,
+ 0xfa,0x81,0xe2,0xa4,0xfa,0x83,0xe2,0xa4,0xfa,0x84,0xe2,0xa5,0xfa,0x84,0xe2,
+ 0xa6,0xfa,0x82,0x86,0xe2,0xa7,0xfa,0x02,0x87,0xe2,0xa8,0xfa,0x88,0xe2,0xa8,
+ 0xfa,0x82,0x89,0xe1,0xa8,0xfa,0x82,0x8a,0xe0,0xa9,0xfa,0x01,0x8b,0xe0,0xa9,
+ 0xfa,0x82,0x8c,0xe0,0xaa,0xfa,0x0c,0x8d,0xe0,0xaa,0xfa,0x8d,0xdf,0xa9,0xfa,
+ 0x8d,0xe0,0xa9,0xfa,0x9a,0xe6,0xb6,0xfa,0x8b,0xd7,0xa5,0xf3,0x58,0x95,0x68,
+ 0xce,0x37,0x62,0x40,0x51,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0d,0x00,0x00,
+ 0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x85,0x00,0x00,0x00,0x00,
+ 0x14,0xaa,0xaa,0xa9,0x03,0xb1,0xb1,0xb1,0x51,0xb7,0xb7,0xb7,0xd5,0xb4,0xb4,
+ 0xb3,0xff,0xaf,0xae,0xae,0xff,0xac,0xac,0xad,0xff,0xac,0xad,0xac,0xff,0xb9,
+ 0xb4,0xb7,0xff,0x92,0xa9,0x99,0xff,0x33,0x85,0x49,0xff,0x24,0x84,0x3c,0xff,
+ 0x2d,0x87,0x45,0xff,0x33,0x8a,0x49,0xff,0x39,0x8d,0x4e,0xff,0x3e,0x90,0x54,
+ 0xff,0x44,0x94,0x59,0xff,0x48,0x95,0x5c,0xff,0x4f,0x9c,0x63,0xff,0x42,0x7f,
+ 0x50,0x7f,0x2f,0x59,0x35,0x07,0x86,0x00,0x00,0x00,0x00,0x32,0xe3,0xdf,0xdf,
+ 0x00,0x3d,0x75,0x6e,0x5c,0x94,0xe3,0xad,0xec,0x5a,0xa1,0x6d,0xff,0x5f,0xa9,
+ 0x73,0xff,0x5e,0xa9,0x72,0xff,0x5c,0xaa,0x71,0xff,0x5b,0xab,0x71,0xff,0x58,
+ 0xab,0x70,0xff,0x58,0xac,0x6f,0xff,0x54,0xa8,0x6b,0xff,0x4c,0x9d,0x64,0xff,
+ 0x47,0x9d,0x63,0xff,0x47,0x9d,0x61,0xff,0x44,0x9d,0x60,0xff,0x42,0x9c,0x5e,
+ 0xff,0x3f,0x9d,0x5c,0xff,0x3d,0x9c,0x5a,0xff,0x3e,0xa1,0x5b,0xff,0x40,0xaf,
+ 0x60,0xff,0x3f,0xae,0x5f,0xff,0x40,0xad,0x5e,0xff,0x42,0xad,0x61,0xff,0x45,
+ 0xad,0x63,0xff,0x47,0xad,0x63,0xff,0x49,0xad,0x65,0xff,0x4c,0xad,0x67,0xff,
+ 0x4c,0xa9,0x66,0xff,0x4a,0xa2,0x63,0xff,0x4c,0xa2,0x65,0xff,0x53,0xab,0x6b,
+ 0xff,0x55,0xab,0x6c,0xff,0x56,0xa9,0x6d,0xff,0x57,0xa9,0x6e,0xff,0x59,0xa8,
+ 0x6e,0xff,0x5a,0xa7,0x6e,0xff,0x5b,0xa7,0x6f,0xff,0x5c,0xa6,0x6f,0xff,0x5c,
+ 0xa4,0x6d,0xff,0x72,0xb0,0x82,0xff,0xb3,0xd0,0xc3,0xff,0x95,0xbd,0xa5,0xff,
+ 0x46,0x7b,0x52,0xef,0x34,0x5c,0x3c,0x62,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+ 0x13,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,
+ 0x00,0x01,0x85,0x00,0x00,0x00,0x00,0x13,0xb2,0xb1,0xb3,0x08,0xb2,0xb2,0xb3,
+ 0x3f,0xb2,0xb2,0xb2,0xbe,0xc0,0xbf,0xc0,0xff,0xc5,0xc4,0xc6,0xff,0xc7,0xc7,
+ 0xc7,0xff,0xc9,0xc9,0xc9,0xff,0xd4,0xcf,0xd3,0xff,0x5b,0x7d,0x64,0xff,0x23,
+ 0x73,0x37,0xff,0x2c,0x76,0x3f,0xff,0x31,0x79,0x43,0xff,0x36,0x7b,0x47,0xff,
+ 0x3a,0x7e,0x4b,0xff,0x3e,0x80,0x4f,0xff,0x42,0x83,0x52,0xff,0x49,0x8b,0x58,
+ 0xff,0x3f,0x77,0x4a,0x7f,0x2f,0x58,0x35,0x07,0x87,0x00,0x00,0x00,0x00,0x31,
+ 0x3b,0x73,0x69,0x57,0x92,0xe3,0xae,0xeb,0x49,0x8f,0x59,0xff,0x4f,0x99,0x61,
+ 0xff,0x4e,0x99,0x61,0xff,0x4d,0x9a,0x60,0xff,0x4b,0x9b,0x60,0xff,0x4a,0x9b,
+ 0x5e,0xff,0x48,0x9d,0x5e,0xff,0x41,0x91,0x55,0xff,0x30,0x72,0x45,0xff,0x2c,
+ 0x6f,0x43,0xff,0x2b,0x6f,0x41,0xff,0x29,0x6f,0x40,0xff,0x28,0x6f,0x3f,0xff,
+ 0x27,0x6f,0x3e,0xff,0x25,0x6e,0x3d,0xff,0x29,0x7d,0x42,0xff,0x36,0xa0,0x52,
+ 0xff,0x36,0x9d,0x51,0xff,0x39,0x9c,0x53,0xff,0x3b,0x9c,0x54,0xff,0x3c,0x9c,
+ 0x55,0xff,0x3e,0x9c,0x57,0xff,0x41,0x9d,0x58,0xff,0x41,0x98,0x57,0xff,0x32,
+ 0x7a,0x48,0xff,0x35,0x7c,0x4a,0xff,0x36,0x7b,0x4b,0xff,0x3d,0x85,0x50,0xff,
+ 0x4a,0x9a,0x5d,0xff,0x4b,0x98,0x5d,0xff,0x4c,0x97,0x5d,0xff,0x4d,0x96,0x5e,
+ 0xff,0x4d,0x95,0x5e,0xff,0x4f,0x95,0x5f,0xff,0x50,0x94,0x5e,0xff,0x4e,0x92,
+ 0x5d,0xff,0x7b,0xa8,0x89,0xff,0xd4,0xd6,0xe1,0xff,0xb6,0xc3,0xc1,0xff,0x3e,
+ 0x71,0x48,0xef,0x30,0x54,0x38,0x69,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x19,
+ 0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+ 0x01,0x87,0x00,0x00,0x00,0x00,0x49,0xbc,0xbc,0xbd,0x94,0xd6,0xd6,0xd6,0xff,
+ 0xdd,0xdd,0xdd,0xff,0xe0,0xe0,0xe0,0xff,0xe3,0xe3,0xe3,0xff,0xef,0xee,0xef,
+ 0xff,0x6a,0x89,0x72,0xff,0x25,0x77,0x3b,0xff,0x31,0x7c,0x45,0xff,0x37,0x7e,
+ 0x49,0xff,0x3b,0x80,0x4c,0xff,0x3f,0x82,0x50,0xff,0x43,0x85,0x54,0xff,0x46,
+ 0x88,0x56,0xff,0x4e,0x91,0x5c,0xff,0x1f,0x44,0x44,0xd2,0x01,0x1c,0x3c,0xad,
+ 0x01,0x24,0x3f,0xad,0x01,0x23,0x40,0xac,0x01,0x24,0x41,0xab,0x01,0x24,0x41,
+ 0xaa,0x01,0x24,0x42,0xaa,0x01,0x25,0x43,0xaa,0x01,0x20,0x3f,0xa8,0x08,0x1f,
+ 0x3e,0xc5,0x8a,0xd2,0xa8,0xf8,0x49,0x91,0x5a,0xff,0x50,0x9c,0x63,0xff,0x4f,
+ 0x9c,0x62,0xff,0x4e,0x9d,0x61,0xff,0x4c,0x9d,0x60,0xff,0x49,0x9e,0x5f,0xff,
+ 0x48,0x9f,0x5e,0xff,0x41,0x94,0x58,0xff,0x33,0x7b,0x4a,0xff,0x31,0x79,0x47,
+ 0xff,0x2e,0x79,0x47,0xff,0x2d,0x7a,0x45,0xff,0x2c,0x7b,0x44,0xff,0x2a,0x7a,
+ 0x43,0xff,0x28,0x79,0x42,0xff,0x2c,0x85,0x46,0xff,0x39,0xa2,0x54,0xff,0x3a,
+ 0x9f,0x54,0xff,0x3c,0x9e,0x56,0xff,0x3d,0x9e,0x57,0xff,0x3f,0x9d,0x58,0xff,
+ 0x41,0x9d,0x59,0xff,0x43,0xa0,0x5b,0xff,0x39,0x85,0x4f,0xff,0x34,0x78,0x4a,
+ 0xff,0x36,0x79,0x4c,0xff,0x38,0x7b,0x4d,0xff,0x35,0x73,0x49,0xff,0x4a,0x97,
+ 0x5d,0xff,0x4d,0x99,0x5f,0xff,0x4e,0x98,0x5f,0xff,0x4f,0x97,0x61,0xff,0x51,
+ 0x97,0x61,0xff,0x53,0x98,0x62,0xff,0x54,0x98,0x62,0xff,0x52,0x96,0x61,0xff,
+ 0x57,0x97,0x66,0xff,0x7c,0xa8,0x88,0xff,0x66,0x99,0x73,0xff,0x3f,0x70,0x4a,
+ 0xf0,0x2e,0x4f,0x36,0x70,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,
+ 0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x01,0x83,
+ 0x00,0x00,0x00,0x00,0x18,0x87,0x8c,0x91,0x0d,0x9c,0x9f,0xa1,0x12,0x99,0x9c,
+ 0x9f,0x12,0x96,0x99,0x9c,0x11,0xbb,0xbc,0xbc,0x9b,0xd3,0xd3,0xd4,0xff,0xc8,
+ 0xc8,0xc8,0xff,0xc7,0xc7,0xc7,0xff,0xd9,0xd9,0xd9,0xff,0xee,0xec,0xed,0xff,
+ 0x98,0xa5,0x9b,0xff,0x57,0x7b,0x60,0xff,0x32,0x7b,0x44,0xff,0x3c,0x81,0x4d,
+ 0xff,0x3f,0x83,0x50,0xff,0x43,0x85,0x54,0xff,0x47,0x88,0x57,0xff,0x49,0x8a,
+ 0x59,0xff,0x53,0x96,0x5e,0xff,0x18,0x35,0x41,0xfe,0x02,0x1f,0x3a,0xfe,0x02,
+ 0x20,0x3a,0xfe,0x02,0x20,0x3b,0xfe,0x02,0x20,0x3a,0xfe,0x83,0x02,0x20,0x3a,
+ 0xfd,0x32,0x02,0x20,0x39,0xfd,0x01,0x13,0x34,0xfe,0x88,0xcc,0xa3,0xff,0x48,
+ 0x92,0x5a,0xff,0x4f,0x9c,0x62,0xff,0x4d,0x9d,0x61,0xff,0x4b,0x9e,0x60,0xff,
+ 0x49,0x9e,0x5f,0xff,0x47,0x9e,0x5e,0xff,0x46,0x9e,0x5d,0xff,0x45,0xa0,0x5c,
+ 0xff,0x42,0xa2,0x5b,0xff,0x41,0xa3,0x5a,0xff,0x3e,0xa2,0x58,0xff,0x3c,0xa2,
+ 0x57,0xff,0x3b,0xa3,0x56,0xff,0x38,0xa3,0x55,0xff,0x37,0xa1,0x54,0xff,0x39,
+ 0xa0,0x54,0xff,0x3a,0x9f,0x55,0xff,0x3c,0x9f,0x56,0xff,0x3e,0x9e,0x57,0xff,
+ 0x40,0x9d,0x58,0xff,0x42,0x9d,0x59,0xff,0x43,0x9c,0x5a,0xff,0x47,0xa0,0x5c,
+ 0xff,0x34,0x77,0x4a,0xff,0x38,0x7c,0x4d,0xff,0x32,0x70,0x47,0xff,0x36,0x74,
+ 0x4a,0xff,0x38,0x76,0x4c,0xff,0x49,0x91,0x5a,0xff,0x4f,0x99,0x5f,0xff,0x4f,
+ 0x97,0x60,0xff,0x50,0x96,0x61,0xff,0x49,0x87,0x59,0xff,0x3d,0x72,0x4e,0xff,
+ 0x3e,0x73,0x50,0xff,0x3e,0x73,0x4f,0xff,0x40,0x77,0x50,0xff,0x54,0x90,0x5f,
+ 0xff,0x52,0x8d,0x5e,0xff,0x42,0x71,0x4c,0xf1,0x2b,0x49,0x31,0x78,0x00,0x00,
+ 0x00,0x34,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0c,0x00,
+ 0x00,0x00,0x05,0x00,0x00,0x00,0x01,0x82,0x00,0x00,0x00,0x00,0x16,0xa8,0xaf,
+ 0xb4,0x0a,0x9b,0xa0,0xa6,0x81,0xbe,0xc2,0xc5,0xaa,0xb4,0xb9,0xbd,0xa8,0xb5,
+ 0xba,0xbe,0xa5,0xad,0xb1,0xb4,0xd8,0xad,0xb0,0xb3,0xff,0x45,0x45,0x46,0xff,
+ 0x15,0x15,0x15,0xff,0x8b,0x8a,0x8a,0xff,0xeb,0xea,0xea,0xff,0xf4,0xf5,0xf4,
+ 0xff,0xbb,0xbd,0xbc,0xff,0x30,0x7c,0x43,0xff,0x40,0x84,0x51,0xff,0x43,0x86,
+ 0x54,0xff,0x46,0x88,0x56,0xff,0x49,0x8a,0x59,0xff,0x4c,0x8c,0x5b,0xff,0x55,
+ 0x99,0x61,0xff,0x19,0x35,0x41,0xff,0x02,0x1f,0x39,0xff,0x87,0x02,0x20,0x3a,
+ 0xff,0x31,0x01,0x12,0x34,0xff,0x86,0xcd,0xa3,0xff,0x46,0x92,0x58,0xff,0x4e,
+ 0x9d,0x61,0xff,0x4b,0x9e,0x60,0xff,0x4a,0x9e,0x5f,0xff,0x47,0x9e,0x5e,0xff,
+ 0x45,0x9f,0x5c,0xff,0x43,0x9f,0x5b,0xff,0x41,0x9f,0x5a,0xff,0x3f,0x9f,0x58,
+ 0xff,0x3d,0x9f,0x57,0xff,0x3b,0x9f,0x55,0xff,0x39,0x9e,0x54,0xff,0x37,0x9f,
+ 0x53,0xff,0x36,0x9f,0x52,0xff,0x38,0x9e,0x53,0xff,0x3a,0x9e,0x55,0xff,0x3c,
+ 0x9f,0x56,0xff,0x3e,0x9e,0x57,0xff,0x40,0x9d,0x58,0xff,0x42,0x9d,0x5a,0xff,
+ 0x44,0x9d,0x5a,0xff,0x45,0x9c,0x5b,0xff,0x47,0x9e,0x5d,0xff,0x40,0x8b,0x55,
+ 0xff,0x37,0x78,0x4b,0xff,0x38,0x79,0x4c,0xff,0x3a,0x79,0x4d,0xff,0x3a,0x77,
+ 0x4d,0xff,0x4f,0x97,0x60,0xff,0x50,0x97,0x60,0xff,0x50,0x96,0x60,0xff,0x52,
+ 0x97,0x61,0xff,0x47,0x84,0x56,0xff,0x38,0x69,0x49,0xff,0x3a,0x6b,0x4b,0xff,
+ 0x3a,0x6b,0x4a,0xff,0x3f,0x6f,0x4d,0xff,0x54,0x8f,0x60,0xff,0x52,0x8c,0x5e,
+ 0xff,0x42,0x6f,0x4b,0xf2,0x2a,0x45,0x2f,0x7c,0x00,0x00,0x00,0x38,0x00,0x00,
+ 0x00,0x28,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x06,0x00,
+ 0x00,0x00,0x01,0x82,0x00,0x00,0x00,0x00,0x1a,0x91,0x96,0x99,0x28,0x99,0x9d,
+ 0xa1,0xc9,0xe9,0xeb,0xed,0xff,0xda,0xe0,0xe4,0xff,0xdb,0xe0,0xe4,0xff,0xdc,
+ 0xe1,0xe5,0xff,0xe0,0xe6,0xea,0xff,0x9e,0xa0,0xa1,0xff,0x3f,0x3e,0x3e,0xff,
+ 0x9b,0x9b,0x9b,0xff,0xe9,0xea,0xea,0xff,0xf2,0xf2,0xf2,0xff,0xb4,0xb8,0xb4,
+ 0xff,0x31,0x7d,0x44,0xff,0x44,0x86,0x54,0xff,0x47,0x88,0x57,0xff,0x49,0x8a,
+ 0x59,0xff,0x4c,0x8c,0x5b,0xff,0x4e,0x8e,0x5e,0xff,0x56,0x99,0x62,0xff,0x19,
+ 0x34,0x3d,0xff,0x01,0x16,0x32,0xff,0x01,0x16,0x33,0xff,0x01,0x17,0x32,0xff,
+ 0x02,0x17,0x32,0xff,0x01,0x16,0x33,0xff,0x82,0x01,0x16,0x32,0xff,0x32,0x01,
+ 0x16,0x31,0xff,0x01,0x0e,0x2e,0xff,0x81,0xcc,0x9f,0xff,0x45,0x93,0x58,0xff,
+ 0x4b,0x9e,0x60,0xff,0x49,0x9e,0x5f,0xff,0x48,0x9e,0x5e,0xff,0x45,0x9f,0x5d,
+ 0xff,0x43,0x9f,0x5b,0xff,0x41,0x9f,0x5a,0xff,0x3f,0x9f,0x58,0xff,0x3d,0x9f,
+ 0x57,0xff,0x3b,0x9f,0x55,0xff,0x39,0x9f,0x54,0xff,0x37,0x9f,0x53,0xff,0x37,
+ 0xa0,0x52,0xff,0x38,0xa3,0x54,0xff,0x3b,0xa4,0x56,0xff,0x3c,0xa4,0x57,0xff,
+ 0x3e,0xa3,0x59,0xff,0x40,0xa0,0x59,0xff,0x42,0x9f,0x5b,0xff,0x40,0x95,0x57,
+ 0xff,0x43,0x97,0x58,0xff,0x46,0x9a,0x5b,0xff,0x48,0x9b,0x5d,0xff,0x49,0x9a,
+ 0x5d,0xff,0x3f,0x85,0x53,0xff,0x3f,0x83,0x53,0xff,0x40,0x82,0x53,0xff,0x48,
+ 0x8d,0x59,0xff,0x50,0x98,0x60,0xff,0x50,0x96,0x60,0xff,0x51,0x95,0x60,0xff,
+ 0x53,0x97,0x61,0xff,0x48,0x83,0x58,0xff,0x39,0x6a,0x49,0xff,0x3b,0x6b,0x4a,
+ 0xff,0x3a,0x6a,0x49,0xff,0x3f,0x6f,0x4d,0xff,0x54,0x8f,0x60,0xff,0x53,0x8a,
+ 0x5e,0xff,0x43,0x6e,0x4a,0xf2,0x2a,0x44,0x2e,0x7d,0x00,0x00,0x00,0x3b,0x00,
+ 0x00,0x00,0x29,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x06,
+ 0x00,0x00,0x00,0x03,0x82,0x00,0x00,0x00,0x00,0x16,0x6c,0x6e,0x6f,0x2a,0x64,
+ 0x64,0x65,0xcb,0xc7,0xcc,0xd1,0xff,0x97,0xa4,0xae,0xff,0x97,0xa4,0xaf,0xff,
+ 0x98,0xa5,0xb0,0xff,0x9d,0xaa,0xb5,0xff,0x80,0x87,0x8b,0xff,0x3e,0x3d,0x3d,
+ 0xff,0x98,0x99,0x98,0xff,0xeb,0xec,0xeb,0xff,0xef,0xf0,0xef,0xff,0xb1,0xb5,
+ 0xb2,0xff,0x37,0x80,0x48,0xff,0x47,0x88,0x57,0xff,0x49,0x8a,0x59,0xff,0x4c,
+ 0x8c,0x5d,0xff,0x4e,0x8f,0x5e,0xff,0x50,0x90,0x5f,0xff,0x53,0x96,0x60,0xff,
+ 0x4e,0x8b,0x74,0xff,0x50,0x89,0x7c,0xff,0x82,0x50,0x8a,0x7c,0xff,0x36,0x50,
+ 0x8b,0x7d,0xff,0x4f,0x8b,0x7d,0xff,0x4e,0x8b,0x7c,0xff,0x4f,0x8b,0x7b,0xff,
+ 0x4c,0x8b,0x7a,0xff,0x51,0x89,0x7f,0xff,0x87,0xe0,0xaa,0xff,0x44,0x95,0x58,
+ 0xff,0x49,0x9e,0x5f,0xff,0x47,0x9e,0x5e,0xff,0x45,0x9f,0x5d,0xff,0x43,0x9f,
+ 0x5b,0xff,0x41,0x9f,0x59,0xff,0x3f,0x9f,0x58,0xff,0x3c,0x9f,0x57,0xff,0x3b,
+ 0x9f,0x56,0xff,0x39,0x9f,0x54,0xff,0x37,0x9f,0x53,0xff,0x36,0x9f,0x53,0xff,
+ 0x36,0x9d,0x52,0xff,0x35,0x7a,0x48,0xff,0x3a,0x73,0x4b,0xff,0x3a,0x73,0x4a,
+ 0xff,0x3c,0x71,0x4b,0xff,0x37,0x80,0x4b,0xff,0x44,0x9e,0x5a,0xff,0x37,0x80,
+ 0x4c,0xff,0x3c,0x86,0x52,0xff,0x46,0x96,0x5a,0xff,0x49,0x9b,0x5d,0xff,0x4b,
+ 0x9a,0x5e,0xff,0x4c,0x99,0x60,0xff,0x4c,0x96,0x5e,0xff,0x4e,0x96,0x5e,0xff,
+ 0x4f,0x99,0x60,0xff,0x50,0x97,0x60,0xff,0x51,0x95,0x60,0xff,0x52,0x94,0x60,
+ 0xff,0x53,0x96,0x62,0xff,0x48,0x82,0x58,0xff,0x3a,0x69,0x49,0xff,0x3b,0x6b,
+ 0x4a,0xff,0x3b,0x69,0x49,0xff,0x3f,0x6d,0x4c,0xff,0x55,0x8d,0x5f,0xff,0x53,
+ 0x89,0x5d,0xff,0x42,0x6d,0x4a,0xf2,0x29,0x43,0x2d,0x7f,0x00,0x00,0x00,0x3b,
+ 0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+ 0x06,0x00,0x00,0x00,0x03,0x82,0x00,0x00,0x00,0x00,0x4e,0x4c,0x4c,0x4c,0x17,
+ 0x58,0x57,0x57,0xbc,0xb7,0xbf,0xc5,0xfb,0x8e,0x9c,0xa8,0xfc,0x90,0x9d,0xa9,
+ 0xfb,0x91,0x9f,0xab,0xfd,0x96,0xa4,0xb0,0xff,0x4f,0x54,0x57,0xff,0x10,0x10,
+ 0x10,0xff,0x85,0x85,0x86,0xff,0xeb,0xec,0xed,0xff,0xeb,0xeb,0xec,0xff,0xaf,
+ 0xb1,0xaf,0xff,0x3b,0x84,0x4b,0xff,0x49,0x8b,0x5a,0xff,0x4c,0x8c,0x5b,0xff,
+ 0x4e,0x8e,0x5e,0xff,0x50,0x90,0x5f,0xff,0x51,0x92,0x61,0xff,0x51,0x92,0x5f,
+ 0xff,0x5e,0xa5,0x71,0xff,0x63,0xab,0x76,0xff,0x63,0xac,0x77,0xff,0x63,0xad,
+ 0x78,0xff,0x62,0xae,0x78,0xff,0x62,0xaf,0x78,0xff,0x61,0xaf,0x76,0xff,0x60,
+ 0xb0,0x76,0xff,0x5e,0xb0,0x75,0xff,0x60,0xb0,0x77,0xff,0x5f,0xb5,0x77,0xff,
+ 0x45,0x99,0x5a,0xff,0x47,0x9e,0x5e,0xff,0x45,0x9f,0x5c,0xff,0x43,0x9f,0x5b,
+ 0xff,0x41,0x9f,0x59,0xff,0x3f,0x9f,0x58,0xff,0x3c,0x9f,0x57,0xff,0x3b,0x9f,
+ 0x56,0xff,0x39,0x9f,0x54,0xff,0x37,0x9f,0x53,0xff,0x35,0x9f,0x52,0xff,0x39,
+ 0xa0,0x54,0xff,0x37,0x9e,0x52,0xff,0x40,0x5c,0x49,0xff,0x4e,0x4a,0x4d,0xff,
+ 0x4d,0x4c,0x4c,0xff,0x4e,0x49,0x4d,0xff,0x39,0x6e,0x4a,0xff,0x46,0xa0,0x5c,
+ 0xff,0x35,0x7c,0x4b,0xff,0x3c,0x83,0x51,0xff,0x47,0x95,0x5b,0xff,0x4b,0x9a,
+ 0x5e,0xff,0x4c,0x99,0x5f,0xff,0x4d,0x98,0x5f,0xff,0x4f,0x98,0x5f,0xff,0x4f,
+ 0x97,0x60,0xff,0x50,0x97,0x60,0xff,0x51,0x95,0x60,0xff,0x52,0x94,0x60,0xff,
+ 0x52,0x93,0x61,0xff,0x54,0x95,0x62,0xff,0x49,0x81,0x57,0xff,0x39,0x68,0x49,
+ 0xff,0x3c,0x6a,0x4a,0xff,0x3b,0x68,0x49,0xff,0x3f,0x6d,0x4d,0xff,0x56,0x8c,
+ 0x5f,0xff,0x53,0x88,0x5d,0xff,0x42,0x6d,0x4a,0xf2,0x28,0x42,0x2d,0x7f,0x00,
+ 0x00,0x00,0x3c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0c,
+ 0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x83,0x00,0x00,0x00,0x00,0x11,0xc5,
+ 0xc4,0xc3,0x2b,0xd0,0xd6,0xdb,0x63,0xc6,0xce,0xd4,0x65,0xc9,0xd0,0xd7,0x62,
+ 0xbf,0xc2,0xc6,0xbc,0xbc,0xbe,0xc0,0xff,0x46,0x45,0x45,0xff,0x39,0x39,0x39,
+ 0xff,0x96,0x96,0x97,0xff,0xeb,0xec,0xeb,0xff,0xe8,0xe8,0xe9,0xff,0xac,0xae,
+ 0xac,0xff,0x3e,0x86,0x4f,0xff,0x4d,0x8d,0x5c,0xff,0x4e,0x8f,0x5e,0xff,0x50,
+ 0x90,0x60,0xff,0x51,0x92,0x61,0xff,0x82,0x52,0x94,0x62,0xff,0x3a,0x52,0x95,
+ 0x63,0xff,0x52,0x94,0x62,0xff,0x52,0x95,0x62,0xff,0x52,0x97,0x62,0xff,0x4f,
+ 0x97,0x61,0xff,0x4f,0x99,0x60,0xff,0x4e,0x9a,0x61,0xff,0x4c,0x9a,0x5f,0xff,
+ 0x4c,0x9b,0x5f,0xff,0x4a,0x9b,0x5d,0xff,0x48,0x9d,0x5d,0xff,0x47,0x9e,0x5d,
+ 0xff,0x45,0x9f,0x5c,0xff,0x43,0xa0,0x5a,0xff,0x41,0xa0,0x59,0xff,0x3f,0x9e,
+ 0x57,0xff,0x3c,0x9e,0x56,0xff,0x3a,0xa0,0x56,0xff,0x39,0x9f,0x54,0xff,0x37,
+ 0x9f,0x53,0xff,0x37,0x9f,0x52,0xff,0x39,0x9f,0x53,0xff,0x3b,0x9f,0x55,0xff,
+ 0x38,0x9f,0x54,0xff,0x41,0x5c,0x4a,0xff,0x4f,0x4c,0x4e,0xff,0x4d,0x4e,0x4d,
+ 0xff,0x4f,0x48,0x4d,0xff,0x39,0x6d,0x49,0xff,0x49,0x9d,0x5e,0xff,0x38,0x7c,
+ 0x4e,0xff,0x3d,0x83,0x51,0xff,0x48,0x95,0x5c,0xff,0x4c,0x99,0x5f,0xff,0x4d,
+ 0x98,0x5f,0xff,0x4e,0x98,0x5f,0xff,0x4f,0x96,0x60,0xff,0x50,0x96,0x60,0xff,
+ 0x51,0x95,0x60,0xff,0x52,0x94,0x60,0xff,0x52,0x93,0x61,0xff,0x53,0x92,0x61,
+ 0xff,0x54,0x93,0x61,0xff,0x4a,0x81,0x56,0xff,0x3a,0x67,0x49,0xff,0x3c,0x69,
+ 0x4a,0xff,0x3c,0x68,0x4a,0xff,0x3f,0x6d,0x4e,0xff,0x55,0x8b,0x5f,0xff,0x53,
+ 0x87,0x5c,0xff,0x42,0x6b,0x49,0xf2,0x29,0x42,0x2d,0x7f,0x00,0x00,0x00,0x3c,
+ 0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+ 0x07,0x00,0x00,0x00,0x03,0x87,0x00,0x00,0x00,0x00,0x02,0xc5,0xc4,0xc4,0x93,
+ 0xd2,0xd1,0xd2,0xff,0x82,0xd6,0xd5,0xd6,0xff,0x45,0xe3,0xe3,0xe4,0xff,0xea,
+ 0xea,0xeb,0xff,0xe7,0xe6,0xe6,0xff,0xa9,0xab,0xa9,0xff,0x41,0x89,0x52,0xff,
+ 0x4e,0x8f,0x5e,0xff,0x50,0x90,0x60,0xff,0x51,0x92,0x61,0xff,0x52,0x94,0x62,
+ 0xff,0x54,0x95,0x63,0xff,0x54,0x97,0x64,0xff,0x53,0x98,0x64,0xff,0x53,0x99,
+ 0x64,0xff,0x53,0x9b,0x64,0xff,0x53,0x9c,0x64,0xff,0x52,0x9c,0x63,0xff,0x50,
+ 0x9c,0x62,0xff,0x4e,0x9c,0x62,0xff,0x4d,0x9d,0x60,0xff,0x4b,0x9d,0x60,0xff,
+ 0x49,0x9e,0x5f,0xff,0x48,0x9f,0x5f,0xff,0x41,0x97,0x57,0xff,0x39,0x85,0x4e,
+ 0xff,0x38,0x87,0x4e,0xff,0x35,0x88,0x4d,0xff,0x34,0x87,0x4c,0xff,0x32,0x8b,
+ 0x4b,0xff,0x38,0x9e,0x53,0xff,0x37,0xa0,0x53,0xff,0x36,0x9f,0x52,0xff,0x39,
+ 0x9f,0x53,0xff,0x3b,0x9e,0x55,0xff,0x3c,0x9f,0x56,0xff,0x3a,0x9d,0x55,0xff,
+ 0x43,0x5a,0x4a,0xff,0x50,0x4a,0x4e,0xff,0x4f,0x4c,0x4d,0xff,0x50,0x47,0x4e,
+ 0xff,0x3b,0x6c,0x4a,0xff,0x49,0x9c,0x5e,0xff,0x42,0x8c,0x56,0xff,0x45,0x8f,
+ 0x59,0xff,0x4b,0x97,0x5e,0xff,0x4d,0x98,0x5f,0xff,0x4e,0x98,0x5f,0xff,0x4f,
+ 0x96,0x60,0xff,0x50,0x96,0x60,0xff,0x51,0x95,0x60,0xff,0x52,0x94,0x60,0xff,
+ 0x52,0x93,0x61,0xff,0x53,0x92,0x61,0xff,0x54,0x91,0x60,0xff,0x54,0x91,0x61,
+ 0xff,0x50,0x89,0x5b,0xff,0x48,0x7c,0x55,0xff,0x4a,0x7b,0x55,0xff,0x49,0x7b,
+ 0x55,0xff,0x4a,0x7d,0x56,0xff,0x55,0x8a,0x5f,0xff,0x53,0x85,0x5c,0xff,0x42,
+ 0x6a,0x49,0xf2,0x29,0x42,0x2c,0x7e,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x2b,
+ 0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+ 0x03,0x87,0x00,0x00,0x00,0x00,0x02,0xc5,0xc6,0xc5,0x93,0xd0,0xd0,0xd0,0xff,
+ 0x82,0xd3,0xd3,0xd4,0xff,0x38,0xe0,0xe0,0xe1,0xff,0xe9,0xe9,0xe9,0xff,0xe3,
+ 0xe3,0xe3,0xff,0xa5,0xa8,0xa6,0xff,0x43,0x8b,0x55,0xff,0x50,0x90,0x60,0xff,
+ 0x51,0x92,0x61,0xff,0x52,0x94,0x62,0xff,0x53,0x95,0x62,0xff,0x4e,0x8d,0x5f,
+ 0xff,0x4b,0x8a,0x5d,0xff,0x51,0x97,0x63,0xff,0x53,0x9a,0x64,0xff,0x50,0x99,
+ 0x63,0xff,0x49,0x8e,0x5c,0xff,0x4b,0x93,0x5d,0xff,0x4e,0x9c,0x61,0xff,0x4d,
+ 0x9d,0x60,0xff,0x4a,0x9d,0x5f,0xff,0x49,0x9e,0x5e,0xff,0x47,0x9e,0x5e,0xff,
+ 0x45,0xa1,0x5d,0xff,0x3b,0x8f,0x53,0xff,0x3a,0x5b,0x45,0xff,0x44,0x55,0x49,
+ 0xff,0x42,0x56,0x49,0xff,0x43,0x54,0x48,0xff,0x2b,0x73,0x42,0xff,0x35,0x9c,
+ 0x51,0xff,0x37,0xa0,0x53,0xff,0x39,0x9f,0x53,0xff,0x3b,0x9e,0x55,0xff,0x3c,
+ 0x9e,0x56,0xff,0x3f,0x9e,0x57,0xff,0x3d,0x9b,0x56,0xff,0x39,0x62,0x47,0xff,
+ 0x40,0x58,0x48,0xff,0x3f,0x58,0x48,0xff,0x41,0x55,0x48,0xff,0x37,0x6e,0x49,
+ 0xff,0x49,0x9a,0x5d,0xff,0x4b,0x9a,0x5f,0xff,0x4c,0x9a,0x5f,0xff,0x4e,0x98,
+ 0x5f,0xff,0x4e,0x97,0x5f,0xff,0x4f,0x96,0x60,0xff,0x50,0x96,0x60,0xff,0x51,
+ 0x95,0x60,0xff,0x52,0x94,0x60,0xff,0x52,0x93,0x61,0xff,0x54,0x93,0x61,0xff,
+ 0x54,0x91,0x60,0xff,0x54,0x90,0x60,0xff,0x54,0x90,0x61,0xff,0x55,0x8f,0x60,
+ 0xff,0x56,0x8f,0x60,0xff,0x82,0x57,0x8d,0x60,0xff,0x0b,0x56,0x8b,0x5f,0xff,
+ 0x55,0x89,0x5e,0xff,0x53,0x85,0x5b,0xff,0x42,0x6a,0x49,0xf3,0x28,0x41,0x2c,
+ 0x7f,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1a,0x00,0x00,
+ 0x00,0x0e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x83,0x00,0x00,0x00,0x00,
+ 0x4d,0x87,0x8c,0x91,0x48,0x9c,0x9f,0xa1,0x61,0x99,0x9c,0x9f,0x5e,0x9a,0x9d,
+ 0xa0,0x5b,0xa1,0xa2,0xa3,0xb9,0xa8,0xa9,0xaa,0xff,0x54,0x53,0x54,0xff,0x41,
+ 0x41,0x42,0xff,0x9b,0x9b,0x9b,0xff,0xe5,0xe7,0xe5,0xff,0xdf,0xe0,0xe0,0xff,
+ 0xa3,0xa4,0xa2,0xff,0x46,0x8e,0x57,0xff,0x52,0x92,0x61,0xff,0x52,0x93,0x62,
+ 0xff,0x53,0x95,0x63,0xff,0x52,0x95,0x64,0xff,0x47,0x84,0x59,0xff,0x40,0x7b,
+ 0x54,0xff,0x4f,0x95,0x62,0xff,0x52,0x9b,0x64,0xff,0x4e,0x97,0x62,0xff,0x3e,
+ 0x7d,0x52,0xff,0x42,0x88,0x57,0xff,0x4c,0x9b,0x60,0xff,0x4a,0x9e,0x60,0xff,
+ 0x49,0x9e,0x5e,0xff,0x47,0x9e,0x5d,0xff,0x45,0x9f,0x5c,0xff,0x43,0xa1,0x5b,
+ 0xff,0x3a,0x90,0x52,0xff,0x42,0x53,0x49,0xff,0x50,0x4a,0x4e,0xff,0x4e,0x4c,
+ 0x4d,0xff,0x50,0x49,0x4e,0xff,0x2c,0x74,0x43,0xff,0x35,0x9d,0x51,0xff,0x39,
+ 0xa0,0x53,0xff,0x3b,0x9f,0x55,0xff,0x3d,0x9e,0x56,0xff,0x3e,0x9e,0x57,0xff,
+ 0x41,0x9d,0x58,0xff,0x42,0x9e,0x5a,0xff,0x41,0x94,0x58,0xff,0x42,0x95,0x57,
+ 0xff,0x44,0x94,0x59,0xff,0x45,0x93,0x59,0xff,0x45,0x94,0x5a,0xff,0x4b,0x9b,
+ 0x5e,0xff,0x4c,0x99,0x5f,0xff,0x4d,0x98,0x5f,0xff,0x4e,0x97,0x5f,0xff,0x4f,
+ 0x96,0x60,0xff,0x50,0x96,0x60,0xff,0x51,0x95,0x60,0xff,0x52,0x94,0x61,0xff,
+ 0x53,0x94,0x62,0xff,0x52,0x91,0x60,0xff,0x4f,0x8b,0x5e,0xff,0x53,0x8f,0x5e,
+ 0xff,0x54,0x90,0x60,0xff,0x55,0x90,0x60,0xff,0x52,0x8c,0x5e,0xff,0x51,0x87,
+ 0x5b,0xff,0x55,0x8b,0x5f,0xff,0x55,0x8b,0x5e,0xff,0x55,0x89,0x5d,0xff,0x55,
+ 0x88,0x5d,0xff,0x52,0x83,0x5a,0xff,0x42,0x68,0x47,0xf2,0x28,0x40,0x2b,0x7e,
+ 0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+ 0x0e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x82,0x00,0x00,0x00,0x00,0x4e,
+ 0xa2,0xa8,0xad,0x1e,0xaa,0xaf,0xb5,0xbd,0xe2,0xe6,0xe9,0xf5,0xd0,0xd7,0xdc,
+ 0xf5,0xd2,0xd8,0xdd,0xf4,0xd0,0xd7,0xdb,0xfa,0xd3,0xda,0xde,0xff,0x82,0x84,
+ 0x85,0xff,0x28,0x28,0x28,0xff,0x8a,0x8a,0x8a,0xff,0xe1,0xdf,0xe0,0xff,0xdc,
+ 0xdb,0xdd,0xff,0x9e,0xa0,0x9f,0xff,0x48,0x90,0x5a,0xff,0x53,0x94,0x62,0xff,
+ 0x53,0x95,0x63,0xff,0x53,0x96,0x64,0xff,0x52,0x96,0x64,0xff,0x46,0x85,0x59,
+ 0xff,0x3f,0x7b,0x52,0xff,0x4e,0x96,0x60,0xff,0x51,0x9c,0x63,0xff,0x4c,0x98,
+ 0x60,0xff,0x3b,0x7c,0x50,0xff,0x43,0x89,0x56,0xff,0x4a,0x9d,0x60,0xff,0x49,
+ 0x9e,0x5f,0xff,0x46,0x9e,0x5d,0xff,0x44,0x9f,0x5c,0xff,0x43,0x9f,0x5a,0xff,
+ 0x41,0xa1,0x5a,0xff,0x39,0x91,0x51,0xff,0x41,0x54,0x49,0xff,0x4f,0x4b,0x4e,
+ 0xff,0x4e,0x4d,0x4d,0xff,0x4f,0x49,0x4f,0xff,0x2c,0x74,0x42,0xff,0x37,0x9d,
+ 0x51,0xff,0x3b,0x9f,0x56,0xff,0x3d,0x9e,0x56,0xff,0x3e,0x9e,0x57,0xff,0x41,
+ 0x9d,0x58,0xff,0x42,0x9d,0x59,0xff,0x44,0x9d,0x5b,0xff,0x46,0x9c,0x5b,0xff,
+ 0x47,0x9b,0x5c,0xff,0x49,0x9b,0x5d,0xff,0x4a,0x9b,0x5e,0xff,0x4b,0x9a,0x5e,
+ 0xff,0x4d,0x9a,0x60,0xff,0x4d,0x98,0x5e,0xff,0x50,0x99,0x61,0xff,0x50,0x97,
+ 0x61,0xff,0x51,0x96,0x60,0xff,0x52,0x95,0x60,0xff,0x52,0x94,0x60,0xff,0x52,
+ 0x93,0x61,0xff,0x54,0x95,0x62,0xff,0x49,0x83,0x58,0xff,0x3a,0x69,0x49,0xff,
+ 0x4c,0x83,0x59,0xff,0x56,0x91,0x61,0xff,0x50,0x86,0x5b,0xff,0x3c,0x6a,0x4a,
+ 0xff,0x40,0x6c,0x4b,0xff,0x44,0x71,0x4f,0xff,0x53,0x86,0x5b,0xff,0x55,0x88,
+ 0x5c,0xff,0x54,0x86,0x5c,0xff,0x53,0x82,0x59,0xff,0x42,0x67,0x47,0xf3,0x29,
+ 0x3f,0x2c,0x7f,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x19,
+ 0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x82,0x00,0x00,
+ 0x00,0x00,0x4e,0x7b,0x7d,0x7f,0x2f,0x76,0x78,0x79,0xcd,0xde,0xe1,0xe3,0xff,
+ 0xc5,0xcc,0xd1,0xff,0xc5,0xcc,0xd2,0xff,0xc6,0xcd,0xd3,0xff,0xca,0xd2,0xd9,
+ 0xff,0xa1,0xa5,0xa6,0xff,0x4f,0x4d,0x4d,0xff,0x90,0x90,0x90,0xff,0xde,0xde,
+ 0xdf,0xff,0xda,0xda,0xda,0xff,0x9b,0x9e,0x9b,0xff,0x4a,0x92,0x5b,0xff,0x53,
+ 0x95,0x63,0xff,0x53,0x96,0x64,0xff,0x53,0x98,0x64,0xff,0x53,0x97,0x62,0xff,
+ 0x47,0x87,0x59,0xff,0x40,0x7c,0x53,0xff,0x4e,0x96,0x61,0xff,0x4f,0x9d,0x63,
+ 0xff,0x4b,0x98,0x5f,0xff,0x3c,0x7f,0x50,0xff,0x41,0x8c,0x56,0xff,0x48,0x9e,
+ 0x60,0xff,0x47,0xa0,0x5e,0xff,0x45,0xa0,0x5c,0xff,0x43,0xa0,0x5b,0xff,0x40,
+ 0x9f,0x59,0xff,0x3e,0xa1,0x58,0xff,0x37,0x8f,0x4f,0xff,0x3d,0x57,0x46,0xff,
+ 0x49,0x4f,0x4b,0xff,0x48,0x50,0x4a,0xff,0x49,0x4f,0x4a,0xff,0x2d,0x73,0x43,
+ 0xff,0x39,0x9b,0x54,0xff,0x3d,0x9f,0x57,0xff,0x3f,0x9e,0x57,0xff,0x41,0x9d,
+ 0x58,0xff,0x43,0x9d,0x5a,0xff,0x44,0x9c,0x5b,0xff,0x45,0x9c,0x5b,0xff,0x47,
+ 0x9b,0x5c,0xff,0x48,0x9b,0x5d,0xff,0x4a,0x9a,0x5e,0xff,0x4b,0x99,0x5e,0xff,
+ 0x4c,0x99,0x5f,0xff,0x4f,0x99,0x60,0xff,0x3e,0x7c,0x50,0xff,0x42,0x7e,0x52,
+ 0xff,0x41,0x7d,0x52,0xff,0x44,0x7f,0x54,0xff,0x52,0x94,0x60,0xff,0x52,0x93,
+ 0x61,0xff,0x53,0x92,0x61,0xff,0x55,0x93,0x61,0xff,0x4b,0x82,0x58,0xff,0x3a,
+ 0x68,0x49,0xff,0x4d,0x83,0x59,0xff,0x57,0x90,0x61,0xff,0x47,0x77,0x52,0xff,
+ 0x43,0x72,0x4f,0xff,0x3a,0x65,0x47,0xff,0x45,0x71,0x4f,0xff,0x50,0x80,0x57,
+ 0xff,0x55,0x85,0x5c,0xff,0x54,0x85,0x5b,0xff,0x52,0x80,0x58,0xff,0x41,0x66,
+ 0x46,0xf3,0x28,0x3f,0x2a,0x7f,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x2b,0x00,
+ 0x00,0x00,0x19,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,
+ 0x82,0x00,0x00,0x00,0x00,0x4e,0x57,0x57,0x57,0x1f,0x56,0x55,0x55,0xc4,0xb6,
+ 0xbd,0xc3,0xff,0x80,0x90,0x9d,0xff,0x81,0x91,0x9e,0xff,0x82,0x92,0xa0,0xff,
+ 0x87,0x97,0xa5,0xff,0x5a,0x61,0x66,0xff,0x1f,0x1f,0x1f,0xff,0x7d,0x7d,0x7d,
+ 0xff,0xde,0xde,0xde,0xff,0xd6,0xd7,0xd6,0xff,0x98,0x99,0x97,0xff,0x4a,0x94,
+ 0x5c,0xff,0x53,0x96,0x64,0xff,0x53,0x97,0x64,0xff,0x53,0x99,0x64,0xff,0x52,
+ 0x99,0x64,0xff,0x4d,0x93,0x5f,0xff,0x49,0x8f,0x5c,0xff,0x4e,0x9a,0x61,0xff,
+ 0x4e,0x9e,0x62,0xff,0x4a,0x9b,0x5f,0xff,0x3b,0x86,0x52,0xff,0x3b,0x8c,0x53,
+ 0xff,0x3d,0x94,0x57,0xff,0x3b,0x95,0x55,0xff,0x3b,0x93,0x53,0xff,0x3e,0x9b,
+ 0x57,0xff,0x3e,0xa0,0x58,0xff,0x3c,0xa1,0x56,0xff,0x36,0x95,0x50,0xff,0x2d,
+ 0x7d,0x45,0xff,0x2d,0x7f,0x46,0xff,0x2e,0x7f,0x46,0xff,0x31,0x7e,0x47,0xff,
+ 0x2f,0x85,0x49,0xff,0x3c,0x9c,0x55,0xff,0x3f,0x9e,0x57,0xff,0x41,0x9d,0x58,
+ 0xff,0x42,0x9d,0x59,0xff,0x44,0x9c,0x5a,0xff,0x46,0x9c,0x5b,0xff,0x47,0x9b,
+ 0x5c,0xff,0x49,0x9b,0x5d,0xff,0x4a,0x9a,0x5e,0xff,0x4b,0x99,0x5e,0xff,0x4c,
+ 0x99,0x5f,0xff,0x4e,0x98,0x5f,0xff,0x50,0x99,0x61,0xff,0x42,0x81,0x53,0xff,
+ 0x45,0x83,0x55,0xff,0x45,0x81,0x55,0xff,0x48,0x84,0x57,0xff,0x53,0x93,0x62,
+ 0xff,0x53,0x92,0x61,0xff,0x54,0x91,0x60,0xff,0x55,0x92,0x61,0xff,0x4b,0x81,
+ 0x58,0xff,0x3a,0x66,0x49,0xff,0x4d,0x81,0x58,0xff,0x56,0x8f,0x60,0xff,0x4d,
+ 0x80,0x58,0xff,0x42,0x70,0x4d,0xff,0x3c,0x65,0x48,0xff,0x46,0x72,0x50,0xff,
+ 0x52,0x82,0x5a,0xff,0x54,0x84,0x5b,0xff,0x54,0x83,0x5a,0xff,0x51,0x7f,0x58,
+ 0xff,0x40,0x65,0x45,0xf2,0x28,0x3e,0x2a,0x7f,0x00,0x00,0x00,0x3d,0x00,0x00,
+ 0x00,0x2b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x07,0x00,
+ 0x00,0x00,0x03,0x82,0x00,0x00,0x00,0x00,0x34,0x46,0x45,0x45,0x08,0x7c,0x7b,
+ 0x7a,0x69,0xc3,0xca,0xcf,0xad,0xaa,0xb5,0xbe,0xaf,0xac,0xb6,0xc0,0xac,0xad,
+ 0xb5,0xbc,0xdb,0xac,0xb2,0xb9,0xff,0x30,0x32,0x33,0xff,0x0e,0x0e,0x0e,0xff,
+ 0x74,0x73,0x73,0xff,0xde,0xde,0xde,0xff,0xd3,0xd3,0xd2,0xff,0x95,0x98,0x95,
+ 0xff,0x4a,0x96,0x5e,0xff,0x53,0x97,0x64,0xff,0x53,0x99,0x64,0xff,0x52,0x9a,
+ 0x64,0xff,0x51,0x9b,0x64,0xff,0x50,0x9c,0x64,0xff,0x4f,0x9d,0x63,0xff,0x4e,
+ 0x9d,0x62,0xff,0x4c,0x9d,0x61,0xff,0x47,0x99,0x5c,0xff,0x3a,0x72,0x4c,0xff,
+ 0x44,0x5c,0x4c,0xff,0x45,0x5b,0x4c,0xff,0x44,0x59,0x4b,0xff,0x38,0x68,0x48,
+ 0xff,0x35,0x92,0x50,0xff,0x3d,0xa0,0x57,0xff,0x3a,0xa0,0x55,0xff,0x38,0x9f,
+ 0x53,0xff,0x35,0x9e,0x51,0xff,0x36,0x9e,0x52,0xff,0x39,0x9e,0x53,0xff,0x3b,
+ 0x9e,0x55,0xff,0x3c,0x9d,0x57,0xff,0x3f,0x9f,0x57,0xff,0x41,0x9d,0x58,0xff,
+ 0x42,0x9d,0x59,0xff,0x44,0x9c,0x5b,0xff,0x46,0x9c,0x5b,0xff,0x47,0x9b,0x5c,
+ 0xff,0x49,0x9b,0x5d,0xff,0x4a,0x9a,0x5e,0xff,0x4b,0x99,0x5f,0xff,0x4d,0x99,
+ 0x5f,0xff,0x4e,0x98,0x5f,0xff,0x4f,0x97,0x5f,0xff,0x50,0x97,0x61,0xff,0x50,
+ 0x94,0x60,0xff,0x51,0x94,0x5f,0xff,0x82,0x51,0x93,0x60,0xff,0x18,0x54,0x93,
+ 0x61,0xff,0x54,0x91,0x60,0xff,0x54,0x90,0x60,0xff,0x56,0x92,0x61,0xff,0x4b,
+ 0x80,0x57,0xff,0x3a,0x67,0x48,0xff,0x4d,0x80,0x58,0xff,0x56,0x8c,0x5f,0xff,
+ 0x55,0x8a,0x5e,0xff,0x4f,0x81,0x58,0xff,0x4d,0x7d,0x56,0xff,0x50,0x80,0x58,
+ 0xff,0x54,0x85,0x5b,0xff,0x53,0x83,0x5a,0xff,0x53,0x82,0x59,0xff,0x51,0x7e,
+ 0x56,0xff,0x40,0x64,0x44,0xf3,0x27,0x3d,0x2a,0x7f,0x00,0x00,0x00,0x3d,0x00,
+ 0x00,0x00,0x2b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x07,
+ 0x00,0x00,0x00,0x03,0x83,0x00,0x00,0x00,0x00,0x33,0xc5,0xc4,0xc3,0x0a,0xd0,
+ 0xd6,0xdb,0x18,0xc6,0xce,0xd4,0x18,0xc9,0xd0,0xd7,0x18,0x93,0x92,0x93,0x9d,
+ 0xa9,0xa9,0xaa,0xff,0x95,0x95,0x96,0xff,0x92,0x92,0x93,0xff,0xb1,0xb1,0xb1,
+ 0xff,0xdc,0xdd,0xdc,0xff,0xd0,0xd0,0xd0,0xff,0x92,0x94,0x91,0xff,0x4b,0x97,
+ 0x5e,0xff,0x53,0x99,0x64,0xff,0x52,0x9a,0x63,0xff,0x51,0x9b,0x63,0xff,0x51,
+ 0x9c,0x63,0xff,0x4f,0x9c,0x63,0xff,0x4e,0x9c,0x62,0xff,0x4c,0x9d,0x60,0xff,
+ 0x4b,0x9e,0x60,0xff,0x45,0x9b,0x5c,0xff,0x3b,0x6c,0x4a,0xff,0x4b,0x4d,0x4d,
+ 0xff,0x4e,0x4b,0x4d,0xff,0x4f,0x4a,0x4d,0xff,0x3d,0x5f,0x48,0xff,0x33,0x93,
+ 0x4e,0xff,0x3b,0xa0,0x56,0xff,0x38,0x9f,0x53,0xff,0x36,0x9f,0x52,0xff,0x37,
+ 0x9f,0x53,0xff,0x3a,0x9f,0x54,0xff,0x3c,0x9f,0x56,0xff,0x3d,0x9f,0x57,0xff,
+ 0x3f,0x9e,0x58,0xff,0x41,0x9d,0x59,0xff,0x42,0x9d,0x59,0xff,0x44,0x9c,0x5b,
+ 0xff,0x46,0x9c,0x5b,0xff,0x47,0x9b,0x5c,0xff,0x49,0x9b,0x5d,0xff,0x4a,0x9a,
+ 0x5e,0xff,0x4b,0x99,0x5e,0xff,0x4c,0x99,0x5f,0xff,0x4e,0x98,0x5f,0xff,0x4f,
+ 0x97,0x60,0xff,0x50,0x96,0x60,0xff,0x51,0x95,0x60,0xff,0x52,0x95,0x60,0xff,
+ 0x53,0x96,0x61,0xff,0x82,0x54,0x95,0x62,0xff,0x01,0x55,0x93,0x60,0xff,0x82,
+ 0x54,0x90,0x60,0xff,0x15,0x56,0x91,0x60,0xff,0x4b,0x7f,0x57,0xff,0x3b,0x65,
+ 0x48,0xff,0x4c,0x7f,0x57,0xff,0x56,0x8c,0x5f,0xff,0x55,0x89,0x5d,0xff,0x55,
+ 0x87,0x5d,0xff,0x54,0x86,0x5c,0xff,0x54,0x85,0x5b,0xff,0x53,0x83,0x5a,0xff,
+ 0x53,0x82,0x59,0xff,0x52,0x80,0x58,0xff,0x4f,0x7c,0x55,0xff,0x40,0x63,0x44,
+ 0xf2,0x27,0x3c,0x29,0x7f,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x2b,0x00,0x00,
+ 0x00,0x19,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x87,
+ 0x00,0x00,0x00,0x00,0x02,0x85,0x83,0x83,0x93,0xa6,0xa6,0xa6,0xff,0x82,0xb1,
+ 0xb2,0xb1,0xff,0x22,0xbb,0xbc,0xbb,0xff,0xd9,0xd9,0xd9,0xff,0xcc,0xcd,0xcc,
+ 0xff,0x8e,0x90,0x8e,0xff,0x4c,0x9a,0x5f,0xff,0x52,0x9a,0x64,0xff,0x52,0x9c,
+ 0x64,0xff,0x51,0x9a,0x62,0xff,0x4f,0x9c,0x62,0xff,0x4d,0x9c,0x62,0xff,0x4c,
+ 0x9d,0x60,0xff,0x4b,0x9f,0x60,0xff,0x49,0x9e,0x5e,0xff,0x43,0x9c,0x5a,0xff,
+ 0x39,0x6c,0x4a,0xff,0x4c,0x4e,0x4c,0xff,0x4e,0x4d,0x4d,0xff,0x4e,0x4c,0x4d,
+ 0xff,0x3d,0x5f,0x48,0xff,0x31,0x92,0x4c,0xff,0x38,0xa0,0x54,0xff,0x35,0x9f,
+ 0x52,0xff,0x38,0x9f,0x53,0xff,0x3a,0x9e,0x54,0xff,0x3c,0x9e,0x56,0xff,0x3d,
+ 0x9e,0x57,0xff,0x3f,0x9e,0x58,0xff,0x41,0x9d,0x59,0xff,0x43,0x9c,0x5a,0xff,
+ 0x44,0x9c,0x5b,0xff,0x46,0x9c,0x5b,0xff,0x47,0x9b,0x5c,0xff,0x49,0x9b,0x5d,
+ 0xff,0x4b,0x9a,0x5e,0xff,0x82,0x4c,0x99,0x5f,0xff,0x21,0x4e,0x98,0x5f,0xff,
+ 0x4f,0x97,0x5f,0xff,0x50,0x96,0x60,0xff,0x51,0x95,0x60,0xff,0x52,0x95,0x60,
+ 0xff,0x52,0x94,0x61,0xff,0x4f,0x8d,0x5d,0xff,0x45,0x7c,0x54,0xff,0x47,0x7d,
+ 0x55,0xff,0x56,0x90,0x61,0xff,0x54,0x8f,0x60,0xff,0x55,0x8d,0x5f,0xff,0x57,
+ 0x8f,0x60,0xff,0x4b,0x7e,0x57,0xff,0x3c,0x65,0x47,0xff,0x4d,0x7e,0x57,0xff,
+ 0x56,0x89,0x5e,0xff,0x54,0x87,0x5c,0xff,0x54,0x85,0x5c,0xff,0x54,0x84,0x5b,
+ 0xff,0x53,0x82,0x5a,0xff,0x53,0x81,0x59,0xff,0x52,0x80,0x58,0xff,0x51,0x7f,
+ 0x56,0xff,0x4f,0x7c,0x54,0xff,0x3f,0x62,0x42,0xf3,0x27,0x3c,0x28,0x7f,0x00,
+ 0x00,0x00,0x3c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0e,
+ 0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x83,0x00,0x00,0x00,0x00,0x36,0x87,
+ 0x8c,0x91,0x21,0x9c,0x9f,0xa1,0x2d,0x99,0x9c,0x9f,0x2c,0x9a,0x9d,0xa0,0x2a,
+ 0x88,0x87,0x88,0xa5,0xa0,0xa0,0xa1,0xff,0x81,0x81,0x81,0xff,0x78,0x78,0x78,
+ 0xff,0x9d,0x9d,0x9d,0xff,0xd5,0xd4,0xd4,0xff,0xca,0xc9,0xc9,0xff,0x8a,0x8c,
+ 0x8b,0xff,0x4c,0x9b,0x5f,0xff,0x51,0x9b,0x63,0xff,0x51,0x9d,0x63,0xff,0x45,
+ 0x8a,0x59,0xff,0x3d,0x83,0x53,0xff,0x3d,0x82,0x52,0xff,0x3d,0x86,0x52,0xff,
+ 0x47,0x9b,0x5c,0xff,0x47,0xa0,0x5d,0xff,0x41,0x9b,0x59,0xff,0x38,0x6c,0x49,
+ 0xff,0x4a,0x4f,0x4c,0xff,0x4c,0x4d,0x4d,0xff,0x4c,0x4d,0x4c,0xff,0x3b,0x60,
+ 0x47,0xff,0x2f,0x92,0x4c,0xff,0x37,0xa1,0x54,0xff,0x37,0x9f,0x53,0xff,0x3a,
+ 0x9e,0x54,0xff,0x3c,0x9e,0x56,0xff,0x3d,0x9e,0x57,0xff,0x3f,0x9e,0x58,0xff,
+ 0x41,0x9d,0x59,0xff,0x43,0x9d,0x5a,0xff,0x44,0x9c,0x5b,0xff,0x46,0x9c,0x5c,
+ 0xff,0x47,0x9b,0x5c,0xff,0x49,0x9b,0x5d,0xff,0x4b,0x9a,0x5e,0xff,0x4c,0x9a,
+ 0x5f,0xff,0x4d,0x99,0x5f,0xff,0x4e,0x99,0x5f,0xff,0x4f,0x98,0x5f,0xff,0x50,
+ 0x97,0x60,0xff,0x51,0x95,0x60,0xff,0x52,0x95,0x60,0xff,0x52,0x94,0x61,0xff,
+ 0x53,0x94,0x61,0xff,0x50,0x8c,0x5c,0xff,0x43,0x77,0x51,0xff,0x45,0x79,0x52,
+ 0xff,0x54,0x90,0x60,0xff,0x82,0x55,0x8d,0x5f,0xff,0x15,0x56,0x8e,0x60,0xff,
+ 0x4b,0x7d,0x56,0xff,0x3b,0x63,0x46,0xff,0x4d,0x7d,0x56,0xff,0x55,0x89,0x5d,
+ 0xff,0x54,0x85,0x5b,0xff,0x54,0x84,0x5b,0xff,0x54,0x82,0x5a,0xff,0x53,0x81,
+ 0x59,0xff,0x52,0x80,0x58,0xff,0x51,0x80,0x58,0xff,0x51,0x7f,0x56,0xff,0x4e,
+ 0x7b,0x52,0xff,0x3d,0x61,0x40,0xf3,0x26,0x3b,0x27,0x7f,0x00,0x00,0x00,0x3d,
+ 0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+ 0x06,0x00,0x00,0x00,0x03,0x82,0x00,0x00,0x00,0x00,0x37,0xa8,0xaf,0xb4,0x10,
+ 0xa3,0xa8,0xaf,0x95,0xcd,0xd1,0xd4,0xc4,0xbf,0xc5,0xca,0xc2,0xc1,0xc6,0xcb,
+ 0xc0,0xb5,0xba,0xbd,0xe4,0xb7,0xbc,0xbf,0xff,0x58,0x59,0x5a,0xff,0x1a,0x1a,
+ 0x1a,0xff,0x73,0x73,0x73,0xff,0xd1,0xd1,0xd1,0xff,0xc6,0xc7,0xc6,0xff,0x87,
+ 0x8a,0x87,0xff,0x4b,0x9d,0x5e,0xff,0x50,0x9c,0x63,0xff,0x4f,0x9e,0x62,0xff,
+ 0x47,0x91,0x5a,0xff,0x42,0x8b,0x56,0xff,0x40,0x8c,0x55,0xff,0x3f,0x8d,0x55,
+ 0xff,0x45,0x9d,0x5b,0xff,0x44,0xa0,0x5c,0xff,0x3f,0x9b,0x58,0xff,0x32,0x77,
+ 0x48,0xff,0x36,0x6b,0x47,0xff,0x36,0x6b,0x46,0xff,0x35,0x6a,0x46,0xff,0x2e,
+ 0x71,0x44,0xff,0x30,0x92,0x4b,0xff,0x38,0xa1,0x54,0xff,0x3a,0x9f,0x54,0xff,
+ 0x3c,0x9e,0x56,0xff,0x3d,0x9e,0x57,0xff,0x3f,0x9d,0x58,0xff,0x41,0x9d,0x59,
+ 0xff,0x43,0x9d,0x5a,0xff,0x44,0x9c,0x5b,0xff,0x46,0x9b,0x5c,0xff,0x47,0x9b,
+ 0x5c,0xff,0x49,0x9b,0x5d,0xff,0x4b,0x9a,0x5e,0xff,0x4b,0x98,0x5e,0xff,0x4c,
+ 0x95,0x5d,0xff,0x4d,0x96,0x5e,0xff,0x4e,0x95,0x5e,0xff,0x4e,0x93,0x5f,0xff,
+ 0x50,0x95,0x60,0xff,0x52,0x95,0x60,0xff,0x52,0x94,0x60,0xff,0x52,0x93,0x61,
+ 0xff,0x54,0x93,0x61,0xff,0x50,0x8b,0x5c,0xff,0x43,0x76,0x50,0xff,0x45,0x78,
+ 0x52,0xff,0x55,0x8f,0x60,0xff,0x82,0x55,0x8c,0x5f,0xff,0x15,0x56,0x8d,0x5f,
+ 0xff,0x4b,0x7c,0x55,0xff,0x3a,0x63,0x46,0xff,0x4c,0x7c,0x55,0xff,0x55,0x87,
+ 0x5c,0xff,0x54,0x84,0x5a,0xff,0x53,0x83,0x5a,0xff,0x53,0x81,0x59,0xff,0x52,
+ 0x80,0x58,0xff,0x52,0x7f,0x58,0xff,0x4d,0x7a,0x53,0xff,0x4a,0x75,0x50,0xff,
+ 0x4a,0x74,0x4d,0xff,0x3d,0x60,0x40,0xf3,0x25,0x3a,0x27,0x7f,0x00,0x00,0x00,
+ 0x3c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0d,0x00,0x00,
+ 0x00,0x07,0x00,0x00,0x00,0x03,0x82,0x00,0x00,0x00,0x00,0x31,0x8b,0x8f,0x91,
+ 0x2c,0x90,0x93,0x96,0xcc,0xeb,0xed,0xee,0xff,0xde,0xe3,0xe6,0xff,0xdf,0xe3,
+ 0xe7,0xff,0xe0,0xe4,0xe8,0xff,0xe4,0xe9,0xed,0xff,0xa8,0xaa,0xab,0xff,0x4a,
+ 0x49,0x49,0xff,0x81,0x82,0x81,0xff,0xd1,0xd1,0xd1,0xff,0xc3,0xc3,0xc3,0xff,
+ 0x83,0x86,0x84,0xff,0x49,0x9e,0x5f,0xff,0x4f,0x9c,0x62,0xff,0x4e,0x9d,0x61,
+ 0xff,0x4b,0x9e,0x60,0xff,0x49,0x9d,0x5e,0xff,0x48,0x9d,0x5e,0xff,0x47,0x9d,
+ 0x5c,0xff,0x44,0x9f,0x5c,0xff,0x42,0x9f,0x5a,0xff,0x3f,0x9e,0x58,0xff,0x3a,
+ 0x99,0x53,0xff,0x37,0x9a,0x52,0xff,0x36,0x9a,0x52,0xff,0x33,0x9a,0x50,0xff,
+ 0x33,0x9a,0x4f,0xff,0x36,0x9d,0x52,0xff,0x3a,0xa0,0x55,0xff,0x3c,0x9f,0x56,
+ 0xff,0x3e,0x9e,0x57,0xff,0x3f,0x9d,0x58,0xff,0x41,0x9d,0x59,0xff,0x43,0x9d,
+ 0x5a,0xff,0x44,0x9c,0x5b,0xff,0x46,0x9c,0x5c,0xff,0x47,0x9b,0x5c,0xff,0x49,
+ 0x9b,0x5d,0xff,0x4a,0x9a,0x5e,0xff,0x4c,0x9a,0x5f,0xff,0x44,0x88,0x57,0xff,
+ 0x39,0x73,0x4c,0xff,0x3b,0x76,0x4e,0xff,0x3b,0x75,0x4d,0xff,0x3d,0x74,0x4e,
+ 0xff,0x4b,0x8b,0x5b,0xff,0x53,0x95,0x62,0xff,0x52,0x93,0x61,0xff,0x82,0x54,
+ 0x92,0x60,0xff,0x1b,0x51,0x8c,0x5d,0xff,0x49,0x7f,0x55,0xff,0x4a,0x7f,0x57,
+ 0xff,0x54,0x8e,0x5f,0xff,0x55,0x8c,0x5f,0xff,0x55,0x8b,0x5e,0xff,0x57,0x8c,
+ 0x5f,0xff,0x4b,0x7b,0x55,0xff,0x3a,0x61,0x46,0xff,0x4d,0x7b,0x55,0xff,0x55,
+ 0x85,0x5b,0xff,0x53,0x83,0x5a,0xff,0x53,0x81,0x59,0xff,0x52,0x80,0x57,0xff,
+ 0x51,0x7f,0x56,0xff,0x52,0x7f,0x57,0xff,0x44,0x6c,0x4b,0xff,0x39,0x5e,0x41,
+ 0xff,0x40,0x66,0x46,0xff,0x3d,0x5f,0x40,0xf2,0x25,0x3a,0x26,0x7f,0x00,0x00,
+ 0x00,0x3c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0d,0x00,
+ 0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x82,0x00,0x00,0x00,0x00,0x34,0x63,0x64,
+ 0x65,0x27,0x5b,0x5a,0x5b,0xc9,0xbc,0xc2,0xc8,0xff,0x81,0x91,0x9d,0xff,0x81,
+ 0x91,0x9e,0xff,0x82,0x92,0xa0,0xff,0x87,0x98,0xa4,0xff,0x6d,0x76,0x7b,0xff,
+ 0x34,0x33,0x33,0xff,0x75,0x76,0x75,0xff,0xd0,0xd0,0xd0,0xff,0xbf,0xc0,0xc0,
+ 0xff,0x7f,0x82,0x80,0xff,0x47,0x9f,0x5d,0xff,0x4e,0x9d,0x61,0xff,0x4c,0x9e,
+ 0x60,0xff,0x49,0x9e,0x5f,0xff,0x49,0x9f,0x5e,0xff,0x46,0xa0,0x5e,0xff,0x44,
+ 0xa0,0x5c,0xff,0x43,0xa1,0x5c,0xff,0x40,0xa0,0x59,0xff,0x3e,0xa1,0x58,0xff,
+ 0x3d,0xa1,0x57,0xff,0x3a,0x9f,0x55,0xff,0x38,0x9f,0x54,0xff,0x36,0xa0,0x53,
+ 0xff,0x38,0x9f,0x53,0xff,0x3a,0x9f,0x55,0xff,0x3c,0x9e,0x56,0xff,0x3e,0x9e,
+ 0x57,0xff,0x3f,0x9d,0x58,0xff,0x42,0x9d,0x59,0xff,0x43,0x9d,0x5a,0xff,0x45,
+ 0x9c,0x5b,0xff,0x46,0x9b,0x5c,0xff,0x48,0x9b,0x5d,0xff,0x49,0x9b,0x5d,0xff,
+ 0x4b,0x9a,0x5e,0xff,0x4c,0x99,0x5f,0xff,0x4d,0x99,0x5f,0xff,0x43,0x86,0x55,
+ 0xff,0x35,0x6b,0x48,0xff,0x37,0x6e,0x4a,0xff,0x38,0x6e,0x4a,0xff,0x39,0x6d,
+ 0x4a,0xff,0x4b,0x87,0x5a,0xff,0x53,0x94,0x62,0xff,0x54,0x92,0x60,0xff,0x54,
+ 0x91,0x60,0xff,0x55,0x90,0x60,0xff,0x54,0x8e,0x60,0xff,0x82,0x55,0x8d,0x5f,
+ 0xff,0x0b,0x56,0x8c,0x5f,0xff,0x55,0x8b,0x5e,0xff,0x55,0x8a,0x5e,0xff,0x56,
+ 0x8b,0x5f,0xff,0x4b,0x7a,0x54,0xff,0x39,0x61,0x45,0xff,0x4c,0x79,0x54,0xff,
+ 0x54,0x84,0x5b,0xff,0x53,0x81,0x59,0xff,0x52,0x80,0x57,0xff,0x51,0x7f,0x56,
+ 0xff,0x82,0x51,0x7d,0x55,0xff,0x0b,0x41,0x68,0x48,0xff,0x36,0x57,0x3e,0xff,
+ 0x3d,0x61,0x42,0xff,0x3b,0x5e,0x3e,0xf3,0x23,0x39,0x25,0x7f,0x00,0x00,0x00,
+ 0x3c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0d,0x00,0x00,
+ 0x00,0x07,0x00,0x00,0x00,0x03,0x82,0x00,0x00,0x00,0x00,0x33,0x46,0x45,0x45,
+ 0x10,0x61,0x60,0x5f,0x9f,0xbb,0xc2,0xc8,0xe1,0x99,0xa6,0xb1,0xe1,0x9b,0xa7,
+ 0xb2,0xe0,0x9c,0xa7,0xb1,0xf2,0xa1,0xab,0xb5,0xff,0x42,0x45,0x48,0xff,0x0b,
+ 0x0b,0x0b,0xff,0x61,0x61,0x61,0xff,0xce,0xce,0xcd,0xff,0xbd,0xbd,0xbc,0xff,
+ 0x7c,0x7e,0x7d,0xff,0x47,0xa1,0x5e,0xff,0x4c,0x9d,0x60,0xff,0x49,0x9e,0x5f,
+ 0xff,0x48,0x9e,0x5e,0xff,0x44,0x9e,0x5b,0xff,0x38,0x88,0x50,0xff,0x31,0x7b,
+ 0x48,0xff,0x3c,0x9a,0x56,0xff,0x32,0x87,0x4c,0xff,0x2d,0x7f,0x47,0xff,0x33,
+ 0x92,0x4e,0xff,0x37,0xa1,0x54,0xff,0x37,0x9f,0x52,0xff,0x38,0x9f,0x53,0xff,
+ 0x3a,0x9e,0x55,0xff,0x3c,0x9e,0x56,0xff,0x3e,0x9e,0x57,0xff,0x40,0x9d,0x58,
+ 0xff,0x42,0x9d,0x59,0xff,0x44,0x9c,0x5a,0xff,0x45,0x9c,0x5b,0xff,0x46,0x9b,
+ 0x5c,0xff,0x47,0x9b,0x5c,0xff,0x49,0x9a,0x5d,0xff,0x4b,0x9a,0x5e,0xff,0x4c,
+ 0x99,0x5f,0xff,0x4d,0x98,0x5f,0xff,0x4f,0x99,0x5f,0xff,0x45,0x85,0x56,0xff,
+ 0x36,0x6b,0x48,0xff,0x39,0x6e,0x4a,0xff,0x3a,0x6e,0x4a,0xff,0x3b,0x6c,0x4b,
+ 0xff,0x4b,0x87,0x5b,0xff,0x55,0x93,0x62,0xff,0x54,0x91,0x60,0xff,0x55,0x90,
+ 0x60,0xff,0x54,0x8f,0x60,0xff,0x82,0x55,0x8d,0x5f,0xff,0x19,0x55,0x8c,0x5f,
+ 0xff,0x55,0x8b,0x5e,0xff,0x55,0x89,0x5e,0xff,0x55,0x88,0x5d,0xff,0x56,0x88,
+ 0x5d,0xff,0x4b,0x77,0x53,0xff,0x3a,0x5f,0x44,0xff,0x4b,0x78,0x53,0xff,0x53,
+ 0x83,0x59,0xff,0x52,0x80,0x57,0xff,0x51,0x7e,0x56,0xff,0x51,0x7d,0x55,0xff,
+ 0x4f,0x7b,0x53,0xff,0x4f,0x7c,0x53,0xff,0x41,0x69,0x48,0xff,0x38,0x5b,0x3f,
+ 0xff,0x3d,0x63,0x43,0xff,0x3b,0x5c,0x3c,0xf2,0x23,0x38,0x24,0x7e,0x00,0x00,
+ 0x00,0x3d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0e,0x00,
+ 0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x83,0x00,0x00,0x00,0x00,0x2a,0xc5,0xc4,
+ 0xc3,0x20,0xd0,0xd6,0xdb,0x4a,0xc6,0xce,0xd4,0x4b,0xc9,0xd0,0xd7,0x49,0xa5,
+ 0xa7,0xaa,0xb1,0xa5,0xa7,0xa9,0xff,0x51,0x51,0x50,0xff,0x47,0x47,0x47,0xff,
+ 0x77,0x78,0x77,0xff,0xcb,0xcc,0xcb,0xff,0xb9,0xba,0xba,0xff,0x7a,0x7c,0x7b,
+ 0xff,0x45,0xa1,0x5d,0xff,0x49,0x9e,0x60,0xff,0x48,0x9e,0x5e,0xff,0x47,0x9f,
+ 0x5d,0xff,0x43,0x9e,0x5a,0xff,0x38,0x8b,0x4f,0xff,0x30,0x7f,0x48,0xff,0x3c,
+ 0x9d,0x56,0xff,0x31,0x8a,0x4c,0xff,0x2d,0x82,0x47,0xff,0x33,0x93,0x4e,0xff,
+ 0x37,0xa1,0x53,0xff,0x38,0x9f,0x53,0xff,0x3a,0x9e,0x55,0xff,0x3c,0x9e,0x56,
+ 0xff,0x3e,0x9e,0x57,0xff,0x3f,0x9d,0x58,0xff,0x42,0x9d,0x59,0xff,0x44,0x9c,
+ 0x5a,0xff,0x45,0x9c,0x5b,0xff,0x46,0x9b,0x5c,0xff,0x48,0x9b,0x5d,0xff,0x49,
+ 0x9b,0x5d,0xff,0x4b,0x99,0x5e,0xff,0x4c,0x99,0x5f,0xff,0x4d,0x98,0x5f,0xff,
+ 0x4e,0x98,0x5f,0xff,0x4f,0x98,0x60,0xff,0x45,0x85,0x56,0xff,0x37,0x6b,0x48,
+ 0xff,0x82,0x3a,0x6d,0x4a,0xff,0x06,0x3a,0x6c,0x4b,0xff,0x4c,0x86,0x5a,0xff,
+ 0x55,0x93,0x62,0xff,0x54,0x90,0x60,0xff,0x54,0x8f,0x60,0xff,0x55,0x8d,0x5f,
+ 0xff,0x82,0x55,0x8c,0x5f,0xff,0x19,0x55,0x8b,0x5e,0xff,0x55,0x89,0x5e,0xff,
+ 0x55,0x87,0x5d,0xff,0x54,0x86,0x5c,0xff,0x55,0x87,0x5c,0xff,0x4a,0x77,0x53,
+ 0xff,0x39,0x5f,0x43,0xff,0x4b,0x77,0x52,0xff,0x53,0x81,0x58,0xff,0x51,0x7e,
+ 0x56,0xff,0x51,0x7d,0x55,0xff,0x4f,0x7b,0x53,0xff,0x4e,0x7a,0x52,0xff,0x4d,
+ 0x79,0x51,0xff,0x4b,0x75,0x4e,0xff,0x48,0x72,0x4b,0xff,0x46,0x6f,0x49,0xff,
+ 0x39,0x59,0x3a,0xf2,0x23,0x37,0x22,0x7f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+ 0x2b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x07,0x00,0x00,
+ 0x00,0x03,0x87,0x00,0x00,0x00,0x00,0x02,0x8a,0x8a,0x8a,0x93,0x95,0x96,0x95,
+ 0xff,0x82,0x99,0x9a,0x98,0xff,0x22,0x99,0x9a,0x99,0xff,0xc7,0xc7,0xc7,0xff,
+ 0xb7,0xb8,0xb7,0xff,0x78,0x7b,0x79,0xff,0x43,0xa1,0x5b,0xff,0x48,0x9e,0x5e,
+ 0xff,0x45,0x9f,0x5c,0xff,0x43,0x9f,0x5b,0xff,0x41,0x9e,0x59,0xff,0x35,0x89,
+ 0x4e,0xff,0x2e,0x7d,0x47,0xff,0x39,0x9b,0x54,0xff,0x30,0x87,0x49,0xff,0x2b,
+ 0x7f,0x45,0xff,0x31,0x92,0x4c,0xff,0x39,0xa0,0x54,0xff,0x3a,0x9f,0x54,0xff,
+ 0x3c,0x9f,0x56,0xff,0x3e,0x9e,0x57,0xff,0x40,0x9d,0x58,0xff,0x42,0x9d,0x59,
+ 0xff,0x43,0x9d,0x5a,0xff,0x45,0x9c,0x5b,0xff,0x47,0x9b,0x5c,0xff,0x48,0x9b,
+ 0x5d,0xff,0x49,0x9b,0x5d,0xff,0x4b,0x99,0x5e,0xff,0x4c,0x99,0x5f,0xff,0x4d,
+ 0x98,0x5f,0xff,0x4e,0x98,0x5f,0xff,0x4f,0x97,0x5f,0xff,0x50,0x97,0x60,0xff,
+ 0x46,0x84,0x57,0xff,0x38,0x6a,0x49,0xff,0x82,0x3a,0x6c,0x4b,0xff,0x0b,0x3b,
+ 0x6b,0x4b,0xff,0x4d,0x86,0x59,0xff,0x56,0x92,0x61,0xff,0x55,0x8f,0x60,0xff,
+ 0x55,0x8e,0x5f,0xff,0x55,0x8c,0x5f,0xff,0x55,0x8b,0x5f,0xff,0x56,0x8b,0x5e,
+ 0xff,0x56,0x8a,0x5e,0xff,0x57,0x89,0x5f,0xff,0x55,0x87,0x5d,0xff,0x82,0x55,
+ 0x86,0x5c,0xff,0x14,0x4a,0x76,0x52,0xff,0x39,0x5e,0x42,0xff,0x4b,0x75,0x51,
+ 0xff,0x53,0x7f,0x57,0xff,0x51,0x7d,0x55,0xff,0x50,0x7d,0x54,0xff,0x4f,0x7c,
+ 0x53,0xff,0x4e,0x79,0x51,0xff,0x4d,0x77,0x4f,0xff,0x4b,0x76,0x4d,0xff,0x4a,
+ 0x74,0x4c,0xff,0x47,0x6f,0x49,0xff,0x38,0x58,0x38,0xf2,0x21,0x36,0x21,0x7f,
+ 0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+ 0x0e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x87,0x00,0x00,0x00,0x00,0x02,
+ 0x8a,0x8a,0x8a,0x93,0x99,0x98,0x99,0xff,0x82,0x9e,0x9d,0x9e,0xff,0x29,0x99,
+ 0x98,0x99,0xff,0xc4,0xc4,0xc5,0xff,0xb7,0xb7,0xb7,0xff,0x78,0x7a,0x79,0xff,
+ 0x42,0xa2,0x5b,0xff,0x46,0x9f,0x5d,0xff,0x44,0x9f,0x5b,0xff,0x42,0x9f,0x59,
+ 0xff,0x40,0xa0,0x58,0xff,0x3c,0x9c,0x56,0xff,0x39,0x9a,0x53,0xff,0x3a,0xa0,
+ 0x55,0xff,0x37,0x9c,0x51,0xff,0x34,0x9b,0x50,0xff,0x37,0x9d,0x52,0xff,0x3b,
+ 0x9f,0x54,0xff,0x3c,0x9e,0x56,0xff,0x3e,0x9e,0x57,0xff,0x40,0x9d,0x58,0xff,
+ 0x42,0x9d,0x59,0xff,0x43,0x9c,0x5a,0xff,0x45,0x9c,0x5b,0xff,0x47,0x9b,0x5c,
+ 0xff,0x48,0x9b,0x5d,0xff,0x49,0x9b,0x5d,0xff,0x4a,0x9a,0x5e,0xff,0x4c,0x99,
+ 0x5f,0xff,0x4d,0x98,0x5f,0xff,0x4e,0x98,0x5f,0xff,0x4f,0x97,0x60,0xff,0x50,
+ 0x96,0x60,0xff,0x52,0x96,0x60,0xff,0x47,0x84,0x57,0xff,0x38,0x69,0x4a,0xff,
+ 0x3a,0x6c,0x4b,0xff,0x3b,0x6b,0x4b,0xff,0x3b,0x6c,0x4a,0xff,0x4d,0x85,0x5a,
+ 0xff,0x56,0x91,0x61,0xff,0x55,0x8e,0x5f,0xff,0x55,0x8c,0x5f,0xff,0x82,0x55,
+ 0x8b,0x5f,0xff,0x1a,0x4f,0x81,0x59,0xff,0x4b,0x7a,0x55,0xff,0x4c,0x79,0x54,
+ 0xff,0x4b,0x77,0x54,0xff,0x4b,0x77,0x53,0xff,0x53,0x81,0x58,0xff,0x49,0x75,
+ 0x51,0xff,0x3a,0x5c,0x42,0xff,0x49,0x74,0x50,0xff,0x51,0x7e,0x56,0xff,0x51,
+ 0x7e,0x54,0xff,0x44,0x6d,0x4b,0xff,0x3d,0x64,0x43,0xff,0x46,0x6f,0x4b,0xff,
+ 0x4c,0x76,0x4e,0xff,0x4a,0x74,0x4c,0xff,0x48,0x72,0x4a,0xff,0x45,0x6e,0x47,
+ 0xff,0x37,0x56,0x38,0xf3,0x21,0x35,0x22,0x7f,0x00,0x00,0x00,0x3c,0x00,0x00,
+ 0x00,0x2b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x07,0x00,
+ 0x00,0x00,0x03,0x83,0x00,0x00,0x00,0x00,0x2f,0x90,0x95,0x9a,0x66,0xad,0xaf,
+ 0xb2,0x8b,0xa6,0xaa,0xae,0x88,0xa7,0xab,0xae,0x85,0x97,0x99,0x9c,0xca,0x9e,
+ 0xa0,0xa2,0xff,0x39,0x39,0x39,0xff,0x18,0x18,0x18,0xff,0x63,0x62,0x62,0xff,
+ 0xc5,0xc5,0xc5,0xff,0xb8,0xb8,0xb8,0xff,0x7a,0x7c,0x7a,0xff,0x3f,0xa3,0x58,
+ 0xff,0x43,0x9f,0x5b,0xff,0x41,0x9f,0x5a,0xff,0x3f,0x9f,0x58,0xff,0x3d,0x9f,
+ 0x57,0xff,0x3b,0x9f,0x55,0xff,0x39,0x9f,0x54,0xff,0x37,0x9f,0x53,0xff,0x37,
+ 0x9f,0x52,0xff,0x39,0x9f,0x53,0xff,0x3a,0x9e,0x55,0xff,0x3c,0x9e,0x56,0xff,
+ 0x3e,0x9e,0x57,0xff,0x40,0x9d,0x58,0xff,0x42,0x9d,0x59,0xff,0x44,0x9c,0x5a,
+ 0xff,0x45,0x9c,0x5b,0xff,0x47,0x9b,0x5c,0xff,0x48,0x9b,0x5d,0xff,0x49,0x9a,
+ 0x5d,0xff,0x4b,0x99,0x5e,0xff,0x4c,0x99,0x5f,0xff,0x4d,0x98,0x5f,0xff,0x4e,
+ 0x97,0x5f,0xff,0x4f,0x97,0x5f,0xff,0x50,0x96,0x60,0xff,0x51,0x95,0x60,0xff,
+ 0x53,0x95,0x61,0xff,0x48,0x82,0x57,0xff,0x39,0x69,0x49,0xff,0x3b,0x6c,0x4a,
+ 0xff,0x3b,0x6b,0x4a,0xff,0x3c,0x6a,0x4a,0xff,0x4d,0x83,0x59,0xff,0x56,0x8f,
+ 0x60,0xff,0x82,0x55,0x8c,0x5f,0xff,0x1c,0x55,0x8a,0x5e,0xff,0x56,0x8b,0x5f,
+ 0xff,0x45,0x72,0x50,0xff,0x39,0x61,0x45,0xff,0x39,0x60,0x45,0xff,0x3a,0x5f,
+ 0x44,0xff,0x3b,0x60,0x45,0xff,0x4d,0x7a,0x54,0xff,0x49,0x74,0x50,0xff,0x38,
+ 0x5c,0x41,0xff,0x49,0x72,0x4e,0xff,0x51,0x7e,0x55,0xff,0x43,0x6c,0x4b,0xff,
+ 0x39,0x5e,0x41,0xff,0x3b,0x5d,0x40,0xff,0x3b,0x60,0x41,0xff,0x44,0x6d,0x49,
+ 0xff,0x48,0x71,0x4a,0xff,0x47,0x70,0x48,0xff,0x44,0x6b,0x44,0xff,0x36,0x56,
+ 0x35,0xf2,0x1f,0x34,0x20,0x7e,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x2b,0x00,
+ 0x00,0x00,0x19,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,
+ 0x83,0x00,0x00,0x00,0x00,0x4d,0xa3,0xa7,0xac,0xb3,0xe7,0xea,0xed,0xff,0xd6,
+ 0xdd,0xe1,0xff,0xd8,0xdd,0xe2,0xff,0xd8,0xde,0xe2,0xff,0xdc,0xe3,0xe7,0xff,
+ 0x94,0x97,0x97,0xff,0x35,0x34,0x34,0xff,0x71,0x71,0x70,0xff,0xc7,0xc7,0xc7,
+ 0xff,0xb8,0xb9,0xb8,0xff,0x79,0x7c,0x7a,0xff,0x39,0x9c,0x55,0xff,0x42,0xa0,
+ 0x59,0xff,0x3f,0x9f,0x58,0xff,0x3d,0x9f,0x57,0xff,0x3b,0xa0,0x56,0xff,0x39,
+ 0xa1,0x54,0xff,0x38,0xa0,0x53,0xff,0x37,0xa0,0x53,0xff,0x39,0x9f,0x54,0xff,
+ 0x3b,0x9e,0x55,0xff,0x3c,0x9e,0x56,0xff,0x3e,0x9d,0x57,0xff,0x40,0x9d,0x58,
+ 0xff,0x42,0x9d,0x59,0xff,0x44,0x9c,0x5a,0xff,0x45,0x9c,0x5b,0xff,0x47,0x9c,
+ 0x5c,0xff,0x48,0x9d,0x5d,0xff,0x4a,0x9c,0x5e,0xff,0x4b,0x9c,0x5f,0xff,0x4c,
+ 0x9c,0x60,0xff,0x4d,0x9a,0x60,0xff,0x4f,0x98,0x60,0xff,0x4f,0x97,0x5f,0xff,
+ 0x50,0x96,0x60,0xff,0x51,0x95,0x60,0xff,0x52,0x94,0x60,0xff,0x53,0x94,0x61,
+ 0xff,0x48,0x82,0x57,0xff,0x38,0x68,0x49,0xff,0x3b,0x6a,0x4a,0xff,0x3b,0x69,
+ 0x49,0xff,0x3b,0x68,0x49,0xff,0x4d,0x82,0x58,0xff,0x57,0x8e,0x60,0xff,0x55,
+ 0x8b,0x5f,0xff,0x55,0x8a,0x5e,0xff,0x55,0x88,0x5d,0xff,0x56,0x8a,0x5f,0xff,
+ 0x45,0x70,0x50,0xff,0x3a,0x5f,0x45,0xff,0x3b,0x60,0x45,0xff,0x39,0x5f,0x44,
+ 0xff,0x3b,0x60,0x44,0xff,0x4d,0x79,0x53,0xff,0x49,0x72,0x4e,0xff,0x37,0x5a,
+ 0x40,0xff,0x47,0x71,0x4d,0xff,0x50,0x7c,0x54,0xff,0x40,0x67,0x47,0xff,0x3a,
+ 0x5e,0x41,0xff,0x33,0x55,0x3a,0xff,0x3b,0x5f,0x40,0xff,0x45,0x6b,0x47,0xff,
+ 0x47,0x70,0x48,0xff,0x46,0x6e,0x46,0xff,0x42,0x6a,0x42,0xff,0x33,0x53,0x33,
+ 0xf2,0x1e,0x33,0x1f,0x7f,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x2b,0x00,0x00,
+ 0x00,0x19,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x83,
+ 0x00,0x00,0x00,0x00,0x4d,0x6c,0x6d,0x6e,0xb3,0xd2,0xd6,0xd9,0xff,0xad,0xb7,
+ 0xbf,0xff,0xad,0xb7,0xc0,0xff,0xae,0xb8,0xc1,0xff,0xb3,0xbe,0xc6,0xff,0x90,
+ 0x95,0x98,0xff,0x46,0x45,0x45,0xff,0x74,0x74,0x74,0xff,0xc8,0xc9,0xc8,0xff,
+ 0xb9,0xb9,0xb9,0xff,0x78,0x7a,0x7a,0xff,0x2b,0x87,0x4e,0xff,0x40,0xa1,0x59,
+ 0xff,0x3c,0x9f,0x56,0xff,0x3b,0xa0,0x56,0xff,0x38,0x9d,0x53,0xff,0x31,0x8e,
+ 0x4a,0xff,0x30,0x8c,0x49,0xff,0x35,0x96,0x4f,0xff,0x3c,0xa0,0x57,0xff,0x3c,
+ 0x9e,0x56,0xff,0x3e,0x9e,0x57,0xff,0x40,0x9d,0x58,0xff,0x42,0x9d,0x59,0xff,
+ 0x44,0x9c,0x5a,0xff,0x45,0x9c,0x5b,0xff,0x47,0x9b,0x5c,0xff,0x48,0x9d,0x5e,
+ 0xff,0x46,0x8e,0x58,0xff,0x48,0x84,0x57,0xff,0x49,0x85,0x58,0xff,0x4a,0x84,
+ 0x59,0xff,0x47,0x85,0x57,0xff,0x4f,0x98,0x60,0xff,0x50,0x96,0x60,0xff,0x51,
+ 0x95,0x60,0xff,0x52,0x94,0x60,0xff,0x52,0x93,0x61,0xff,0x53,0x93,0x60,0xff,
+ 0x4a,0x82,0x57,0xff,0x3b,0x6a,0x4a,0xff,0x3d,0x6b,0x4b,0xff,0x3d,0x6b,0x4a,
+ 0xff,0x3d,0x6a,0x4a,0xff,0x4e,0x81,0x59,0xff,0x56,0x8c,0x5f,0xff,0x55,0x8a,
+ 0x5e,0xff,0x55,0x89,0x5d,0xff,0x55,0x87,0x5c,0xff,0x55,0x88,0x5d,0xff,0x48,
+ 0x74,0x52,0xff,0x3f,0x66,0x49,0xff,0x3f,0x67,0x49,0xff,0x3e,0x65,0x48,0xff,
+ 0x40,0x66,0x48,0xff,0x4e,0x79,0x53,0xff,0x4a,0x74,0x4f,0xff,0x3d,0x5f,0x44,
+ 0xff,0x48,0x71,0x4d,0xff,0x4e,0x79,0x52,0xff,0x4a,0x73,0x4c,0xff,0x3d,0x63,
+ 0x42,0xff,0x3a,0x5f,0x40,0xff,0x3e,0x65,0x42,0xff,0x45,0x6e,0x47,0xff,0x45,
+ 0x6e,0x46,0xff,0x43,0x6c,0x44,0xff,0x40,0x68,0x40,0xff,0x32,0x52,0x32,0xf3,
+ 0x1e,0x32,0x1e,0x7f,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+ 0x19,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x83,0x00,
+ 0x00,0x00,0x00,0x4d,0x57,0x56,0x56,0xb3,0xb6,0xbe,0xc4,0xff,0x87,0x96,0xa2,
+ 0xff,0x89,0x97,0xa4,0xff,0x8a,0x99,0xa5,0xff,0x8f,0x9d,0xab,0xff,0x55,0x5b,
+ 0x5f,0xff,0x17,0x17,0x17,0xff,0x61,0x61,0x61,0xff,0xc8,0xc9,0xc8,0xff,0xb9,
+ 0xb9,0xb9,0xff,0x7b,0x7d,0x7b,0xff,0x2a,0x87,0x4d,0xff,0x3e,0xa2,0x57,0xff,
+ 0x3b,0x9f,0x55,0xff,0x39,0xa2,0x56,0xff,0x29,0x7f,0x44,0xff,0x29,0x7d,0x43,
+ 0xff,0x2c,0x80,0x46,0xff,0x2b,0x7b,0x44,0xff,0x39,0x96,0x52,0xff,0x3f,0x9f,
+ 0x57,0xff,0x40,0x9d,0x58,0xff,0x42,0x9d,0x59,0xff,0x43,0x9c,0x5a,0xff,0x45,
+ 0x9c,0x5b,0xff,0x47,0x9b,0x5c,0xff,0x48,0x9b,0x5d,0xff,0x49,0x9f,0x60,0xff,
+ 0x44,0x71,0x51,0xff,0x4c,0x4e,0x4c,0xff,0x4b,0x52,0x4c,0xff,0x4d,0x50,0x4e,
+ 0xff,0x3d,0x5e,0x49,0xff,0x51,0x96,0x60,0xff,0x51,0x95,0x60,0xff,0x52,0x94,
+ 0x60,0xff,0x52,0x93,0x61,0xff,0x53,0x92,0x61,0xff,0x55,0x92,0x60,0xff,0x53,
+ 0x8d,0x5e,0xff,0x4f,0x87,0x5b,0xff,0x50,0x87,0x5b,0xff,0x51,0x86,0x5b,0xff,
+ 0x50,0x85,0x5a,0xff,0x54,0x89,0x5e,0xff,0x56,0x8a,0x5e,0xff,0x55,0x89,0x5d,
+ 0xff,0x55,0x87,0x5c,0xff,0x54,0x86,0x5c,0xff,0x54,0x86,0x5b,0xff,0x52,0x81,
+ 0x59,0xff,0x51,0x7e,0x57,0xff,0x4f,0x7c,0x56,0xff,0x50,0x7b,0x55,0xff,0x4f,
+ 0x79,0x54,0xff,0x51,0x7d,0x55,0xff,0x4f,0x7b,0x52,0xff,0x4b,0x74,0x4e,0xff,
+ 0x4c,0x77,0x4f,0xff,0x4c,0x78,0x4f,0xff,0x4d,0x76,0x4e,0xff,0x48,0x72,0x4b,
+ 0xff,0x47,0x70,0x49,0xff,0x46,0x70,0x48,0xff,0x45,0x6f,0x46,0xff,0x43,0x6c,
+ 0x44,0xff,0x41,0x6a,0x42,0xff,0x3e,0x66,0x3e,0xff,0x30,0x51,0x30,0xf3,0x1e,
+ 0x31,0x1e,0x7f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1a,
+ 0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x83,0x00,0x00,
+ 0x00,0x00,0x23,0x9a,0x99,0x98,0x4a,0xc9,0xcf,0xd5,0x91,0xb8,0xc1,0xc9,0x93,
+ 0xba,0xc2,0xcb,0x8f,0xad,0xb3,0xb9,0xcf,0xae,0xb2,0xb7,0xff,0x29,0x29,0x29,
+ 0xff,0x11,0x11,0x11,0xff,0x5a,0x5a,0x5a,0xff,0xc8,0xc7,0xc7,0xff,0xbb,0xba,
+ 0xbb,0xff,0x7a,0x7e,0x7c,0xff,0x29,0x87,0x4b,0xff,0x3c,0xa2,0x56,0xff,0x39,
+ 0xa0,0x55,0xff,0x33,0x98,0x50,0xff,0x25,0x74,0x3e,0xff,0x2b,0x7f,0x44,0xff,
+ 0x29,0x75,0x41,0xff,0x2e,0x7f,0x47,0xff,0x33,0x84,0x4b,0xff,0x41,0xa0,0x59,
+ 0xff,0x42,0x9d,0x59,0xff,0x43,0x9c,0x5a,0xff,0x45,0x9c,0x5b,0xff,0x47,0x9b,
+ 0x5c,0xff,0x48,0x9b,0x5d,0xff,0x49,0x9a,0x5d,0xff,0x4c,0xa0,0x60,0xff,0x46,
+ 0x6e,0x50,0xff,0x4e,0x47,0x4c,0xff,0x4d,0x4d,0x4d,0xff,0x4f,0x4a,0x4d,0xff,
+ 0x3e,0x5a,0x49,0xff,0x50,0x98,0x61,0xff,0x82,0x52,0x93,0x61,0xff,0x28,0x53,
+ 0x92,0x61,0xff,0x54,0x91,0x60,0xff,0x54,0x90,0x60,0xff,0x54,0x90,0x62,0xff,
+ 0x55,0x8f,0x60,0xff,0x56,0x8e,0x60,0xff,0x56,0x8d,0x60,0xff,0x55,0x8c,0x5e,
+ 0xff,0x55,0x8a,0x5e,0xff,0x55,0x89,0x5d,0xff,0x55,0x87,0x5c,0xff,0x54,0x86,
+ 0x5c,0xff,0x54,0x85,0x5b,0xff,0x54,0x83,0x5a,0xff,0x53,0x82,0x5a,0xff,0x53,
+ 0x82,0x59,0xff,0x52,0x80,0x57,0xff,0x51,0x7e,0x56,0xff,0x50,0x7d,0x55,0xff,
+ 0x50,0x7b,0x53,0xff,0x4f,0x7a,0x52,0xff,0x4d,0x78,0x50,0xff,0x4c,0x76,0x4f,
+ 0xff,0x4b,0x76,0x4d,0xff,0x49,0x72,0x4a,0xff,0x37,0x5b,0x3d,0xff,0x34,0x54,
+ 0x39,0xff,0x3b,0x60,0x3e,0xff,0x43,0x6d,0x44,0xff,0x41,0x6a,0x42,0xff,0x3f,
+ 0x69,0x40,0xff,0x3d,0x65,0x3d,0xff,0x2e,0x4f,0x2f,0xf2,0x1c,0x30,0x1c,0x7f,
+ 0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+ 0x0d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x87,0x00,0x00,0x00,0x00,0x37,
+ 0x8b,0x8b,0x8a,0x93,0x99,0x98,0x98,0xff,0x9b,0x9a,0x9a,0xff,0x98,0x99,0x99,
+ 0xff,0x97,0x97,0x98,0xff,0xc6,0xc6,0xc6,0xff,0xbc,0xbc,0xbc,0xff,0x7d,0x7f,
+ 0x7e,0xff,0x27,0x88,0x4a,0xff,0x3a,0xa2,0x54,0xff,0x37,0xa0,0x52,0xff,0x34,
+ 0x98,0x50,0xff,0x28,0x75,0x3f,0xff,0x2e,0x7e,0x45,0xff,0x29,0x72,0x41,0xff,
+ 0x31,0x7f,0x49,0xff,0x36,0x86,0x4c,0xff,0x44,0xa0,0x5b,0xff,0x44,0x9c,0x5a,
+ 0xff,0x45,0x9c,0x5b,0xff,0x47,0x9b,0x5c,0xff,0x48,0x9b,0x5d,0xff,0x4a,0x9a,
+ 0x5d,0xff,0x4b,0x99,0x5e,0xff,0x4c,0x9f,0x60,0xff,0x48,0x6d,0x51,0xff,0x4e,
+ 0x49,0x4c,0xff,0x4e,0x4c,0x4d,0xff,0x4f,0x4a,0x4d,0xff,0x3f,0x5a,0x49,0xff,
+ 0x52,0x95,0x60,0xff,0x52,0x92,0x61,0xff,0x53,0x92,0x61,0xff,0x54,0x91,0x60,
+ 0xff,0x54,0x90,0x60,0xff,0x54,0x8f,0x61,0xff,0x54,0x8e,0x60,0xff,0x55,0x8d,
+ 0x5f,0xff,0x55,0x8c,0x5f,0xff,0x55,0x8b,0x5e,0xff,0x55,0x8a,0x5e,0xff,0x55,
+ 0x88,0x5d,0xff,0x55,0x87,0x5d,0xff,0x54,0x86,0x5c,0xff,0x54,0x84,0x5b,0xff,
+ 0x54,0x83,0x5a,0xff,0x53,0x82,0x59,0xff,0x52,0x81,0x58,0xff,0x52,0x7f,0x57,
+ 0xff,0x51,0x7e,0x56,0xff,0x50,0x7c,0x54,0xff,0x4e,0x7b,0x53,0xff,0x4e,0x79,
+ 0x51,0xff,0x4d,0x78,0x50,0xff,0x4c,0x76,0x4e,0xff,0x82,0x4a,0x74,0x4c,0xff,
+ 0x10,0x3c,0x61,0x40,0xff,0x37,0x5a,0x3b,0xff,0x33,0x53,0x36,0xff,0x37,0x5a,
+ 0x3a,0xff,0x3c,0x64,0x3e,0xff,0x3e,0x68,0x3e,0xff,0x42,0x68,0x43,0xff,0x3b,
+ 0x63,0x3b,0xff,0x2b,0x4c,0x2c,0xf2,0x1a,0x2f,0x1b,0x7f,0x00,0x00,0x00,0x3c,
+ 0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+ 0x06,0x00,0x00,0x00,0x03,0x87,0x00,0x00,0x00,0x00,0x21,0x8b,0x8b,0x8a,0x93,
+ 0x99,0x98,0x99,0xff,0x9e,0x9c,0x9d,0xff,0x9b,0x9b,0x9b,0xff,0x99,0x99,0x9a,
+ 0xff,0xc7,0xc6,0xc6,0xff,0xbd,0xbd,0xbd,0xff,0x7d,0x80,0x7f,0xff,0x24,0x87,
+ 0x48,0xff,0x38,0xa1,0x53,0xff,0x37,0x9f,0x53,0xff,0x3b,0xa2,0x55,0xff,0x2e,
+ 0x7d,0x46,0xff,0x2f,0x7f,0x48,0xff,0x2f,0x7c,0x47,0xff,0x33,0x7e,0x49,0xff,
+ 0x3f,0x95,0x56,0xff,0x44,0x9e,0x5c,0xff,0x45,0x9c,0x5b,0xff,0x47,0x9b,0x5c,
+ 0xff,0x48,0x9b,0x5d,0xff,0x4a,0x9a,0x5d,0xff,0x4b,0x99,0x5e,0xff,0x4c,0x99,
+ 0x5f,0xff,0x4f,0x9d,0x61,0xff,0x45,0x6f,0x50,0xff,0x46,0x4f,0x4b,0xff,0x47,
+ 0x52,0x4b,0xff,0x48,0x50,0x4b,0xff,0x3b,0x5a,0x47,0xff,0x52,0x94,0x62,0xff,
+ 0x54,0x92,0x60,0xff,0x54,0x91,0x60,0xff,0x82,0x54,0x90,0x60,0xff,0x26,0x54,
+ 0x8e,0x60,0xff,0x55,0x8d,0x5f,0xff,0x55,0x8c,0x5f,0xff,0x55,0x8b,0x5e,0xff,
+ 0x55,0x8a,0x5e,0xff,0x55,0x88,0x5d,0xff,0x55,0x87,0x5c,0xff,0x54,0x86,0x5c,
+ 0xff,0x54,0x85,0x5b,0xff,0x54,0x83,0x5a,0xff,0x53,0x81,0x59,0xff,0x52,0x80,
+ 0x58,0xff,0x51,0x7f,0x57,0xff,0x51,0x7e,0x56,0xff,0x50,0x7d,0x55,0xff,0x4e,
+ 0x7b,0x53,0xff,0x4e,0x79,0x51,0xff,0x4d,0x78,0x50,0xff,0x4c,0x76,0x4f,0xff,
+ 0x4b,0x74,0x4d,0xff,0x49,0x73,0x4b,0xff,0x48,0x72,0x4a,0xff,0x3d,0x63,0x40,
+ 0xff,0x36,0x57,0x39,0xff,0x2f,0x4f,0x34,0xff,0x35,0x57,0x37,0xff,0x3b,0x63,
+ 0x3b,0xff,0x47,0x6c,0x4b,0xff,0x6b,0x83,0x80,0xff,0x5a,0x75,0x66,0xff,0x2b,
+ 0x4b,0x2a,0xf2,0x1a,0x2e,0x1a,0x7d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x28,
+ 0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+ 0x03,0x83,0x00,0x00,0x00,0x00,0x4d,0x87,0x8c,0x91,0x35,0x9c,0x9f,0xa1,0x48,
+ 0x99,0x9c,0x9f,0x46,0x9a,0x9d,0xa0,0x44,0x8b,0x8c,0x8e,0xaf,0x98,0x98,0x9a,
+ 0xff,0x5d,0x5c,0x5d,0xff,0x4f,0x4e,0x4f,0xff,0x7b,0x7b,0x7b,0xff,0xc7,0xc8,
+ 0xc7,0xff,0xbe,0xbf,0xbf,0xff,0x7f,0x83,0x81,0xff,0x23,0x88,0x48,0xff,0x39,
+ 0xa3,0x54,0xff,0x3a,0xa0,0x54,0xff,0x3c,0xa1,0x57,0xff,0x3b,0x9a,0x55,0xff,
+ 0x38,0x8e,0x50,0xff,0x39,0x8d,0x50,0xff,0x3e,0x94,0x55,0xff,0x45,0x9f,0x5c,
+ 0xff,0x46,0x9d,0x5c,0xff,0x47,0x9b,0x5d,0xff,0x49,0x9b,0x5d,0xff,0x4a,0x9a,
+ 0x5d,0xff,0x4b,0x99,0x5e,0xff,0x4c,0x9a,0x5f,0xff,0x4e,0x99,0x60,0xff,0x50,
+ 0x9b,0x61,0xff,0x4a,0x8a,0x59,0xff,0x47,0x81,0x56,0xff,0x47,0x83,0x56,0xff,
+ 0x49,0x82,0x57,0xff,0x47,0x80,0x57,0xff,0x54,0x95,0x63,0xff,0x54,0x92,0x61,
+ 0xff,0x55,0x91,0x60,0xff,0x55,0x90,0x61,0xff,0x55,0x90,0x60,0xff,0x55,0x8e,
+ 0x5f,0xff,0x55,0x8d,0x60,0xff,0x56,0x8c,0x5f,0xff,0x55,0x8b,0x5e,0xff,0x55,
+ 0x8a,0x5e,0xff,0x55,0x88,0x5d,0xff,0x54,0x87,0x5d,0xff,0x54,0x85,0x5b,0xff,
+ 0x53,0x83,0x5a,0xff,0x54,0x82,0x5a,0xff,0x53,0x81,0x59,0xff,0x52,0x80,0x58,
+ 0xff,0x51,0x7f,0x56,0xff,0x51,0x7d,0x55,0xff,0x4f,0x7c,0x54,0xff,0x4f,0x79,
+ 0x52,0xff,0x4e,0x78,0x51,0xff,0x4c,0x77,0x4f,0xff,0x4b,0x75,0x4e,0xff,0x4a,
+ 0x73,0x4c,0xff,0x48,0x72,0x4a,0xff,0x47,0x70,0x47,0xff,0x44,0x6d,0x45,0xff,
+ 0x3a,0x60,0x3d,0xff,0x38,0x5d,0x3a,0xff,0x3b,0x61,0x3c,0xff,0x3c,0x66,0x3b,
+ 0xff,0x4f,0x71,0x57,0xff,0x86,0x94,0xa5,0xff,0x74,0x87,0x8c,0xff,0x28,0x4a,
+ 0x28,0xf2,0x19,0x2e,0x19,0x7b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x28,0x00,
+ 0x00,0x00,0x18,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,
+ 0x82,0x00,0x00,0x00,0x00,0x19,0xa8,0xaf,0xb4,0x16,0xaa,0xaf,0xb5,0xa9,0xd8,
+ 0xdc,0xe0,0xdd,0xc8,0xcf,0xd3,0xdc,0xc9,0xd0,0xd4,0xdb,0xc2,0xc8,0xcd,0xef,
+ 0xc4,0xca,0xcf,0xff,0x6c,0x6d,0x6e,0xff,0x1f,0x1f,0x1f,0xff,0x6b,0x6b,0x6b,
+ 0xff,0xc8,0xc8,0xc8,0xff,0xbf,0xc0,0xbf,0xff,0x80,0x84,0x83,0xff,0x23,0x86,
+ 0x48,0xff,0x37,0x9a,0x50,0xff,0x38,0x9a,0x51,0xff,0x38,0x99,0x52,0xff,0x3a,
+ 0x99,0x54,0xff,0x3d,0x99,0x55,0xff,0x3e,0x98,0x56,0xff,0x40,0x97,0x56,0xff,
+ 0x41,0x97,0x56,0xff,0x43,0x96,0x58,0xff,0x49,0x9b,0x5d,0xff,0x4b,0x9a,0x5d,
+ 0xff,0x82,0x4c,0x99,0x5f,0xff,0x25,0x4d,0x9a,0x60,0xff,0x4f,0x9a,0x61,0xff,
+ 0x4b,0x9b,0x5e,0xff,0x49,0x9d,0x5c,0xff,0x4a,0x9c,0x5d,0xff,0x4b,0x9c,0x5d,
+ 0xff,0x4c,0x9c,0x5e,0xff,0x4d,0x9b,0x5e,0xff,0x4d,0x99,0x5f,0xff,0x54,0x92,
+ 0x62,0xff,0x55,0x91,0x60,0xff,0x55,0x90,0x62,0xff,0x55,0x90,0x60,0xff,0x55,
+ 0x8f,0x5f,0xff,0x56,0x8e,0x60,0xff,0x57,0x8c,0x5f,0xff,0x56,0x8b,0x5e,0xff,
+ 0x56,0x8a,0x5e,0xff,0x55,0x89,0x5d,0xff,0x55,0x87,0x5d,0xff,0x53,0x85,0x5b,
+ 0xff,0x53,0x83,0x5a,0xff,0x55,0x83,0x5b,0xff,0x54,0x82,0x59,0xff,0x52,0x81,
+ 0x58,0xff,0x52,0x7f,0x56,0xff,0x52,0x7e,0x55,0xff,0x4f,0x7c,0x54,0xff,0x4f,
+ 0x79,0x51,0xff,0x4e,0x78,0x50,0xff,0x4c,0x77,0x4f,0xff,0x4b,0x75,0x4e,0xff,
+ 0x49,0x72,0x4c,0xff,0x44,0x6c,0x45,0xff,0x43,0x6a,0x43,0xff,0x41,0x69,0x42,
+ 0xff,0x3e,0x66,0x3f,0xff,0x82,0x3c,0x63,0x3c,0xff,0x0c,0x38,0x61,0x38,0xff,
+ 0x39,0x61,0x38,0xff,0x4d,0x6c,0x55,0xff,0x3d,0x61,0x42,0xff,0x23,0x45,0x22,
+ 0xf2,0x18,0x2d,0x17,0x79,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x25,0x00,0x00,
+ 0x00,0x16,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x82,
+ 0x00,0x00,0x00,0x00,0x1c,0x83,0x86,0x88,0x2f,0x83,0x86,0x87,0xcd,0xe8,0xea,
+ 0xeb,0xff,0xd9,0xdd,0xe1,0xff,0xda,0xde,0xe2,0xff,0xda,0xdf,0xe3,0xff,0xde,
+ 0xe4,0xe9,0xff,0xac,0xae,0xaf,0xff,0x51,0x50,0x50,0xff,0x7b,0x7a,0x7a,0xff,
+ 0xc9,0xc9,0xc9,0xff,0xc1,0xc3,0xc2,0xff,0x83,0x87,0x85,0xff,0x20,0x79,0x41,
+ 0xff,0x2a,0x66,0x39,0xfc,0x33,0x66,0x3f,0xf7,0x39,0x6e,0x46,0xf4,0x3f,0x74,
+ 0x4d,0xf2,0x43,0x78,0x51,0xf0,0x3e,0x96,0x55,0xf8,0x37,0xa5,0x53,0xff,0x37,
+ 0xa0,0x53,0xff,0x38,0x82,0x59,0xff,0x35,0x57,0x61,0xf8,0x39,0x71,0x5e,0xf5,
+ 0x40,0x9d,0x5a,0xfd,0x41,0xa0,0x58,0xff,0x43,0x9e,0x59,0xff,0x83,0x45,0x9d,
+ 0x5a,0xff,0x2f,0x46,0x9c,0x5a,0xff,0x47,0x9b,0x5b,0xff,0x49,0x9b,0x5b,0xff,
+ 0x4a,0x9a,0x5c,0xff,0x52,0x94,0x61,0xff,0x55,0x91,0x60,0xff,0x56,0x91,0x61,
+ 0xff,0x55,0x90,0x61,0xff,0x55,0x8f,0x5f,0xff,0x55,0x8e,0x60,0xff,0x57,0x8c,
+ 0x5f,0xff,0x56,0x8b,0x5f,0xff,0x56,0x8a,0x5e,0xff,0x55,0x89,0x5d,0xff,0x55,
+ 0x87,0x5d,0xff,0x54,0x85,0x5b,0xff,0x53,0x84,0x5a,0xff,0x54,0x83,0x5b,0xff,
+ 0x54,0x82,0x59,0xff,0x52,0x81,0x58,0xff,0x52,0x7f,0x57,0xff,0x51,0x7e,0x55,
+ 0xff,0x50,0x7c,0x54,0xff,0x4f,0x79,0x52,0xff,0x4e,0x78,0x50,0xff,0x4d,0x77,
+ 0x50,0xff,0x4b,0x76,0x4e,0xff,0x4b,0x75,0x4e,0xff,0x4c,0x7d,0x52,0xff,0x28,
+ 0x3f,0x3a,0xfa,0x24,0x39,0x3f,0xf1,0x26,0x3c,0x41,0xf1,0x26,0x3b,0x42,0xf1,
+ 0x26,0x3b,0x42,0xf0,0x26,0x3c,0x42,0xf0,0x25,0x3c,0x41,0xf0,0x25,0x3e,0x2d,
+ 0xdd,0x24,0x41,0x24,0xd6,0x21,0x3e,0x20,0xd3,0x1b,0x31,0x18,0xc7,0x11,0x1d,
+ 0x0f,0x66,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x13,0x00,
+ 0x00,0x00,0x0b,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x01,0x82,0x00,0x00,0x00,
+ 0x00,0x2e,0x5a,0x5b,0x5b,0x22,0x56,0x54,0x55,0xc6,0xb5,0xbd,0xc3,0xff,0x7a,
+ 0x8b,0x97,0xff,0x7a,0x8b,0x99,0xff,0x7b,0x8c,0x9a,0xff,0x80,0x91,0x9f,0xff,
+ 0x5e,0x66,0x6c,0xff,0x27,0x26,0x26,0xff,0x69,0x69,0x69,0xff,0xca,0xca,0xca,
+ 0xff,0xc3,0xc4,0xc4,0xff,0x84,0x89,0x87,0xff,0x22,0x7a,0x42,0xff,0x30,0x5e,
+ 0x3a,0xdf,0x35,0x34,0x34,0xa2,0x26,0x20,0x25,0x7f,0x14,0x0e,0x13,0x62,0x08,
+ 0x07,0x07,0x51,0x39,0x98,0x4d,0xaf,0x3e,0xac,0x58,0xff,0x3e,0xa6,0x55,0xff,
+ 0x38,0x7c,0x5d,0xff,0x27,0x34,0x58,0xad,0x21,0x56,0x2c,0x82,0x40,0xa0,0x57,
+ 0xed,0x41,0xa0,0x59,0xff,0x42,0x9e,0x59,0xff,0x44,0x9d,0x5a,0xff,0x45,0x9d,
+ 0x5a,0xff,0x45,0x9c,0x5a,0xff,0x46,0x9b,0x5b,0xff,0x49,0x9a,0x5c,0xff,0x50,
+ 0x95,0x5f,0xff,0x55,0x91,0x61,0xff,0x56,0x91,0x61,0xff,0x55,0x8f,0x61,0xff,
+ 0x55,0x8f,0x60,0xff,0x55,0x8e,0x60,0xff,0x57,0x8d,0x60,0xff,0x56,0x8b,0x5f,
+ 0xff,0x55,0x8a,0x5d,0xff,0x55,0x89,0x5e,0xff,0x55,0x87,0x5d,0xff,0x54,0x86,
+ 0x5b,0xff,0x53,0x84,0x5b,0xff,0x82,0x54,0x82,0x5a,0xff,0x1e,0x53,0x81,0x59,
+ 0xff,0x52,0x80,0x57,0xff,0x51,0x7e,0x55,0xff,0x50,0x7c,0x54,0xff,0x4f,0x7a,
+ 0x52,0xff,0x4e,0x78,0x51,0xff,0x4d,0x77,0x50,0xff,0x4c,0x76,0x4e,0xff,0x4b,
+ 0x75,0x4e,0xff,0x4c,0x76,0x4e,0xff,0x4b,0x75,0x4e,0xff,0x4f,0x80,0x56,0xff,
+ 0x35,0x44,0x3f,0xc7,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x57,0x00,0x00,0x00,
+ 0x52,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x46,0x00,0x00,
+ 0x00,0x43,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x35,0x00,
+ 0x00,0x00,0x2f,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x10,
+ 0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x82,0x00,0x00,
+ 0x00,0x00,0x4e,0x46,0x45,0x45,0x0c,0x6c,0x6b,0x6a,0x83,0xbe,0xc6,0xcb,0xc6,
+ 0xa1,0xad,0xb7,0xc7,0xa3,0xae,0xb8,0xc6,0xa1,0xab,0xb3,0xe7,0xa5,0xae,0xb6,
+ 0xff,0x39,0x3b,0x3d,0xff,0x0c,0x0c,0x0c,0xff,0x5d,0x5d,0x5e,0xff,0xcb,0xcb,
+ 0xcb,0xff,0xc5,0xc5,0xc5,0xff,0x86,0x8c,0x88,0xff,0x26,0x82,0x43,0xff,0x31,
+ 0x60,0x3c,0xde,0x3b,0x40,0x3c,0xa0,0x2f,0x2f,0x2f,0x7f,0x1c,0x1c,0x1c,0x61,
+ 0x0f,0x0f,0x0f,0x51,0x90,0xb9,0x51,0xaf,0xa9,0xd9,0x5a,0xff,0xa5,0xd2,0x56,
+ 0xff,0x65,0x8f,0x5f,0xff,0x23,0x36,0x5c,0xab,0x20,0x5c,0x32,0x82,0x3c,0xa1,
+ 0x5a,0xed,0x3b,0x9f,0x5b,0xff,0x3b,0x9d,0x5a,0xff,0x3f,0x9d,0x5b,0xff,0x43,
+ 0x9d,0x5a,0xff,0x40,0x9c,0x5c,0xff,0x40,0x9a,0x5c,0xff,0x43,0x98,0x5e,0xff,
+ 0x49,0x94,0x60,0xff,0x4a,0x94,0x60,0xff,0x4b,0x92,0x61,0xff,0x4b,0x92,0x5f,
+ 0xff,0x4b,0x91,0x5f,0xff,0x4c,0x90,0x5f,0xff,0x4d,0x8e,0x5f,0xff,0x4c,0x8e,
+ 0x5e,0xff,0x4c,0x8d,0x5e,0xff,0x4c,0x8b,0x5e,0xff,0x4b,0x89,0x5d,0xff,0x4b,
+ 0x89,0x5c,0xff,0x4b,0x86,0x5c,0xff,0x4c,0x86,0x5c,0xff,0x4b,0x85,0x5b,0xff,
+ 0x4a,0x84,0x5a,0xff,0x4a,0x82,0x59,0xff,0x4a,0x81,0x57,0xff,0x49,0x7f,0x57,
+ 0xff,0x48,0x7d,0x55,0xff,0x47,0x7c,0x55,0xff,0x47,0x7a,0x53,0xff,0x46,0x79,
+ 0x52,0xff,0x46,0x79,0x53,0xff,0x46,0x79,0x51,0xff,0x46,0x78,0x51,0xff,0x49,
+ 0x7f,0x57,0xff,0x33,0x47,0x41,0xc8,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x5b,
+ 0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+ 0x44,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x36,0x00,0x00,
+ 0x00,0x2f,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x13,0x00,
+ 0x00,0x00,0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,
+ 0x83,0x00,0x00,0x00,0x00,0x3c,0xc5,0xc4,0xc3,0x15,0xd0,0xd6,0xdb,0x30,0xc5,
+ 0xcc,0xd2,0x32,0xc2,0xc9,0xd0,0x32,0x91,0x94,0x97,0x73,0xad,0xae,0xaf,0xe8,
+ 0x76,0x76,0x75,0xff,0x70,0x70,0x70,0xff,0x8e,0x8e,0x8e,0xff,0xcc,0xcc,0xcc,
+ 0xff,0xc8,0xc7,0xc8,0xff,0x88,0x8c,0x88,0xff,0x2a,0x72,0x3c,0xff,0x37,0x60,
+ 0x41,0xdc,0x45,0x4a,0x46,0x95,0x37,0x37,0x36,0x6f,0x23,0x23,0x23,0x51,0x11,
+ 0x11,0x11,0x3f,0xda,0xda,0x58,0xa7,0xff,0xff,0x5d,0xff,0xf9,0xf9,0x59,0xff,
+ 0x8c,0x9c,0x66,0xff,0x20,0x3b,0x64,0xa8,0x5c,0x75,0x2c,0x7d,0x76,0x8d,0x5c,
+ 0xed,0x8f,0xb4,0x4b,0xff,0x7c,0x93,0x56,0xff,0x7d,0x9b,0x52,0xff,0x73,0x93,
+ 0x52,0xff,0x75,0x87,0x5b,0xff,0x91,0xb1,0x4d,0xff,0x7f,0x94,0x56,0xff,0x83,
+ 0x99,0x54,0xff,0x8d,0xa7,0x4f,0xff,0x79,0x87,0x5b,0xff,0x90,0xa9,0x4e,0xff,
+ 0x83,0x95,0x56,0xff,0x84,0x94,0x56,0xff,0x91,0xa8,0x4e,0xff,0x7b,0x85,0x5b,
+ 0xff,0x8f,0xa4,0x4f,0xff,0x86,0x95,0x55,0xff,0x82,0x8e,0x57,0xff,0x94,0xa8,
+ 0x4d,0xff,0x7b,0x83,0x5a,0xff,0x8e,0x9e,0x50,0xff,0x88,0x95,0x53,0xff,0x80,
+ 0x89,0x57,0xff,0x94,0xa6,0x4c,0xff,0x7d,0x82,0x58,0xff,0x8c,0x98,0x4f,0xff,
+ 0x8a,0x95,0x50,0xff,0x7e,0x82,0x56,0xff,0x93,0xa3,0x4a,0xff,0x7e,0x81,0x55,
+ 0xff,0x89,0x92,0x4f,0xff,0x8b,0x95,0x4c,0xff,0x7c,0x7d,0x56,0xff,0x97,0xa6,
+ 0x4b,0xfe,0x4b,0x4c,0x4a,0xc2,0x82,0x00,0x00,0x00,0x52,0x0f,0x00,0x00,0x00,
+ 0x49,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x34,0x00,0x00,
+ 0x00,0x2c,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x20,0x00,
+ 0x00,0x00,0x1a,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x08,
+ 0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x84,0x00,0x00,
+ 0x00,0x00,0x23,0x76,0x76,0x76,0x00,0x70,0x70,0x70,0x01,0x64,0x65,0x65,0x04,
+ 0x36,0x35,0x35,0x2e,0xae,0xad,0xad,0xd3,0xae,0xad,0xad,0xff,0xaf,0xaf,0xaf,
+ 0xff,0xae,0xae,0xae,0xff,0xce,0xce,0xce,0xff,0xc9,0xc9,0xca,0xff,0x90,0x8f,
+ 0x90,0xf7,0x56,0x62,0x59,0xc7,0x57,0x5e,0x5a,0xac,0x52,0x53,0x53,0x84,0x44,
+ 0x44,0x44,0x60,0x2d,0x2e,0x2e,0x41,0x17,0x19,0x18,0x2f,0xdc,0xdb,0x52,0x7b,
+ 0xff,0xef,0x56,0xb6,0xfa,0xe5,0x51,0xb2,0x92,0x8b,0x44,0x7a,0x0f,0x1e,0x32,
+ 0x47,0xa6,0x96,0x26,0x7b,0xb8,0x7c,0x5f,0xed,0xe9,0xcf,0x3f,0xff,0xc2,0x8e,
+ 0x54,0xff,0xbf,0xa2,0x4b,0xff,0xaa,0x97,0x4c,0xff,0xb3,0x79,0x5b,0xff,0xe8,
+ 0xcd,0x3e,0xff,0xc6,0x94,0x51,0xff,0xcd,0xa0,0x4d,0xff,0xe0,0xbe,0x42,0xff,
+ 0xb7,0x7d,0x5a,0xff,0xe4,0xc5,0x40,0xff,0x82,0xc9,0x9a,0x4f,0xff,0x26,0xe4,
+ 0xc5,0x40,0xff,0xb7,0x7d,0x5a,0xff,0xe0,0xbe,0x42,0xff,0xcd,0xa0,0x4d,0xff,
+ 0xc5,0x93,0x51,0xff,0xe8,0xcb,0x3e,0xff,0xb7,0x7d,0x5a,0xff,0xdc,0xb8,0x44,
+ 0xff,0xd1,0xa7,0x4b,0xff,0xc1,0x8d,0x54,0xff,0xe9,0xcd,0x3d,0xff,0xba,0x82,
+ 0x58,0xff,0xd8,0xb3,0x46,0xff,0xd5,0xad,0x48,0xff,0xbd,0x87,0x56,0xff,0xe8,
+ 0xcd,0x3d,0xff,0xbe,0x88,0x56,0xff,0xd4,0xac,0x49,0xff,0xd9,0xb4,0x47,0xff,
+ 0xbc,0x82,0x5a,0xff,0xe5,0xd6,0x40,0xfd,0x6c,0x53,0x56,0xb8,0x00,0x00,0x00,
+ 0x49,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x30,0x00,0x00,
+ 0x00,0x28,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x18,0x00,
+ 0x00,0x00,0x17,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x0c,
+ 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+ 0x01,0x85,0x00,0x00,0x00,0x00,0x23,0x7e,0x7d,0x7c,0x00,0x79,0x78,0x78,0x01,
+ 0x6f,0x6f,0x6f,0x04,0x2f,0x2e,0x2f,0x2a,0xb1,0xb1,0xb1,0xd1,0xb1,0xb1,0xb1,
+ 0xff,0xb2,0xb2,0xb2,0xff,0xb2,0xb2,0xb1,0xff,0xcf,0xcf,0xcf,0xff,0xcc,0xcc,
+ 0xcd,0xff,0x92,0x92,0x92,0xf5,0x73,0x73,0x73,0xb8,0x72,0x72,0x71,0x9b,0x68,
+ 0x68,0x68,0x74,0x59,0x5a,0x5a,0x50,0x3d,0x3e,0x3e,0x30,0x24,0x25,0x25,0x1e,
+ 0x25,0x24,0x12,0x17,0x31,0x2c,0x10,0x18,0x23,0x1f,0x0b,0x1f,0x09,0x08,0x02,
+ 0x28,0x00,0x00,0x00,0x2b,0xc2,0xb0,0x2f,0x6e,0xce,0x8c,0x67,0xce,0xf0,0xe3,
+ 0x47,0xdd,0xd1,0xa0,0x5d,0xde,0xca,0xb2,0x52,0xdf,0xc0,0xaa,0x50,0xe0,0xc4,
+ 0x87,0x63,0xe1,0xea,0xdc,0x44,0xe2,0xd0,0xa3,0x59,0xe2,0xd6,0xaf,0x54,0xe2,
+ 0xe4,0xce,0x49,0xe2,0xc5,0x8b,0x61,0xe2,0xe7,0xd5,0x47,0xe2,0x82,0xd3,0xa9,
+ 0x56,0xe2,0x25,0xe7,0xd5,0x47,0xe2,0xc5,0x8b,0x61,0xe2,0xe4,0xcf,0x49,0xe2,
+ 0xd6,0xb0,0x54,0xe2,0xd0,0xa3,0x59,0xe2,0xea,0xdc,0x44,0xe2,0xc5,0x8c,0x61,
+ 0xe2,0xe1,0xc8,0x4b,0xe2,0xd9,0xb6,0x52,0xe2,0xcd,0x9d,0x5b,0xe2,0xea,0xdd,
+ 0x44,0xe2,0xc7,0x91,0x5f,0xe2,0xde,0xc2,0x4e,0xe2,0xdc,0xbc,0x4f,0xe2,0xca,
+ 0x96,0x5d,0xe2,0xea,0xdd,0x44,0xe2,0xca,0x98,0x5d,0xe2,0xdb,0xbc,0x50,0xe2,
+ 0xdf,0xc3,0x4d,0xe2,0xc9,0x91,0x61,0xe1,0xe5,0xde,0x46,0xde,0x79,0x5b,0x57,
+ 0xa0,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x29,0x00,0x00,
+ 0x00,0x1d,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0d,0x00,
+ 0x00,0x00,0x0c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x08,
+ 0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+ 0x01,0x86,0x00,0x00,0x00,0x00,0x06,0x7f,0x7c,0x7f,0x00,0x7b,0x7a,0x7a,0x02,
+ 0x76,0x77,0x76,0x06,0x32,0x32,0x32,0x2c,0xb5,0xb4,0xb3,0xd1,0xb4,0xb4,0xb4,
+ 0xff,0x82,0xb5,0xb5,0xb5,0xff,0x16,0xd3,0xd3,0xd2,0xff,0xc8,0xc8,0xc7,0xff,
+ 0x8e,0x8d,0x8e,0xf4,0x8a,0x8a,0x89,0xb2,0x88,0x88,0x87,0x92,0x81,0x81,0x81,
+ 0x69,0x73,0x73,0x73,0x44,0x59,0x5a,0x59,0x25,0x3a,0x3a,0x3a,0x14,0x0d,0x0d,
+ 0x0d,0x11,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x21,0x00,
+ 0x00,0x00,0x23,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1f,
+ 0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+ 0x3b,0x00,0x00,0x00,0x3e,0x99,0x00,0x00,0x00,0x40,0x0a,0x00,0x00,0x00,0x3e,
+ 0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+ 0x33,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x13,0x00,0x00,
+ 0x00,0x0c,0x00,0x00,0x00,0x08,0x82,0x00,0x00,0x00,0x06,0x82,0x00,0x00,0x00,
+ 0x04,0x01,0x00,0x00,0x00,0x03,0x82,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,
+ 0x01,0x87,0x00,0x00,0x00,0x00,0x05,0x83,0x7c,0x83,0x00,0x7f,0x7d,0x7f,0x02,
+ 0x7f,0x7e,0x7f,0x07,0x36,0x36,0x36,0x2f,0xb7,0xb6,0xb6,0xd2,0x82,0xb8,0xb8,
+ 0xb8,0xff,0x17,0xba,0xba,0xba,0xff,0xcc,0xcc,0xcb,0xff,0x9f,0xa0,0xa0,0xf3,
+ 0x8c,0x8c,0x8d,0xde,0x9e,0x9e,0x9e,0xb0,0x9e,0x9e,0x9e,0x8b,0x9b,0x9a,0x9a,
+ 0x61,0x90,0x90,0x8f,0x3c,0x7a,0x7b,0x7a,0x1d,0x59,0x5a,0x59,0x0f,0x13,0x14,
+ 0x14,0x0b,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x15,0x00,
+ 0x00,0x00,0x18,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x22,
+ 0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+ 0x39,0x00,0x00,0x00,0x3b,0x82,0x00,0x00,0x00,0x3c,0x96,0x00,0x00,0x00,0x3d,
+ 0x0b,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,
+ 0x00,0x36,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x20,0x00,
+ 0x00,0x00,0x15,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,
+ 0x82,0x00,0x00,0x00,0x02,0x83,0x00,0x00,0x00,0x01,0x8a,0x00,0x00,0x00,0x00,
+ 0x1d,0x89,0x82,0x88,0x00,0x86,0x82,0x86,0x03,0x85,0x85,0x85,0x09,0x49,0x48,
+ 0x48,0x26,0xad,0xad,0xad,0xce,0xbc,0xbc,0xbc,0xff,0xbd,0xbd,0xbd,0xff,0xc1,
+ 0xc1,0xc1,0xff,0xa1,0xa1,0xa1,0xf3,0x95,0x95,0x96,0xde,0xab,0xab,0xac,0xca,
+ 0xb0,0xb0,0xb1,0xae,0xb4,0xb4,0xb4,0x86,0xb2,0xb1,0xb2,0x5c,0xac,0xac,0xac,
+ 0x36,0x9c,0x9c,0x9c,0x19,0x82,0x82,0x82,0x0b,0x22,0x22,0x22,0x06,0x00,0x00,
+ 0x00,0x08,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0f,0x00,
+ 0x00,0x00,0x11,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1e,
+ 0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x29,0x82,0x00,0x00,
+ 0x00,0x2c,0x97,0x00,0x00,0x00,0x2d,0x82,0x00,0x00,0x00,0x2c,0x0a,0x00,0x00,
+ 0x00,0x2a,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1d,0x00,
+ 0x00,0x00,0x16,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x04,
+ 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x8e,0x00,0x00,0x00,0x00,0x1f,0x8f,
+ 0x88,0x8e,0x00,0x8b,0x88,0x8a,0x03,0x89,0x8b,0x8b,0x0b,0x7f,0x80,0x80,0x14,
+ 0x95,0x95,0x95,0xbd,0xbf,0xbe,0xbf,0xfe,0xa3,0xa3,0xa3,0xff,0xc5,0xc5,0xc6,
+ 0xff,0x9a,0x9a,0x9a,0xea,0xa7,0xa7,0xa8,0xdb,0xba,0xba,0xbb,0xcc,0xc0,0xc0,
+ 0xc0,0xab,0xc4,0xc5,0xc4,0x81,0xc6,0xc6,0xc5,0x56,0xc3,0xc4,0xc3,0x32,0xba,
+ 0xbb,0xbb,0x16,0xac,0xac,0xac,0x08,0x33,0x32,0x32,0x03,0x00,0x00,0x00,0x04,
+ 0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+ 0x0a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x13,0x00,0x00,
+ 0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,
+ 0x00,0x00,0x1b,0x99,0x00,0x00,0x00,0x1a,0x82,0x00,0x00,0x00,0x18,0x07,0x00,
+ 0x00,0x00,0x15,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x09,
+ 0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x8f,0x00,0x00,
+ 0x00,0x00,0x12,0x9c,0x8e,0x98,0x00,0x93,0x8f,0x92,0x04,0x90,0x90,0x90,0x0d,
+ 0x92,0x92,0x92,0x16,0x7f,0x80,0x81,0x92,0xaf,0xb0,0xb0,0xfa,0x85,0x84,0x84,
+ 0xff,0xc2,0xc2,0xc3,0xff,0xa1,0xa1,0xa1,0xea,0xb4,0xb4,0xb4,0xdc,0xc5,0xc5,
+ 0xc5,0xcb,0xcf,0xcf,0xcf,0xaa,0xd4,0xd5,0xd4,0x7f,0xd8,0xd7,0xd7,0x55,0xda,
+ 0xda,0xda,0x2f,0xd4,0xd3,0xd5,0x14,0xcf,0xcf,0xcf,0x07,0x87,0x87,0x87,0x02,
+ 0x82,0x00,0x00,0x00,0x02,0x82,0x00,0x00,0x00,0x03,0x07,0x00,0x00,0x00,0x04,
+ 0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+ 0x0a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0d,0x83,0x00,0x00,0x00,0x0b,0x95,
+ 0x00,0x00,0x00,0x0c,0x83,0x00,0x00,0x00,0x0b,0x07,0x00,0x00,0x00,0x0d,0x00,
+ 0x00,0x00,0x0c,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x07,
+ 0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x03,0x82,0x00,0x00,0x00,0x01,0x8f,0x00,
+ 0x00,0x00,0x00,0x12,0xa2,0x90,0x9c,0x01,0x9a,0x96,0x99,0x04,0x97,0x97,0x97,
+ 0x0d,0x99,0x9a,0x99,0x17,0x7b,0x7a,0x7a,0x81,0xb3,0xb5,0xb4,0xf8,0x85,0x86,
+ 0x85,0xff,0xc6,0xc7,0xc7,0xff,0xa6,0xa6,0xa6,0xea,0xbc,0xbd,0xbd,0xda,0xcf,
+ 0xcf,0xcf,0xca,0xd8,0xd8,0xd8,0xa8,0xde,0xde,0xde,0x7e,0xe3,0xe3,0xe3,0x53,
+ 0xe5,0xe5,0xe5,0x2f,0xe4,0xe4,0xe4,0x13,0xe4,0xe3,0xe3,0x07,0xbe,0xbf,0xbe,
+ 0x02,0x84,0x00,0x00,0x00,0x01,0x83,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x00,
+ 0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x9d,0x00,0x00,0x00,0x04,0x02,
+ 0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04,0x82,0x00,0x00,0x00,0x03,0x01,0x00,
+ 0x00,0x00,0x02,0x82,0x00,0x00,0x00,0x01,0x90,0x00,0x00,0x00,0x00,0x13,0xa6,
+ 0x9c,0xa3,0x00,0xa1,0x9d,0xa0,0x04,0x9d,0x9d,0x9d,0x0b,0xa0,0xa0,0x9f,0x14,
+ 0x7b,0x7b,0x7b,0x7f,0xc3,0xc3,0xc4,0xf8,0x9c,0x9c,0x9c,0xff,0xce,0xce,0xce,
+ 0xff,0xac,0xac,0xac,0xe5,0xc4,0xc4,0xc4,0xd4,0xd6,0xd6,0xd6,0xc5,0xdf,0xdf,
+ 0xe0,0xa6,0xe6,0xe6,0xe6,0x7d,0xeb,0xec,0xeb,0x53,0xef,0xef,0xef,0x2e,0xf0,
+ 0xf1,0xf0,0x14,0xef,0xf0,0xf0,0x07,0xf2,0xf2,0xf2,0x01,0xf9,0xfa,0xf9,0x00,
+ 0xbd,0x00,0x00,0x00,0x00,0x13,0xad,0xa4,0xac,0x00,0xa8,0xa3,0xa7,0x03,0xa2,
+ 0xa2,0xa2,0x09,0xa5,0xa5,0xa5,0x11,0x7c,0x7c,0x7c,0x7a,0xd3,0xd3,0xd3,0xf8,
+ 0xcd,0xcd,0xcb,0xff,0xc2,0xc2,0xc2,0xf2,0xb3,0xb2,0xb3,0xcb,0xd0,0xd1,0xd0,
+ 0xc4,0xde,0xdf,0xdd,0xbc,0xe7,0xe7,0xe7,0xa0,0xec,0xed,0xed,0x79,0xf1,0xf1,
+ 0xf1,0x51,0xf4,0xf4,0xf4,0x2d,0xf5,0xf5,0xf5,0x14,0xf5,0xf5,0xf5,0x07,0xf7,
+ 0xf6,0xf7,0x02,0xfb,0xfb,0xfb,0x00,0xbd,0x00,0x00,0x00,0x00,0x13,0xb1,0xa8,
+ 0xaf,0x00,0xab,0xa7,0xab,0x02,0xa5,0xa6,0xa6,0x07,0xa9,0xa8,0xa9,0x0b,0x7c,
+ 0x7c,0x7c,0x75,0xd6,0xd6,0xd8,0xf8,0xcc,0xcc,0xcc,0xff,0xad,0xac,0xac,0xcb,
+ 0xc7,0xc6,0xc6,0x9b,0xd8,0xd8,0xd8,0xad,0xe3,0xe3,0xe3,0xab,0xec,0xec,0xec,
+ 0x94,0xf2,0xf2,0xf2,0x72,0xf6,0xf6,0xf6,0x4d,0xf9,0xf9,0xf9,0x2c,0xf9,0xf9,
+ 0xf9,0x11,0xfa,0xfa,0xfa,0x07,0xfb,0xfb,0xfb,0x02,0xfd,0xfd,0xfd,0x00,0xbd,
+ 0x00,0x00,0x00,0x00,0x13,0xb8,0xa9,0xb4,0x00,0xb2,0xa9,0xb0,0x01,0xaa,0xa9,
+ 0xaa,0x04,0xac,0xac,0xac,0x07,0x7e,0x7e,0x7d,0x57,0xd3,0xd3,0xd4,0xef,0xd1,
+ 0xd2,0xd2,0xff,0xb1,0xb2,0xb3,0xb6,0xd2,0xd1,0xd2,0x77,0xdc,0xdc,0xdc,0x8f,
+ 0xe8,0xe8,0xe8,0x91,0xf0,0xf0,0xf1,0x81,0xf5,0xf6,0xf6,0x66,0xf9,0xfa,0xfa,
+ 0x45,0xfb,0xfb,0xfb,0x27,0xfc,0xfc,0xfc,0x10,0xfd,0xfd,0xfd,0x06,0xfe,0xfd,
+ 0xfe,0x01,0xfe,0xfd,0xfd,0x00,0xbe,0x00,0x00,0x00,0x00,0x11,0xb3,0xaa,0xb1,
+ 0x00,0xae,0xa9,0xac,0x03,0xac,0xac,0xac,0x05,0x7f,0x7f,0x7f,0x0c,0xb6,0xb6,
+ 0xb6,0x88,0xca,0xca,0xca,0xf7,0xb5,0xb5,0xb5,0xa6,0xd4,0xd4,0xd4,0x55,0xdf,
+ 0xdf,0xdf,0x6d,0xeb,0xec,0xeb,0x73,0xf2,0xf3,0xf3,0x68,0xf8,0xf8,0xf8,0x54,
+ 0xfb,0xfb,0xfb,0x3a,0xfd,0xfd,0xfd,0x21,0xfd,0xfd,0xfd,0x0e,0xfe,0xfe,0xfe,
+ 0x05,0xff,0xff,0xff,0x01,0xbf,0x00,0x00,0x00,0x00,0x11,0xb9,0xab,0xb5,0x00,
+ 0xb2,0xa9,0xaf,0x01,0xad,0xab,0xad,0x03,0xb0,0xb0,0xb0,0x06,0x9f,0x9f,0x9f,
+ 0x14,0xa0,0xa1,0xa1,0x87,0x96,0x96,0x96,0x94,0xd6,0xd6,0xd6,0x38,0xe1,0xe1,
+ 0xe1,0x4c,0xec,0xed,0xec,0x53,0xf4,0xf4,0xf4,0x4e,0xf9,0xf9,0xf9,0x40,0xfc,
+ 0xfc,0xfc,0x2d,0xfe,0xfe,0xfe,0x1a,0xff,0xff,0xff,0x0b,0xff,0xff,0xff,0x04,
+ 0xff,0xff,0xff,0x01,0xc0,0x00,0x00,0x00,0x00,0x10,0xb3,0xa9,0xb1,0x00,0xb7,
+ 0xaf,0xb3,0x01,0xb2,0xb0,0xb0,0x03,0xb2,0xb2,0xb2,0x06,0x7f,0x7f,0x7f,0x18,
+ 0x88,0x87,0x87,0x2e,0xd7,0xd7,0xd7,0x20,0xe2,0xe2,0xe3,0x2e,0xee,0xee,0xee,
+ 0x35,0xf5,0xf5,0xf6,0x34,0xfa,0xfa,0xfa,0x2b,0xfd,0xfd,0xfd,0x1f,0xfe,0xfe,
+ 0xfe,0x12,0xff,0xff,0xff,0x08,0xff,0xff,0xff,0x03,0xff,0xff,0xff,0x01,0xba,
+ 0x00,0x00,0x00,0x00
+};
+
+static const GdkPixdata gvi_pixdata = {
+ 0x47646b50, /* Pixbuf magic: 'GdkP' */
+ 24 + 14929, /* header length + pixel_data length */
+ 0x2010002, /* pixdata_type */
+ 320, /* rowstride */
+ 80, /* width */
+ 60, /* height */
+ gvi_pixdata_pixel_data /* pixel_data */
+};
diff --git a/src/libXNVCtrl/NVCtrl.c b/src/libXNVCtrl/NVCtrl.c
index f2cabf6..d8bfe81 100644
--- a/src/libXNVCtrl/NVCtrl.c
+++ b/src/libXNVCtrl/NVCtrl.c
@@ -262,9 +262,10 @@ void XNVCTRLSetAttribute (
}
-Bool XNVCTRLSetAttributeAndGetStatus (
+Bool XNVCTRLSetTargetAttributeAndGetStatus (
Display *dpy,
- int screen,
+ int target_type,
+ int target_id,
unsigned int display_mask,
unsigned int attribute,
int value
@@ -283,7 +284,8 @@ Bool XNVCTRLSetAttributeAndGetStatus (
GetReq (nvCtrlSetAttributeAndGetStatus, req);
req->reqType = info->codes->major_opcode;
req->nvReqType = X_nvCtrlSetAttributeAndGetStatus;
- req->screen = screen;
+ req->target_type = target_type;
+ req->target_id = target_id;
req->display_mask = display_mask;
req->attribute = attribute;
req->value = value;
@@ -299,6 +301,18 @@ Bool XNVCTRLSetAttributeAndGetStatus (
return success;
}
+Bool XNVCTRLSetAttributeAndGetStatus (
+ Display *dpy,
+ int screen,
+ unsigned int display_mask,
+ unsigned int attribute,
+ int value
+){
+ return XNVCTRLSetTargetAttributeAndGetStatus(dpy,
+ NV_CTRL_TARGET_TYPE_X_SCREEN,
+ screen, display_mask,
+ attribute, value);
+}
Bool XNVCTRLQueryTargetAttribute (
@@ -419,9 +433,10 @@ Bool XNVCTRLQueryStringAttribute (
}
-Bool XNVCTRLSetStringAttribute (
+Bool XNVCTRLSetTargetStringAttribute (
Display *dpy,
- int screen,
+ int target_type,
+ int target_id,
unsigned int display_mask,
unsigned int attribute,
char *ptr
@@ -443,7 +458,8 @@ Bool XNVCTRLSetStringAttribute (
GetReq (nvCtrlSetStringAttribute, req);
req->reqType = info->codes->major_opcode;
req->nvReqType = X_nvCtrlSetStringAttribute;
- req->screen = screen;
+ req->target_type = target_type;
+ req->target_id = target_id;
req->display_mask = display_mask;
req->attribute = attribute;
req->length += ((size + 3) & ~3) >> 2;
@@ -462,6 +478,18 @@ Bool XNVCTRLSetStringAttribute (
return success;
}
+Bool XNVCTRLSetStringAttribute (
+ Display *dpy,
+ int screen,
+ unsigned int display_mask,
+ unsigned int attribute,
+ char *ptr
+){
+ return XNVCTRLSetTargetStringAttribute(dpy, NV_CTRL_TARGET_TYPE_X_SCREEN,
+ screen, display_mask,
+ attribute, ptr);
+}
+
Bool XNVCTRLQueryValidTargetAttributeValues (
Display *dpy,
diff --git a/src/libXNVCtrl/NVCtrl.h b/src/libXNVCtrl/NVCtrl.h
index a6a97a8..12f33b3 100644
--- a/src/libXNVCtrl/NVCtrl.h
+++ b/src/libXNVCtrl/NVCtrl.h
@@ -1079,8 +1079,10 @@
* NV_CTRL_GVIO_DETECTED_VIDEO_FORMAT - indicates the input video format
* detected for GVO or GVI devices; the possible values are the
* NV_CTRL_GVIO_VIDEO_FORMAT constants.
- * For GVI devices, the port number should be specified in the "display_mask"
- * parameter.
+ *
+ * For GVI devices, the jack number should be specified in the lower
+ * 16 bits of the "display_mask" parameter, while the channel number should be
+ * specified in the upper 16 bits.
*/
#define NV_CTRL_GVIO_DETECTED_VIDEO_FORMAT 71 /* R--I */
@@ -2420,16 +2422,135 @@
#define NV_CTRL_PCI_DOMAIN 306 /* R--GI */
/*
- * NV_CTRL_GVI_NUM_PORTS - Returns the number of input ports available on a GVI
- * device.
+ * NV_CTRL_GVI_NUM_JACKS - Returns the number of input BNC jacks available
+ * on a GVI device.
+ */
+
+#define NV_CTRL_GVI_NUM_JACKS 307 /* R--I */
+
+/*
+ * NV_CTRL_GVI_MAX_LINKS_PER_STREAM - Returns the maximum supported number of
+ * links that can be tied to one stream.
+ */
+
+#define NV_CTRL_GVI_MAX_LINKS_PER_STREAM 308 /* R--I */
+
+/*
+ * NV_CTRL_GVI_DETECTED_CHANNEL_BITS_PER_COMPONENT - Returns the detected
+ * number of bits per component (BPC) of data on the given input jack+
+ * channel.
+ *
+ * The jack number should be specified in the lower 16 bits of the
+ * "display_mask" parameter, while the channel number should be specified in
+ * the upper 16 bits.
+ */
+
+#define NV_CTRL_GVI_DETECTED_CHANNEL_BITS_PER_COMPONENT 309 /* R--I */
+#define NV_CTRL_GVI_BITS_PER_COMPONENT_UNKNOWN 0
+#define NV_CTRL_GVI_BITS_PER_COMPONENT_8 1
+#define NV_CTRL_GVI_BITS_PER_COMPONENT_10 2
+#define NV_CTRL_GVI_BITS_PER_COMPONENT_12 3
+
+/*
+ * NV_CTRL_GVI_REQUESTED_STREAM_BITS_PER_COMPONENT - Specify the number of
+ * bits per component (BPC) of data for the captured stream.
+ * The stream number should be specified in the "display_mask" parameter.
+ */
+
+#define NV_CTRL_GVI_REQUESTED_STREAM_BITS_PER_COMPONENT 310 /* RW-I */
+
+/*
+ * NV_CTRL_GVI_DETECTED_CHANNEL_COMPONENT_SAMPLING - Returns the detected
+ * sampling format for the input jack+channel.
+ *
+ * The jack number should be specified in the lower 16 bits of the
+ * "display_mask" parameter, while the channel number should be specified in
+ * the upper 16 bits.
+ */
+
+#define NV_CTRL_GVI_DETECTED_CHANNEL_COMPONENT_SAMPLING 311 /* R--I */
+#define NV_CTRL_GVI_COMPONENT_SAMPLING_UNKNOWN 0
+#define NV_CTRL_GVI_COMPONENT_SAMPLING_4444 1
+#define NV_CTRL_GVI_COMPONENT_SAMPLING_4224 2
+#define NV_CTRL_GVI_COMPONENT_SAMPLING_444 3
+#define NV_CTRL_GVI_COMPONENT_SAMPLING_422 4
+#define NV_CTRL_GVI_COMPONENT_SAMPLING_420 5
+
+/*
+ * NV_CTRL_GVI_REQUESTED_COMPONENT_SAMPLING - Specify the sampling format for
+ * the captured stream.
+ * The possible values are the NV_CTRL_GVI_DETECTED_COMPONENT_SAMPLING
+ * constants.
+ * The stream number should be specified in the "display_mask" parameter.
+ */
+
+#define NV_CTRL_GVI_REQUESTED_STREAM_COMPONENT_SAMPLING 312 /* RW-I */
+
+/*
+ * NV_CTRL_GVI_CHROMA_EXPAND - Enable or disable 4:2:2 -> 4:4:4 chroma
+ * expansion for the captured stream. This value is ignored when a
+ * COMPONENT_SAMPLING format is selected that does not use chroma subsampling.
+ * The stream number should be specified in the "display_mask" parameter.
+ */
+
+#define NV_CTRL_GVI_REQUESTED_STREAM_CHROMA_EXPAND 313 /* RW-I */
+#define NV_CTRL_GVI_CHROMA_EXPAND_FALSE 0
+#define NV_CTRL_GVI_CHROMA_EXPAND_TRUE 1
+
+/*
+ * NV_CTRL_GVI_DETECTED_CHANNEL_COLOR_SPACE - Returns the detected color space
+ * of the input jack+channel.
+ *
+ * The jack number should be specified in the lower 16 bits of the
+ * "display_mask" parameter, while the channel number should be specified in
+ * the upper 16 bits.
+ */
+
+#define NV_CTRL_GVI_DETECTED_CHANNEL_COLOR_SPACE 314 /* R--I */
+#define NV_CTRL_GVI_COLOR_SPACE_UNKNOWN 0
+#define NV_CTRL_GVI_COLOR_SPACE_GBR 1
+#define NV_CTRL_GVI_COLOR_SPACE_GBRA 2
+#define NV_CTRL_GVI_COLOR_SPACE_GBRD 3
+#define NV_CTRL_GVI_COLOR_SPACE_YCBCR 4
+#define NV_CTRL_GVI_COLOR_SPACE_YCBCRA 5
+#define NV_CTRL_GVI_COLOR_SPACE_YCBCRD 6
+
+/*
+ * NV_CTRL_GVI_DETECTED_CHANNEL_LINK_ID - Returns the detected link identifier
+ * for the given input jack+channel.
+ *
+ * The jack number should be specified in the lower 16 bits of the
+ * "display_mask" parameter, while the channel number should be specified in
+ * the upper 16 bits.
+ */
+
+#define NV_CTRL_GVI_DETECTED_CHANNEL_LINK_ID 315 /* R--I */
+#define NV_CTRL_GVI_LINK_ID_UNKNOWN 0xFFFF
+
+/*
+ * NV_CTRL_GVI_DETECTED_CHANNEL_SMPTE352_IDENTIFIER - Returns the 4-byte
+ * SMPTE 352 identifier from the given input jack+channel.
+ *
+ * The jack number should be specified in the lower 16 bits of the
+ * "display_mask" parameter, while the channel number should be specified in
+ * the upper 16 bits.
*/
-#define NV_CTRL_GVI_NUM_PORTS 307 /* R--I */
+#define NV_CTRL_GVI_DETECTED_CHANNEL_SMPTE352_IDENTIFIER 316 /* R--I */
+
+/*
+ * NV_CTRL_GVI_GLOBAL_IDENTIFIER - Returns a global identifier for the
+ * GVI device. This identifier can be used to relate GVI devices named
+ * in NV-CONTROL with those enumerated in OpenGL.
+ */
+
+#define NV_CTRL_GVI_GLOBAL_IDENTIFIER 317 /* R--I */
/*
* NV_CTRL_FRAMELOCK_SYNC_DELAY_RESOLUTION - Returns the number of nanoseconds
* that one unit of NV_CTRL_FRAMELOCK_SYNC_DELAY corresponds to.
*/
+
#define NV_CTRL_FRAMELOCK_SYNC_DELAY_RESOLUTION 318 /* R-- */
/*
@@ -2447,7 +2568,49 @@
#define NV_CTRL_GPU_POWER_MIZER_MODE_ADAPTIVE 0
#define NV_CTRL_GPU_POWER_MIZER_MODE_PREFER_MAXIMUM_PERFORMANCE 1
-#define NV_CTRL_LAST_ATTRIBUTE NV_CTRL_GPU_POWER_MIZER_MODE
+/*
+ * NV_CTRL_GVI_SYNC_OUTPUT_FORMAT - Returns the output sync signal
+ * from the GVI device.
+ */
+
+#define NV_CTRL_GVI_SYNC_OUTPUT_FORMAT 335 /* R--I */
+
+/*
+ * NV_CTRL_GVI_MAX_CHANNELS_PER_JACK - Returns the maximum
+ * supported number of (logical) channels within a single physical jack of
+ * a GVI device. For most SDI video formats, there is only one channel
+ * (channel 0). But for 3G video formats (as specified in SMPTE 425),
+ * as an example, there are two channels (channel 0 and channel 1) per
+ * physical jack.
+ */
+
+#define NV_CTRL_GVI_MAX_CHANNELS_PER_JACK 336 /* R--I */
+
+/*
+ * NV_CTRL_GVI_MAX_STREAMS - Returns the maximum number of streams
+ * that can be configured on the GVI device.
+ */
+
+#define NV_CTRL_GVI_MAX_STREAMS 337 /* R--I */
+
+/*
+ * NV_CTRL_GVI_NUM_CAPTURE_SURFACES - The GVI interface exposed through
+ * NV-CONTROL and the GLX_NV_video_input extension uses internal capture
+ * surfaces when frames are read from the GVI device. The
+ * NV_CTRL_GVI_NUM_CAPTURE_SURFACES can be used to query and assign the
+ * number of capture surfaces. This attribute is applied when
+ * glXBindVideoCaptureDeviceNV() is called by the application.
+ *
+ * A lower number of capture surfaces will mean less video memory is used,
+ * but can result in frames being dropped if the application cannot keep up
+ * with the capture device. A higher number will prevent frames from being
+ * dropped, making capture more reliable but will consume move video memory.
+ */
+#define NV_CTRL_GVI_NUM_CAPTURE_SURFACES 338 /* RW-I */
+
+#define NV_CTRL_LAST_ATTRIBUTE NV_CTRL_GVI_NUM_CAPTURE_SURFACES
+
+#define NV_CTRL_LAST_ATTRIBUTE NV_CTRL_GVI_NUM_CAPTURE_SURFACES
/**************************************************************************/
@@ -3305,7 +3468,7 @@
* a ModePool.
*
* The string input to BUILD_MODEPOOL may be NULL. If it is not NULL,
- * then it is interpreted as a double-semicolon ("::") separated list
+ * then it is interpreted as a double-colon ("::") separated list
* of "option=value" pairs, where the options and the syntax of their
* values are the X configuration options that impact the behavior of
* modePool construction; namely:
@@ -3328,8 +3491,66 @@
#define NV_CTRL_STRING_OPERATION_BUILD_MODEPOOL 3 /* DG */
+/*
+ * NV_CTRL_STRING_OPERATION_GVI_CONFIGURE_STREAMS - Configure the streams-
+ * to-jack+channel topology for a GVI (Graphics capture board).
+ *
+ * The string input to GVI_CONFIGURE_STREAMS may be NULL. If this is the
+ * case, then the current topology is returned.
+ *
+ * If the input string to GVI_CONFIGURE_STREAMS is not NULL, the string
+ * is interpreted as a semicolon (";") separated list of comma-separated
+ * lists of "option=value" pairs that define a stream's composition. The
+ * available options and their values are:
+ *
+ * "stream": Defines which stream this comma-separated list describes.
+ * Valid values are the integers between 0 and
+ * NV_CTRL_GVI_NUM_STREAMS-1 (inclusive).
+ *
+ * "linkN": Defines a jack+channel pair to use for the given link N.
+ * Valid options are the string "linkN", where N is an integer
+ * between 0 and NV_CTRL_GVI_MAX_LINKS_PER_STREAM-1 (inclusive).
+ * Valid values for these options are strings of the form
+ * "jackX" and/or "jackX.Y", where X is an integer between 0 and
+ * NV_CTRL_GVI_NUM_JACKS-1 (inclusive), and Y (optional) is an
+ * integer between 0 and NV_CTRL_GVI_MAX_CHANNELS_PER_JACK-1
+ * (inclusive).
+ *
+ * An example input string might look like:
+ *
+ * "stream=0, link0=jack0, link1=jack1; stream=1, link0=jack2.1"
+ *
+ * This example specifies two streams, stream 0 and stream 1. Stream 0
+ * is defined to capture link0 data from the first channel (channel 0) of
+ * BNC jack 0 and link1 data from the first channel of BNC jack 1. The
+ * second stream (Stream 1) is defined to capture link0 data from channel 1
+ * (second channel) of BNC jack 2.
+ *
+ * This example shows a possible configuration for capturing 3G input:
+ *
+ * "stream=0, link0=jack0.0, link1=jack0.1"
+ *
+ * Applications should query the following attributes to determine
+ * possible combinations:
+ *
+ * NV_CTRL_GVI_MAX_STREAMS
+ * NV_CTRL_GVI_MAX_LINKS_PER_STREAM
+ * NV_CTRL_GVI_NUM_JACKS
+ * NV_CTRL_GVI_MAX_CHANNELS_PER_JACK
+ *
+ * Note: A jack+channel pair can only be tied to one link/stream.
+ *
+ * Upon successful configuration or querying of this attribute, a string
+ * representing the current topology for all known streams on the device
+ * will be returned. On failure, NULL is returned.
+ */
+
+#define NV_CTRL_STRING_OPERATION_GVI_CONFIGURE_STREAMS 4 /* RW-I */
+
+
#define NV_CTRL_STRING_OPERATION_LAST_ATTRIBUTE \
- NV_CTRL_STRING_OPERATION_BUILD_MODEPOOL
+ NV_CTRL_STRING_OPERATION_GVI_CONFIGURE_STREAMS
+
diff --git a/src/libXNVCtrl/NVCtrlLib.h b/src/libXNVCtrl/NVCtrlLib.h
index bd09410..93132d1 100644
--- a/src/libXNVCtrl/NVCtrlLib.h
+++ b/src/libXNVCtrl/NVCtrlLib.h
@@ -166,6 +166,25 @@ Bool XNVCTRLSetAttributeAndGetStatus (
/*
+ * XNVCTRLSetTargetAttributeAndGetStatus -
+ *
+ * Same as XNVCTRLSetTargetAttribute().
+ * In addition, XNVCTRLSetTargetAttributeAndGetStatus() returns
+ * True if the operation succeeds, False otherwise.
+ *
+ */
+
+Bool XNVCTRLSetTargetAttributeAndGetStatus (
+ Display *dpy,
+ int target_type,
+ int target_id,
+ unsigned int display_mask,
+ unsigned int attribute,
+ int value
+);
+
+
+/*
* XNVCTRLQueryAttribute -
*
* Returns True if the attribute exists. Returns False otherwise.
@@ -290,6 +309,27 @@ Bool XNVCTRLSetStringAttribute (
/*
+ * XNVCTRLSetTargetStringAttribute -
+ *
+ * Returns True if the operation succeded. Returns False otherwise.
+ *
+ * Possible X errors:
+ * BadValue - The screen doesn't exist.
+ * BadMatch - The NVIDIA driver is not present on that screen.
+ * BadAlloc - Insufficient resources to fulfill the request.
+ */
+
+Bool XNVCTRLSetTargetStringAttribute (
+ Display *dpy,
+ int target_type,
+ int target_id,
+ unsigned int display_mask,
+ unsigned int attribute,
+ char *ptr
+);
+
+
+/*
* XNVCTRLQueryValidAttributeValues -
*
* Returns True if the attribute exists. Returns False otherwise. If
diff --git a/src/libXNVCtrl/nv_control.h b/src/libXNVCtrl/nv_control.h
index 795823f..95c850e 100644
--- a/src/libXNVCtrl/nv_control.h
+++ b/src/libXNVCtrl/nv_control.h
@@ -41,6 +41,8 @@
* 1.17 Added TARGET_BINARY_ATTRIBUTE_CHANGED_EVENT
* 1.18 Updated QueryTargetCount to return a count of 0, rather than
* BadMatch, if an unknown TargetType is specified
+ * 1.19 Added TargetType support for SetAttributeAndGetStatus and
+ * SetStringAttribute requests
*/
#ifndef __NVCONTROL_H
@@ -51,7 +53,7 @@
#define NV_CONTROL_NAME "NV-CONTROL"
#define NV_CONTROL_MAJOR 1
-#define NV_CONTROL_MINOR 18
+#define NV_CONTROL_MINOR 19
#define X_nvCtrlQueryExtension 0
#define X_nvCtrlIsNv 1
@@ -196,7 +198,8 @@ typedef struct {
CARD8 reqType;
CARD8 nvReqType;
CARD16 length B16;
- CARD32 screen B32;
+ CARD16 target_id B16;
+ CARD16 target_type B16;
CARD32 display_mask B32;
CARD32 attribute B32;
INT32 value B32;
@@ -247,7 +250,8 @@ typedef struct {
CARD8 reqType;
CARD8 nvReqType;
CARD16 length B16;
- CARD32 screen B32;
+ CARD16 target_id B16;
+ CARD16 target_type B16;
CARD32 display_mask B32;
CARD32 attribute B32;
CARD32 num_bytes B32;
diff --git a/src/parse.c b/src/parse.c
index 2ea372a..5c32460 100644
--- a/src/parse.c
+++ b/src/parse.c
@@ -189,7 +189,8 @@ AttributeTableEntry attributeTable[] = {
{ "GvoSyncSource", NV_CTRL_GVO_SYNC_SOURCE, I, "If the GVO sync mode is set to either GENLOCK or FRAMELOCK, this controls which sync source is used as the incoming sync signal (either Composite or SDI). If the GVO sync mode is FREE_RUNNING, this attribute has no effect." },
{ "GvioRequestedVideoFormat", NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT, I, "Specifies the requested output video format for a GVO device, or the requested capture format for a GVI device." },
{ "GvoOutputVideoFormat", NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT, I|A, "DEPRECATED: use \"GvioRequestedVideoFormat\" instead." },
- { "GvioDetectedVideoFormat", NV_CTRL_GVIO_DETECTED_VIDEO_FORMAT, I|N, "Returns the input video format detected by the GVO or GVI device." },
+ { "GviSyncOutputFormat", NV_CTRL_GVI_SYNC_OUTPUT_FORMAT, I|N, "Returns the output sync signal from the GVI device." },
+ { "GvioDetectedVideoFormat", NV_CTRL_GVIO_DETECTED_VIDEO_FORMAT, I|N, "Returns the input video format detected by the GVO or GVI device. For GVI devices, the jack+channel must be passed through via the display mask param where the jack number is in the lower 16 bits and the channel number is in the upper 16 bits." },
{ "GvoInputVideoFormat", NV_CTRL_GVIO_DETECTED_VIDEO_FORMAT, I|N|A, "DEPRECATED: use \"GvioDetectedVideoFormat\" instead." },
{ "GvoDataFormat", NV_CTRL_GVO_DATA_FORMAT, I, "Configures how the data in the source (either the X screen or the GLX pbuffer) is interpreted and displayed by the GVO device." },
{ "GvoDisplayXScreen", NV_CTRL_GVO_DISPLAY_X_SCREEN, I|N, "Enable/disable GVO output of the X screen (in Clone mode)." },
@@ -220,7 +221,20 @@ AttributeTableEntry attributeTable[] = {
{ "GvoFullRangeColor", NV_CTRL_GVO_FULL_RANGE_COLOR, I, "Allow full range color data [4-1019]. If disabled, color data is clamped to [64-940]." },
{ "IsGvoDisplay", NV_CTRL_IS_GVO_DISPLAY, N|D, "Returns whether or not the given display device is driven by the GVO device." },
{ "GvoEnableRGBData", NV_CTRL_GVO_ENABLE_RGB_DATA, I, "Indicates that RGB data is being sent via a PASSTHU mode." },
- { "GviNumPorts", NV_CTRL_GVI_NUM_PORTS, N|A, "Returns the number of ports on a GVI device." },
+ { "GviNumJacks", NV_CTRL_GVI_NUM_JACKS, I|N, "Returns the number of input (BNC) jacks on a GVI device that can read video streams." },
+ { "GviMaxLinksPerStream", NV_CTRL_GVI_MAX_LINKS_PER_STREAM, I|N, "Returns the maximum number of links that can make up a stream." },
+ { "GviDetectedChannelBitsPerComponent", NV_CTRL_GVI_DETECTED_CHANNEL_BITS_PER_COMPONENT, I|N, "Returns the detected bits per component on the given jack+channel of the GVI device. The jack+channel must be passed through via the display mask param where the jack number is in the lower 16 bits and the channel number is in the upper 16 bits." },
+ { "GviRequestedStreamBitsPerComponent", NV_CTRL_GVI_REQUESTED_STREAM_BITS_PER_COMPONENT, I, "Indicates the number of bits per component for a capture stream." },
+ { "GviDetectedChannelComponentSampling", NV_CTRL_GVI_DETECTED_CHANNEL_COMPONENT_SAMPLING, I|N, "Returns the detected sampling format on the given jack+channel of the GVI device. The jack+channel must be passed through via the display mask param where the jack number is in the lower 16 bits and the channel number is in the upper 16 bits." },
+ { "GviRequestedStreamComponentSampling", NV_CTRL_GVI_REQUESTED_STREAM_COMPONENT_SAMPLING, I, "Indicates the sampling format for a capture stream." },
+ { "GviRequestedStreamChromaExpand", NV_CTRL_GVI_REQUESTED_STREAM_CHROMA_EXPAND, I, "Indicates whether 4:2:2 -> 4:4:4 chroma expansion is enabled for the capture stream." },
+ { "GviDetectedChannelColorSpace", NV_CTRL_GVI_DETECTED_CHANNEL_COLOR_SPACE, I|N, "Returns the detected color space (RGB, YCRCB, etc) for the given jack+channel of the GVI device. The jack+channel must be passed through via the display mask param where the jack number is in the lower 16 bits and the channel number is in the upper 16 bits." },
+ { "GviDetectedChannelLinkID", NV_CTRL_GVI_DETECTED_CHANNEL_LINK_ID, I|N, "Returns the detected link identifier for the given jack+channel of the GVI device. The jack+channel must be passed through via the display mask param where the jack number is in the lower 16 bits and the channel number is in the upper 16 bits." },
+ { "GviDetectedChannelSMPTE352Identifier", NV_CTRL_GVI_DETECTED_CHANNEL_SMPTE352_IDENTIFIER, I|N, "Returns the detected 4-byte SMPTE 352 identifier from the given jack+channel of the GVI device. The jack+channel must be passed through via the display mask param where the jack number is in the lower 16 bits and the channel number is in the upper 16 bits." },
+ { "GviGlobalIdentifier", NV_CTRL_GVI_GLOBAL_IDENTIFIER, I|N, "Returns the global identifier for the given NV-CONTROL GVI device." },
+ { "GviMaxChannelsPerJack", NV_CTRL_GVI_MAX_CHANNELS_PER_JACK, I|N, "Returns the maximum supported number of channels per single jack on a GVI device." },
+ { "GviMaxStreams", NV_CTRL_GVI_MAX_STREAMS, I|N, "Returns the maximum supported number of streams that can be configured on a GVI device." },
+ { "GviNumCaptureSurfaces", NV_CTRL_GVI_NUM_CAPTURE_SURFACES, I|N, "Controls the number of capture buffers for storing incoming video from the GVI device." },
/* Display */
{ "Brightness", BRIGHTNESS_VALUE|ALL_CHANNELS, N|C|G, "Controls the overall brightness of the display." },
@@ -296,7 +310,7 @@ AttributeTableEntry attributeTable[] = {
* about.
*/
-#if NV_CTRL_LAST_ATTRIBUTE != NV_CTRL_GPU_POWER_MIZER_MODE
+#if NV_CTRL_LAST_ATTRIBUTE != NV_CTRL_GVI_NUM_CAPTURE_SURFACES
#warning "Have you forgotten to add a new integer attribute to attributeTable?"
#endif