From 7d0f7518c2235a9dc783029971259ddaada2db20 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Thu, 23 Apr 2009 08:42:38 -0700 Subject: [PATCH 01/89] Fix byte swapping of XF86VidMode{Get,Set}GammaRamp Fixes OpenSolaris Bug 8315: Xorg segfaults when screensaver fades in cross-endian xdmcp session Signed-off-by: Alan Coopersmith --- hw/xfree86/dixmods/extmod/xf86vmode.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/hw/xfree86/dixmods/extmod/xf86vmode.c b/hw/xfree86/dixmods/extmod/xf86vmode.c index ea8089e94..10b9ed370 100644 --- a/hw/xfree86/dixmods/extmod/xf86vmode.c +++ b/hw/xfree86/dixmods/extmod/xf86vmode.c @@ -1541,6 +1541,7 @@ ProcXF86VidModeGetGammaRamp(ClientPtr client) { CARD16 *ramp = NULL; int n, length, i; + size_t ramplen; xXF86VidModeGetGammaRampReply rep; REQUEST(xXF86VidModeGetGammaRampReq); @@ -1555,7 +1556,8 @@ ProcXF86VidModeGetGammaRamp(ClientPtr client) length = (stuff->size + 1) & ~1; if(stuff->size) { - if(!(ramp = xalloc(length * 3 * sizeof(CARD16)))) + ramplen = length * 3 * sizeof(CARD16); + if (!(ramp = xalloc(ramplen))) return BadAlloc; if (!VidModeGetGammaRamp(stuff->screen, stuff->size, @@ -1573,13 +1575,12 @@ ProcXF86VidModeGetGammaRamp(ClientPtr client) swaps(&rep.sequenceNumber, n); swapl(&rep.length, n); swaps(&rep.size, n); - for(i = 0; i < length * 3; i++) - swaps(&ramp[i],n); + SwapShorts(ramp, length * 3); } WriteToClient(client, sizeof(xXF86VidModeGetGammaRampReply), (char *)&rep); if(stuff->size) { - WriteToClient(client, rep.length << 2, (char*)ramp); + WriteToClient(client, ramplen, (char*)ramp); xfree(ramp); } @@ -2060,7 +2061,6 @@ SProcXF86VidModeGetGamma(ClientPtr client) static int SProcXF86VidModeSetGammaRamp(ClientPtr client) { - CARD16 *ramp; int length, n; REQUEST(xXF86VidModeSetGammaRampReq); swaps(&stuff->length, n); @@ -2069,11 +2069,7 @@ SProcXF86VidModeSetGammaRamp(ClientPtr client) swaps(&stuff->screen, n); length = ((stuff->size + 1) & ~1) * 6; REQUEST_FIXED_SIZE(xXF86VidModeSetGammaRampReq, length); - ramp = (CARD16*)&stuff[1]; - while(length--) { - swaps(ramp, n); - ramp++; - } + SwapRestS(stuff); return ProcXF86VidModeSetGammaRamp(client); } From 0c467b1f990f156a34d5ef117bd825df6b633114 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 24 Apr 2009 00:05:28 -0700 Subject: [PATCH 02/89] Add casts to generated entries in sdksyms.c to silence type mismatch warnings Signed-off-by: Alan Coopersmith --- hw/xfree86/loader/sdksyms.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/loader/sdksyms.sh b/hw/xfree86/loader/sdksyms.sh index be0b0ee6f..b320661c7 100755 --- a/hw/xfree86/loader/sdksyms.sh +++ b/hw/xfree86/loader/sdksyms.sh @@ -399,7 +399,7 @@ BEGIN { sub(/[^a-zA-Z0-9_].*/, "", symbol); #print; - printf(" &%s,\n", symbol); + printf(" (void *) &%s,\n", symbol); } } From 64b7f96dca23d2b33e0b8a8785d628d9a2f50e7b Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 24 Apr 2009 00:14:12 -0700 Subject: [PATCH 03/89] Add SIGIO/SIGPOLL support for Solaris Signed-off-by: Alan Coopersmith --- configure.ac | 2 +- hw/xfree86/os-support/shared/sigio.c | 42 +++++++++++++++++++---- hw/xfree86/os-support/solaris/Makefile.am | 3 +- include/xorg-config.h.in | 3 ++ 4 files changed, 42 insertions(+), 8 deletions(-) diff --git a/configure.ac b/configure.ac index ef5062705..f0317bd76 100644 --- a/configure.ac +++ b/configure.ac @@ -113,7 +113,7 @@ AM_CONDITIONAL(XSERVER_DTRACE, [test "x$WDTRACE" != "xno"]) AC_HEADER_DIRENT AC_HEADER_STDC -AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h dlfcn.h]) +AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h dlfcn.h stropts.h]) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST diff --git a/hw/xfree86/os-support/shared/sigio.c b/hw/xfree86/os-support/shared/sigio.c index 54c02cc8e..256578289 100644 --- a/hw/xfree86/os-support/shared/sigio.c +++ b/hw/xfree86/os-support/shared/sigio.c @@ -63,6 +63,10 @@ # include "xf86_OSlib.h" # include "inputstr.h" +#ifdef HAVE_STROPTS_H +# include +#endif + /* * Linux libc5 defines FASYNC, but not O_ASYNC. Don't know if it is * functional or not. @@ -139,6 +143,7 @@ xf86InstallSIGIOHandler(int fd, void (*f)(int, void *), void *closure) struct sigaction osa; int i; int blocked; + int installed = FALSE; for (i = 0; i < MAX_FUNCS; i++) { @@ -147,15 +152,30 @@ xf86InstallSIGIOHandler(int fd, void (*f)(int, void *), void *closure) if (xf86IsPipe (fd)) return 0; blocked = xf86BlockSIGIO(); +#ifdef O_ASYNC if (fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_ASYNC) == -1) { - xf86Msg(X_WARNING, "fcntl(%d, O_ASYNC): %s\n", + xf86Msg(X_WARNING, "fcntl(%d, O_ASYNC): %s\n", fd, strerror(errno)); - xf86UnblockSIGIO(blocked); - return 0; + } else { + if (fcntl(fd, F_SETOWN, getpid()) != -1) { + xf86Msg(X_WARNING, "fcntl(%d, F_SETOWN): %s\n", + fd, strerror(errno)); + } else { + installed = TRUE; + } } - if (fcntl(fd, F_SETOWN, getpid()) == -1) { - xf86Msg(X_WARNING, "fcntl(%d, F_SETOWN): %s\n", - fd, strerror(errno)); +#endif +#ifdef I_SETSIG /* System V Streams - used on Solaris for input devices */ + if (!installed && isastream(fd)) { + if (ioctl(fd, I_SETSIG, S_INPUT | S_ERROR | S_HANGUP) == -1) { + xf86Msg(X_WARNING, "fcntl(%d, I_SETSIG): %s\n", + fd, strerror(errno)); + } else { + installed = TRUE; + } + } +#endif + if (!installed) { xf86UnblockSIGIO(blocked); return 0; } @@ -221,7 +241,17 @@ xf86RemoveSIGIOHandler(int fd) } if (ret) { +#ifdef O_ASYNC fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) & ~O_ASYNC); +#endif +#ifdef I_SETSIG + if (isastream(fd)) { + if (ioctl(fd, I_SETSIG, 0) == -1) { + xf86Msg(X_WARNING, "fcntl(%d, I_SETSIG, 0): %s\n", + fd, strerror(errno)); + } + } +#endif xf86SigIOMax = max; xf86SigIOMaxFd = maxfd; if (!max) diff --git a/hw/xfree86/os-support/solaris/Makefile.am b/hw/xfree86/os-support/solaris/Makefile.am index a4ef67b91..bcb987490 100644 --- a/hw/xfree86/os-support/solaris/Makefile.am +++ b/hw/xfree86/os-support/solaris/Makefile.am @@ -21,7 +21,8 @@ noinst_LTLIBRARIES = libsolaris.la libsolaris_la_SOURCES = sun_init.c \ sun_vid.c sun_bell.c $(AGP_SRC) sun_apm.c \ $(srcdir)/../shared/kmod_noop.c \ - $(srcdir)/../shared/posix_tty.c $(srcdir)/../shared/sigiostubs.c \ + $(srcdir)/../shared/posix_tty.c \ + $(srcdir)/../shared/sigio.c \ $(srcdir)/../shared/stdResource.c \ $(srcdir)/../shared/vidmem.c \ $(VTSW_SRC) diff --git a/include/xorg-config.h.in b/include/xorg-config.h.in index f9b77d03d..ebeb44a37 100644 --- a/include/xorg-config.h.in +++ b/include/xorg-config.h.in @@ -54,6 +54,9 @@ /* Solaris 8 or later? */ #undef __SOL8__ +/* Define to 1 if you have the header file. */ +#undef HAVE_STROPTS_H + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_KD_H From a1c98f7fa9aa0cd5075ef2054c5d2be4d1e740f0 Mon Sep 17 00:00:00 2001 From: Joel Bosveld Date: Fri, 24 Apr 2009 10:12:26 -0700 Subject: [PATCH 04/89] Correct fcntl(F_SETOWN) error check in non-Solaris sigio code commit 64b7f96dca accidentally inverted the comparison, could result in crashes on some systems later on. Signed-off-by: Alan Coopersmith --- hw/xfree86/os-support/shared/sigio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/os-support/shared/sigio.c b/hw/xfree86/os-support/shared/sigio.c index 256578289..5ba0b7e1c 100644 --- a/hw/xfree86/os-support/shared/sigio.c +++ b/hw/xfree86/os-support/shared/sigio.c @@ -157,7 +157,7 @@ xf86InstallSIGIOHandler(int fd, void (*f)(int, void *), void *closure) xf86Msg(X_WARNING, "fcntl(%d, O_ASYNC): %s\n", fd, strerror(errno)); } else { - if (fcntl(fd, F_SETOWN, getpid()) != -1) { + if (fcntl(fd, F_SETOWN, getpid()) == -1) { xf86Msg(X_WARNING, "fcntl(%d, F_SETOWN): %s\n", fd, strerror(errno)); } else { From 28ddfc88d8d547941c7f4713db527a3c2f9ec35a Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Fri, 24 Apr 2009 12:09:21 -0700 Subject: [PATCH 05/89] DRI2: Add interface for drivers to query DRI2 extension version Signed-off-by: Ian Romanick --- hw/xfree86/dri2/dri2.c | 9 +++++++++ hw/xfree86/dri2/dri2.h | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 0b52a0f8c..80de18f86 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -380,3 +380,12 @@ static XF86ModuleVersionInfo DRI2VersRec = _X_EXPORT XF86ModuleData dri2ModuleData = { &DRI2VersRec, DRI2Setup, NULL }; +void +DRI2Version(int *major, int *minor) +{ + if (major != NULL) + *major = DRI2VersRec.majorversion; + + if (minor != NULL) + *minor = DRI2VersRec.minorversion; +} diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h index 847e57c68..9d7d6dc80 100644 --- a/hw/xfree86/dri2/dri2.h +++ b/hw/xfree86/dri2/dri2.h @@ -100,4 +100,22 @@ extern _X_EXPORT int DRI2CopyRegion(DrawablePtr pDraw, unsigned int dest, unsigned int src); +/** + * Determine the major and minor version of the DRI2 extension. + * + * Provides a mechanism to other modules (e.g., 2D drivers) to determine the + * version of the DRI2 extension. While it is possible to peek directly at + * the \c XF86ModuleData from a layered module, such a module will fail to + * load (due to an unresolved symbol) if the DRI2 extension is not loaded. + * + * \param major Location to store the major verion of the DRI2 extension + * \param minor Location to store the minor verion of the DRI2 extension + * + * \note + * This interface was added some time after the initial release of the DRI2 + * module. Layered modules that wish to use this interface must first test + * its existance by calling \c xf86LoaderCheckSymbol. + */ +extern _X_EXPORT void DRI2Version(int *major, int *minor); + #endif From ff6c7764c2909e4126403b7211faa6c58556b341 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Fri, 24 Apr 2009 12:49:19 -0700 Subject: [PATCH 06/89] DRI2: Implement protocol for DRI2GetBuffersWithFormat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change implements the protocol for DRI2GetBuffersWithFormat, but the bulk of the differences are the changes to the extension / driver interface to make this function work. The old CreateBuffers and DeleteBuffers routines are replaced with CreateBuffer and DeleteBuffer (both singular). This allows drivers to allocate buffers for a drawable one at a time. As a result, 3D drivers can now allocate the (fake) front-buffer for a window only when it is needed. Since 3D drivers only ask for the front-buffer on demand, the real front-buffer is always created. This allows CopyRegion impelemenations of SwapBuffers to continue working. As with previous version of this code, if the client asks for the front-buffer for a window, we instead give it the fake front-buffer. Signed-off-by: Ian Romanick Reviewed-by: Kristian Høgsberg --- configure.ac | 2 +- glx/glxdri2.c | 59 +++++++++-- hw/xfree86/dri2/dri2.c | 199 +++++++++++++++++++++++++++----------- hw/xfree86/dri2/dri2.h | 28 +++++- hw/xfree86/dri2/dri2ext.c | 88 ++++++++++++----- 5 files changed, 286 insertions(+), 90 deletions(-) diff --git a/configure.ac b/configure.ac index f0317bd76..9eadabced 100644 --- a/configure.ac +++ b/configure.ac @@ -886,7 +886,7 @@ if test "x$DRI" = xyes; then AC_SUBST(DRIPROTO_CFLAGS) fi -PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= 1.99.3], +PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= 2.1], [HAVE_DRI2PROTO=yes], [HAVE_DRI2PROTO=no]) case "$DRI2,$HAVE_DRI2PROTO" in yes,no) diff --git a/glx/glxdri2.c b/glx/glxdri2.c index 612defb3f..529b2df10 100644 --- a/glx/glxdri2.c +++ b/glx/glxdri2.c @@ -406,7 +406,7 @@ dri2GetBuffers(__DRIdrawable *driDrawable, int *out_count, void *loaderPrivate) { __GLXDRIdrawable *private = loaderPrivate; - DRI2BufferPtr buffers; + DRI2BufferPtr *buffers; int i; int j; @@ -427,15 +427,59 @@ dri2GetBuffers(__DRIdrawable *driDrawable, /* Do not send the real front buffer of a window to the client. */ if ((private->base.pDraw->type == DRAWABLE_WINDOW) - && (buffers[i].attachment == DRI2BufferFrontLeft)) { + && (buffers[i]->attachment == DRI2BufferFrontLeft)) { continue; } - private->buffers[j].attachment = buffers[i].attachment; - private->buffers[j].name = buffers[i].name; - private->buffers[j].pitch = buffers[i].pitch; - private->buffers[j].cpp = buffers[i].cpp; - private->buffers[j].flags = buffers[i].flags; + private->buffers[j].attachment = buffers[i]->attachment; + private->buffers[j].name = buffers[i]->name; + private->buffers[j].pitch = buffers[i]->pitch; + private->buffers[j].cpp = buffers[i]->cpp; + private->buffers[j].flags = buffers[i]->flags; + j++; + } + + *out_count = j; + return private->buffers; +} + +static __DRIbuffer * +dri2GetBuffersWithFormat(__DRIdrawable *driDrawable, + int *width, int *height, + unsigned int *attachments, int count, + int *out_count, void *loaderPrivate) +{ + __GLXDRIdrawable *private = loaderPrivate; + DRI2BufferPtr *buffers; + int i; + int j = 0; + + buffers = DRI2GetBuffersWithFormat(private->base.pDraw, + width, height, attachments, count, + out_count); + if (*out_count > MAX_DRAWABLE_BUFFERS) { + *out_count = 0; + return NULL; + } + + private->width = *width; + private->height = *height; + + /* This assumes the DRI2 buffer attachment tokens matches the + * __DRIbuffer tokens. */ + for (i = 0; i < *out_count; i++) { + /* Do not send the real front buffer of a window to the client. + */ + if ((private->base.pDraw->type == DRAWABLE_WINDOW) + && (buffers[i]->attachment == DRI2BufferFrontLeft)) { + continue; + } + + private->buffers[j].attachment = buffers[i]->attachment; + private->buffers[j].name = buffers[i]->name; + private->buffers[j].pitch = buffers[i]->pitch; + private->buffers[j].cpp = buffers[i]->cpp; + private->buffers[j].flags = buffers[i]->flags; j++; } @@ -454,6 +498,7 @@ static const __DRIdri2LoaderExtension loaderExtension = { { __DRI_DRI2_LOADER, __DRI_DRI2_LOADER_VERSION }, dri2GetBuffers, dri2FlushFrontBuffer, + dri2GetBuffersWithFormat, }; static const __DRIextension *loader_extensions[] = { diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 80de18f86..9ded048eb 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -53,7 +53,7 @@ typedef struct _DRI2Drawable { unsigned int refCount; int width; int height; - DRI2BufferPtr buffers; + DRI2BufferPtr *buffers; int bufferCount; unsigned int pendingSequence; } DRI2DrawableRec, *DRI2DrawablePtr; @@ -63,8 +63,8 @@ typedef struct _DRI2Screen { const char *deviceName; int fd; unsigned int lastSequence; - DRI2CreateBuffersProcPtr CreateBuffers; - DRI2DestroyBuffersProcPtr DestroyBuffers; + DRI2CreateBufferProcPtr CreateBuffer; + DRI2DestroyBufferProcPtr DestroyBuffer; DRI2CopyRegionProcPtr CopyRegion; HandleExposuresProcPtr HandleExposures; @@ -132,71 +132,130 @@ DRI2CreateDrawable(DrawablePtr pDraw) return Success; } -DRI2BufferPtr -DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height, - unsigned int *attachments, int count, int *out_count) +static int +find_attachment(DRI2BufferPtr *buffer_list, int count, unsigned attachment) +{ + int i; + + if (buffer_list == NULL) { + return -1; + } + + for (i = 0; i < count; i++) { + if ((buffer_list[i] != NULL) + && (buffer_list[i]->attachment == attachment)) { + return i; + } + } + + return -1; +} + +static DRI2BufferPtr +allocate_or_reuse_buffer(DrawablePtr pDraw, DRI2ScreenPtr ds, + DRI2DrawablePtr pPriv, + unsigned int attachment, unsigned int format, + int dimensions_match) +{ + DRI2BufferPtr buffer; + int old_buf; + + old_buf = find_attachment(pPriv->buffers, pPriv->bufferCount, attachment); + + if ((old_buf < 0) + || !dimensions_match + || (pPriv->buffers[old_buf]->format != format)) { + buffer = (*ds->CreateBuffer)(pDraw, attachment, format); + } else { + buffer = pPriv->buffers[old_buf]; + pPriv->buffers[old_buf] = NULL; + } + + return buffer; +} + +static DRI2BufferPtr * +do_get_buffers(DrawablePtr pDraw, int *width, int *height, + unsigned int *attachments, int count, int *out_count, + int has_format) { DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen); DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw); - DRI2BufferPtr buffers; - unsigned int temp_buf[32]; - unsigned int *temp = temp_buf; + DRI2BufferPtr *buffers; + int need_real_front = 0; + int need_fake_front = 0; int have_fake_front = 0; + int front_format = 0; + const int dimensions_match = (pDraw->width == pPriv->width) + && (pDraw->height == pPriv->height); + int i; - /* If the drawable is a window and the front-buffer is requested, silently - * add the fake front-buffer to the list of requested attachments. The - * counting logic in the loop accounts for the case where the client - * requests both the fake and real front-buffer. - */ - if (pDraw->type == DRAWABLE_WINDOW) { - int need_fake_front = 0; - int i; + buffers = xalloc((count + 1) * sizeof(buffers[0])); - if ((count + 1) > 32) { - temp = xalloc((count + 1) * sizeof(temp[0])); - } + for (i = 0; i < count; i++) { + const unsigned attachment = *(attachments++); + const unsigned format = (has_format) ? *(attachments++) : 0; - for (i = 0; i < count; i++) { - if (attachments[i] == DRI2BufferFrontLeft) { - need_fake_front++; + buffers[i] = allocate_or_reuse_buffer(pDraw, ds, pPriv, attachment, + format, dimensions_match); + + + /* If the drawable is a window and the front-buffer is requested, + * silently add the fake front-buffer to the list of requested + * attachments. The counting logic in the loop accounts for the case + * where the client requests both the fake and real front-buffer. + */ + if (pDraw->type == DRAWABLE_WINDOW) { + if (attachment == DRI2BufferBackLeft) { + need_real_front++; + front_format = format; } - if (attachments[i] == DRI2BufferFakeFrontLeft) { + if (attachment == DRI2BufferFrontLeft) { + need_real_front--; + need_fake_front++; + front_format = format; + } + + if (attachment == DRI2BufferFakeFrontLeft) { need_fake_front--; have_fake_front = 1; } - - temp[i] = attachments[i]; - } - - if (need_fake_front > 0) { - temp[i] = DRI2BufferFakeFrontLeft; - count++; - have_fake_front = 1; - attachments = temp; } } - - if (pPriv->buffers == NULL || - pDraw->width != pPriv->width || pDraw->height != pPriv->height) - { - buffers = (*ds->CreateBuffers)(pDraw, attachments, count); - (*ds->DestroyBuffers)(pDraw, pPriv->buffers, pPriv->bufferCount); - pPriv->buffers = buffers; - pPriv->bufferCount = count; - pPriv->width = pDraw->width; - pPriv->height = pDraw->height; + if (need_real_front > 0) { + buffers[i++] = allocate_or_reuse_buffer(pDraw, ds, pPriv, + DRI2BufferFrontLeft, + front_format, dimensions_match); } - if (temp != temp_buf) { - xfree(temp); + if (need_fake_front > 0) { + buffers[i++] = allocate_or_reuse_buffer(pDraw, ds, pPriv, + DRI2BufferFakeFrontLeft, + front_format, dimensions_match); + have_fake_front = 1; } + *out_count = i; + + + if (pPriv->buffers != NULL) { + for (i = 0; i < pPriv->bufferCount; i++) { + if (pPriv->buffers[i] != NULL) { + (*ds->DestroyBuffer)(pDraw, pPriv->buffers[i]); + } + } + + xfree(pPriv->buffers); + } + + + pPriv->buffers = buffers; + pPriv->bufferCount = *out_count; *width = pPriv->width; *height = pPriv->height; - *out_count = pPriv->bufferCount; /* If the client is getting a fake front-buffer, pre-fill it with the @@ -220,6 +279,22 @@ DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height, return pPriv->buffers; } +DRI2BufferPtr * +DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height, + unsigned int *attachments, int count, int *out_count) +{ + return do_get_buffers(pDraw, width, height, attachments, count, + out_count, FALSE); +} + +DRI2BufferPtr * +DRI2GetBuffersWithFormat(DrawablePtr pDraw, int *width, int *height, + unsigned int *attachments, int count, int *out_count) +{ + return do_get_buffers(pDraw, width, height, attachments, count, + out_count, TRUE); +} + int DRI2CopyRegion(DrawablePtr pDraw, RegionPtr pRegion, unsigned int dest, unsigned int src) @@ -237,10 +312,10 @@ DRI2CopyRegion(DrawablePtr pDraw, RegionPtr pRegion, pSrcBuffer = NULL; for (i = 0; i < pPriv->bufferCount; i++) { - if (pPriv->buffers[i].attachment == dest) - pDestBuffer = &pPriv->buffers[i]; - if (pPriv->buffers[i].attachment == src) - pSrcBuffer = &pPriv->buffers[i]; + if (pPriv->buffers[i]->attachment == dest) + pDestBuffer = pPriv->buffers[i]; + if (pPriv->buffers[i]->attachment == src) + pSrcBuffer = pPriv->buffers[i]; } if (pSrcBuffer == NULL || pDestBuffer == NULL) return BadValue; @@ -266,7 +341,16 @@ DRI2DestroyDrawable(DrawablePtr pDraw) if (pPriv->refCount > 0) return; - (*ds->DestroyBuffers)(pDraw, pPriv->buffers, pPriv->bufferCount); + if (pPriv->buffers != NULL) { + int i; + + for (i = 0; i < pPriv->bufferCount; i++) { + (*ds->DestroyBuffer)(pDraw, pPriv->buffers[i]); + } + + xfree(pPriv->buffers); + } + xfree(pPriv); if (pDraw->type == DRAWABLE_WINDOW) @@ -320,11 +404,18 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info) if (!ds) return FALSE; + if ((info->version < 2) + || (info->CreateBuffer == NULL) + || (info->DestroyBuffer == NULL)) { + return FALSE; + } + + ds->fd = info->fd; ds->driverName = info->driverName; ds->deviceName = info->deviceName; - ds->CreateBuffers = info->CreateBuffers; - ds->DestroyBuffers = info->DestroyBuffers; + ds->CreateBuffer = info->CreateBuffer; + ds->DestroyBuffer = info->DestroyBuffer; ds->CopyRegion = info->CopyRegion; dixSetPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey, ds); @@ -371,7 +462,7 @@ static XF86ModuleVersionInfo DRI2VersRec = MODINFOSTRING1, MODINFOSTRING2, XORG_VERSION_CURRENT, - 1, 0, 0, + 1, 1, 0, ABI_CLASS_EXTENSION, ABI_EXTENSION_VERSION, MOD_CLASS_NONE, diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h index 9d7d6dc80..b3d02a99e 100644 --- a/hw/xfree86/dri2/dri2.h +++ b/hw/xfree86/dri2/dri2.h @@ -41,6 +41,7 @@ typedef struct { unsigned int pitch; unsigned int cpp; unsigned int flags; + unsigned int format; void *driverPrivate; } DRI2BufferRec, *DRI2BufferPtr; @@ -58,8 +59,19 @@ typedef void (*DRI2CopyRegionProcPtr)(DrawablePtr pDraw, typedef void (*DRI2WaitProcPtr)(WindowPtr pWin, unsigned int sequence); +typedef DRI2BufferPtr (*DRI2CreateBufferProcPtr)(DrawablePtr pDraw, + unsigned int attachment, + unsigned int format); +typedef void (*DRI2DestroyBufferProcPtr)(DrawablePtr pDraw, + DRI2BufferPtr buffer); + +/** + * Version of the DRI2InfoRec structure defined in this header + */ +#define DRI2INFOREC_VERSION 2 + typedef struct { - unsigned int version; /* Version of this struct */ + unsigned int version; /**< Version of this struct */ int fd; const char *driverName; const char *deviceName; @@ -69,6 +81,14 @@ typedef struct { DRI2CopyRegionProcPtr CopyRegion; DRI2WaitProcPtr Wait; + /** + * \name Fields added in version 2 of the structure. + */ + /*@{*/ + DRI2CreateBufferProcPtr CreateBuffer; + DRI2DestroyBufferProcPtr DestroyBuffer; + /*@}*/ + } DRI2InfoRec, *DRI2InfoPtr; extern _X_EXPORT Bool DRI2ScreenInit(ScreenPtr pScreen, @@ -88,7 +108,7 @@ extern _X_EXPORT int DRI2CreateDrawable(DrawablePtr pDraw); extern _X_EXPORT void DRI2DestroyDrawable(DrawablePtr pDraw); -extern _X_EXPORT DRI2BufferPtr DRI2GetBuffers(DrawablePtr pDraw, +extern _X_EXPORT DRI2BufferPtr *DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height, unsigned int *attachments, @@ -118,4 +138,8 @@ extern _X_EXPORT int DRI2CopyRegion(DrawablePtr pDraw, */ extern _X_EXPORT void DRI2Version(int *major, int *minor); +extern _X_EXPORT DRI2BufferPtr *DRI2GetBuffersWithFormat(DrawablePtr pDraw, + int *width, int *height, unsigned int *attachments, int count, + int *out_count); + #endif diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c index 23f312149..029dce84e 100644 --- a/hw/xfree86/dri2/dri2ext.c +++ b/hw/xfree86/dri2/dri2ext.c @@ -80,7 +80,7 @@ ProcDRI2QueryVersion(ClientPtr client) rep.length = 0; rep.sequenceNumber = client->sequence; rep.majorVersion = 1; - rep.minorVersion = 0; + rep.minorVersion = 1; if (client->swapped) { swaps(&rep.sequenceNumber, n); @@ -192,32 +192,20 @@ ProcDRI2DestroyDrawable(ClientPtr client) return client->noClientException; } -static int -ProcDRI2GetBuffers(ClientPtr client) + +static void +send_buffers_reply(ClientPtr client, DrawablePtr pDrawable, + DRI2BufferPtr *buffers, int count, int width, int height) { - REQUEST(xDRI2GetBuffersReq); xDRI2GetBuffersReply rep; - DrawablePtr pDrawable; - DRI2BufferPtr buffers; - int i, status, width, height, count; - unsigned int *attachments; - xDRI2Buffer buffer; - int skip; + int skip = 0; + int i; - REQUEST_FIXED_SIZE(xDRI2GetBuffersReq, stuff->count * 4); - if (!validDrawable(client, stuff->drawable, &pDrawable, &status)) - return status; - - attachments = (unsigned int *) &stuff[1]; - buffers = DRI2GetBuffers(pDrawable, &width, &height, - attachments, stuff->count, &count); - - skip = 0; if (pDrawable->type == DRAWABLE_WINDOW) { for (i = 0; i < count; i++) { /* Do not send the real front buffer of a window to the client. */ - if (buffers[i].attachment == DRI2BufferFrontLeft) { + if (buffers[i]->attachment == DRI2BufferFrontLeft) { skip++; continue; } @@ -233,20 +221,66 @@ ProcDRI2GetBuffers(ClientPtr client) WriteToClient(client, sizeof(xDRI2GetBuffersReply), &rep); for (i = 0; i < count; i++) { + xDRI2Buffer buffer; + /* Do not send the real front buffer of a window to the client. */ if ((pDrawable->type == DRAWABLE_WINDOW) - && (buffers[i].attachment == DRI2BufferFrontLeft)) { + && (buffers[i]->attachment == DRI2BufferFrontLeft)) { continue; } - buffer.attachment = buffers[i].attachment; - buffer.name = buffers[i].name; - buffer.pitch = buffers[i].pitch; - buffer.cpp = buffers[i].cpp; - buffer.flags = buffers[i].flags; + buffer.attachment = buffers[i]->attachment; + buffer.name = buffers[i]->name; + buffer.pitch = buffers[i]->pitch; + buffer.cpp = buffers[i]->cpp; + buffer.flags = buffers[i]->flags; WriteToClient(client, sizeof(xDRI2Buffer), &buffer); } +} + + +static int +ProcDRI2GetBuffers(ClientPtr client) +{ + REQUEST(xDRI2GetBuffersReq); + DrawablePtr pDrawable; + DRI2BufferPtr *buffers; + int status, width, height, count; + unsigned int *attachments; + + REQUEST_FIXED_SIZE(xDRI2GetBuffersReq, stuff->count * 4); + if (!validDrawable(client, stuff->drawable, &pDrawable, &status)) + return status; + + attachments = (unsigned int *) &stuff[1]; + buffers = DRI2GetBuffers(pDrawable, &width, &height, + attachments, stuff->count, &count); + + + send_buffers_reply(client, pDrawable, buffers, count, width, height); + + return client->noClientException; +} + +static int +ProcDRI2GetBuffersWithFormat(ClientPtr client) +{ + REQUEST(xDRI2GetBuffersReq); + DrawablePtr pDrawable; + DRI2BufferPtr *buffers; + int status, width, height, count; + unsigned int *attachments; + + REQUEST_FIXED_SIZE(xDRI2GetBuffersReq, stuff->count * (2 * 4)); + if (!validDrawable(client, stuff->drawable, &pDrawable, &status)) + return status; + + attachments = (unsigned int *) &stuff[1]; + buffers = DRI2GetBuffersWithFormat(pDrawable, &width, &height, + attachments, stuff->count, &count); + + send_buffers_reply(client, pDrawable, buffers, count, width, height); return client->noClientException; } @@ -313,6 +347,8 @@ ProcDRI2Dispatch (ClientPtr client) return ProcDRI2GetBuffers(client); case X_DRI2CopyRegion: return ProcDRI2CopyRegion(client); + case X_DRI2GetBuffersWithFormat: + return ProcDRI2GetBuffersWithFormat(client); default: return BadRequest; } From a8cf63fd18b0ddadbadf7b47d620159854920050 Mon Sep 17 00:00:00 2001 From: Aaron Plattner Date: Thu, 23 Apr 2009 14:57:04 -0700 Subject: [PATCH 07/89] Export CompositeRegisterAlternateVisuals. Drivers need this if they add visuals that require implicit redirection. Add a new SDK header, compositeext.h, to contain the prototype for this function. --- composite/Makefile.am | 4 ++++ composite/compinit.c | 1 + composite/compint.h | 4 ---- composite/compositeext.h | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 composite/compositeext.h diff --git a/composite/Makefile.am b/composite/Makefile.am index d7bead137..c2f5123f2 100644 --- a/composite/Makefile.am +++ b/composite/Makefile.am @@ -2,6 +2,10 @@ noinst_LTLIBRARIES = libcomposite.la AM_CFLAGS = $(DIX_CFLAGS) +if XORG +sdk_HEADERS = compositeext.h +endif + libcomposite_la_SOURCES = \ compalloc.c \ compext.c \ diff --git a/composite/compinit.c b/composite/compinit.c index a844017c1..ee269afa0 100644 --- a/composite/compinit.c +++ b/composite/compinit.c @@ -45,6 +45,7 @@ #endif #include "compint.h" +#include "compositeext.h" static int CompScreenPrivateKeyIndex; DevPrivateKey CompScreenPrivateKey = &CompScreenPrivateKeyIndex; diff --git a/composite/compint.h b/composite/compint.h index 1c19ccd39..fd2fea153 100644 --- a/composite/compint.h +++ b/composite/compint.h @@ -224,10 +224,6 @@ CompositeExtensionInit (void); * compinit.c */ -Bool -CompositeRegisterAlternateVisuals (ScreenPtr pScreen, - VisualID *vids, int nVisuals); - Bool compScreenInit (ScreenPtr pScreen); diff --git a/composite/compositeext.h b/composite/compositeext.h new file mode 100644 index 000000000..b20bab158 --- /dev/null +++ b/composite/compositeext.h @@ -0,0 +1,38 @@ +/* + * Copyright © 2009 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. + */ + +#ifdef HAVE_DIX_CONFIG_H +#include +#endif + +#ifndef _COMPOSITEEXT_H_ +#define _COMPOSITEEXT_H_ + +#include "misc.h" +#include "scrnintstr.h" + +extern _X_EXPORT Bool CompositeRegisterAlternateVisuals(ScreenPtr pScreen, + VisualID *vids, + int nVisuals); + +#endif /* _COMPOSITEEXT_H_ */ From 40a8f2f4088aa353de733a11327b628ef13a52e6 Mon Sep 17 00:00:00 2001 From: Pierre Willenbrock Date: Sun, 19 Apr 2009 21:15:22 +0200 Subject: [PATCH 08/89] Fix obvious copypasta Reviewed-by: Ian Romanick --- glx/glxcmds.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glx/glxcmds.c b/glx/glxcmds.c index 86e8dd8a5..1ae31515d 100644 --- a/glx/glxcmds.c +++ b/glx/glxcmds.c @@ -799,8 +799,8 @@ int __glXDisp_WaitX(__GLXclientState *cl, GLbyte *pc) return error; } - if (glxc && glxc->drawPriv->waitGL) - (*glxc->drawPriv->waitGL)(glxc->drawPriv); + if (glxc && glxc->drawPriv->waitX) + (*glxc->drawPriv->waitX)(glxc->drawPriv); return Success; } From 707af5f8c5fae3b6c4c5125a91917667bb0ab908 Mon Sep 17 00:00:00 2001 From: Simon Farnsworth Date: Thu, 23 Apr 2009 16:15:01 +0100 Subject: [PATCH 09/89] Make the cursor completely optional For embedded use, it's convenient to be able to disable the cursor completely, without having to audit and fix up all your third-party code (e.g. Mozilla Firefox). Add -nocursor and -cursor server options to enable and disable the cursor. The default is still -cursor, but embedded users can run the server with -nocursor to hide the cursor regardless of what application developers do. Signed-off-by: Peter Hutterer --- include/input.h | 4 ++++ os/utils.c | 12 +++++++++++- xfixes/cursor.c | 6 ++++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/include/input.h b/include/input.h index 56c3d2981..30e30bb9e 100644 --- a/include/input.h +++ b/include/input.h @@ -498,4 +498,8 @@ extern _X_EXPORT void DDXRingBell( int pitch, int duration); +/* Set to TRUE by default - os/utils.c sets it to FALSE on user request, + xfixes/cursor.c uses it to determine if the cursor is enabled */ +extern Bool EnableCursor; + #endif /* INPUT_H */ diff --git a/os/utils.c b/os/utils.c index 78a50b254..00abd6396 100644 --- a/os/utils.c +++ b/os/utils.c @@ -482,6 +482,8 @@ void UseMsg(void) ErrorF("-c turns off key-click\n"); ErrorF("c # key-click volume (0-100)\n"); ErrorF("-cc int default color visual class\n"); + ErrorF("-cursor enable the cursor (default)\n"); + ErrorF("-nocursor disable the cursor\n"); ErrorF("-core generate core dump on fatal error\n"); ErrorF("-dpi int screen resolution in dots per inch\n"); #ifdef DPMSExtension @@ -660,7 +662,15 @@ ProcessCommandLine(int argc, char *argv[]) #endif CoreDump = TRUE; } - else if ( strcmp( argv[i], "-dpi") == 0) + else if ( strcmp( argv[i], "-nocursor") == 0) + { + EnableCursor = FALSE; + } + else if ( strcmp( argv[i], "-cursor") == 0) + { + EnableCursor = TRUE; + } + else if ( strcmp( argv[i], "-dpi") == 0) { if(++i < argc) monitorResolution = atoi(argv[i]); diff --git a/xfixes/cursor.c b/xfixes/cursor.c index 33ab4265c..eb83cfeb7 100644 --- a/xfixes/cursor.c +++ b/xfixes/cursor.c @@ -129,6 +129,8 @@ typedef struct _CursorScreen { /* The cursor doesn't show up until the first XDefineCursor() */ static Bool CursorVisible = FALSE; +Bool EnableCursor = TRUE; + static Bool CursorDisplayCursor (DeviceIntPtr pDev, ScreenPtr pScreen, @@ -144,7 +146,7 @@ CursorDisplayCursor (DeviceIntPtr pDev, * initial root window setup. Not a great way to do it, I admit. */ if (ConnectionInfo) - CursorVisible = TRUE; + CursorVisible = EnableCursor; if (cs->pCursorHideCounts != NULL || !CursorVisible) { ret = ((*pScreen->RealizeCursor)(pDev, pScreen, pInvisibleCursor) && @@ -1052,7 +1054,7 @@ XFixesCursorInit (void) int i; if (party_like_its_1989) - CursorVisible = TRUE; + CursorVisible = EnableCursor; for (i = 0; i < screenInfo.numScreens; i++) { From 2a2a7fa6856b2e1954e904577535118f20cd9133 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Mon, 27 Apr 2009 20:23:53 -0700 Subject: [PATCH 10/89] Solaris: use instead of stale copy in Xorg sources Signed-off-by: Alan Coopersmith --- configure.ac | 2 +- hw/xfree86/os-support/solaris/Makefile.am | 11 +-- hw/xfree86/os-support/solaris/agpgart.h | 108 ---------------------- hw/xfree86/os-support/solaris/sun_agp.c | 7 +- 4 files changed, 7 insertions(+), 121 deletions(-) delete mode 100644 hw/xfree86/os-support/solaris/agpgart.h diff --git a/configure.ac b/configure.ac index 9eadabced..438ee0899 100644 --- a/configure.ac +++ b/configure.ac @@ -222,7 +222,7 @@ AC_CHECK_LIB(m, cbrt, AC_DEFINE(HAVE_CBRT, 1, [Have the 'cbrt' function])) AC_CHECK_HEADERS([ndbm.h dbm.h rpcsvc/dbm.h]) dnl AGPGART headers -AC_CHECK_HEADERS([linux/agpgart.h sys/agpio.h], AGP=yes) +AC_CHECK_HEADERS([linux/agpgart.h sys/agpio.h sys/agpgart.h], AGP=yes) AM_CONDITIONAL(AGP, [test "x$AGP" = xyes]) dnl APM header diff --git a/hw/xfree86/os-support/solaris/Makefile.am b/hw/xfree86/os-support/solaris/Makefile.am index bcb987490..4496ee122 100644 --- a/hw/xfree86/os-support/solaris/Makefile.am +++ b/hw/xfree86/os-support/solaris/Makefile.am @@ -4,12 +4,11 @@ else VTSW_SRC = $(srcdir)/../shared/VTsw_noop.c endif -# TODO: Don't build agpgart on SPARC -#if defined(i386Architecture) || defined(AMD64Architecture) +if AGP AGP_SRC = sun_agp.c -#else -#AGP_SRC = $(srcdir)/../shared/agp_noop.c -#endif +else +AGP_SRC = $(srcdir)/../shared/agp_noop.c +endif SOLARIS_INOUT_SRC = solaris-@SOLARIS_INOUT_ARCH@.S DISTCLEANFILES = solaris-@SOLARIS_INOUT_ARCH@.il @@ -28,7 +27,7 @@ libsolaris_la_SOURCES = sun_init.c \ $(VTSW_SRC) nodist_libsolaris_la_SOURCES = $(SOLARIS_INOUT_SRC) -sdk_HEADERS = agpgart.h +sdk_HEADERS = nodist_sdk_HEADERS = solaris-@SOLARIS_INOUT_ARCH@.il AM_CFLAGS = -DUSESTDRES -DHAVE_SYSV_IPC $(XORG_CFLAGS) $(DIX_CFLAGS) diff --git a/hw/xfree86/os-support/solaris/agpgart.h b/hw/xfree86/os-support/solaris/agpgart.h deleted file mode 100644 index 566de8046..000000000 --- a/hw/xfree86/os-support/solaris/agpgart.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * AGPGART module version 0.99 - * Copyright (C) 1999 Jeff Hartmann - * Copyright (C) 1999 Precision Insight, Inc. - * Copyright (C) 1999 Xi Graphics, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS 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. - */ -/* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. - * - * 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, and/or sell copies of the Software, and to permit persons - * to whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * 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 - * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL - * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING - * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Except as contained in this notice, the name of a copyright holder - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * of the copyright holder. - */ - -#ifndef _AGPGART_H -#define _AGPGART_H - -#pragma ident "@(#)agpgart.h 1.1 05/04/04 SMI" - -typedef struct _agp_version { - uint16_t agpv_major; - uint16_t agpv_minor; -} agp_version_t; - -typedef struct _agp_info { - agp_version_t agpi_version; - uint32_t agpi_devid; /* bridge vendor + device */ - uint32_t agpi_mode; /* mode of bridge */ - ulong_t agpi_aperbase; /* base of aperture */ - size_t agpi_apersize; /* aperture range size */ - uint32_t agpi_pgtotal; /* max number of pages in aperture */ - uint32_t agpi_pgsystem; /* same as pg_total */ - uint32_t agpi_pgused; /* NUMBER of currently used pages */ -} agp_info_t; - -typedef struct _agp_setup { - uint32_t agps_mode; -} agp_setup_t; - -typedef struct _agp_allocate { - int32_t agpa_key; - uint32_t agpa_pgcount; - uint32_t agpa_type; - uint32_t agpa_physical; /* for i810/830 driver */ -} agp_allocate_t; - -typedef struct _agp_bind { - int32_t agpb_key; - uint32_t agpb_pgstart; -} agp_bind_t; - -typedef struct _agp_unbind { - int32_t agpu_key; - uint32_t agpu_pri; /* no use in solaris */ -} agp_unbind_t; - -#define AGPIOC_BASE 'G' -#define AGPIOC_INFO _IOR(AGPIOC_BASE, 0, 100) -#define AGPIOC_ACQUIRE _IO(AGPIOC_BASE, 1) -#define AGPIOC_RELEASE _IO(AGPIOC_BASE, 2) -#define AGPIOC_SETUP _IOW(AGPIOC_BASE, 3, agp_setup_t) -#define AGPIOC_ALLOCATE _IOWR(AGPIOC_BASE, 4, agp_allocate_t) -#define AGPIOC_DEALLOCATE _IOW(AGPIOC_BASE, 5, int) -#define AGPIOC_BIND _IOW(AGPIOC_BASE, 6, agp_bind_t) -#define AGPIOC_UNBIND _IOW(AGPIOC_BASE, 7, agp_unbind_t) - -#define AGP_DEVICE "/dev/agpgart" - -#endif /* _AGPGART_H */ diff --git a/hw/xfree86/os-support/solaris/sun_agp.c b/hw/xfree86/os-support/solaris/sun_agp.c index d151bf611..376f98edd 100644 --- a/hw/xfree86/os-support/solaris/sun_agp.c +++ b/hw/xfree86/os-support/solaris/sun_agp.c @@ -34,8 +34,6 @@ * of the copyright holder. */ -#pragma ident "@(#)sun_agp.c 1.1 05/04/04 SMI" - #ifdef HAVE_XORG_CONFIG_H #include #endif @@ -49,11 +47,8 @@ #include #include #include -#include "agpgart.h" +#include -#ifndef AGP_DEVICE -#define AGP_DEVICE "/dev/agpgart" -#endif /* AGP page size is independent of the host page size. */ #ifndef AGP_PAGE_SIZE #define AGP_PAGE_SIZE 4096 From 987579c930bda803427a28cb82773c389f5110d6 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 22 Apr 2009 13:26:40 +1000 Subject: [PATCH 11/89] dix: remove all but main() from main.c All other functions are pushed into where they seemed to fit. main.c is now linked separately into libmain.a and linked in by the various DDXs. Signed-off-by: Peter Hutterer --- configure.ac | 10 +- dix/Makefile.am | 6 +- dix/dispatch.c | 341 +++++++++++++++++++++++++- dix/events.c | 6 + dix/main.c | 368 ---------------------------- dix/swaprep.c | 15 ++ hw/dmx/Makefile.am | 1 + hw/vfb/Makefile.am | 1 + hw/xfree86/Makefile.am | 2 +- hw/xquartz/mach-startup/Makefile.am | 2 +- include/dix.h | 1 + 11 files changed, 376 insertions(+), 377 deletions(-) diff --git a/configure.ac b/configure.ac index 438ee0899..6628a4462 100644 --- a/configure.ac +++ b/configure.ac @@ -1153,6 +1153,10 @@ else DIX_LIB='$(top_builddir)/dix/libdix.la' OS_LIB='$(top_builddir)/os/libos.la' fi + +MAIN_LIB='$(top_builddir)/dix/libmain.la' +AC_SUBST([MAIN_LIB]) + MI_LIB='$(top_builddir)/mi/libmi.la' MI_EXT_LIB='$(top_builddir)/mi/libmiext.la' MI_INC='-I$(top_srcdir)/mi' @@ -1271,7 +1275,7 @@ AC_MSG_RESULT([$XNEST]) AM_CONDITIONAL(XNEST, [test "x$XNEST" = xyes]) if test "x$XNEST" = xyes; then - XNEST_LIBS="$FB_LIB $FIXES_LIB $MI_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $DIX_LIB $OS_LIB $CONFIG_LIB" + XNEST_LIBS="$FB_LIB $FIXES_LIB $MI_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $DIX_LIB $MAIN_LIB $OS_LIB $CONFIG_LIB" XNEST_SYS_LIBS="$XNESTMODULES_LIBS $GLX_SYS_LIBS" AC_SUBST([XNEST_LIBS]) AC_SUBST([XNEST_SYS_LIBS]) @@ -1643,7 +1647,7 @@ if test "x$XQUARTZ" = xyes; then AC_DEFINE(XQUARTZ,1,[Have Quartz]) AC_DEFINE(ROOTLESS,1,[Build Rootless code]) - DARWIN_LIBS="$MI_LIB $OS_LIB $DIX_LIB $FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $RECORD_LIB $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $XPSTUBS_LIB" + DARWIN_LIBS="$MI_LIB $OS_LIB $DIX_LIB $MAIN_LIB $FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $RECORD_LIB $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $XPSTUBS_LIB" AC_SUBST([DARWIN_LIBS]) AC_CHECK_LIB([Xplugin],[xp_init],[:]) @@ -1828,7 +1832,7 @@ if test "$KDRIVE" = yes; then ;; esac KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.la' - KDRIVE_LOCAL_LIBS="$DIX_LIB $KDRIVE_LIB $KDRIVE_STUB_LIB $CONFIG_LIB" + KDRIVE_LOCAL_LIBS="$DIX_LIB $MAIN_LIB $KDRIVE_LIB $KDRIVE_STUB_LIB $CONFIG_LIB" KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $FB_LIB $MI_LIB $KDRIVE_PURE_LIBS" KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $KDRIVE_OS_LIB $OS_LIB" KDRIVE_LIBS="$TSLIB_LIBS $KDRIVE_LOCAL_LIBS $XSERVER_SYS_LIBS $GLX_SYS_LIBS" diff --git a/dix/Makefile.am b/dix/Makefile.am index 83b8c62c2..ab702f790 100644 --- a/dix/Makefile.am +++ b/dix/Makefile.am @@ -1,7 +1,10 @@ -noinst_LTLIBRARIES = libdix.la +noinst_LTLIBRARIES = libdix.la libmain.la AM_CFLAGS = $(DIX_CFLAGS) +libmain_la_SOURCES = \ + main.c + libdix_la_SOURCES = \ atom.c \ colormap.c \ @@ -26,7 +29,6 @@ libdix_la_SOURCES = \ grabs.c \ initatoms.c \ inpututils.c \ - main.c \ pixmap.c \ privates.c \ property.c \ diff --git a/dix/dispatch.c b/dix/dispatch.c index a9f936707..16a51bdc5 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -107,6 +107,7 @@ Equipment Corporation. #ifdef HAVE_DIX_CONFIG_H #include +#include #endif #ifdef PANORAMIX_DEBUG @@ -134,6 +135,7 @@ int ProcInitialConnection(); #include "xace.h" #include "inputstr.h" #include "xkbsrv.h" +#include "site.h" #ifdef XSERVER_DTRACE #include "registry.h" @@ -150,7 +152,9 @@ typedef const char *string; #define BITCLEAR(buf, i) MASKWORD(buf, i) &= ~BITMASK(i) #define GETBIT(buf, i) (MASKWORD(buf, i) & BITMASK(i)) -extern xConnSetupPrefix connSetupPrefix; +xConnSetupPrefix connSetupPrefix; + +PaddingInfo PixmapWidthPaddingInfo[33]; static ClientPtr grabClient; #define GrabNone 0 @@ -160,7 +164,7 @@ static int grabState = GrabNone; static long grabWaiters[mskcnt]; CallbackListPtr ServerGrabCallback = NULL; HWEventQueuePtr checkForInput[2]; -extern int connBlockScreenStart; +int connBlockScreenStart; static void KillAllClients(void); @@ -461,6 +465,166 @@ Dispatch(void) #undef MAJOROP +static int VendorRelease = VENDOR_RELEASE; +static char *VendorString = VENDOR_NAME; + +static const int padlength[4] = {0, 3, 2, 1}; + +void +SetVendorRelease(int release) +{ + VendorRelease = release; +} + +void +SetVendorString(char *string) +{ + VendorString = string; +} + +Bool +CreateConnectionBlock(void) +{ + xConnSetup setup; + xWindowRoot root; + xDepth depth; + xVisualType visual; + xPixmapFormat format; + unsigned long vid; + int i, j, k, + lenofblock, + sizesofar = 0; + char *pBuf; + + + memset(&setup, 0, sizeof(xConnSetup)); + /* Leave off the ridBase and ridMask, these must be sent with + connection */ + + setup.release = VendorRelease; + /* + * per-server image and bitmap parameters are defined in Xmd.h + */ + setup.imageByteOrder = screenInfo.imageByteOrder; + + setup.bitmapScanlineUnit = screenInfo.bitmapScanlineUnit; + setup.bitmapScanlinePad = screenInfo.bitmapScanlinePad; + + setup.bitmapBitOrder = screenInfo.bitmapBitOrder; + setup.motionBufferSize = NumMotionEvents(); + setup.numRoots = screenInfo.numScreens; + setup.nbytesVendor = strlen(VendorString); + setup.numFormats = screenInfo.numPixmapFormats; + setup.maxRequestSize = MAX_REQUEST_SIZE; + QueryMinMaxKeyCodes(&setup.minKeyCode, &setup.maxKeyCode); + + lenofblock = sizeof(xConnSetup) + + ((setup.nbytesVendor + 3) & ~3) + + (setup.numFormats * sizeof(xPixmapFormat)) + + (setup.numRoots * sizeof(xWindowRoot)); + ConnectionInfo = xalloc(lenofblock); + if (!ConnectionInfo) + return FALSE; + + memmove(ConnectionInfo, (char *)&setup, sizeof(xConnSetup)); + sizesofar = sizeof(xConnSetup); + pBuf = ConnectionInfo + sizeof(xConnSetup); + + memmove(pBuf, VendorString, (int)setup.nbytesVendor); + sizesofar += setup.nbytesVendor; + pBuf += setup.nbytesVendor; + i = padlength[setup.nbytesVendor & 3]; + sizesofar += i; + while (--i >= 0) + *pBuf++ = 0; + + memset(&format, 0, sizeof(xPixmapFormat)); + for (i=0; idrawable.id; + root.defaultColormap = pScreen->defColormap; + root.whitePixel = pScreen->whitePixel; + root.blackPixel = pScreen->blackPixel; + root.currentInputMask = 0; /* filled in when sent */ + root.pixWidth = pScreen->width; + root.pixHeight = pScreen->height; + root.mmWidth = pScreen->mmWidth; + root.mmHeight = pScreen->mmHeight; + root.minInstalledMaps = pScreen->minInstalledCmaps; + root.maxInstalledMaps = pScreen->maxInstalledCmaps; + root.rootVisualID = pScreen->rootVisual; + root.backingStore = pScreen->backingStoreSupport; + root.saveUnders = FALSE; + root.rootDepth = pScreen->rootDepth; + root.nDepths = pScreen->numDepths; + memmove(pBuf, (char *)&root, sizeof(xWindowRoot)); + sizesofar += sizeof(xWindowRoot); + pBuf += sizeof(xWindowRoot); + + pDepth = pScreen->allowedDepths; + for(j = 0; j < pScreen->numDepths; j++, pDepth++) + { + lenofblock += sizeof(xDepth) + + (pDepth->numVids * sizeof(xVisualType)); + pBuf = (char *)xrealloc(ConnectionInfo, lenofblock); + if (!pBuf) + { + xfree(ConnectionInfo); + return FALSE; + } + ConnectionInfo = pBuf; + pBuf += sizesofar; + depth.depth = pDepth->depth; + depth.nVisuals = pDepth->numVids; + memmove(pBuf, (char *)&depth, sizeof(xDepth)); + pBuf += sizeof(xDepth); + sizesofar += sizeof(xDepth); + for(k = 0; k < pDepth->numVids; k++) + { + vid = pDepth->vids[k]; + for (pVisual = pScreen->visuals; + pVisual->vid != vid; + pVisual++) + ; + visual.visualID = vid; + visual.class = pVisual->class; + visual.bitsPerRGB = pVisual->bitsPerRGBValue; + visual.colormapEntries = pVisual->ColormapEntries; + visual.redMask = pVisual->redMask; + visual.greenMask = pVisual->greenMask; + visual.blueMask = pVisual->blueMask; + memmove(pBuf, (char *)&visual, sizeof(xVisualType)); + pBuf += sizeof(xVisualType); + sizesofar += sizeof(xVisualType); + } + } + } + connSetupPrefix.success = xTrue; + connSetupPrefix.length = lenofblock/4; + connSetupPrefix.majorVersion = X_PROTOCOL; + connSetupPrefix.minorVersion = X_PROTOCOL_REVISION; + return TRUE; +} + + int ProcBadRequest(ClientPtr client) { @@ -3700,3 +3864,176 @@ MarkClientException(ClientPtr client) { client->noClientException = -1; } + +/* + * This array encodes the answer to the question "what is the log base 2 + * of the number of pixels that fit in a scanline pad unit?" + * Note that ~0 is an invalid entry (mostly for the benefit of the reader). + */ +static int answer[6][4] = { + /* pad pad pad pad*/ + /* 8 16 32 64 */ + + { 3, 4, 5 , 6 }, /* 1 bit per pixel */ + { 1, 2, 3 , 4 }, /* 4 bits per pixel */ + { 0, 1, 2 , 3 }, /* 8 bits per pixel */ + { ~0, 0, 1 , 2 }, /* 16 bits per pixel */ + { ~0, ~0, 0 , 1 }, /* 24 bits per pixel */ + { ~0, ~0, 0 , 1 } /* 32 bits per pixel */ +}; + +/* + * This array gives the answer to the question "what is the first index for + * the answer array above given the number of bits per pixel?" + * Note that ~0 is an invalid entry (mostly for the benefit of the reader). + */ +static int indexForBitsPerPixel[ 33 ] = { + ~0, 0, ~0, ~0, /* 1 bit per pixel */ + 1, ~0, ~0, ~0, /* 4 bits per pixel */ + 2, ~0, ~0, ~0, /* 8 bits per pixel */ + ~0,~0, ~0, ~0, + 3, ~0, ~0, ~0, /* 16 bits per pixel */ + ~0,~0, ~0, ~0, + 4, ~0, ~0, ~0, /* 24 bits per pixel */ + ~0,~0, ~0, ~0, + 5 /* 32 bits per pixel */ +}; + +/* + * This array gives the bytesperPixel value for cases where the number + * of bits per pixel is a multiple of 8 but not a power of 2. + */ +static int answerBytesPerPixel[ 33 ] = { + ~0, 0, ~0, ~0, /* 1 bit per pixel */ + 0, ~0, ~0, ~0, /* 4 bits per pixel */ + 0, ~0, ~0, ~0, /* 8 bits per pixel */ + ~0,~0, ~0, ~0, + 0, ~0, ~0, ~0, /* 16 bits per pixel */ + ~0,~0, ~0, ~0, + 3, ~0, ~0, ~0, /* 24 bits per pixel */ + ~0,~0, ~0, ~0, + 0 /* 32 bits per pixel */ +}; + +/* + * This array gives the answer to the question "what is the second index for + * the answer array above given the number of bits per scanline pad unit?" + * Note that ~0 is an invalid entry (mostly for the benefit of the reader). + */ +static int indexForScanlinePad[ 65 ] = { + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + 0, ~0, ~0, ~0, /* 8 bits per scanline pad unit */ + ~0, ~0, ~0, ~0, + 1, ~0, ~0, ~0, /* 16 bits per scanline pad unit */ + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + 2, ~0, ~0, ~0, /* 32 bits per scanline pad unit */ + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + 3 /* 64 bits per scanline pad unit */ +}; + +#ifndef MIN +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) +#endif + +/* + grow the array of screenRecs if necessary. + call the device-supplied initialization procedure +with its screen number, a pointer to its ScreenRec, argc, and argv. + return the number of successfully installed screens. + +*/ + +int +AddScreen( + Bool (* pfnInit)( + int /*index*/, + ScreenPtr /*pScreen*/, + int /*argc*/, + char ** /*argv*/ + ), + int argc, + char **argv) +{ + + int i; + int scanlinepad, format, depth, bitsPerPixel, j, k; + ScreenPtr pScreen; + + i = screenInfo.numScreens; + if (i == MAXSCREENS) + return -1; + + pScreen = (ScreenPtr) xcalloc(1, sizeof(ScreenRec)); + if (!pScreen) + return -1; + + pScreen->devPrivates = NULL; + pScreen->myNum = i; + pScreen->totalPixmapSize = BitmapBytePad(sizeof(PixmapRec)*8); + pScreen->ClipNotify = 0; /* for R4 ddx compatibility */ + pScreen->CreateScreenResources = 0; + + /* + * This loop gets run once for every Screen that gets added, + * but thats ok. If the ddx layer initializes the formats + * one at a time calling AddScreen() after each, then each + * iteration will make it a little more accurate. Worst case + * we do this loop N * numPixmapFormats where N is # of screens. + * Anyway, this must be called after InitOutput and before the + * screen init routine is called. + */ + for (format=0; formatrgf = ~0L; /* there are no scratch GCs yet*/ + WindowTable[i] = NullWindow; + screenInfo.screens[i] = pScreen; + screenInfo.numScreens++; + if (!(*pfnInit)(i, pScreen, argc, argv)) + { + dixFreePrivates(pScreen->devPrivates); + xfree(pScreen); + screenInfo.numScreens--; + return -1; + } + return i; +} diff --git a/dix/events.c b/dix/events.c index faa84259c..8af71b645 100644 --- a/dix/events.c +++ b/dix/events.c @@ -273,6 +273,12 @@ static struct { static xEvent* swapEvent = NULL; static int swapEventLen = 0; +void +NotImplemented(xEvent *from, xEvent *to) +{ + FatalError("Not implemented"); +} + /** * Convert the given event type from an XI event to a core event. * @param[in] The XI 1.x event type. diff --git a/dix/main.c b/dix/main.c index 9d5d83944..25b085e88 100644 --- a/dix/main.c +++ b/dix/main.c @@ -118,120 +118,7 @@ Equipment Corporation. extern void Dispatch(void); -xConnSetupPrefix connSetupPrefix; - -extern FontPtr defaultFont; - extern void InitProcVectors(void); -extern Bool CreateGCperDepthArray(void); - -#ifndef PANORAMIX -static -#endif -Bool CreateConnectionBlock(void); - -PaddingInfo PixmapWidthPaddingInfo[33]; - -int connBlockScreenStart; - -void -NotImplemented(xEvent *from, xEvent *to) -{ - FatalError("Not implemented"); -} - -/* - * Dummy entry for ReplySwapVector[] - */ - -void -ReplyNotSwappd( - ClientPtr pClient , - int size , - void * pbuf - ) -{ - FatalError("Not implemented"); -} - -/* - * This array encodes the answer to the question "what is the log base 2 - * of the number of pixels that fit in a scanline pad unit?" - * Note that ~0 is an invalid entry (mostly for the benefit of the reader). - */ -static int answer[6][4] = { - /* pad pad pad pad*/ - /* 8 16 32 64 */ - - { 3, 4, 5 , 6 }, /* 1 bit per pixel */ - { 1, 2, 3 , 4 }, /* 4 bits per pixel */ - { 0, 1, 2 , 3 }, /* 8 bits per pixel */ - { ~0, 0, 1 , 2 }, /* 16 bits per pixel */ - { ~0, ~0, 0 , 1 }, /* 24 bits per pixel */ - { ~0, ~0, 0 , 1 } /* 32 bits per pixel */ -}; - -/* - * This array gives the answer to the question "what is the first index for - * the answer array above given the number of bits per pixel?" - * Note that ~0 is an invalid entry (mostly for the benefit of the reader). - */ -static int indexForBitsPerPixel[ 33 ] = { - ~0, 0, ~0, ~0, /* 1 bit per pixel */ - 1, ~0, ~0, ~0, /* 4 bits per pixel */ - 2, ~0, ~0, ~0, /* 8 bits per pixel */ - ~0,~0, ~0, ~0, - 3, ~0, ~0, ~0, /* 16 bits per pixel */ - ~0,~0, ~0, ~0, - 4, ~0, ~0, ~0, /* 24 bits per pixel */ - ~0,~0, ~0, ~0, - 5 /* 32 bits per pixel */ -}; - -/* - * This array gives the bytesperPixel value for cases where the number - * of bits per pixel is a multiple of 8 but not a power of 2. - */ -static int answerBytesPerPixel[ 33 ] = { - ~0, 0, ~0, ~0, /* 1 bit per pixel */ - 0, ~0, ~0, ~0, /* 4 bits per pixel */ - 0, ~0, ~0, ~0, /* 8 bits per pixel */ - ~0,~0, ~0, ~0, - 0, ~0, ~0, ~0, /* 16 bits per pixel */ - ~0,~0, ~0, ~0, - 3, ~0, ~0, ~0, /* 24 bits per pixel */ - ~0,~0, ~0, ~0, - 0 /* 32 bits per pixel */ -}; - -/* - * This array gives the answer to the question "what is the second index for - * the answer array above given the number of bits per scanline pad unit?" - * Note that ~0 is an invalid entry (mostly for the benefit of the reader). - */ -static int indexForScanlinePad[ 65 ] = { - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - 0, ~0, ~0, ~0, /* 8 bits per scanline pad unit */ - ~0, ~0, ~0, ~0, - 1, ~0, ~0, ~0, /* 16 bits per scanline pad unit */ - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - 2, ~0, ~0, ~0, /* 32 bits per scanline pad unit */ - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - 3 /* 64 bits per scanline pad unit */ -}; - -#ifndef MIN -#define MIN(a,b) (((a) < (b)) ? (a) : (b)) -#endif #ifdef XQUARTZ #include @@ -456,258 +343,3 @@ int main(int argc, char *argv[], char *envp[]) return(0); } -static int VendorRelease = VENDOR_RELEASE; -static char *VendorString = VENDOR_NAME; - -void -SetVendorRelease(int release) -{ - VendorRelease = release; -} - -void -SetVendorString(char *string) -{ - VendorString = string; -} - -static const int padlength[4] = {0, 3, 2, 1}; - -#ifndef PANORAMIX -static -#endif -Bool -CreateConnectionBlock(void) -{ - xConnSetup setup; - xWindowRoot root; - xDepth depth; - xVisualType visual; - xPixmapFormat format; - unsigned long vid; - int i, j, k, - lenofblock, - sizesofar = 0; - char *pBuf; - - - memset(&setup, 0, sizeof(xConnSetup)); - /* Leave off the ridBase and ridMask, these must be sent with - connection */ - - setup.release = VendorRelease; - /* - * per-server image and bitmap parameters are defined in Xmd.h - */ - setup.imageByteOrder = screenInfo.imageByteOrder; - - setup.bitmapScanlineUnit = screenInfo.bitmapScanlineUnit; - setup.bitmapScanlinePad = screenInfo.bitmapScanlinePad; - - setup.bitmapBitOrder = screenInfo.bitmapBitOrder; - setup.motionBufferSize = NumMotionEvents(); - setup.numRoots = screenInfo.numScreens; - setup.nbytesVendor = strlen(VendorString); - setup.numFormats = screenInfo.numPixmapFormats; - setup.maxRequestSize = MAX_REQUEST_SIZE; - QueryMinMaxKeyCodes(&setup.minKeyCode, &setup.maxKeyCode); - - lenofblock = sizeof(xConnSetup) + - ((setup.nbytesVendor + 3) & ~3) + - (setup.numFormats * sizeof(xPixmapFormat)) + - (setup.numRoots * sizeof(xWindowRoot)); - ConnectionInfo = xalloc(lenofblock); - if (!ConnectionInfo) - return FALSE; - - memmove(ConnectionInfo, (char *)&setup, sizeof(xConnSetup)); - sizesofar = sizeof(xConnSetup); - pBuf = ConnectionInfo + sizeof(xConnSetup); - - memmove(pBuf, VendorString, (int)setup.nbytesVendor); - sizesofar += setup.nbytesVendor; - pBuf += setup.nbytesVendor; - i = padlength[setup.nbytesVendor & 3]; - sizesofar += i; - while (--i >= 0) - *pBuf++ = 0; - - memset(&format, 0, sizeof(xPixmapFormat)); - for (i=0; idrawable.id; - root.defaultColormap = pScreen->defColormap; - root.whitePixel = pScreen->whitePixel; - root.blackPixel = pScreen->blackPixel; - root.currentInputMask = 0; /* filled in when sent */ - root.pixWidth = pScreen->width; - root.pixHeight = pScreen->height; - root.mmWidth = pScreen->mmWidth; - root.mmHeight = pScreen->mmHeight; - root.minInstalledMaps = pScreen->minInstalledCmaps; - root.maxInstalledMaps = pScreen->maxInstalledCmaps; - root.rootVisualID = pScreen->rootVisual; - root.backingStore = pScreen->backingStoreSupport; - root.saveUnders = FALSE; - root.rootDepth = pScreen->rootDepth; - root.nDepths = pScreen->numDepths; - memmove(pBuf, (char *)&root, sizeof(xWindowRoot)); - sizesofar += sizeof(xWindowRoot); - pBuf += sizeof(xWindowRoot); - - pDepth = pScreen->allowedDepths; - for(j = 0; j < pScreen->numDepths; j++, pDepth++) - { - lenofblock += sizeof(xDepth) + - (pDepth->numVids * sizeof(xVisualType)); - pBuf = (char *)xrealloc(ConnectionInfo, lenofblock); - if (!pBuf) - { - xfree(ConnectionInfo); - return FALSE; - } - ConnectionInfo = pBuf; - pBuf += sizesofar; - depth.depth = pDepth->depth; - depth.nVisuals = pDepth->numVids; - memmove(pBuf, (char *)&depth, sizeof(xDepth)); - pBuf += sizeof(xDepth); - sizesofar += sizeof(xDepth); - for(k = 0; k < pDepth->numVids; k++) - { - vid = pDepth->vids[k]; - for (pVisual = pScreen->visuals; - pVisual->vid != vid; - pVisual++) - ; - visual.visualID = vid; - visual.class = pVisual->class; - visual.bitsPerRGB = pVisual->bitsPerRGBValue; - visual.colormapEntries = pVisual->ColormapEntries; - visual.redMask = pVisual->redMask; - visual.greenMask = pVisual->greenMask; - visual.blueMask = pVisual->blueMask; - memmove(pBuf, (char *)&visual, sizeof(xVisualType)); - pBuf += sizeof(xVisualType); - sizesofar += sizeof(xVisualType); - } - } - } - connSetupPrefix.success = xTrue; - connSetupPrefix.length = lenofblock/4; - connSetupPrefix.majorVersion = X_PROTOCOL; - connSetupPrefix.minorVersion = X_PROTOCOL_REVISION; - return TRUE; -} - -/* - grow the array of screenRecs if necessary. - call the device-supplied initialization procedure -with its screen number, a pointer to its ScreenRec, argc, and argv. - return the number of successfully installed screens. - -*/ - -int -AddScreen( - Bool (* pfnInit)( - int /*index*/, - ScreenPtr /*pScreen*/, - int /*argc*/, - char ** /*argv*/ - ), - int argc, - char **argv) -{ - - int i; - int scanlinepad, format, depth, bitsPerPixel, j, k; - ScreenPtr pScreen; - - i = screenInfo.numScreens; - if (i == MAXSCREENS) - return -1; - - pScreen = (ScreenPtr) xcalloc(1, sizeof(ScreenRec)); - if (!pScreen) - return -1; - - pScreen->devPrivates = NULL; - pScreen->myNum = i; - pScreen->totalPixmapSize = BitmapBytePad(sizeof(PixmapRec)*8); - pScreen->ClipNotify = 0; /* for R4 ddx compatibility */ - pScreen->CreateScreenResources = 0; - - /* - * This loop gets run once for every Screen that gets added, - * but thats ok. If the ddx layer initializes the formats - * one at a time calling AddScreen() after each, then each - * iteration will make it a little more accurate. Worst case - * we do this loop N * numPixmapFormats where N is # of screens. - * Anyway, this must be called after InitOutput and before the - * screen init routine is called. - */ - for (format=0; formatrgf = ~0L; /* there are no scratch GCs yet*/ - WindowTable[i] = NullWindow; - screenInfo.screens[i] = pScreen; - screenInfo.numScreens++; - if (!(*pfnInit)(i, pScreen, argc, argv)) - { - dixFreePrivates(pScreen->devPrivates); - xfree(pScreen); - screenInfo.numScreens--; - return -1; - } - return i; -} diff --git a/dix/swaprep.c b/dix/swaprep.c index 9eb67654a..86242168f 100644 --- a/dix/swaprep.c +++ b/dix/swaprep.c @@ -1291,3 +1291,18 @@ WriteSConnSetupPrefix(ClientPtr pClient, xConnSetupPrefix *pcsp) SwapConnSetupPrefix(pcsp, &cspT); (void)WriteToClient(pClient, sizeof(cspT), (char *) &cspT); } + +/* + * Dummy entry for ReplySwapVector[] + */ + +void +ReplyNotSwappd( + ClientPtr pClient , + int size , + void * pbuf + ) +{ + FatalError("Not implemented"); +} + diff --git a/hw/dmx/Makefile.am b/hw/dmx/Makefile.am index 9d2778ae4..9e9b39a19 100644 --- a/hw/dmx/Makefile.am +++ b/hw/dmx/Makefile.am @@ -85,6 +85,7 @@ XDMX_LIBS = \ $(GLX_LIBS) \ input/libdmxinput.a \ config/libdmxconfig.a \ + $(MAIN_LIB) \ $(XSERVER_LIBS) Xdmx_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) diff --git a/hw/vfb/Makefile.am b/hw/vfb/Makefile.am index a4a120a05..c5b49a37d 100644 --- a/hw/vfb/Makefile.am +++ b/hw/vfb/Makefile.am @@ -22,6 +22,7 @@ Xvfb_SOURCES = $(SRCS) XVFB_LIBS = \ @XVFB_LIBS@ \ libfbcmap.a \ + $(MAIN_LIB) \ $(XSERVER_LIBS) Xvfb_LDADD = $(XVFB_LIBS) $(XVFB_SYS_LIBS) $(XSERVER_SYS_LIBS) diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am index b6a534b2f..3b9ff9c3e 100644 --- a/hw/xfree86/Makefile.am +++ b/hw/xfree86/Makefile.am @@ -56,7 +56,7 @@ libxorg.c xorg.c: DISTCLEANFILES = libxorg.c xorg.c Xorg_DEPENDENCIES = libxorg.la -Xorg_LDADD = libxorg.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) +Xorg_LDADD = $(MAIN_LIB) libxorg.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) Xorg_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) diff --git a/hw/xquartz/mach-startup/Makefile.am b/hw/xquartz/mach-startup/Makefile.am index b0112949d..0c609e384 100644 --- a/hw/xquartz/mach-startup/Makefile.am +++ b/hw/xquartz/mach-startup/Makefile.am @@ -19,7 +19,7 @@ X11_bin_LDADD = \ $(top_builddir)/dix/dixfonts.lo \ $(top_builddir)/miext/rootless/librootless.la \ $(top_builddir)/hw/xquartz/pbproxy/libxpbproxy.la \ - $(DARWIN_LIBS) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) -lXplugin + $(DARWIN_LIBS) $(MAIN_LIB) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) -lXplugin X11_bin_LDFLAGS = \ -XCClinker -Objc \ diff --git a/include/dix.h b/include/dix.h index b1333dc5c..896553a60 100644 --- a/include/dix.h +++ b/include/dix.h @@ -170,6 +170,7 @@ extern _X_EXPORT void SendErrorToClient( extern _X_EXPORT void MarkClientException( ClientPtr /*client*/); +extern _X_HIDDEN Bool CreateConnectionBlock(void); /* dixutils.c */ extern _X_EXPORT void CopyISOLatin1Lowered( From 4124c465a85713fe44843a16c5e2b13ece17e9d2 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 15 Apr 2009 17:21:08 +1000 Subject: [PATCH 12/89] Add a test-suite for in-server unit-testing. This patch adds a test/ directory that contains the setup for a unit-testing suite designed for in-server unit-testing. All functions available to the X server are available to the test binaries through static linking. This test suite uses the glib testing framework. Do not use glib calls outside of the test/ directory. Signed-off-by: Peter Hutterer --- configure.ac | 12 ++++ test/Makefile.am | 39 +++++++++++ test/README | 36 ++++++++++ test/xkb.c | 173 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 260 insertions(+) create mode 100644 test/Makefile.am create mode 100644 test/README create mode 100644 test/xkb.c diff --git a/configure.ac b/configure.ac index 6628a4462..2151ed120 100644 --- a/configure.ac +++ b/configure.ac @@ -439,6 +439,9 @@ AC_ARG_ENABLE(werror, AS_HELP_STRING([--enable-werror], AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [Enable debugging (default: disabled)]), [DEBUGGING=$enableval], [DEBUGGING=no]) +AC_ARG_ENABLE(unit-tests, AS_HELP_STRING([--enable-unit-tests], + [Enable unit-tests (default: enabled)]), + [UNITTESTS=$enableval], [UNITTESTS=yes]) AC_ARG_WITH(int10, AS_HELP_STRING([--with-int10=BACKEND], [int10 backend: vm86, x86emu or stub]), [INT10="$withval"], [INT10="$DEFAULT_INT10"]) @@ -1141,6 +1144,14 @@ if test "x$DEBUGGING" = xyes; then fi AM_CONDITIONAL(DEBUG, [test "x$DEBUGGING" = xyes]) +if test "x$UNITTESTS" = xyes; then + AC_DEFINE(UNITTESTS, 1, [Enable unit tests]) + PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16]) + AC_SUBST([GLIB_LIBS]) + AC_SUBST([GLIB_CFLAGS]) +fi +AM_CONDITIONAL(UNITTESTS, [test "x$UNITTESTS" = xyes]) + AC_DEFINE(XTEST, 1, [Support XTest extension]) AC_DEFINE(XSYNC, 1, [Support XSync extension]) AC_DEFINE(XCMISC, 1, [Support XCMisc extension]) @@ -1980,5 +1991,6 @@ hw/kdrive/fbdev/Makefile hw/kdrive/linux/Makefile hw/kdrive/sdl/Makefile hw/kdrive/src/Makefile +test/Makefile xorg-server.pc ]) diff --git a/test/Makefile.am b/test/Makefile.am new file mode 100644 index 000000000..5b1daac20 --- /dev/null +++ b/test/Makefile.am @@ -0,0 +1,39 @@ +if UNITTESTS +check_PROGRAMS = xkb +check_LTLIBRARIES = libxservertest.la + +TESTS=$(check_PROGRAMS) + +AM_CFLAGS = $(DIX_CFLAGS) $(GLIB_CFLAGS) @XORG_CFLAGS@ +INCLUDES = @XORG_INCS@ +TEST_LDADD=libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLIB_LIBS) + +xkb_LDADD=$(TEST_LDADD) + + +libxservertest_la_LIBADD = \ + $(XSERVER_LIBS) \ + $(top_builddir)/hw/xfree86/loader/libloader.la \ + $(top_builddir)/hw/xfree86/os-support/libxorgos.la \ + $(top_builddir)/hw/xfree86/common/libcommon.la \ + $(top_builddir)/hw/xfree86/parser/libxf86config.la \ + $(top_builddir)/hw/xfree86/dixmods/libdixmods.la \ + $(top_builddir)/hw/xfree86/modes/libxf86modes.la \ + $(top_builddir)/hw/xfree86/ramdac/libramdac.la \ + $(top_builddir)/hw/xfree86/ddc/libddc.la \ + $(top_builddir)/hw/xfree86/i2c/libi2c.la \ + $(top_builddir)/hw/xfree86/dixmods/libxorgxkb.la \ + $(top_builddir)/hw/xfree86/libxorg.la \ + $(top_builddir)/mi/libmi.la \ + $(top_builddir)/os/libos.la \ + @XORG_LIBS@ + +CLEANFILES=libxservertest.c + +libxservertest.c: + touch $@ + +all: + @echo "Run 'make check' to run the test suite" + +endif diff --git a/test/README b/test/README new file mode 100644 index 000000000..5759a72fd --- /dev/null +++ b/test/README @@ -0,0 +1,36 @@ + X server test suite + +This suite contains a set of tests to verify the behaviour of functions used +internally to the server. This test suite is based on glib's testing +framework [1]. + += How it works = +Through some automake abuse, we link the test programs with the same static +libraries as the Xorg binary. The test suites can then call various functions +and verify their behaviour - without the need to start the server or connect +clients. + +This testing only works for functions that do not rely on a particular state +of the X server. Unless the test suite replicates the expected state, which +may be difficult. + += How to run the tests = +Run "make check" the test directory. This will compile the tests and execute +them in the order specified in the TESTS variable in test/Makefile.am. + +Each set of tests related to a subsystem are available as a binary that can be +executed directly. For example, run "xkb" to perform some xkb-related tests. + +== Adding a new test == +When adding a new test, ensure that you add a short description of what the +test does and what the expected outcome is. If the test reproduces a +particular bug, using g_test_bug(). + +== Misc == + +The programs "gtester" and "gtester-report" may be used to generate XML/HTML +log files of tests succeeded and failed. + +--------- + +[1] http://library.gnome.org/devel/glib/stable/glib-Testing.html diff --git a/test/xkb.c b/test/xkb.c new file mode 100644 index 000000000..6fbb26a01 --- /dev/null +++ b/test/xkb.c @@ -0,0 +1,173 @@ +/** + * Copyright © 2009 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (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. + */ + +#ifdef HAVE_DIX_CONFIG_H +#include +#endif + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "misc.h" +#include "inputstr.h" +#include "opaque.h" +#include "property.h" +#define XKBSRV_NEED_FILE_FUNCS +#include +#include "../xkb/xkbgeom.h" +#include +#include "xkbfile.h" +#include "../xkb/xkb.h" + +#include + +/** + * Initialize an empty XkbRMLVOSet. + * Call XkbGetRulesDflts to obtain the default ruleset. + * Compare obtained ruleset with the built-in defaults. + * + * Result: RMLVO defaults are the same as obtained. + */ +static void xkb_get_rules_test(void) +{ + XkbRMLVOSet rmlvo = { NULL}; + XkbGetRulesDflts(&rmlvo); + + + g_assert(rmlvo.rules); + g_assert(rmlvo.model); + g_assert(rmlvo.layout); + g_assert(rmlvo.variant); + g_assert(rmlvo.options); + g_assert(strcmp(rmlvo.rules, XKB_DFLT_RULES) == 0); + g_assert(strcmp(rmlvo.model, XKB_DFLT_MODEL) == 0); + g_assert(strcmp(rmlvo.layout, XKB_DFLT_LAYOUT) == 0); + g_assert(strcmp(rmlvo.variant, XKB_DFLT_VARIANT) == 0); + g_assert(strcmp(rmlvo.options, XKB_DFLT_OPTIONS) == 0); +} + +/** + * Initialize an random XkbRMLVOSet. + * Call XkbGetRulesDflts to obtain the default ruleset. + * Compare obtained ruleset with the built-in defaults. + * Result: RMLVO defaults are the same as obtained. + */ +static void xkb_set_rules_test(void) +{ + XkbRMLVOSet rmlvo = { + .rules = "test-rules", + .model = "test-model", + .layout = "test-layout", + .variant = "test-variant", + .options = "test-options" + }; + XkbRMLVOSet rmlvo_new = { NULL }; + + XkbSetRulesDflts(&rmlvo); + XkbGetRulesDflts(&rmlvo_new); + + /* XkbGetRulesDflts strdups the values */ + g_assert(rmlvo.rules != rmlvo_new.rules); + g_assert(rmlvo.model != rmlvo_new.model); + g_assert(rmlvo.layout != rmlvo_new.layout); + g_assert(rmlvo.variant != rmlvo_new.variant); + g_assert(rmlvo.options != rmlvo_new.options); + + g_assert(strcmp(rmlvo.rules, rmlvo_new.rules) == 0); + g_assert(strcmp(rmlvo.model, rmlvo_new.model) == 0); + g_assert(strcmp(rmlvo.layout, rmlvo_new.layout) == 0); + g_assert(strcmp(rmlvo.variant, rmlvo_new.variant) == 0); + g_assert(strcmp(rmlvo.options, rmlvo_new.options) == 0); +} + + +/** + * Get the default RMLVO set. + * Set the default RMLVO set. + * Get the default RMLVO set. + * Repeat the last two steps. + * + * Result: RMLVO set obtained is the same as previously set. + */ +static void xkb_set_get_rules_test(void) +{ +/* This test failed before XkbGetRulesDftlts changed to strdup. + We test this twice because the first time using XkbGetRulesDflts we obtain + the built-in defaults. The unexpected free isn't triggered until the second + XkbSetRulesDefaults. + */ + XkbRMLVOSet rmlvo = { NULL }; + XkbRMLVOSet rmlvo_backup; + + XkbGetRulesDflts(&rmlvo); + + /* pass 1 */ + XkbSetRulesDflts(&rmlvo); + XkbGetRulesDflts(&rmlvo); + + /* Make a backup copy */ + rmlvo_backup.rules = strdup(rmlvo.rules); + rmlvo_backup.layout = strdup(rmlvo.layout); + rmlvo_backup.model = strdup(rmlvo.model); + rmlvo_backup.variant = strdup(rmlvo.variant); + rmlvo_backup.options = strdup(rmlvo.options); + + /* pass 2 */ + XkbSetRulesDflts(&rmlvo); + + /* This test is iffy, because strictly we may be comparing against already + * freed memory */ + g_assert(strcmp(rmlvo.rules, rmlvo_backup.rules) == 0); + g_assert(strcmp(rmlvo.model, rmlvo_backup.model) == 0); + g_assert(strcmp(rmlvo.layout, rmlvo_backup.layout) == 0); + g_assert(strcmp(rmlvo.variant, rmlvo_backup.variant) == 0); + g_assert(strcmp(rmlvo.options, rmlvo_backup.options) == 0); + + XkbGetRulesDflts(&rmlvo); + g_assert(strcmp(rmlvo.rules, rmlvo_backup.rules) == 0); + g_assert(strcmp(rmlvo.model, rmlvo_backup.model) == 0); + g_assert(strcmp(rmlvo.layout, rmlvo_backup.layout) == 0); + g_assert(strcmp(rmlvo.variant, rmlvo_backup.variant) == 0); + g_assert(strcmp(rmlvo.options, rmlvo_backup.options) == 0); +} + + +int main(int argc, char** argv) +{ + g_test_init(&argc, &argv,NULL); + g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id="); + + g_test_add_func("/xkb/set-get-rules", xkb_set_get_rules_test); + g_test_add_func("/xkb/get-rules", xkb_get_rules_test); + g_test_add_func("/xkb/set-rules", xkb_set_rules_test); + + return g_test_run(); +} From 1127ca097cb75450bcccfc5f5d82e435de2fb5b7 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 16 Apr 2009 11:41:58 +1000 Subject: [PATCH 13/89] test: add a simple test to verify device axis intialization. Signed-off-by: Peter Hutterer --- test/Makefile.am | 4 +-- test/input.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 test/input.c diff --git a/test/Makefile.am b/test/Makefile.am index 5b1daac20..dbad93bb1 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1,5 +1,5 @@ if UNITTESTS -check_PROGRAMS = xkb +check_PROGRAMS = xkb input check_LTLIBRARIES = libxservertest.la TESTS=$(check_PROGRAMS) @@ -9,7 +9,7 @@ INCLUDES = @XORG_INCS@ TEST_LDADD=libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLIB_LIBS) xkb_LDADD=$(TEST_LDADD) - +input_LDADD=$(TEST_LDADD) libxservertest_la_LIBADD = \ $(XSERVER_LIBS) \ diff --git a/test/input.c b/test/input.c new file mode 100644 index 000000000..bcb4c5786 --- /dev/null +++ b/test/input.c @@ -0,0 +1,83 @@ +/** + * Copyright © 2009 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (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. + */ + +#ifdef HAVE_DIX_CONFIG_H +#include +#endif + +#include +#include "misc.h" +#include "resource.h" +#include +#include +#include "windowstr.h" +#include "inputstr.h" + +#include + +/** + * Init a device with axes. + * Verify values set on the device. + * + * Result: All axes set to default values (usually 0). + */ +static void dix_init_valuators(void) +{ + DeviceIntRec dev; + ValuatorClassPtr val; + const int num_axes = 2; + int i; + + + memset(&dev, 0, sizeof(DeviceIntRec)); + dev.isMaster = TRUE; /* claim it's a master to stop ptracccel */ + + g_assert(InitValuatorClassDeviceStruct(NULL, 0, 0, 0) == FALSE); + g_assert(InitValuatorClassDeviceStruct(&dev, num_axes, 0, Absolute)); + + val = dev.valuator; + g_assert(val); + g_assert(val->numAxes == num_axes); + g_assert(val->numMotionEvents == 0); + g_assert(val->mode == Absolute); + g_assert(val->axisVal); + + for (i = 0; i < num_axes; i++) + { + g_assert(val->axisVal[i] == 0); + g_assert(val->axes->min_value == NO_AXIS_LIMITS); + g_assert(val->axes->max_value == NO_AXIS_LIMITS); + } + + g_assert(dev.last.numValuators == num_axes); +} + +int main(int argc, char** argv) +{ + g_test_init(&argc, &argv,NULL); + g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id="); + + g_test_add_func("/dix/input/init-valuators", dix_init_valuators); + + return g_test_run(); +} From dc2767d1c5db60385867c76ba2de507fe0cb8a90 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 21 Apr 2009 22:18:23 +1000 Subject: [PATCH 14/89] test: add InternalEvent to core event conversion tests. Signed-off-by: Peter Hutterer --- test/input.c | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) diff --git a/test/input.c b/test/input.c index bcb4c5786..eb0543eda 100644 --- a/test/input.c +++ b/test/input.c @@ -32,6 +32,7 @@ #include #include "windowstr.h" #include "inputstr.h" +#include "eventconvert.h" #include @@ -72,12 +73,155 @@ static void dix_init_valuators(void) g_assert(dev.last.numValuators == num_axes); } + +/** + * Convert various internal events to the matching core event and verify the + * parameters. + */ +static void dix_event_to_core(int type) +{ + DeviceEvent ev; + xEvent core; + int time; + int x, y; + int rc; + int state; + int detail; + + /* EventToCore memsets the event to 0 */ +#define test_event() \ + g_assert(rc == Success); \ + g_assert(core.u.u.type == type); \ + g_assert(core.u.u.detail == detail); \ + g_assert(core.u.keyButtonPointer.time == time); \ + g_assert(core.u.keyButtonPointer.rootX == x); \ + g_assert(core.u.keyButtonPointer.rootY == y); \ + g_assert(core.u.keyButtonPointer.state == state); \ + g_assert(core.u.keyButtonPointer.eventX == 0); \ + g_assert(core.u.keyButtonPointer.eventY == 0); \ + g_assert(core.u.keyButtonPointer.root == 0); \ + g_assert(core.u.keyButtonPointer.event == 0); \ + g_assert(core.u.keyButtonPointer.child == 0); \ + g_assert(core.u.keyButtonPointer.sameScreen == FALSE); + + x = 0; + y = 0; + time = 12345; + state = 0; + detail = 0; + + ev.header = 0xFF; + ev.length = sizeof(DeviceEvent); + ev.time = time; + ev.root_y = x; + ev.root_x = y; + ev.corestate = state; + ev.detail.key = detail; + + ev.type = type; + ev.detail.key = 0; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + x = 1; + y = 2; + ev.root_x = x; + ev.root_y = y; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + x = 0x7FFF; + y = 0x7FFF; + ev.root_x = x; + ev.root_y = y; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + x = 0x8000; /* too high */ + y = 0x8000; /* too high */ + ev.root_x = x; + ev.root_y = y; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(core.u.keyButtonPointer.rootX != x); + g_assert(core.u.keyButtonPointer.rootY != y); + + x = 0x7FFF; + y = 0x7FFF; + ev.root_x = x; + ev.root_y = y; + time = 0; + ev.time = time; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + detail = 1; + ev.detail.key = detail; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + detail = 0xFF; /* highest value */ + ev.detail.key = detail; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + detail = 0xFFF; /* too big */ + ev.detail.key = detail; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(rc == BadMatch); + + detail = 0xFF; /* too big */ + ev.detail.key = detail; + state = 0xFFFF; /* highest value */ + ev.corestate = state; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + state = 0x10000; /* too big */ + ev.corestate = state; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(core.u.keyButtonPointer.state != state); + g_assert(core.u.keyButtonPointer.state == (state & 0xFFFF)); + +#undef test_event +} + +static void dix_event_to_core_conversion(void) +{ + DeviceEvent ev; + xEvent core; + int rc; + + ev.header = 0xFF; + ev.length = sizeof(DeviceEvent); + + ev.type = 0; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(rc == BadImplementation); + + ev.type = 1; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(rc == BadImplementation); + + ev.type = ET_ProximityOut + 1; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(rc == BadImplementation); + + dix_event_to_core(ET_KeyPress); + dix_event_to_core(ET_KeyRelease); + dix_event_to_core(ET_ButtonPress); + dix_event_to_core(ET_ButtonRelease); + dix_event_to_core(ET_Motion); + dix_event_to_core(ET_ProximityIn); + dix_event_to_core(ET_ProximityOut); +} + int main(int argc, char** argv) { g_test_init(&argc, &argv,NULL); g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id="); g_test_add_func("/dix/input/init-valuators", dix_init_valuators); + g_test_add_func("/dix/input/event-core-conversion", dix_event_to_core_conversion); return g_test_run(); } From 737b49199a05299486064e6e762cf2a2f6f95be6 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 9 Apr 2009 15:40:24 +1000 Subject: [PATCH 15/89] xfree86: restore default off for DontZap Zapping is triggered by xkb these days, so note in the man page that it's the Terminate_Server action. Since it's XKB, personal preferences towards or against zapping should be achieved through xkb rulesets. If Terminate_Server is not in the xkb actions, then we can't zap anyway and we don't need a default of DontZap "on". This patch restores the old meaning of DontZap - disallow zapping altogether, regardless of XKB's current keymap. Ideally, this patch should be accompanied by b0f64bdab00db652e in xkeyboard-config. Signed-off-by: Peter Hutterer --- doc/Xserver.man.pre | 2 +- hw/xfree86/common/xf86Config.c | 5 ++--- hw/xfree86/doc/man/xorg.conf.man.pre | 11 +++++------ 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/doc/Xserver.man.pre b/doc/Xserver.man.pre index e9a3b9c7d..e2673f7be 100644 --- a/doc/Xserver.man.pre +++ b/doc/Xserver.man.pre @@ -219,7 +219,7 @@ turns on auto-repeat. starts the stipple with the classic stipple and cursor visible. The default is to start with a black root window, and to suppress display of the cursor until the first time an application calls XDefineCursor(). For the Xorg -server, this also changes the default for the DontZap option to FALSE. For +server, this also sets the default for the DontZap option to FALSE. For kdrive servers, this implies -zap. .TP 8 .B \-s \fIminutes\fP diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c index 7ea6197de..8b07566be 100644 --- a/hw/xfree86/common/xf86Config.c +++ b/hw/xfree86/common/xf86Config.c @@ -726,7 +726,7 @@ static OptionInfoRec FlagOptions[] = { { FLAG_DONTVTSWITCH, "DontVTSwitch", OPTV_BOOLEAN, {0}, FALSE }, { FLAG_DONTZAP, "DontZap", OPTV_BOOLEAN, - {0}, TRUE }, + {0}, FALSE }, { FLAG_DONTZOOM, "DontZoom", OPTV_BOOLEAN, {0}, FALSE }, { FLAG_DISABLEVIDMODE, "DisableVidModeExtension", OPTV_BOOLEAN, @@ -834,8 +834,7 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts) xf86GetOptValBool(FlagOptions, FLAG_NOTRAPSIGNALS, &xf86Info.notrapSignals); xf86GetOptValBool(FlagOptions, FLAG_DONTVTSWITCH, &xf86Info.dontVTSwitch); - if (!xf86GetOptValBool(FlagOptions, FLAG_DONTZAP, &xf86Info.dontZap)) - xf86Info.dontZap = !party_like_its_1989; + xf86GetOptValBool(FlagOptions, FLAG_DONTZAP, &xf86Info.dontZap); xf86GetOptValBool(FlagOptions, FLAG_DONTZOOM, &xf86Info.dontZoom); xf86GetOptValBool(FlagOptions, FLAG_IGNORE_ABI, &xf86Info.ignoreABI); diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre index 7349def0d..fbb2c6b73 100644 --- a/hw/xfree86/doc/man/xorg.conf.man.pre +++ b/hw/xfree86/doc/man/xorg.conf.man.pre @@ -464,12 +464,11 @@ Default: off. .TP 7 .BI "Option \*qDontZap\*q \*q" boolean \*q This disallows the use of the -.B Ctrl+Alt+Backspace -sequence. -That sequence is normally used to terminate the __xservername__ server. -When this option is enabled (as per default), that key sequence has no -special meaning. -Default: on. +.B Terminate_Server +XKB action (usually on Ctrl+Alt+Backspace, depending on XKB options). +This action is normally used to terminate the __xservername__ server. +When this option is enabled, the action has no effect. +Default: off. .TP 7 .BI "Option \*qDontZoom\*q \*q" boolean \*q This disallows the use of the From 1abe0ee3da5e1268c7315f841d31337ea6524cf0 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Tue, 28 Apr 2009 23:51:40 -0400 Subject: [PATCH 16/89] kdrive: fix Xvfb build with separate libmain. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 2151ed120..3fc4dd405 100644 --- a/configure.ac +++ b/configure.ac @@ -1843,7 +1843,7 @@ if test "$KDRIVE" = yes; then ;; esac KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.la' - KDRIVE_LOCAL_LIBS="$DIX_LIB $MAIN_LIB $KDRIVE_LIB $KDRIVE_STUB_LIB $CONFIG_LIB" + KDRIVE_LOCAL_LIBS="$MAIN_LIB $DIX_LIB $KDRIVE_LIB $KDRIVE_STUB_LIB $CONFIG_LIB" KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $FB_LIB $MI_LIB $KDRIVE_PURE_LIBS" KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $KDRIVE_OS_LIB $OS_LIB" KDRIVE_LIBS="$TSLIB_LIBS $KDRIVE_LOCAL_LIBS $XSERVER_SYS_LIBS $GLX_SYS_LIBS" From 57aff88c7d0761e590806d07bee1c9410680c89f Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Wed, 29 Apr 2009 01:04:37 -0400 Subject: [PATCH 17/89] Fix most remaining deprecated resource lookups. Callsites updated to use dixLookupResourceBy{Type,Class}. TODO: Audit access modes to make sure they reflect the usage. --- Xext/panoramiX.c | 7 +- Xext/panoramiX.h | 2 - Xext/panoramiXprocs.c | 671 +++++++++++++++------------ Xext/saver.c | 54 ++- Xext/security.c | 11 +- Xext/shape.c | 75 +-- Xext/shm.c | 34 +- Xext/sync.c | 82 ++-- Xext/xf86bigfont.c | 14 +- Xext/xvdisp.c | 234 ++++------ Xext/xvdix.h | 18 +- Xext/xvmain.c | 9 +- Xext/xvmc.c | 57 +-- Xi/chdevcur.c | 10 +- Xi/extgrbdev.c | 14 +- damageext/damageextint.h | 9 +- dbe/dbe.c | 33 +- dix/colormap.c | 24 +- dix/cursor.c | 5 +- dix/deprecated.c | 8 +- dix/dispatch.c | 9 +- dix/dixfonts.c | 61 +-- dix/dixutils.c | 11 +- dix/events.c | 13 +- dix/resource.c | 22 +- dix/window.c | 56 ++- fb/fbcmap.c | 6 +- hw/kdrive/src/kcmap.c | 3 +- hw/vfb/InitOutput.c | 6 +- hw/xfree86/common/xf86cmap.c | 4 +- hw/xfree86/dixmods/extmod/xf86dga2.c | 18 +- hw/xfree86/dri/dri.c | 5 +- hw/xfree86/vgahw/vgaCmap.c | 4 +- hw/xnest/Color.c | 22 +- hw/xnest/Window.c | 9 +- mi/micmap.c | 6 +- mi/miexpose.c | 2 +- randr/randr.c | 6 +- randr/randrstr.h | 32 +- randr/rrcrtc.c | 61 +-- randr/rrdispatch.c | 7 +- randr/rrmode.c | 40 +- randr/rroutput.c | 37 +- randr/rrproperty.c | 33 +- record/record.c | 9 +- render/picture.c | 5 +- render/picturestr.h | 9 +- render/render.c | 170 +++---- xfixes/cursor.c | 7 +- xfixes/select.c | 6 +- 50 files changed, 1015 insertions(+), 1035 deletions(-) diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c index 767f6035e..4ab6f6bdd 100644 --- a/Xext/panoramiX.c +++ b/Xext/panoramiX.c @@ -354,9 +354,12 @@ PanoramiXRes * PanoramiXFindIDByScrnum(RESTYPE type, XID id, int screen) { PanoramiXSearchData data; + pointer val; - if(!screen) - return LookupIDByType(id, type); + if(!screen) { + dixLookupResourceByType(&val, id, type, serverClient, DixReadAccess); + return val; + } data.screen = screen; data.id = id; diff --git a/Xext/panoramiX.h b/Xext/panoramiX.h index d413ff9cf..cca4c5249 100644 --- a/Xext/panoramiX.h +++ b/Xext/panoramiX.h @@ -97,6 +97,4 @@ typedef struct { #define IS_SHARED_PIXMAP(r) (((r)->type == XRT_PIXMAP) && (r)->u.pix.shared) -#define SKIP_FAKE_WINDOW(a) if(!LookupIDByType(a, XRT_WINDOW)) return - #endif /* _PANORAMIX_H_ */ diff --git a/Xext/panoramiXprocs.c b/Xext/panoramiXprocs.c index 72a207ab8..8b51009b3 100644 --- a/Xext/panoramiXprocs.c +++ b/Xext/panoramiXprocs.c @@ -67,7 +67,7 @@ int PanoramiXCreateWindow(ClientPtr client) PanoramiXRes *cmap = NULL; REQUEST(xCreateWindowReq); int pback_offset = 0, pbord_offset = 0, cmap_offset = 0; - int result = 0, len, j; + int result, len, j; int orig_x, orig_y; XID orig_visual, tmp; Bool parentIsRoot; @@ -78,9 +78,10 @@ int PanoramiXCreateWindow(ClientPtr client) if (Ones(stuff->mask) != len) return BadLength; - if (!(parent = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->parent, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&parent, stuff->parent, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; if(stuff->class == CopyFromParent) stuff->class = parent->u.win.class; @@ -92,27 +93,30 @@ int PanoramiXCreateWindow(ClientPtr client) pback_offset = Ones((Mask)stuff->mask & (CWBackPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pback_offset); if ((tmp != None) && (tmp != ParentRelative)) { - if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&backPix, tmp, + XRT_PIXMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & CWBorderPixmap) { pbord_offset = Ones((Mask)stuff->mask & (CWBorderPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pbord_offset); if (tmp != CopyFromParent) { - if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&bordPix, tmp, + XRT_PIXMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & CWColormap) { cmap_offset = Ones((Mask)stuff->mask & (CWColormap - 1)); tmp = *((CARD32 *) &stuff[1] + cmap_offset); if ((tmp != CopyFromParent) && (tmp != None)) { - if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_COLORMAP, DixReadAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, tmp, + XRT_COLORMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; } } @@ -170,7 +174,7 @@ int PanoramiXChangeWindowAttributes(ClientPtr client) PanoramiXRes *cmap = NULL; REQUEST(xChangeWindowAttributesReq); int pback_offset = 0, pbord_offset = 0, cmap_offset = 0; - int result = 0, len, j; + int result, len, j; XID tmp; REQUEST_AT_LEAST_SIZE(xChangeWindowAttributesReq); @@ -179,9 +183,10 @@ int PanoramiXChangeWindowAttributes(ClientPtr client) if (Ones(stuff->valueMask) != len) return BadLength; - if (!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; if((win->u.win.class == InputOnly) && (stuff->valueMask & (~INPUTONLY_LEGAL_MASK))) @@ -191,27 +196,30 @@ int PanoramiXChangeWindowAttributes(ClientPtr client) pback_offset = Ones((Mask)stuff->valueMask & (CWBackPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pback_offset); if ((tmp != None) && (tmp != ParentRelative)) { - if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&backPix, tmp, + XRT_PIXMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->valueMask & CWBorderPixmap) { pbord_offset = Ones((Mask)stuff->valueMask & (CWBorderPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pbord_offset); if (tmp != CopyFromParent) { - if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&bordPix, tmp, + XRT_PIXMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->valueMask & CWColormap) { cmap_offset = Ones((Mask)stuff->valueMask & (CWColormap - 1)); tmp = *((CARD32 *) &stuff[1] + cmap_offset); if ((tmp != CopyFromParent) && (tmp != None)) { - if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_COLORMAP, DixReadAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, tmp, + XRT_COLORMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; } } @@ -233,14 +241,15 @@ int PanoramiXChangeWindowAttributes(ClientPtr client) int PanoramiXDestroyWindow(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixDestroyAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, XRT_WINDOW, + client, DixDestroyAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = win->info[j].id; @@ -258,14 +267,15 @@ int PanoramiXDestroyWindow(ClientPtr client) int PanoramiXDestroySubwindows(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixDestroyAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, XRT_WINDOW, + client, DixDestroyAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = win->info[j].id; @@ -283,14 +293,15 @@ int PanoramiXDestroySubwindows(ClientPtr client) int PanoramiXChangeSaveSet(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xChangeSaveSetReq); REQUEST_SIZE_MATCH(xChangeSaveSetReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_BACKWARD(j) { stuff->window = win->info[j].id; @@ -305,20 +316,22 @@ int PanoramiXChangeSaveSet(ClientPtr client) int PanoramiXReparentWindow(ClientPtr client) { PanoramiXRes *win, *parent; - int result = 0, j; + int result, j; int x, y; Bool parentIsRoot; REQUEST(xReparentWindowReq); REQUEST_SIZE_MATCH(xReparentWindowReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; - if(!(parent = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->parent, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&parent, stuff->parent, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; x = stuff->x; y = stuff->y; @@ -342,14 +355,15 @@ int PanoramiXReparentWindow(ClientPtr client) int PanoramiXMapWindow(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_FORWARD(j) { stuff->id = win->info[j].id; @@ -364,14 +378,15 @@ int PanoramiXMapWindow(ClientPtr client) int PanoramiXMapSubwindows(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_FORWARD(j) { stuff->id = win->info[j].id; @@ -386,14 +401,15 @@ int PanoramiXMapSubwindows(ClientPtr client) int PanoramiXUnmapWindow(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_FORWARD(j) { stuff->id = win->info[j].id; @@ -408,14 +424,15 @@ int PanoramiXUnmapWindow(ClientPtr client) int PanoramiXUnmapSubwindows(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_FORWARD(j) { stuff->id = win->info[j].id; @@ -432,7 +449,7 @@ int PanoramiXConfigureWindow(ClientPtr client) PanoramiXRes *win; PanoramiXRes *sib = NULL; WindowPtr pWin; - int result = 0, j, len, sib_offset = 0, x = 0, y = 0; + int result, j, len, sib_offset = 0, x = 0, y = 0; int x_offset = -1; int y_offset = -1; REQUEST(xConfigureWindowReq); @@ -444,21 +461,24 @@ int PanoramiXConfigureWindow(ClientPtr client) return BadLength; /* because we need the parent */ - if (!(pWin = (WindowPtr)SecurityLookupIDByType( - client, stuff->window, RT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&pWin, stuff->window, + RT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; - if (!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; if ((Mask)stuff->mask & CWSibling) { XID tmp; sib_offset = Ones((Mask)stuff->mask & (CWSibling - 1)); if ((tmp = *((CARD32 *) &stuff[1] + sib_offset))) { - if(!(sib = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&sib, tmp, XRT_WINDOW, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; } } @@ -496,14 +516,15 @@ int PanoramiXConfigureWindow(ClientPtr client) int PanoramiXCirculateWindow(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xCirculateWindowReq); REQUEST_SIZE_MATCH(xCirculateWindowReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_FORWARD(j) { stuff->window = win->info[j].id; @@ -634,15 +655,16 @@ int PanoramiXTranslateCoords(ClientPtr client) int PanoramiXCreatePixmap(ClientPtr client) { PanoramiXRes *refDraw, *newPix; - int result = 0, j; + int result, j; REQUEST(xCreatePixmapReq); REQUEST_SIZE_MATCH(xCreatePixmapReq); client->errorValue = stuff->pid; - if(!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixReadAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&refDraw, stuff->drawable, + XRC_DRAWABLE, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(!(newPix = xalloc(sizeof(PanoramiXRes)))) return BadAlloc; @@ -672,16 +694,17 @@ int PanoramiXCreatePixmap(ClientPtr client) int PanoramiXFreePixmap(ClientPtr client) { PanoramiXRes *pix; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); client->errorValue = stuff->id; - if(!(pix = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_PIXMAP, DixDestroyAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&pix, stuff->id, XRT_PIXMAP, + client, DixDestroyAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = pix->info[j].id; @@ -705,7 +728,7 @@ int PanoramiXCreateGC(ClientPtr client) PanoramiXRes *clip = NULL; REQUEST(xCreateGCReq); int tile_offset = 0, stip_offset = 0, clip_offset = 0; - int result = 0, len, j; + int result, len, j; XID tmp; REQUEST_AT_LEAST_SIZE(xCreateGCReq); @@ -715,32 +738,36 @@ int PanoramiXCreateGC(ClientPtr client) if (Ones(stuff->mask) != len) return BadLength; - if (!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixReadAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&refDraw, stuff->drawable, + XRC_DRAWABLE, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if ((Mask)stuff->mask & GCTile) { tile_offset = Ones((Mask)stuff->mask & (GCTile - 1)); if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) { - if(!(tile = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&tile, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & GCStipple) { stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1)); if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) { - if(!(stip = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&stip, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & GCClipMask) { clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1)); if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) { - if(!(clip = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&clip, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } @@ -781,7 +808,7 @@ int PanoramiXChangeGC(ClientPtr client) PanoramiXRes *clip = NULL; REQUEST(xChangeGCReq); int tile_offset = 0, stip_offset = 0, clip_offset = 0; - int result = 0, len, j; + int result, len, j; XID tmp; REQUEST_AT_LEAST_SIZE(xChangeGCReq); @@ -790,32 +817,36 @@ int PanoramiXChangeGC(ClientPtr client) if (Ones(stuff->mask) != len) return BadLength; - if (!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; if ((Mask)stuff->mask & GCTile) { tile_offset = Ones((Mask)stuff->mask & (GCTile - 1)); if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) { - if(!(tile = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&tile, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & GCStipple) { stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1)); if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) { - if(!(stip = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&stip, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & GCClipMask) { clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1)); if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) { - if(!(clip = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&clip, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } @@ -839,18 +870,20 @@ int PanoramiXChangeGC(ClientPtr client) int PanoramiXCopyGC(ClientPtr client) { PanoramiXRes *srcGC, *dstGC; - int result = 0, j; + int result, j; REQUEST(xCopyGCReq); REQUEST_SIZE_MATCH(xCopyGCReq); - if(!(srcGC = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->srcGC, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&srcGC, stuff->srcGC, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; - if(!(dstGC = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->dstGC, XRT_GC, DixWriteAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&dstGC, stuff->dstGC, XRT_GC, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; FOR_NSCREENS(j) { stuff->srcGC = srcGC->info[j].id; @@ -866,14 +899,15 @@ int PanoramiXCopyGC(ClientPtr client) int PanoramiXSetDashes(ClientPtr client) { PanoramiXRes *gc; - int result = 0, j; + int result, j; REQUEST(xSetDashesReq); REQUEST_FIXED_SIZE(xSetDashesReq, stuff->nDashes); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixWriteAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; FOR_NSCREENS_BACKWARD(j) { stuff->gc = gc->info[j].id; @@ -888,14 +922,15 @@ int PanoramiXSetDashes(ClientPtr client) int PanoramiXSetClipRectangles(ClientPtr client) { PanoramiXRes *gc; - int result = 0, j; + int result, j; REQUEST(xSetClipRectanglesReq); REQUEST_AT_LEAST_SIZE(xSetClipRectanglesReq); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixWriteAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; FOR_NSCREENS_BACKWARD(j) { stuff->gc = gc->info[j].id; @@ -910,14 +945,15 @@ int PanoramiXSetClipRectangles(ClientPtr client) int PanoramiXFreeGC(ClientPtr client) { PanoramiXRes *gc; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_GC, DixDestroyAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->id, XRT_GC, + client, DixDestroyAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = gc->info[j].id; @@ -935,15 +971,16 @@ int PanoramiXFreeGC(ClientPtr client) int PanoramiXClearToBackground(ClientPtr client) { PanoramiXRes *win; - int result = 0, j, x, y; + int result, j, x, y; Bool isRoot; REQUEST(xClearAreaReq); REQUEST_SIZE_MATCH(xClearAreaReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; x = stuff->x; y = stuff->y; @@ -974,7 +1011,7 @@ int PanoramiXClearToBackground(ClientPtr client) int PanoramiXCopyArea(ClientPtr client) { - int j, result = 0, srcx, srcy, dstx, dsty; + int j, result, srcx, srcy, dstx, dsty; PanoramiXRes *gc, *src, *dst; Bool srcIsRoot = FALSE; Bool dstIsRoot = FALSE; @@ -983,24 +1020,27 @@ int PanoramiXCopyArea(ClientPtr client) REQUEST_SIZE_MATCH(xCopyAreaReq); - if(!(src = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->srcDrawable, XRC_DRAWABLE, DixReadAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&src, stuff->srcDrawable, + XRC_DRAWABLE, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; srcShared = IS_SHARED_PIXMAP(src); - if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->dstDrawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&dst, stuff->dstDrawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; dstShared = IS_SHARED_PIXMAP(dst); if(dstShared && srcShared) return (* SavedProcVector[X_CopyArea])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; if((dst->type == XRT_WINDOW) && dst->u.win.root) dstIsRoot = TRUE; @@ -1139,24 +1179,27 @@ int PanoramiXCopyPlane(ClientPtr client) REQUEST_SIZE_MATCH(xCopyPlaneReq); - if(!(src = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->srcDrawable, XRC_DRAWABLE, DixReadAccess))) - return BadDrawable; + rc = dixLookupResourceByClass((pointer *)&src, stuff->srcDrawable, + XRC_DRAWABLE, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? BadDrawable : rc; srcShared = IS_SHARED_PIXMAP(src); - if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->dstDrawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + rc = dixLookupResourceByClass((pointer *)&dst, stuff->dstDrawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? BadDrawable : rc; dstShared = IS_SHARED_PIXMAP(dst); if(dstShared && srcShared) return (* SavedProcVector[X_CopyPlane])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + rc = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? BadGC : rc; if((dst->type == XRT_WINDOW) && dst->u.win.root) dstIsRoot = TRUE; @@ -1235,23 +1278,25 @@ int PanoramiXCopyPlane(ClientPtr client) int PanoramiXPolyPoint(ClientPtr client) { PanoramiXRes *gc, *draw; - int result = 0, npoint, j; + int result, npoint, j; xPoint *origPts; Bool isRoot; REQUEST(xPolyPointReq); REQUEST_AT_LEAST_SIZE(xPolyPointReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyPoint])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; npoint = ((client->req_len << 2) - sizeof(xPolyPointReq)) >> 2; @@ -1293,23 +1338,25 @@ int PanoramiXPolyPoint(ClientPtr client) int PanoramiXPolyLine(ClientPtr client) { PanoramiXRes *gc, *draw; - int result = 0, npoint, j; + int result, npoint, j; xPoint *origPts; Bool isRoot; REQUEST(xPolyLineReq); REQUEST_AT_LEAST_SIZE(xPolyLineReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyLine])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; npoint = ((client->req_len << 2) - sizeof(xPolyLineReq)) >> 2; @@ -1350,7 +1397,7 @@ int PanoramiXPolyLine(ClientPtr client) int PanoramiXPolySegment(ClientPtr client) { - int result = 0, nsegs, i, j; + int result, nsegs, i, j; PanoramiXRes *gc, *draw; xSegment *origSegs; Bool isRoot; @@ -1358,16 +1405,18 @@ int PanoramiXPolySegment(ClientPtr client) REQUEST_AT_LEAST_SIZE(xPolySegmentReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolySegment])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1411,7 +1460,7 @@ int PanoramiXPolySegment(ClientPtr client) int PanoramiXPolyRectangle(ClientPtr client) { - int result = 0, nrects, i, j; + int result, nrects, i, j; PanoramiXRes *gc, *draw; Bool isRoot; xRectangle *origRecs; @@ -1419,17 +1468,18 @@ int PanoramiXPolyRectangle(ClientPtr client) REQUEST_AT_LEAST_SIZE(xPolyRectangleReq); - - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyRectangle])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1472,7 +1522,7 @@ int PanoramiXPolyRectangle(ClientPtr client) int PanoramiXPolyArc(ClientPtr client) { - int result = 0, narcs, i, j; + int result, narcs, i, j; PanoramiXRes *gc, *draw; Bool isRoot; xArc *origArcs; @@ -1480,16 +1530,18 @@ int PanoramiXPolyArc(ClientPtr client) REQUEST_AT_LEAST_SIZE(xPolyArcReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyArc])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1530,7 +1582,7 @@ int PanoramiXPolyArc(ClientPtr client) int PanoramiXFillPoly(ClientPtr client) { - int result = 0, count, j; + int result, count, j; PanoramiXRes *gc, *draw; Bool isRoot; DDXPointPtr locPts; @@ -1538,16 +1590,18 @@ int PanoramiXFillPoly(ClientPtr client) REQUEST_AT_LEAST_SIZE(xFillPolyReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_FillPoly])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1589,7 +1643,7 @@ int PanoramiXFillPoly(ClientPtr client) int PanoramiXPolyFillRectangle(ClientPtr client) { - int result = 0, things, i, j; + int result, things, i, j; PanoramiXRes *gc, *draw; Bool isRoot; xRectangle *origRects; @@ -1597,16 +1651,18 @@ int PanoramiXPolyFillRectangle(ClientPtr client) REQUEST_AT_LEAST_SIZE(xPolyFillRectangleReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyFillRectangle])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1650,22 +1706,24 @@ int PanoramiXPolyFillArc(ClientPtr client) { PanoramiXRes *gc, *draw; Bool isRoot; - int result = 0, narcs, i, j; + int result, narcs, i, j; xArc *origArcs; REQUEST(xPolyFillArcReq); REQUEST_AT_LEAST_SIZE(xPolyFillArcReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyFillArc])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1709,21 +1767,23 @@ int PanoramiXPutImage(ClientPtr client) { PanoramiXRes *gc, *draw; Bool isRoot; - int j, result = 0, orig_x, orig_y; + int j, result, orig_x, orig_y; REQUEST(xPutImageReq); REQUEST_AT_LEAST_SIZE(xPutImageReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PutImage])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1765,9 +1825,10 @@ int PanoramiXGetImage(ClientPtr client) return(BadValue); } - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + rc = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? BadDrawable : rc; if(draw->type == XRT_PIXMAP) return (*SavedProcVector[X_GetImage])(client); @@ -1906,22 +1967,24 @@ PanoramiXPolyText8(ClientPtr client) { PanoramiXRes *gc, *draw; Bool isRoot; - int result = 0, j; + int result, j; int orig_x, orig_y; REQUEST(xPolyTextReq); REQUEST_AT_LEAST_SIZE(xPolyTextReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyText8])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1945,22 +2008,24 @@ PanoramiXPolyText16(ClientPtr client) { PanoramiXRes *gc, *draw; Bool isRoot; - int result = 0, j; + int result, j; int orig_x, orig_y; REQUEST(xPolyTextReq); REQUEST_AT_LEAST_SIZE(xPolyTextReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyText16])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1982,7 +2047,7 @@ PanoramiXPolyText16(ClientPtr client) int PanoramiXImageText8(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *gc, *draw; Bool isRoot; int orig_x, orig_y; @@ -1990,16 +2055,18 @@ int PanoramiXImageText8(ClientPtr client) REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_ImageText8])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -2021,7 +2088,7 @@ int PanoramiXImageText8(ClientPtr client) int PanoramiXImageText16(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *gc, *draw; Bool isRoot; int orig_x, orig_y; @@ -2029,16 +2096,18 @@ int PanoramiXImageText16(ClientPtr client) REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars << 1); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_ImageText16])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -2062,14 +2131,15 @@ int PanoramiXImageText16(ClientPtr client) int PanoramiXCreateColormap(ClientPtr client) { PanoramiXRes *win, *newCmap; - int result = 0, j, orig_visual; + int result, j, orig_visual; REQUEST(xCreateColormapReq); REQUEST_SIZE_MATCH(xCreateColormapReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; if(!(newCmap = xalloc(sizeof(PanoramiXRes)))) return BadAlloc; @@ -2100,16 +2170,17 @@ int PanoramiXCreateColormap(ClientPtr client) int PanoramiXFreeColormap(ClientPtr client) { PanoramiXRes *cmap; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); client->errorValue = stuff->id; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_COLORMAP, DixDestroyAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->id, XRT_COLORMAP, + client, DixDestroyAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = cmap->info[j].id; @@ -2128,17 +2199,18 @@ int PanoramiXCopyColormapAndFree(ClientPtr client) { PanoramiXRes *cmap, *newCmap; - int result = 0, j; + int result, j; REQUEST(xCopyColormapAndFreeReq); REQUEST_SIZE_MATCH(xCopyColormapAndFreeReq); client->errorValue = stuff->srcCmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->srcCmap, XRT_COLORMAP, - DixReadAccess | DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->srcCmap, + XRT_COLORMAP, client, + DixReadAccess | DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; if(!(newCmap = xalloc(sizeof(PanoramiXRes)))) return BadAlloc; @@ -2167,16 +2239,17 @@ PanoramiXCopyColormapAndFree(ClientPtr client) int PanoramiXInstallColormap(ClientPtr client) { REQUEST(xResourceReq); - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST_SIZE_MATCH(xResourceReq); client->errorValue = stuff->id; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_COLORMAP, DixReadAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->id, XRT_COLORMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->id = cmap->info[j].id; @@ -2190,16 +2263,17 @@ int PanoramiXInstallColormap(ClientPtr client) int PanoramiXUninstallColormap(ClientPtr client) { REQUEST(xResourceReq); - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST_SIZE_MATCH(xResourceReq); client->errorValue = stuff->id; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_COLORMAP, DixReadAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->id, XRT_COLORMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = cmap->info[j].id; @@ -2212,7 +2286,7 @@ int PanoramiXUninstallColormap(ClientPtr client) int PanoramiXAllocColor(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xAllocColorReq); @@ -2220,9 +2294,10 @@ int PanoramiXAllocColor(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; @@ -2235,7 +2310,7 @@ int PanoramiXAllocColor(ClientPtr client) int PanoramiXAllocNamedColor(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xAllocNamedColorReq); @@ -2243,9 +2318,10 @@ int PanoramiXAllocNamedColor(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; @@ -2258,7 +2334,7 @@ int PanoramiXAllocNamedColor(ClientPtr client) int PanoramiXAllocColorCells(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xAllocColorCellsReq); @@ -2266,9 +2342,10 @@ int PanoramiXAllocColorCells(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; @@ -2281,7 +2358,7 @@ int PanoramiXAllocColorCells(ClientPtr client) int PanoramiXAllocColorPlanes(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xAllocColorPlanesReq); @@ -2289,9 +2366,10 @@ int PanoramiXAllocColorPlanes(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; @@ -2305,7 +2383,7 @@ int PanoramiXAllocColorPlanes(ClientPtr client) int PanoramiXFreeColors(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xFreeColorsReq); @@ -2313,9 +2391,10 @@ int PanoramiXFreeColors(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j) { stuff->cmap = cmap->info[j].id; @@ -2327,7 +2406,7 @@ int PanoramiXFreeColors(ClientPtr client) int PanoramiXStoreColors(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xStoreColorsReq); @@ -2335,9 +2414,10 @@ int PanoramiXStoreColors(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; @@ -2350,7 +2430,7 @@ int PanoramiXStoreColors(ClientPtr client) int PanoramiXStoreNamedColor(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xStoreNamedColorReq); @@ -2358,9 +2438,10 @@ int PanoramiXStoreNamedColor(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; diff --git a/Xext/saver.c b/Xext/saver.c index 357c2155f..b59f769d5 100644 --- a/Xext/saver.c +++ b/Xext/saver.c @@ -533,11 +533,14 @@ UninstallSaverColormap (ScreenPtr pScreen) { SetupScreen(pScreen); ColormapPtr pCmap; + int rc; if (pPriv && pPriv->installedMap != None) { - pCmap = (ColormapPtr) LookupIDByType (pPriv->installedMap, RT_COLORMAP); - if (pCmap) + rc = dixLookupResourceByType((pointer *)&pCmap, pPriv->installedMap, + RT_COLORMAP, serverClient, + DixUninstallAccess); + if (rc == Success) (*pCmap->pScreen->UninstallColormap) (pCmap); pPriv->installedMap = None; CheckScreenPrivate (pScreen); @@ -651,8 +654,9 @@ CreateSaverWindow (ScreenPtr pScreen) if (i < numInstalled) return TRUE; - pCmap = (ColormapPtr) LookupIDByType (wantMap, RT_COLORMAP); - if (!pCmap) + result = dixLookupResourceByType((pointer *)&pCmap, wantMap, RT_COLORMAP, + serverClient, DixInstallAccess); + if (result != Success) return TRUE; pPriv->installedMap = wantMap; @@ -1252,15 +1256,16 @@ ProcScreenSaverSetAttributes (ClientPtr client) PanoramiXRes *backPix = NULL; PanoramiXRes *bordPix = NULL; PanoramiXRes *cmap = NULL; - int i, status = 0, len; + int i, status, len; int pback_offset = 0, pbord_offset = 0, cmap_offset = 0; XID orig_visual, tmp; REQUEST_AT_LEAST_SIZE (xScreenSaverSetAttributesReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + status = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (status != Success) + return (status == BadValue) ? BadDrawable : status; len = stuff->length - (sizeof(xScreenSaverSetAttributesReq) >> 2); if (Ones(stuff->mask) != len) @@ -1270,9 +1275,11 @@ ProcScreenSaverSetAttributes (ClientPtr client) pback_offset = Ones((Mask)stuff->mask & (CWBackPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pback_offset); if ((tmp != None) && (tmp != ParentRelative)) { - if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + status = dixLookupResourceByType((pointer *)&backPix, tmp, + XRT_PIXMAP, client, + DixReadAccess); + if (status != Success) + return (status == BadValue) ? BadPixmap : status; } } @@ -1280,9 +1287,11 @@ ProcScreenSaverSetAttributes (ClientPtr client) pbord_offset = Ones((Mask)stuff->mask & (CWBorderPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pbord_offset); if (tmp != CopyFromParent) { - if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + status = dixLookupResourceByType((pointer *)&bordPix, tmp, + XRT_PIXMAP, client, + DixReadAccess); + if (status != Success) + return (status == BadValue) ? BadPixmap : status; } } @@ -1290,9 +1299,11 @@ ProcScreenSaverSetAttributes (ClientPtr client) cmap_offset = Ones((Mask)stuff->mask & (CWColormap - 1)); tmp = *((CARD32 *) &stuff[1] + cmap_offset); if ((tmp != CopyFromParent) && (tmp != None)) { - if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_COLORMAP, DixReadAccess))) - return BadColor; + status = dixLookupResourceByType((pointer *)&cmap, tmp, + XRT_COLORMAP, client, + DixReadAccess); + if (status != Success) + return (status == BadValue) ? BadColor : status; } } @@ -1327,11 +1338,12 @@ ProcScreenSaverUnsetAttributes (ClientPtr client) if(!noPanoramiXExtension) { REQUEST(xScreenSaverUnsetAttributesReq); PanoramiXRes *draw; - int i; + int rc, i; - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + rc = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? BadDrawable : rc; for(i = PanoramiXNumScreens - 1; i > 0; i--) { stuff->drawable = draw->info[i].id; diff --git a/Xext/security.c b/Xext/security.c index 7962fdb37..bae95a3b5 100644 --- a/Xext/security.c +++ b/Xext/security.c @@ -623,13 +623,16 @@ ProcSecurityRevokeAuthorization( { REQUEST(xSecurityRevokeAuthorizationReq); SecurityAuthorizationPtr pAuth; + int rc; REQUEST_SIZE_MATCH(xSecurityRevokeAuthorizationReq); - pAuth = (SecurityAuthorizationPtr)SecurityLookupIDByType(client, - stuff->authId, SecurityAuthorizationResType, DixDestroyAccess); - if (!pAuth) - return SecurityErrorBase + XSecurityBadAuthorization; + rc = dixLookupResourceByType((pointer *)&pAuth, stuff->authId, + SecurityAuthorizationResType, client, + DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? + SecurityErrorBase + XSecurityBadAuthorization : rc; FreeResource(stuff->authId, RT_NONE); return Success; diff --git a/Xext/shape.c b/Xext/shape.c index 15d2c5c5a..5977296e5 100644 --- a/Xext/shape.c +++ b/Xext/shape.c @@ -353,13 +353,14 @@ ProcPanoramiXShapeRectangles( { REQUEST(xShapeRectanglesReq); PanoramiXRes *win; - int j, result = 0; + int j, result; REQUEST_AT_LEAST_SIZE (xShapeRectanglesReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->dest, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->dest, XRT_WINDOW, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS(j) { stuff->dest = win->info[j].id; @@ -451,18 +452,20 @@ ProcPanoramiXShapeMask( { REQUEST(xShapeMaskReq); PanoramiXRes *win, *pmap; - int j, result = 0; + int j, result; REQUEST_SIZE_MATCH (xShapeMaskReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->dest, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->dest, XRT_WINDOW, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; if(stuff->src != None) { - if(!(pmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->src, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&pmap, stuff->src, + XRT_PIXMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } else pmap = NULL; @@ -579,17 +582,19 @@ ProcPanoramiXShapeCombine( { REQUEST(xShapeCombineReq); PanoramiXRes *win, *win2; - int j, result = 0; + int j, result; REQUEST_AT_LEAST_SIZE (xShapeCombineReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->dest, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->dest, XRT_WINDOW, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; - if(!(win2 = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->src, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win2, stuff->src, XRT_WINDOW, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS(j) { stuff->dest = win->info[j].id; @@ -651,13 +656,14 @@ ProcPanoramiXShapeOffset( { REQUEST(xShapeOffsetReq); PanoramiXRes *win; - int j, result = 0; + int j, result; REQUEST_AT_LEAST_SIZE (xShapeOffsetReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->dest, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->dest, XRT_WINDOW, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS(j) { stuff->dest = win->info[j].id; @@ -740,11 +746,13 @@ ShapeFreeClient (pointer data, XID id) ShapeEventPtr pShapeEvent; WindowPtr pWin; ShapeEventPtr *pHead, pCur, pPrev; + int rc; pShapeEvent = (ShapeEventPtr) data; pWin = pShapeEvent->window; - pHead = (ShapeEventPtr *) LookupIDByType(pWin->drawable.id, ShapeEventType); - if (pHead) { + rc = dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + ShapeEventType, serverClient, DixReadAccess); + if (rc == Success) { pPrev = 0; for (pCur = *pHead; pCur && pCur != pShapeEvent; pCur=pCur->next) pPrev = pCur; @@ -789,8 +797,11 @@ ProcShapeSelectInput (ClientPtr client) rc = dixLookupWindow(&pWin, stuff->window, client, DixReceiveAccess); if (rc != Success) return rc; - pHead = (ShapeEventPtr *)SecurityLookupIDByType(client, - pWin->drawable.id, ShapeEventType, DixWriteAccess); + rc = dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + ShapeEventType, client, DixWriteAccess); + if (rc != Success && rc != BadValue) + return rc; + switch (stuff->enable) { case xTrue: if (pHead) { @@ -879,9 +890,11 @@ SendShapeNotify (WindowPtr pWin, int which) BoxRec extents; RegionPtr region; BYTE shaped; + int rc; - pHead = (ShapeEventPtr *) LookupIDByType(pWin->drawable.id, ShapeEventType); - if (!pHead) + rc = dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + ShapeEventType, serverClient, DixReadAccess); + if (rc != Success) return; switch (which) { case ShapeBounding: @@ -958,8 +971,10 @@ ProcShapeInputSelected (ClientPtr client) rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess); if (rc != Success) return rc; - pHead = (ShapeEventPtr *) SecurityLookupIDByType(client, - pWin->drawable.id, ShapeEventType, DixReadAccess); + rc = dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + ShapeEventType, client, DixReadAccess); + if (rc != Success && rc != BadValue) + return rc; enabled = xFalse; if (pHead) { for (pShapeEvent = *pHead; diff --git a/Xext/shm.c b/Xext/shm.c index 1f963c16c..cdda09f7f 100644 --- a/Xext/shm.c +++ b/Xext/shm.c @@ -144,12 +144,11 @@ static ShmFuncs fbFuncs = {fbShmCreatePixmap, NULL}; #define VERIFY_SHMSEG(shmseg,shmdesc,client) \ { \ - shmdesc = (ShmDescPtr)LookupIDByType(shmseg, ShmSegType); \ - if (!shmdesc) \ - { \ - client->errorValue = shmseg; \ - return BadShmSegCode; \ - } \ + int rc; \ + rc = dixLookupResourceByType((pointer *)&(shmdesc), shmseg, ShmSegType, \ + client, DixReadAccess); \ + if (rc != Success) \ + return (rc == BadValue) ? BadShmSegCode : rc; \ } #define VERIFY_SHMPTR(shmseg,offset,needwrite,shmdesc,client) \ @@ -513,20 +512,22 @@ doShmPutImage(DrawablePtr dst, GCPtr pGC, static int ProcPanoramiXShmPutImage(ClientPtr client) { - int j, result = 0, orig_x, orig_y; + int j, result, orig_x, orig_y; PanoramiXRes *draw, *gc; Bool sendEvent, isRoot; REQUEST(xShmPutImageReq); REQUEST_SIZE_MATCH(xShmPutImageReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, + XRT_GC, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -570,9 +571,10 @@ ProcPanoramiXShmGetImage(ClientPtr client) return(BadValue); } - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + rc = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? BadDrawable : rc; if (draw->type == XRT_PIXMAP) return ProcShmGetImage(client); diff --git a/Xext/sync.c b/Xext/sync.c index adb732447..d7ab63cd5 100644 --- a/Xext/sync.c +++ b/Xext/sync.c @@ -1339,16 +1339,14 @@ ProcSyncSetCounter(ClientPtr client) REQUEST(xSyncSetCounterReq); SyncCounter *pCounter; CARD64 newvalue; + int rc; REQUEST_SIZE_MATCH(xSyncSetCounterReq); - pCounter = SecurityLookupIDByType(client, stuff->cid, RTCounter, - DixWriteAccess); - if (pCounter == NULL) - { - client->errorValue = stuff->cid; - return SyncErrorBase + XSyncBadCounter; - } + rc = dixLookupResourceByType((pointer *)&pCounter, stuff->cid, RTCounter, + client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? SyncErrorBase + XSyncBadCounter : rc; if (IsSystemCounter(pCounter)) { @@ -1371,16 +1369,14 @@ ProcSyncChangeCounter(ClientPtr client) SyncCounter *pCounter; CARD64 newvalue; Bool overflow; + int rc; REQUEST_SIZE_MATCH(xSyncChangeCounterReq); - pCounter = SecurityLookupIDByType(client, stuff->cid, RTCounter, - DixWriteAccess); - if (pCounter == NULL) - { - client->errorValue = stuff->cid; - return SyncErrorBase + XSyncBadCounter; - } + rc = dixLookupResourceByType((pointer *)&pCounter, stuff->cid, RTCounter, + client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? SyncErrorBase + XSyncBadCounter : rc; if (IsSystemCounter(pCounter)) { @@ -1408,16 +1404,15 @@ ProcSyncDestroyCounter(ClientPtr client) { REQUEST(xSyncDestroyCounterReq); SyncCounter *pCounter; + int rc; REQUEST_SIZE_MATCH(xSyncDestroyCounterReq); - pCounter = SecurityLookupIDByType(client, stuff->counter, RTCounter, - DixDestroyAccess); - if (pCounter == NULL) - { - client->errorValue = stuff->counter; - return SyncErrorBase + XSyncBadCounter; - } + rc = dixLookupResourceByType((pointer *)&pCounter, stuff->counter, RTCounter, + client, DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? SyncErrorBase + XSyncBadCounter : rc; + if (IsSystemCounter(pCounter)) { client->errorValue = stuff->counter; @@ -1552,16 +1547,14 @@ ProcSyncQueryCounter(ClientPtr client) REQUEST(xSyncQueryCounterReq); xSyncQueryCounterReply rep; SyncCounter *pCounter; + int rc; REQUEST_SIZE_MATCH(xSyncQueryCounterReq); - pCounter = SecurityLookupIDByType(client, stuff->counter, RTCounter, - DixReadAccess); - if (pCounter == NULL) - { - client->errorValue = stuff->counter; - return SyncErrorBase + XSyncBadCounter; - } + rc = dixLookupResourceByType((pointer *)&pCounter, stuff->counter, + RTCounter, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? SyncErrorBase + XSyncBadCounter : rc; rep.type = X_Reply; rep.length = 0; @@ -1682,12 +1675,10 @@ ProcSyncChangeAlarm(ClientPtr client) REQUEST_AT_LEAST_SIZE(xSyncChangeAlarmReq); - if (!(pAlarm = SecurityLookupIDByType(client, stuff->alarm, RTAlarm, - DixWriteAccess))) - { - client->errorValue = stuff->alarm; - return SyncErrorBase + XSyncBadAlarm; - } + status = dixLookupResourceByType((pointer *)&pAlarm, stuff->alarm, RTAlarm, + client, DixWriteAccess); + if (status != Success) + return (status == BadValue) ? SyncErrorBase + XSyncBadAlarm : status; vmask = stuff->valueMask; len = client->req_len - (sizeof(xSyncChangeAlarmReq) >> 2); @@ -1719,16 +1710,14 @@ ProcSyncQueryAlarm(ClientPtr client) SyncAlarm *pAlarm; xSyncQueryAlarmReply rep; SyncTrigger *pTrigger; + int rc; REQUEST_SIZE_MATCH(xSyncQueryAlarmReq); - pAlarm = SecurityLookupIDByType(client, stuff->alarm, RTAlarm, - DixReadAccess); - if (!pAlarm) - { - client->errorValue = stuff->alarm; - return SyncErrorBase + XSyncBadAlarm; - } + rc = dixLookupResourceByType((pointer *)&pAlarm, stuff->alarm, RTAlarm, + client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? SyncErrorBase + XSyncBadAlarm : rc; rep.type = X_Reply; rep.length = (sizeof(xSyncQueryAlarmReply) - sizeof(xGenericReply)) >> 2; @@ -1776,16 +1765,15 @@ ProcSyncQueryAlarm(ClientPtr client) static int ProcSyncDestroyAlarm(ClientPtr client) { + SyncAlarm *pAlarm; + int rc; REQUEST(xSyncDestroyAlarmReq); REQUEST_SIZE_MATCH(xSyncDestroyAlarmReq); - if (!(SecurityLookupIDByType(client, stuff->alarm, RTAlarm, - DixDestroyAccess))) - { - client->errorValue = stuff->alarm; - return SyncErrorBase + XSyncBadAlarm; - } + rc = dixLookupResourceByType((pointer *)&pAlarm, stuff->alarm, RTAlarm, + client, DixDestroyAccess); + return (rc == BadValue) ? SyncErrorBase + XSyncBadAlarm : rc; FreeResource(stuff->alarm, RT_NONE); return client->noClientException; diff --git a/Xext/xf86bigfont.c b/Xext/xf86bigfont.c index 60189666e..7d4c69766 100644 --- a/Xext/xf86bigfont.c +++ b/Xext/xf86bigfont.c @@ -427,15 +427,15 @@ ProcXF86BigfontQueryFont( } #endif client->errorValue = stuff->id; /* EITHER font or gc */ - pFont = (FontPtr)SecurityLookupIDByType(client, stuff->id, RT_FONT, - DixGetAttrAccess); + dixLookupResourceByType((pointer *)&pFont, stuff->id, RT_FONT, + client, DixGetAttrAccess); if (!pFont) { - GC *pGC = (GC *) SecurityLookupIDByType(client, stuff->id, RT_GC, - DixGetAttrAccess); - if (!pGC) { - client->errorValue = stuff->id; + GC *pGC; + dixLookupResourceByType((pointer *)&pGC, stuff->id, RT_GC, + client, DixGetAttrAccess); + if (!pGC) return BadFont; /* procotol spec says only error is BadFont */ - } + pFont = pGC->font; } diff --git a/Xext/xvdisp.c b/Xext/xvdisp.c index 770c53a27..fcb61e476 100644 --- a/Xext/xvdisp.c +++ b/Xext/xvdisp.c @@ -479,11 +479,7 @@ ProcXvQueryEncodings(ClientPtr client) REQUEST(xvQueryEncodingsReq); REQUEST_SIZE_MATCH(xvQueryEncodingsReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -540,12 +536,7 @@ ProcXvPutVideo(ClientPtr client) REQUEST_SIZE_MATCH(xvPutVideoReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixWriteAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -583,12 +574,7 @@ ProcXvPutStill(ClientPtr client) REQUEST_SIZE_MATCH(xvPutStillReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixWriteAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -626,12 +612,7 @@ ProcXvGetVideo(ClientPtr client) REQUEST_SIZE_MATCH(xvGetVideoReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixReadAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -669,12 +650,7 @@ ProcXvGetStill(ClientPtr client) REQUEST_SIZE_MATCH(xvGetStillReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixReadAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -723,11 +699,7 @@ ProcXvSelectPortNotify(ClientPtr client) REQUEST(xvSelectPortNotifyReq); REQUEST_SIZE_MATCH(xvSelectPortNotifyReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -747,11 +719,7 @@ ProcXvGrabPort(ClientPtr client) REQUEST(xvGrabPortReq); REQUEST_SIZE_MATCH(xvGrabPortReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -784,11 +752,7 @@ ProcXvUngrabPort(ClientPtr client) REQUEST(xvGrabPortReq); REQUEST_SIZE_MATCH(xvGrabPortReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -808,11 +772,7 @@ ProcXvStopVideo(ClientPtr client) REQUEST(xvStopVideoReq); REQUEST_SIZE_MATCH(xvStopVideoReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -835,11 +795,7 @@ ProcXvSetPortAttribute(ClientPtr client) REQUEST(xvSetPortAttributeReq); REQUEST_SIZE_MATCH(xvSetPortAttributeReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixSetAttrAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -873,11 +829,7 @@ ProcXvGetPortAttribute(ClientPtr client) REQUEST(xvGetPortAttributeReq); REQUEST_SIZE_MATCH(xvGetPortAttributeReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixGetAttrAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -918,11 +870,7 @@ ProcXvQueryBestSize(ClientPtr client) REQUEST(xvQueryBestSizeReq); REQUEST_SIZE_MATCH(xvQueryBestSizeReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -959,11 +907,7 @@ ProcXvQueryPortAttributes(ClientPtr client) REQUEST(xvQueryPortAttributesReq); REQUEST_SIZE_MATCH(xvQueryPortAttributesReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixGetAttrAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -1019,12 +963,7 @@ ProcXvPutImage(ClientPtr client) REQUEST_AT_LEAST_SIZE(xvPutImageReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixWriteAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -1105,12 +1044,7 @@ ProcXvShmPutImage(ClientPtr client) REQUEST_SIZE_MATCH(xvShmPutImageReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixWriteAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -1141,11 +1075,10 @@ ProcXvShmPutImage(ClientPtr client) if(!pImage) return BadMatch; - if(!(shmdesc = (ShmDescPtr)LookupIDByType(stuff->shmseg, ShmSegType))) - { - client->errorValue = stuff->shmseg; - return BadShmSegCode; - } + status = dixLookupResourceByType((pointer *)&shmdesc, stuff->shmseg, + ShmSegType, serverClient, DixReadAccess); + if (status != Success) + return (status == BadValue) ? BadShmSegCode : status; width = stuff->width; height = stuff->height; @@ -1206,11 +1139,7 @@ ProcXvQueryImageAttributes(ClientPtr client) REQUEST_SIZE_MATCH(xvQueryImageAttributesReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); for(i = 0; i < pPort->pAdaptor->nImages; i++) { if(pPort->pAdaptor->pImages[i].id == stuff->id) { @@ -1269,11 +1198,7 @@ ProcXvListImageFormats(ClientPtr client) REQUEST_SIZE_MATCH(xvListImageFormatsReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); rep.type = X_Reply; rep.sequenceNumber = client->sequence; @@ -1679,18 +1604,20 @@ SProcXvDispatch(ClientPtr client) static int XineramaXvStopVideo(ClientPtr client) { - int result = Success, i; + int result, i; PanoramiXRes *draw, *port; REQUEST(xvStopVideoReq); REQUEST_SIZE_MATCH(xvStopVideoReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; FOR_NSCREENS_BACKWARD(i) { if(port->info[i].id) { @@ -1708,13 +1635,14 @@ XineramaXvSetPortAttribute(ClientPtr client) { REQUEST(xvSetPortAttributeReq); PanoramiXRes *port; - int result = Success, i; + int result, i; REQUEST_SIZE_MATCH(xvSetPortAttributeReq); - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; FOR_NSCREENS_BACKWARD(i) { if(port->info[i].id) { @@ -1733,21 +1661,24 @@ XineramaXvShmPutImage(ClientPtr client) PanoramiXRes *draw, *gc, *port; Bool send_event = stuff->send_event; Bool isRoot; - int result = Success, i, x, y; + int result, i, x, y; REQUEST_SIZE_MATCH(xvShmPutImageReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, + XRT_GC, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1782,21 +1713,24 @@ XineramaXvPutImage(ClientPtr client) REQUEST(xvPutImageReq); PanoramiXRes *draw, *gc, *port; Bool isRoot; - int result = Success, i, x, y; + int result, i, x, y; REQUEST_AT_LEAST_SIZE(xvPutImageReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, + XRT_GC, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1827,21 +1761,24 @@ XineramaXvPutVideo(ClientPtr client) REQUEST(xvPutImageReq); PanoramiXRes *draw, *gc, *port; Bool isRoot; - int result = Success, i, x, y; + int result, i, x, y; REQUEST_AT_LEAST_SIZE(xvPutVideoReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, + XRT_GC, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1872,21 +1809,24 @@ XineramaXvPutStill(ClientPtr client) REQUEST(xvPutImageReq); PanoramiXRes *draw, *gc, *port; Bool isRoot; - int result = Success, i, x, y; + int result, i, x, y; REQUEST_AT_LEAST_SIZE(xvPutImageReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, + XRT_GC, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; diff --git a/Xext/xvdix.h b/Xext/xvdix.h index 265c03ddf..44f8f6b18 100644 --- a/Xext/xvdix.h +++ b/Xext/xvdix.h @@ -201,17 +201,13 @@ typedef struct _XvPortRec { DevUnion devPriv; } XvPortRec, *XvPortPtr; -#define LOOKUP_PORT(_id, client)\ - ((XvPortPtr)LookupIDByType(_id, XvRTPort)) - -#define LOOKUP_ENCODING(_id, client)\ - ((XvEncodingPtr)LookupIDByType(_id, XvRTEncoding)) - -#define LOOKUP_VIDEONOTIFY_LIST(_id, client)\ - ((XvVideoNotifyPtr)LookupIDByType(_id, XvRTVideoNotifyList)) - -#define LOOKUP_PORTNOTIFY_LIST(_id, client)\ - ((XvPortNotifyPtr)LookupIDByType(_id, XvRTPortNotifyList)) +#define VALIDATE_XV_PORT(portID, pPort, mode)\ + {\ + int rc = dixLookupResourceByType((pointer *)&(pPort), portID,\ + XvRTPort, client, mode);\ + if (rc != Success)\ + return (rc == BadValue) ? _XvBadPort : rc;\ + } typedef struct { int version, revision; diff --git a/Xext/xvmain.c b/Xext/xvmain.c index 477194684..7c8a3c3d4 100644 --- a/Xext/xvmain.c +++ b/Xext/xvmain.c @@ -523,7 +523,8 @@ XvdiSendVideoNotify(XvPortPtr pPort, DrawablePtr pDraw, int reason) xvEvent event; XvVideoNotifyPtr pn; - pn = (XvVideoNotifyPtr)LookupIDByType(pDraw->id, XvRTVideoNotifyList); + dixLookupResourceByType((pointer *)&pn, pDraw->id, XvRTVideoNotifyList, + serverClient, DixReadAccess); while (pn) { @@ -905,10 +906,14 @@ XvdiSelectVideoNotify( BOOL onoff ){ XvVideoNotifyPtr pn,tpn,fpn; + int rc; /* FIND VideoNotify LIST */ - pn = (XvVideoNotifyPtr)LookupIDByType(pDraw->id, XvRTVideoNotifyList); + rc = dixLookupResourceByType((pointer *)&pn, pDraw->id, XvRTVideoNotifyList, + client, DixWriteAccess); + if (rc != Success && rc != BadValue) + return rc; /* IF ONE DONES'T EXIST AND NO MASK, THEN JUST RETURN */ diff --git a/Xext/xvmc.c b/Xext/xvmc.c index 9166cf892..879a222bd 100644 --- a/Xext/xvmc.c +++ b/Xext/xvmc.c @@ -136,10 +136,7 @@ ProcXvMCListSurfaceTypes(ClientPtr client) REQUEST(xvmcListSurfaceTypesReq); REQUEST_SIZE_MATCH(xvmcListSurfaceTypesReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client))) { - client->errorValue = stuff->port; - return _XvBadPort; - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if(XvMCScreenKey) { /* any adaptors at all */ ScreenPtr pScreen = pPort->pAdaptor->pScreen; @@ -192,10 +189,7 @@ ProcXvMCCreateContext(ClientPtr client) REQUEST(xvmcCreateContextReq); REQUEST_SIZE_MATCH(xvmcCreateContextReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client))) { - client->errorValue = stuff->port; - return _XvBadPort; - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); pScreen = pPort->pAdaptor->pScreen; @@ -273,11 +267,15 @@ ProcXvMCCreateContext(ClientPtr client) static int ProcXvMCDestroyContext(ClientPtr client) { + pointer val; + int rc; REQUEST(xvmcDestroyContextReq); REQUEST_SIZE_MATCH(xvmcDestroyContextReq); - if(!LookupIDByType(stuff->context_id, XvMCRTContext)) - return (XvMCBadContext + XvMCErrorBase); + rc = dixLookupResourceByType(&val, stuff->context_id, XvMCRTContext, + client, DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? XvMCBadContext + XvMCErrorBase : rc; FreeResource(stuff->context_id, RT_NONE); @@ -297,8 +295,10 @@ ProcXvMCCreateSurface(ClientPtr client) REQUEST(xvmcCreateSurfaceReq); REQUEST_SIZE_MATCH(xvmcCreateSurfaceReq); - if(!(pContext = LookupIDByType(stuff->context_id, XvMCRTContext))) - return (XvMCBadContext + XvMCErrorBase); + result = dixLookupResourceByType((pointer *)&pContext, stuff->context_id, + XvMCRTContext, client, DixUseAccess); + if (result != Success) + return (result == BadValue) ? XvMCBadContext + XvMCErrorBase : result; pScreenPriv = XVMC_GET_PRIVATE(pContext->pScreen); @@ -337,11 +337,15 @@ ProcXvMCCreateSurface(ClientPtr client) static int ProcXvMCDestroySurface(ClientPtr client) { + pointer val; + int rc; REQUEST(xvmcDestroySurfaceReq); REQUEST_SIZE_MATCH(xvmcDestroySurfaceReq); - if(!LookupIDByType(stuff->surface_id, XvMCRTSurface)) - return (XvMCBadSurface + XvMCErrorBase); + rc = dixLookupResourceByType(&val, stuff->surface_id, XvMCRTSurface, + client, DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? XvMCBadSurface + XvMCErrorBase : rc; FreeResource(stuff->surface_id, RT_NONE); @@ -363,8 +367,10 @@ ProcXvMCCreateSubpicture(ClientPtr client) REQUEST(xvmcCreateSubpictureReq); REQUEST_SIZE_MATCH(xvmcCreateSubpictureReq); - if(!(pContext = LookupIDByType(stuff->context_id, XvMCRTContext))) - return (XvMCBadContext + XvMCErrorBase); + result = dixLookupResourceByType((pointer *)&pContext, stuff->context_id, + XvMCRTContext, client, DixUseAccess); + if (result != Success) + return (result == BadValue) ? XvMCBadContext + XvMCErrorBase : result; pScreenPriv = XVMC_GET_PRIVATE(pContext->pScreen); @@ -448,11 +454,15 @@ ProcXvMCCreateSubpicture(ClientPtr client) static int ProcXvMCDestroySubpicture(ClientPtr client) { + pointer val; + int rc; REQUEST(xvmcDestroySubpictureReq); REQUEST_SIZE_MATCH(xvmcDestroySubpictureReq); - if(!LookupIDByType(stuff->subpicture_id, XvMCRTSubpicture)) - return (XvMCBadSubpicture + XvMCErrorBase); + rc = dixLookupResourceByType(&val, stuff->subpicture_id, XvMCRTSubpicture, + client, DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? XvMCBadSubpicture + XvMCErrorBase : rc; FreeResource(stuff->subpicture_id, RT_NONE); @@ -475,10 +485,7 @@ ProcXvMCListSubpictureTypes(ClientPtr client) REQUEST(xvmcListSubpictureTypesReq); REQUEST_SIZE_MATCH(xvmcListSubpictureTypesReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client))) { - client->errorValue = stuff->port; - return _XvBadPort; - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); pScreen = pPort->pAdaptor->pScreen; @@ -571,11 +578,7 @@ ProcXvMCGetDRInfo(ClientPtr client) REQUEST(xvmcGetDRInfoReq); REQUEST_SIZE_MATCH(xvmcGetDRInfoReq); - - if(!(pPort = LOOKUP_PORT(stuff->port, client))) { - client->errorValue = stuff->port; - return _XvBadPort; - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); pScreen = pPort->pAdaptor->pScreen; pScreenPriv = XVMC_GET_PRIVATE(pScreen); diff --git a/Xi/chdevcur.c b/Xi/chdevcur.c index b0d3ce341..d7a9e4952 100644 --- a/Xi/chdevcur.c +++ b/Xi/chdevcur.c @@ -94,12 +94,10 @@ int ProcXChangeDeviceCursor(ClientPtr client) } else { - pCursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor, - RT_CURSOR, DixReadAccess); - if (!pCursor) - { - return BadCursor; - } + rc = dixLookupResourceByType((pointer *)&pCursor, stuff->cursor, + RT_CURSOR, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? BadCursor : rc; } ChangeWindowDeviceCursor(pWin, pDev, pCursor); diff --git a/Xi/extgrbdev.c b/Xi/extgrbdev.c index af8706320..0f64610b5 100644 --- a/Xi/extgrbdev.c +++ b/Xi/extgrbdev.c @@ -88,7 +88,7 @@ ProcXExtendedGrabDevice(ClientPtr client) { xExtendedGrabDeviceReply rep; DeviceIntPtr dev; - int rc = Success, + int rc, errval = 0, i; WindowPtr grab_window, @@ -145,14 +145,12 @@ ProcXExtendedGrabDevice(ClientPtr client) if (stuff->cursor) { - cursor = (CursorPtr)SecurityLookupIDByType(client, - stuff->cursor, - RT_CURSOR, - DixReadAccess); - if (!cursor) - { + rc = dixLookupResourceByType((pointer *)&cursor, stuff->cursor, + RT_CURSOR, client, DixReadAccess); + if (rc != Success) + { errval = stuff->cursor; - rc = BadCursor; + rc = (rc == BadValue) ? BadCursor : rc; goto cleanup; } } diff --git a/damageext/damageextint.h b/damageext/damageextint.h index 543f1a70b..45c5ff96c 100644 --- a/damageext/damageextint.h +++ b/damageext/damageextint.h @@ -58,11 +58,10 @@ typedef struct _DamageExt { } DamageExtRec, *DamageExtPtr; #define VERIFY_DAMAGEEXT(pDamageExt, rid, client, mode) { \ - pDamageExt = SecurityLookupIDByType (client, rid, DamageExtType, mode); \ - if (!pDamageExt) { \ - client->errorValue = rid; \ - return DamageErrorBase + BadDamage; \ - } \ + int rc = dixLookupResourceByType((pointer *)&(pDamageExt), rid, \ + DamageExtType, client, mode); \ + if (rc != Success) \ + return (rc == BadValue) ? DamageErrorBase + BadDamage : rc; \ } void diff --git a/dbe/dbe.c b/dbe/dbe.c index 3fd99dfc9..b8f61e742 100644 --- a/dbe/dbe.c +++ b/dbe/dbe.c @@ -411,20 +411,23 @@ ProcDbeDeallocateBackBufferName(ClientPtr client) { REQUEST(xDbeDeallocateBackBufferNameReq); DbeWindowPrivPtr pDbeWindowPriv; - int i; + int rc, i; + pointer val; REQUEST_SIZE_MATCH(xDbeDeallocateBackBufferNameReq); /* Buffer name must be valid */ - if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client, - stuff->buffer, dbeWindowPrivResType, DixDestroyAccess)) || - !(SecurityLookupIDByType(client, stuff->buffer, dbeDrawableResType, - DixDestroyAccess))) - { - client->errorValue = stuff->buffer; - return(dbeErrorBase + DbeBadBuffer); - } + rc = dixLookupResourceByType((pointer *)&pDbeWindowPriv, stuff->buffer, + dbeWindowPrivResType, client, + DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? dbeErrorBase + DbeBadBuffer : rc; + + rc = dixLookupResourceByType(&val, stuff->buffer, dbeDrawableResType, + client, DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? dbeErrorBase + DbeBadBuffer : rc; /* Make sure that the id is valid for the window. * This is paranoid code since we already looked up the ID by type @@ -833,19 +836,21 @@ ProcDbeGetBackBufferAttributes(ClientPtr client) REQUEST(xDbeGetBackBufferAttributesReq); xDbeGetBackBufferAttributesReply rep; DbeWindowPrivPtr pDbeWindowPriv; - int n; + int rc, n; REQUEST_SIZE_MATCH(xDbeGetBackBufferAttributesReq); - if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client, - stuff->buffer, dbeWindowPrivResType, DixGetAttrAccess))) + rc = dixLookupResourceByType((pointer *)&pDbeWindowPriv, stuff->buffer, + dbeWindowPrivResType, client, + DixGetAttrAccess); + if (rc == Success) { - rep.attributes = None; + rep.attributes = pDbeWindowPriv->pWindow->drawable.id; } else { - rep.attributes = pDbeWindowPriv->pWindow->drawable.id; + rep.attributes = None; } rep.type = X_Reply; diff --git a/dix/colormap.c b/dix/colormap.c index 6a5eb74a1..a5a006e60 100644 --- a/dix/colormap.c +++ b/dix/colormap.c @@ -893,9 +893,9 @@ AllocColor (ColormapPtr pmap, if (pmap->mid != pmap->pScreen->defColormap && pmap->pVisual->vid == pmap->pScreen->rootVisual) { - ColormapPtr prootmap = (ColormapPtr) - SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap, - RT_COLORMAP, DixReadAccess); + ColormapPtr prootmap; + dixLookupResourceByType((pointer *)&prootmap, pmap->pScreen->defColormap, + RT_COLORMAP, clients[client], DixReadAccess); if (pmap->class == prootmap->class) FindColorInRootCmap (prootmap, prootmap->red, entries, &rgb, @@ -910,9 +910,9 @@ AllocColor (ColormapPtr pmap, if (pmap->mid != pmap->pScreen->defColormap && pmap->pVisual->vid == pmap->pScreen->rootVisual) { - ColormapPtr prootmap = (ColormapPtr) - SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap, - RT_COLORMAP, DixReadAccess); + ColormapPtr prootmap; + dixLookupResourceByType((pointer *)&prootmap, pmap->pScreen->defColormap, + RT_COLORMAP, clients[client], DixReadAccess); if (pmap->class == prootmap->class) { @@ -1550,12 +1550,14 @@ FreePixels(ColormapPtr pmap, int client) int FreeClientPixels (pointer value, XID fakeid) { - ColormapPtr pmap; - colorResource *pcr = (colorResource *)value; + pointer pmap; + colorResource *pcr = value; + int rc; - pmap = (ColormapPtr) LookupIDByType(pcr->mid, RT_COLORMAP); - if (pmap) - FreePixels(pmap, pcr->client); + rc = dixLookupResourceByType(&pmap, pcr->mid, RT_COLORMAP, serverClient, + DixRemoveAccess); + if (rc == Success) + FreePixels((ColormapPtr)pmap, pcr->client); xfree(pcr); return Success; } diff --git a/dix/cursor.c b/dix/cursor.c index 7ab15df0c..086d008e0 100644 --- a/dix/cursor.c +++ b/dix/cursor.c @@ -545,8 +545,9 @@ CreateRootCursor(char *unused1, unsigned int unused2) if (err != Success) return NullCursor; - cursorfont = (FontPtr)LookupIDByType(fontID, RT_FONT); - if (!cursorfont) + err = dixLookupResourceByType((pointer *)&cursorfont, fontID, RT_FONT, + serverClient, DixReadAccess); + if (err != Success) return NullCursor; if (AllocGlyphCursor(fontID, 0, fontID, 1, 0, 0, 0, ~0, ~0, ~0, &curs, serverClient, (XID)0) != Success) diff --git a/dix/deprecated.c b/dix/deprecated.c index 5487b64bc..8123886ca 100644 --- a/dix/deprecated.c +++ b/dix/deprecated.c @@ -148,14 +148,18 @@ SecurityLookupIDByClass(ClientPtr client, XID id, RESTYPE classes, pointer LookupIDByType(XID id, RESTYPE rtype) { - return SecurityLookupIDByType(NullClient, id, rtype, DixUnknownAccess); + pointer val; + dixLookupResourceByType(&val, id, rtype, NullClient, DixUnknownAccess); + return val; } /* replaced by dixLookupResourceByClass */ pointer LookupIDByClass(XID id, RESTYPE classes) { - return SecurityLookupIDByClass(NullClient, id, classes, DixUnknownAccess); + pointer val; + dixLookupResourceByClass(&val, id, classes, NullClient, DixUnknownAccess); + return val; } /* replaced by dixLookupResourceBy{Type,Class} */ diff --git a/dix/dispatch.c b/dix/dispatch.c index 16a51bdc5..ce3294d32 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -1252,12 +1252,13 @@ int ProcCloseFont(ClientPtr client) { FontPtr pFont; + int rc; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - pFont = (FontPtr)SecurityLookupIDByType(client, stuff->id, RT_FONT, - DixDestroyAccess); - if ( pFont != (FontPtr)NULL) /* id was valid */ + rc = dixLookupResourceByType((pointer *)&pFont, stuff->id, RT_FONT, + client, DixDestroyAccess); + if (rc == Success) { FreeResource(stuff->id, RT_NONE); return(client->noClientException); @@ -1265,7 +1266,7 @@ ProcCloseFont(ClientPtr client) else { client->errorValue = stuff->id; - return (BadFont); + return (rc == BadValue) ? BadFont : rc; } } diff --git a/dix/dixfonts.c b/dix/dixfonts.c index 79489e81f..8b6e7a329 100644 --- a/dix/dixfonts.c +++ b/dix/dixfonts.c @@ -137,8 +137,9 @@ SetDefaultFont(char *defaultfontname) (unsigned) strlen(defaultfontname), defaultfontname); if (err != Success) return FALSE; - pf = (FontPtr) LookupIDByType(fid, RT_FONT); - if (pf == (FontPtr) NULL) + err = dixLookupResourceByType((pointer *)&pf, fid, RT_FONT, serverClient, + DixReadAccess); + if (err != Success) return FALSE; defaultFont = pf; return TRUE; @@ -1201,17 +1202,18 @@ doPolyText(ClientPtr client, PTclosurePtr c) } /* Make sure our drawable hasn't disappeared while we slept. */ - if (c->slept && - c->pDraw && - c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did, - RC_DRAWABLE, DixWriteAccess)) + if (c->slept && c->pDraw) { - /* Our drawable has disappeared. Treat like client died... ask - the FPE code to clean up after client and avoid further - rendering while we clean up after ourself. */ - fpe = c->pGC->font->fpe; - (*fpe_functions[fpe->type].client_died) ((pointer) client, fpe); - c->pDraw = (DrawablePtr)0; + DrawablePtr pDraw; + dixLookupDrawable(&pDraw, c->did, client, 0, DixWriteAccess); + if (c->pDraw != pDraw) { + /* Our drawable has disappeared. Treat like client died... ask + the FPE code to clean up after client and avoid further + rendering while we clean up after ourself. */ + fpe = c->pGC->font->fpe; + (*fpe_functions[fpe->type].client_died) ((pointer) client, fpe); + c->pDraw = (DrawablePtr)0; + } } client_state = c->slept ? SLEEPING : NEVER_SLEPT; @@ -1233,12 +1235,11 @@ doPolyText(ClientPtr client, PTclosurePtr c) | ((Font)*(c->pElt+3)) << 8 | ((Font)*(c->pElt+2)) << 16 | ((Font)*(c->pElt+1)) << 24; - pFont = (FontPtr)SecurityLookupIDByType(client, fid, RT_FONT, - DixReadAccess); - if (!pFont) + err = dixLookupResourceByType((pointer *)&pFont, fid, RT_FONT, + client, DixReadAccess); + if (err != Success) { - client->errorValue = fid; - err = BadFont; + err = (err == BadValue) ? BadFont : err; /* restore pFont and fid for step 4 (described below) */ pFont = oldpFont; fid = oldfid; @@ -1486,17 +1487,18 @@ doImageText(ClientPtr client, ITclosurePtr c) } /* Make sure our drawable hasn't disappeared while we slept. */ - if (c->slept && - c->pDraw && - c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did, - RC_DRAWABLE, DixWriteAccess)) + if (c->slept && c->pDraw) { - /* Our drawable has disappeared. Treat like client died... ask - the FPE code to clean up after client. */ - fpe = c->pGC->font->fpe; - (*fpe_functions[fpe->type].client_died) ((pointer) client, fpe); - err = Success; - goto bail; + DrawablePtr pDraw; + dixLookupDrawable(&pDraw, c->did, client, 0, DixWriteAccess); + if (c->pDraw != pDraw) { + /* Our drawable has disappeared. Treat like client died... ask + the FPE code to clean up after client. */ + fpe = c->pGC->font->fpe; + (*fpe_functions[fpe->type].client_died) ((pointer) client, fpe); + err = Success; + goto bail; + } } lgerr = LoadGlyphs(client, c->pGC->font, c->nChars, c->itemSize, c->data); @@ -2013,8 +2015,9 @@ FreeFonts(void) FontPtr find_old_font(XID id) { - return (FontPtr) SecurityLookupIDByType(NullClient, id, RT_NONE, - DixUnknownAccess); + pointer pFont; + dixLookupResourceByType(&pFont, id, RT_NONE, serverClient, DixReadAccess); + return (FontPtr)pFont; } Font diff --git a/dix/dixutils.c b/dix/dixutils.c index 1bdeee064..5cede5f43 100644 --- a/dix/dixutils.c +++ b/dix/dixutils.c @@ -240,14 +240,9 @@ dixLookupWindow(WindowPtr *pWin, XID id, ClientPtr client, Mask access) int dixLookupGC(GCPtr *pGC, XID id, ClientPtr client, Mask access) { - GCPtr pTmp = (GCPtr)SecurityLookupIDByType(client, id, RT_GC, access); - if (pTmp) { - *pGC = pTmp; - return Success; - } - client->errorValue = id; - *pGC = NULL; - return BadGC; + int rc; + rc = dixLookupResourceByType((pointer *)pGC, id, RT_GC, client, access); + return (rc == BadValue) ? BadGC : rc; } int diff --git a/dix/events.c b/dix/events.c index 8af71b645..be88891a4 100644 --- a/dix/events.c +++ b/dix/events.c @@ -506,16 +506,17 @@ XineramaSetWindowPntrs(DeviceIntPtr pDev, WindowPtr pWin) PanoramiXNumScreens*sizeof(WindowPtr)); } else { PanoramiXRes *win; - int i; + int rc, i; - win = (PanoramiXRes*)LookupIDByType(pWin->drawable.id, XRT_WINDOW); - - if(!win) + rc = dixLookupResourceByType((pointer *)&win, pWin->drawable.id, + XRT_WINDOW, serverClient, DixReadAccess); + if (rc != Success) return FALSE; for(i = 0; i < PanoramiXNumScreens; i++) { - pSprite->windows[i] = LookupIDByType(win->info[i].id, RT_WINDOW); - if(!pSprite->windows[i]) /* window is being unmapped */ + rc = dixLookupWindow(pSprite->windows + i, win->info[i].id, + serverClient, DixReadAccess); + if (rc != Success) /* window is being unmapped */ return FALSE; } } diff --git a/dix/resource.c b/dix/resource.c index dc6945dd1..73bc3a998 100644 --- a/dix/resource.c +++ b/dix/resource.c @@ -392,13 +392,16 @@ unsigned int GetXIDList(ClientPtr pClient, unsigned count, XID *pids) { unsigned int found = 0; - XID id = pClient->clientAsMask; + XID rc, id = pClient->clientAsMask; XID maxid; + pointer val; maxid = id | RESOURCE_ID_MASK; while ( (found < count) && (id <= maxid) ) { - if (!LookupIDByClass(id, RC_ANY)) + rc = dixLookupResourceByClass(&val, id, RC_ANY, serverClient, + DixGetAttrAccess); + if (rc == BadValue) { pids[found++] = id; } @@ -826,6 +829,8 @@ FreeAllResources(void) Bool LegalNewID(XID id, ClientPtr client) { + pointer val; + int rc; #ifdef PANORAMIX XID minid, maxid; @@ -838,9 +843,16 @@ LegalNewID(XID id, ClientPtr client) return TRUE; } #endif /* PANORAMIX */ - return ((client->clientAsMask == (id & ~RESOURCE_ID_MASK)) && - ((clientTable[client->index].expectID <= id) || - !LookupIDByClass(id, RC_ANY))); + if (client->clientAsMask == (id & ~RESOURCE_ID_MASK)) + { + if (clientTable[client->index].expectID <= id) + return TRUE; + + rc = dixLookupResourceByClass(&val, id, RC_ANY, serverClient, + DixGetAttrAccess); + return (rc == BadValue); + } + return FALSE; } int diff --git a/dix/window.c b/dix/window.c index f112f81d4..324ddb71e 100644 --- a/dix/window.c +++ b/dix/window.c @@ -2795,6 +2795,7 @@ UnrealizeTree( WindowPtr pChild; UnrealizeWindowProcPtr Unrealize; MarkUnrealizedWindowProcPtr MarkUnrealizedWindow; + int rc; Unrealize = pWin->drawable.pScreen->UnrealizeWindow; MarkUnrealizedWindow = pWin->drawable.pScreen->MarkUnrealizedWindow; @@ -2808,9 +2809,10 @@ UnrealizeTree( #ifdef PANORAMIX if(!noPanoramiXExtension && !pChild->drawable.pScreen->myNum) { PanoramiXRes *win; - win = (PanoramiXRes*)LookupIDByType(pChild->drawable.id, - XRT_WINDOW); - if(win) + rc = dixLookupResourceByType((pointer *)&win, + pChild->drawable.id, XRT_WINDOW, + serverClient, DixWriteAccess); + if (rc == Success) win->u.win.visibility = VisibilityNotViewable; } #endif @@ -3072,7 +3074,7 @@ SendVisibilityNotify(WindowPtr pWin) if(!noPanoramiXExtension) { PanoramiXRes *win; WindowPtr pWin2; - int i, Scrnum; + int rc, i, Scrnum; Scrnum = pWin->drawable.pScreen->myNum; @@ -3086,9 +3088,10 @@ SendVisibilityNotify(WindowPtr pWin) for(i = 0; i < PanoramiXNumScreens; i++) { if(i == Scrnum) continue; - pWin2 = (WindowPtr)LookupIDByType(win->info[i].id, RT_WINDOW); + rc = dixLookupWindow(&pWin2, win->info[i].id, serverClient, + DixWriteAccess); - if (pWin2) { + if (rc == Success) { if(pWin2->visibility == VisibilityPartiallyObscured) return; @@ -3098,17 +3101,19 @@ SendVisibilityNotify(WindowPtr pWin) break; case VisibilityPartiallyObscured: if(Scrnum) { - pWin2 = (WindowPtr)LookupIDByType(win->info[0].id, RT_WINDOW); - if (pWin2) pWin = pWin2; + rc = dixLookupWindow(&pWin2, win->info[0].id, serverClient, + DixWriteAccess); + if (rc == Success) pWin = pWin2; } break; case VisibilityFullyObscured: for(i = 0; i < PanoramiXNumScreens; i++) { if(i == Scrnum) continue; - pWin2 = (WindowPtr)LookupIDByType(win->info[i].id, RT_WINDOW); + rc = dixLookupWindow(&pWin2, win->info[i].id, serverClient, + DixWriteAccess); - if (pWin2) { + if (rc == Success) { if(pWin2->visibility != VisibilityFullyObscured) return; @@ -3739,7 +3744,7 @@ DrawLogo(WindowPtr pWin) int x, y; unsigned int width, height, size; GC *pGC; - int thin, gap, d31; + int rc, thin, gap, d31; DDXPointRec poly[4]; ChangeGCVal fore[2], back[2]; xrgb rgb[2]; @@ -3760,20 +3765,23 @@ DrawLogo(WindowPtr pWin) fore[0].val = pScreen->whitePixel; else fore[0].val = pScreen->blackPixel; - if ((pWin->backgroundState == BackgroundPixel) && - (cmap = (ColormapPtr)LookupIDByType(wColormap (pWin), RT_COLORMAP))) { - Pixel querypixels[2]; + if (pWin->backgroundState == BackgroundPixel) { + rc = dixLookupResourceByType((pointer *)&cmap, wColormap(pWin), + RT_COLORMAP, serverClient, DixReadAccess); + if (rc == Success) { + Pixel querypixels[2]; - querypixels[0] = fore[0].val; - querypixels[1] = pWin->background.pixel; - QueryColors(cmap, 2, querypixels, rgb); - if ((rgb[0].red == rgb[1].red) && - (rgb[0].green == rgb[1].green) && - (rgb[0].blue == rgb[1].blue)) { - if (fore[0].val == pScreen->blackPixel) - fore[0].val = pScreen->whitePixel; - else - fore[0].val = pScreen->blackPixel; + querypixels[0] = fore[0].val; + querypixels[1] = pWin->background.pixel; + QueryColors(cmap, 2, querypixels, rgb); + if ((rgb[0].red == rgb[1].red) && + (rgb[0].green == rgb[1].green) && + (rgb[0].blue == rgb[1].blue)) { + if (fore[0].val == pScreen->blackPixel) + fore[0].val = pScreen->whitePixel; + else + fore[0].val = pScreen->blackPixel; + } } } fore[1].val = FillSolid; diff --git a/fb/fbcmap.c b/fb/fbcmap.c index c29a5131c..207c6aefc 100644 --- a/fb/fbcmap.c +++ b/fb/fbcmap.c @@ -85,8 +85,10 @@ fbUninstallColormap(ColormapPtr pmap) { if (pmap->mid != pmap->pScreen->defColormap) { - curpmap = (ColormapPtr) LookupIDByType(pmap->pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&curpmap, + pmap->pScreen->defColormap, + RT_COLORMAP, + serverClient, DixInstallAccess); (*pmap->pScreen->InstallColormap)(curpmap); } } diff --git a/hw/kdrive/src/kcmap.c b/hw/kdrive/src/kcmap.c index 4941ad17f..2c33e798a 100644 --- a/hw/kdrive/src/kcmap.c +++ b/hw/kdrive/src/kcmap.c @@ -217,7 +217,8 @@ KdUninstallColormap (ColormapPtr pCmap) return; /* install default if on same fb */ - defMap = (ColormapPtr) LookupIDByType(defMapID, RT_COLORMAP); + dixLookupResourceByType((pointer *)&defMap, defMapID, RT_COLORMAP, + serverClient, DixInstallAccess); if (defMap && KdColormapFb (defMap) == fb) (*pCmap->pScreen->InstallColormap)(defMap); else diff --git a/hw/vfb/InitOutput.c b/hw/vfb/InitOutput.c index af3e8f1d4..8ab8bae64 100644 --- a/hw/vfb/InitOutput.c +++ b/hw/vfb/InitOutput.c @@ -508,8 +508,10 @@ vfbUninstallColormap(ColormapPtr pmap) { if (pmap->mid != pmap->pScreen->defColormap) { - curpmap = (ColormapPtr) LookupIDByType(pmap->pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&curpmap, + pmap->pScreen->defColormap, + RT_COLORMAP, serverClient, + DixInstallAccess); (*pmap->pScreen->InstallColormap)(curpmap); } } diff --git a/hw/xfree86/common/xf86cmap.c b/hw/xfree86/common/xf86cmap.c index a627b5315..7e73bb85c 100644 --- a/hw/xfree86/common/xf86cmap.c +++ b/hw/xfree86/common/xf86cmap.c @@ -211,8 +211,8 @@ Bool xf86HandleColormaps( ComputeGamma(pScreenPriv); /* get the default map */ - - pDefMap = (ColormapPtr) LookupIDByType(pScreen->defColormap, RT_COLORMAP); + dixLookupResourceByType((pointer *)&pDefMap, pScreen->defColormap, + RT_COLORMAP, serverClient, DixInstallAccess); if(!CMapAllocateColormapPrivate(pDefMap)) { CMapUnwrapScreen(pScreen); diff --git a/hw/xfree86/dixmods/extmod/xf86dga2.c b/hw/xfree86/dixmods/extmod/xf86dga2.c index 868fb0624..46aa8b882 100644 --- a/hw/xfree86/dixmods/extmod/xf86dga2.c +++ b/hw/xfree86/dixmods/extmod/xf86dga2.c @@ -420,6 +420,7 @@ static int ProcXDGAInstallColormap(ClientPtr client) { ColormapPtr cmap; + int rc; REQUEST(xXDGAInstallColormapReq); if (stuff->screen > screenInfo.numScreens) @@ -430,13 +431,13 @@ ProcXDGAInstallColormap(ClientPtr client) REQUEST_SIZE_MATCH(xXDGAInstallColormapReq); - cmap = (ColormapPtr)LookupIDByType(stuff->cmap, RT_COLORMAP); - if (cmap) { + rc = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, RT_COLORMAP, + client, DixInstallAccess); + if (rc == Success) { DGAInstallCmap(cmap); return (client->noClientException); } else { - client->errorValue = stuff->cmap; - return (BadColor); + return (rc == BadValue) ? BadColor : rc; } return (client->noClientException); @@ -858,6 +859,7 @@ static int ProcXF86DGAInstallColormap(ClientPtr client) { ColormapPtr pcmp; + int rc; REQUEST(xXF86DGAInstallColormapReq); if (stuff->screen > screenInfo.numScreens) @@ -871,13 +873,13 @@ ProcXF86DGAInstallColormap(ClientPtr client) if (!DGAActive(stuff->screen)) return (DGAErrorBase + XF86DGADirectNotActivated); - pcmp = (ColormapPtr )LookupIDByType(stuff->id, RT_COLORMAP); - if (pcmp) { + rc = dixLookupResourceByType((pointer *)&pcmp, stuff->id, RT_COLORMAP, + client, DixInstallAccess); + if (rc == Success) { DGAInstallCmap(pcmp); return (client->noClientException); } else { - client->errorValue = stuff->id; - return (BadColor); + return (rc == BadValue) ? BadColor : rc; } } diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c index c01686de3..3af9878d5 100644 --- a/hw/xfree86/dri/dri.c +++ b/hw/xfree86/dri/dri.c @@ -1363,11 +1363,12 @@ Bool DRIDrawablePrivDelete(pointer pResource, XID id) { WindowPtr pWin; + int rc; id = (XID)pResource; - pWin = LookupIDByType(id, RT_WINDOW); + rc = dixLookupWindow(&pWin, id, serverClient, DixGetAttrAccess); - if (pWin) { + if (rc == Success) { DRIDrawablePrivPtr pDRIDrwPriv = DRI_DRAWABLE_PRIV_FROM_WINDOW(pWin); if (!pDRIDrwPriv) diff --git a/hw/xfree86/vgahw/vgaCmap.c b/hw/xfree86/vgahw/vgaCmap.c index 44043c6c7..095e480a3 100644 --- a/hw/xfree86/vgahw/vgaCmap.c +++ b/hw/xfree86/vgahw/vgaCmap.c @@ -277,8 +277,8 @@ vgaUninstallColormap(pmap) if ( pmap != miInstalledMaps[pmap->pScreen->myNum] ) return; - defColormap = (ColormapPtr) LookupIDByType( pmap->pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&defColormap, pmap->pScreen->defColormap, + RT_COLORMAP, serverClient, DixInstallAccess); if (defColormap == miInstalledMaps[pmap->pScreen->myNum]) return; diff --git a/hw/xnest/Color.c b/hw/xnest/Color.c index 5ba0bdbad..dc749478f 100644 --- a/hw/xnest/Color.c +++ b/hw/xnest/Color.c @@ -242,16 +242,16 @@ xnestSetInstalledColormapWindows(ScreenPtr pScreen) WindowPtr pWin; Visual *visual; ColormapPtr pCmap; - + pWin = xnestWindowPtr(icws.windows[0]); visual = xnestVisualFromID(pScreen, wVisual(pWin)); if (visual == xnestDefaultVisual(pScreen)) - pCmap = (ColormapPtr)LookupIDByType(wColormap(pWin), - RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, wColormap(pWin), + RT_COLORMAP, serverClient, DixUseAccess); else - pCmap = (ColormapPtr)LookupIDByType(pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, pScreen->defColormap, + RT_COLORMAP, serverClient, DixUseAccess); XSetWindowColormap(xnestDisplay, xnestDefaultWindows[pScreen->myNum], @@ -302,7 +302,8 @@ xnestDirectInstallColormaps(ScreenPtr pScreen) for (i = 0; i < n; i++) { ColormapPtr pCmap; - pCmap = (ColormapPtr)LookupIDByType(pCmapIDs[i], RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, pCmapIDs[i], RT_COLORMAP, + serverClient, DixInstallAccess); if (pCmap) XInstallColormap(xnestDisplay, xnestColormap(pCmap)); } @@ -321,7 +322,8 @@ xnestDirectUninstallColormaps(ScreenPtr pScreen) for (i = 0; i < n; i++) { ColormapPtr pCmap; - pCmap = (ColormapPtr)LookupIDByType(pCmapIDs[i], RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, pCmapIDs[i], RT_COLORMAP, + serverClient, DixUninstallAccess); if (pCmap) XUninstallColormap(xnestDisplay, xnestColormap(pCmap)); } @@ -365,8 +367,10 @@ xnestUninstallColormap(ColormapPtr pCmap) { if (pCmap->mid != pCmap->pScreen->defColormap) { - pCurCmap = (ColormapPtr)LookupIDByType(pCmap->pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCurCmap, + pCmap->pScreen->defColormap, + RT_COLORMAP, + serverClient, DixInstallAccess); (*pCmap->pScreen->InstallColormap)(pCurCmap); } } diff --git a/hw/xnest/Window.c b/hw/xnest/Window.c index ae3487f4a..48c870fac 100644 --- a/hw/xnest/Window.c +++ b/hw/xnest/Window.c @@ -93,7 +93,8 @@ xnestCreateWindow(WindowPtr pWin) visual = xnestVisualFromID(pWin->drawable.pScreen, wVisual(pWin)); mask |= CWColormap; if (pWin->optional->colormap) { - pCmap = (ColormapPtr)LookupIDByType(wColormap(pWin), RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, wColormap(pWin), + RT_COLORMAP, serverClient, DixUseAccess); attributes.colormap = xnestColormap(pCmap); } else @@ -104,7 +105,8 @@ xnestCreateWindow(WindowPtr pWin) } else { /* root windows have their own colormaps at creation time */ visual = xnestVisualFromID(pWin->drawable.pScreen, wVisual(pWin)); - pCmap = (ColormapPtr)LookupIDByType(wColormap(pWin), RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, wColormap(pWin), + RT_COLORMAP, serverClient, DixUseAccess); mask |= CWColormap; attributes.colormap = xnestColormap(pCmap); } @@ -338,7 +340,8 @@ xnestChangeWindowAttributes(WindowPtr pWin, unsigned long mask) if (mask & CWColormap) { ColormapPtr pCmap; - pCmap = (ColormapPtr)LookupIDByType(wColormap(pWin), RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, wColormap(pWin), RT_COLORMAP, + serverClient, DixUseAccess); attributes.colormap = xnestColormap(pCmap); diff --git a/mi/micmap.c b/mi/micmap.c index 6318d6745..1d26a5232 100644 --- a/mi/micmap.c +++ b/mi/micmap.c @@ -87,8 +87,10 @@ miUninstallColormap(ColormapPtr pmap) { if (pmap->mid != pmap->pScreen->defColormap) { - curpmap = (ColormapPtr) LookupIDByType(pmap->pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&curpmap, + pmap->pScreen->defColormap, + RT_COLORMAP, serverClient, + DixUseAccess); (*pmap->pScreen->InstallColormap)(curpmap); } } diff --git a/mi/miexpose.c b/mi/miexpose.c index 5746a5fca..2c43d9824 100644 --- a/mi/miexpose.c +++ b/mi/miexpose.c @@ -436,7 +436,7 @@ miSendExposures( WindowPtr pWin, RegionPtr pRgn, int dx, int dy) return; } realWin = win->info[0].id; - pWin = LookupIDByType(realWin, RT_WINDOW); + dixLookupWindow(&pWin, realWin, serverClient, DixSendAccess); } if(x || y || scrnum) for (i = 0; i < numRects; i++) { diff --git a/randr/randr.c b/randr/randr.c index 07dd9e917..fd0a30aa1 100644 --- a/randr/randr.c +++ b/randr/randr.c @@ -279,7 +279,8 @@ RRFreeClient (pointer data, XID id) pRREvent = (RREventPtr) data; pWin = pRREvent->window; - pHead = (RREventPtr *) LookupIDByType(pWin->drawable.id, RREventType); + dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + RREventType, serverClient, DixDestroyAccess); if (pHead) { pPrev = 0; for (pCur = *pHead; pCur && pCur != pRREvent; pCur=pCur->next) @@ -357,7 +358,8 @@ TellChanged (WindowPtr pWin, pointer value) rrScrPriv(pScreen); int i; - pHead = (RREventPtr *) LookupIDByType (pWin->drawable.id, RREventType); + dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + RREventType, serverClient, DixReadAccess); if (!pHead) return WT_WALKCHILDREN; diff --git a/randr/randrstr.h b/randr/randrstr.h index 5e70aa3bf..af1437404 100644 --- a/randr/randrstr.h +++ b/randr/randrstr.h @@ -340,15 +340,29 @@ extern _X_EXPORT RESTYPE RRClientType, RREventType; /* resource types for event extern _X_EXPORT DevPrivateKey RRClientPrivateKey; extern _X_EXPORT RESTYPE RRCrtcType, RRModeType, RROutputType; -#define LookupOutput(client,id,a) ((RROutputPtr) \ - (SecurityLookupIDByType (client, id, \ - RROutputType, a))) -#define LookupCrtc(client,id,a) ((RRCrtcPtr) \ - (SecurityLookupIDByType (client, id, \ - RRCrtcType, a))) -#define LookupMode(client,id,a) ((RRModePtr) \ - (SecurityLookupIDByType (client, id, \ - RRModeType, a))) +#define VERIFY_RR_OUTPUT(id, ptr, a)\ + {\ + int rc = dixLookupResourceByType((pointer *)&(ptr), id,\ + RROutputType, client, a);\ + if (rc != Success)\ + return (rc == BadValue) ? RRErrorBase + BadRROutput : rc;\ + } + +#define VERIFY_RR_CRTC(id, ptr, a)\ + {\ + int rc = dixLookupResourceByType((pointer *)&(ptr), id,\ + RRCrtcType, client, a);\ + if (rc != Success)\ + return (rc == BadValue) ? RRErrorBase + BadRRCrtc : rc;\ + } + +#define VERIFY_RR_MODE(id, ptr, a)\ + {\ + int rc = dixLookupResourceByType((pointer *)&(ptr), id,\ + RRModeType, client, a);\ + if (rc != Success)\ + return (rc == BadValue) ? RRErrorBase + BadRRMode : rc;\ + } #define GetRRClient(pClient) ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey)) #define rrClientPriv(pClient) RRClientPtr pRRClient = GetRRClient(pClient) diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c index 7b724aefc..287c21194 100644 --- a/randr/rrcrtc.c +++ b/randr/rrcrtc.c @@ -658,10 +658,7 @@ ProcRRGetCrtcInfo (ClientPtr client) BoxRec panned_area; REQUEST_SIZE_MATCH(xRRGetCrtcInfoReq); - crtc = LookupCrtc(client, stuff->crtc, DixReadAccess); - - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); /* All crtcs must be associated with screens before client * requests are processed @@ -775,17 +772,13 @@ ProcRRSetCrtcConfig (ClientPtr client) TimeStamp configTime; TimeStamp time; Rotation rotation; - int i, j; + int rc, i, j; REQUEST_AT_LEAST_SIZE(xRRSetCrtcConfigReq); numOutputs = (stuff->length - (SIZEOF (xRRSetCrtcConfigReq) >> 2)); - crtc = LookupIDByType (stuff->crtc, RRCrtcType); - if (!crtc) - { - client->errorValue = stuff->crtc; - return RRErrorBase + BadRRCrtc; - } + VERIFY_RR_CRTC(stuff->crtc, crtc, DixSetAttrAccess); + if (stuff->mode == None) { mode = NULL; @@ -794,12 +787,7 @@ ProcRRSetCrtcConfig (ClientPtr client) } else { - mode = LookupIDByType (stuff->mode, RRModeType); - if (!mode) - { - client->errorValue = stuff->mode; - return RRErrorBase + BadRRMode; - } + VERIFY_RR_MODE(stuff->mode, mode, DixSetAttrAccess); if (numOutputs == 0) return BadMatch; } @@ -815,13 +803,13 @@ ProcRRSetCrtcConfig (ClientPtr client) outputIds = (RROutput *) (stuff + 1); for (i = 0; i < numOutputs; i++) { - outputs[i] = (RROutputPtr) LookupIDByType (outputIds[i], RROutputType); - if (!outputs[i]) + rc = dixLookupResourceByType((pointer *)(outputs + i), outputIds[i], + RROutputType, client, DixSetAttrAccess); + if (rc != Success) { - client->errorValue = outputIds[i]; if (outputs) xfree (outputs); - return RRErrorBase + BadRROutput; + return (rc == BadValue) ? RRErrorBase + BadRROutput : rc; } /* validate crtc for this output */ for (j = 0; j < outputs[i]->numCrtcs; j++) @@ -1027,10 +1015,7 @@ ProcRRGetPanning (ClientPtr client) int n; REQUEST_SIZE_MATCH(xRRGetPanningReq); - crtc = LookupCrtc(client, stuff->crtc, DixReadAccess); - - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); /* All crtcs must be associated with screens before client * requests are processed @@ -1100,11 +1085,7 @@ ProcRRSetPanning (ClientPtr client) int n; REQUEST_SIZE_MATCH(xRRSetPanningReq); - crtc = LookupCrtc(client, stuff->crtc, DixReadAccess); - - if (!crtc) - return RRErrorBase + BadRRCrtc; - + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); /* All crtcs must be associated with screens before client * requests are processed @@ -1175,9 +1156,7 @@ ProcRRGetCrtcGammaSize (ClientPtr client) int n; REQUEST_SIZE_MATCH(xRRGetCrtcGammaSizeReq); - crtc = LookupCrtc (client, stuff->crtc, DixReadAccess); - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); /* Gamma retrieval failed, any better error? */ if (!RRCrtcGammaGet(crtc)) @@ -1207,9 +1186,7 @@ ProcRRGetCrtcGamma (ClientPtr client) char *extra = NULL; REQUEST_SIZE_MATCH(xRRGetCrtcGammaReq); - crtc = LookupCrtc (client, stuff->crtc, DixReadAccess); - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); /* Gamma retrieval failed, any better error? */ if (!RRCrtcGammaGet(crtc)) @@ -1252,9 +1229,7 @@ ProcRRSetCrtcGamma (ClientPtr client) CARD16 *red, *green, *blue; REQUEST_AT_LEAST_SIZE(xRRSetCrtcGammaReq); - crtc = LookupCrtc (client, stuff->crtc, DixWriteAccess); - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); len = client->req_len - (sizeof (xRRSetCrtcGammaReq) >> 2); if (len < (stuff->size * 3 + 1) >> 1) @@ -1287,9 +1262,7 @@ ProcRRSetCrtcTransform (ClientPtr client) int nparams; REQUEST_AT_LEAST_SIZE(xRRSetCrtcTransformReq); - crtc = LookupCrtc (client, stuff->crtc, DixWriteAccess); - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); PictTransform_from_xRenderTransform (&transform, &stuff->transform); pixman_f_transform_from_pixman_transform (&f_transform, &transform); @@ -1372,9 +1345,7 @@ ProcRRGetCrtcTransform (ClientPtr client) char *extra; REQUEST_SIZE_MATCH (xRRGetCrtcTransformReq); - crtc = LookupCrtc (client, stuff->crtc, DixWriteAccess); - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); pending = &crtc->client_pending_transform; current = &crtc->client_current_transform; diff --git a/randr/rrdispatch.c b/randr/rrdispatch.c index 0925875bf..bec5b08af 100644 --- a/randr/rrdispatch.c +++ b/randr/rrdispatch.c @@ -79,9 +79,10 @@ ProcRRSelectInput (ClientPtr client) rc = dixLookupWindow(&pWin, stuff->window, client, DixReceiveAccess); if (rc != Success) return rc; - pHead = (RREventPtr *)SecurityLookupIDByType(client, - pWin->drawable.id, RREventType, - DixWriteAccess); + rc = dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + RREventType, client, DixWriteAccess); + if (rc != Success && rc != BadValue) + return rc; if (stuff->enable & (RRScreenChangeNotifyMask| RRCrtcChangeNotifyMask| diff --git a/randr/rrmode.c b/randr/rrmode.c index 2fa440385..2a1007662 100644 --- a/randr/rrmode.c +++ b/randr/rrmode.c @@ -332,12 +332,8 @@ ProcRRDestroyMode (ClientPtr client) RRModePtr mode; REQUEST_SIZE_MATCH(xRRDestroyModeReq); - mode = LookupIDByType (stuff->mode, RRModeType); - if (!mode) - { - client->errorValue = stuff->mode; - return RRErrorBase + BadRRMode; - } + VERIFY_RR_MODE(stuff->mode, mode, DixDestroyAccess); + if (!mode->userScreen) return BadMatch; if (mode->refcnt > 1) @@ -354,20 +350,8 @@ ProcRRAddOutputMode (ClientPtr client) RROutputPtr output; REQUEST_SIZE_MATCH(xRRAddOutputModeReq); - output = LookupOutput(client, stuff->output, DixReadAccess); - - if (!output) - { - client->errorValue = stuff->output; - return RRErrorBase + BadRROutput; - } - - mode = LookupIDByType (stuff->mode, RRModeType); - if (!mode) - { - client->errorValue = stuff->mode; - return RRErrorBase + BadRRMode; - } + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); + VERIFY_RR_MODE(stuff->mode, mode, DixUseAccess); return RROutputAddUserMode (output, mode); } @@ -380,20 +364,8 @@ ProcRRDeleteOutputMode (ClientPtr client) RROutputPtr output; REQUEST_SIZE_MATCH(xRRDeleteOutputModeReq); - output = LookupOutput(client, stuff->output, DixReadAccess); - - if (!output) - { - client->errorValue = stuff->output; - return RRErrorBase + BadRROutput; - } - - mode = LookupIDByType (stuff->mode, RRModeType); - if (!mode) - { - client->errorValue = stuff->mode; - return RRErrorBase + BadRRMode; - } + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); + VERIFY_RR_MODE(stuff->mode, mode, DixUseAccess); return RROutputDeleteUserMode (output, mode); } diff --git a/randr/rroutput.c b/randr/rroutput.c index 0ae7873e2..127497eb8 100644 --- a/randr/rroutput.c +++ b/randr/rroutput.c @@ -448,13 +448,7 @@ ProcRRGetOutputInfo (ClientPtr client) int i, n; REQUEST_SIZE_MATCH(xRRGetOutputInfoReq); - output = LookupOutput(client, stuff->output, DixReadAccess); - - if (!output) - { - client->errorValue = stuff->output; - return RRErrorBase + BadRROutput; - } + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); pScreen = output->pScreen; pScrPriv = rrGetScrPriv(pScreen); @@ -569,24 +563,16 @@ ProcRRSetOutputPrimary(ClientPtr client) RROutputPtr output = NULL; WindowPtr pWin; rrScrPrivPtr pScrPriv; + int rc; REQUEST_SIZE_MATCH(xRRSetOutputPrimaryReq); - pWin = SecurityLookupIDByType(client, stuff->window, RT_WINDOW, - DixReadAccess); - - if (!pWin) { - client->errorValue = stuff->window; - return BadWindow; - } + rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess); + if (rc != Success) + return rc; if (stuff->output) { - output = LookupOutput(client, stuff->output, DixReadAccess); - - if (!output) { - client->errorValue = stuff->output; - return RRErrorBase + BadRROutput; - } + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); if (output->pScreen != pWin->drawable.pScreen) { client->errorValue = stuff->window; @@ -608,16 +594,13 @@ ProcRRGetOutputPrimary(ClientPtr client) rrScrPrivPtr pScrPriv; xRRGetOutputPrimaryReply rep; RROutputPtr primary = NULL; + int rc; REQUEST_SIZE_MATCH(xRRGetOutputPrimaryReq); - pWin = SecurityLookupIDByType(client, stuff->window, RT_WINDOW, - DixReadAccess); - - if (!pWin) { - client->errorValue = stuff->window; - return BadWindow; - } + rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess); + if (rc != Success) + return rc; pScrPriv = rrGetScrPriv(pWin->drawable.pScreen); if (pScrPriv) diff --git a/randr/rrproperty.c b/randr/rrproperty.c index 12923a2c7..775d9e29f 100644 --- a/randr/rrproperty.c +++ b/randr/rrproperty.c @@ -31,7 +31,8 @@ DeliverPropertyEvent(WindowPtr pWin, void *value) RREventPtr *pHead, pRREvent; ClientPtr client; - pHead = LookupIDByType(pWin->drawable.id, RREventType); + dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + RREventType, serverClient, DixReadAccess); if (!pHead) return WT_WALKCHILDREN; @@ -419,10 +420,7 @@ ProcRRListOutputProperties (ClientPtr client) REQUEST_SIZE_MATCH(xRRListOutputPropertiesReq); - output = LookupOutput (client, stuff->output, DixReadAccess); - - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); for (prop = output->properties; prop; prop = prop->next) numProps++; @@ -466,10 +464,7 @@ ProcRRQueryOutputProperty (ClientPtr client) REQUEST_SIZE_MATCH(xRRQueryOutputPropertyReq); - output = LookupOutput (client, stuff->output, DixReadAccess); - - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); prop = RRQueryOutputProperty (output, stuff->property); if (!prop) @@ -513,10 +508,7 @@ ProcRRConfigureOutputProperty (ClientPtr client) REQUEST_AT_LEAST_SIZE(xRRConfigureOutputPropertyReq); - output = LookupOutput (client, stuff->output, DixReadAccess); - - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); num_valid = stuff->length - (sizeof (xRRConfigureOutputPropertyReq) >> 2); return RRConfigureOutputProperty (output, stuff->property, @@ -558,9 +550,7 @@ ProcRRChangeOutputProperty (ClientPtr client) totalSize = len * sizeInBytes; REQUEST_FIXED_SIZE(xRRChangeOutputPropertyReq, totalSize); - output = LookupOutput (client, stuff->output, DixWriteAccess); - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); if (!ValidAtom(stuff->property)) { @@ -590,9 +580,7 @@ ProcRRDeleteOutputProperty (ClientPtr client) REQUEST_SIZE_MATCH(xRRDeleteOutputPropertyReq); UpdateCurrentTime(); - output = LookupOutput (client, stuff->output, DixWriteAccess); - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); if (!ValidAtom(stuff->property)) { @@ -619,11 +607,8 @@ ProcRRGetOutputProperty (ClientPtr client) REQUEST_SIZE_MATCH(xRRGetOutputPropertyReq); if (stuff->delete) UpdateCurrentTime(); - output = LookupOutput (client, stuff->output, - stuff->delete ? DixWriteAccess : - DixReadAccess); - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, + stuff->delete ? DixWriteAccess : DixReadAccess); if (!ValidAtom(stuff->property)) { diff --git a/record/record.c b/record/record.c index f97626f73..cb7a6276c 100644 --- a/record/record.c +++ b/record/record.c @@ -127,11 +127,10 @@ static int numEnabledRCAPs; * returns an error. */ #define VERIFY_CONTEXT(_pContext, _contextid, _client) { \ - (_pContext) = (RecordContextPtr)LookupIDByType((_contextid), RTContext); \ - if (!(_pContext)) { \ - (_client)->errorValue = (_contextid); \ - return RecordErrorBase + XRecordBadContext; \ - } \ + int rc = dixLookupResourceByType((pointer *)&(_pContext), _contextid, \ + RTContext, _client, DixUseAccess); \ + if (rc != Success) \ + return (rc == BadValue) ? RecordErrorBase + XRecordBadContext : rc; \ } static int RecordDeleteContext( diff --git a/render/picture.c b/render/picture.c index 462125f05..5f86c7ce1 100644 --- a/render/picture.c +++ b/render/picture.c @@ -410,8 +410,9 @@ PictureInitIndexedFormat(ScreenPtr pScreen, PictFormatPtr format) return TRUE; if (format->index.vid == pScreen->rootVisual) { - format->index.pColormap = - (ColormapPtr) LookupIDByType(pScreen->defColormap, RT_COLORMAP); + dixLookupResourceByType((pointer *)&format->index.pColormap, + pScreen->defColormap, RT_COLORMAP, + serverClient, DixGetAttrAccess); } else { VisualPtr pVisual = PictureFindVisual(pScreen, format->index.vid); if (CreateColormap(FakeClientID (0), pScreen, pVisual, diff --git a/render/picturestr.h b/render/picturestr.h index 194db11a3..6a1cc061c 100644 --- a/render/picturestr.h +++ b/render/picturestr.h @@ -409,11 +409,10 @@ extern _X_EXPORT RESTYPE GlyphSetType; #define SetPictureWindow(w,p) dixSetPrivate(&(w)->devPrivates, PictureWindowPrivateKey, p) #define VERIFY_PICTURE(pPicture, pid, client, mode, err) {\ - pPicture = SecurityLookupIDByType(client, pid, PictureType, mode);\ - if (!pPicture) { \ - client->errorValue = pid; \ - return err; \ - } \ + int rc = dixLookupResourceByType((pointer)&(pPicture), pid,\ + PictureType, client, mode);\ + if (rc != Success)\ + return (rc == BadValue) ? err : rc;\ } #define VERIFY_ALPHA(pPicture, pid, client, mode, err) {\ diff --git a/render/render.c b/render/render.c index 270b8fb29..8487b60de 100644 --- a/render/render.c +++ b/render/render.c @@ -509,7 +509,7 @@ static int ProcRenderQueryPictIndexValues (ClientPtr client) { PictFormatPtr pFormat; - int num; + int rc, num; int rlength; int i, n; REQUEST(xRenderQueryPictIndexValuesReq); @@ -518,16 +518,11 @@ ProcRenderQueryPictIndexValues (ClientPtr client) REQUEST_AT_LEAST_SIZE(xRenderQueryPictIndexValuesReq); - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->format, - PictFormatType, - DixReadAccess); + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->format, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; - if (!pFormat) - { - client->errorValue = stuff->format; - return RenderErrBase + BadPictFormat; - } if (pFormat->type != PictTypeIndexed) { client->errorValue = stuff->format; @@ -592,15 +587,11 @@ ProcRenderCreatePicture (ClientPtr client) if (rc != Success) return rc; - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->format, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->format; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->format, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; + if (pFormat->depth != pDrawable->depth) return BadMatch; len = client->req_len - (sizeof(xRenderCreatePictureReq) >> 2); @@ -740,7 +731,7 @@ ProcRenderScale (ClientPtr client) static int ProcRenderTrapezoids (ClientPtr client) { - int ntraps; + int rc, ntraps; PicturePtr pSrc, pDst; PictFormatPtr pFormat; REQUEST(xRenderTrapezoidsReq); @@ -761,15 +752,10 @@ ProcRenderTrapezoids (ClientPtr client) return BadMatch; if (stuff->maskFormat) { - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->maskFormat, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->maskFormat; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->maskFormat, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; } else pFormat = 0; @@ -787,7 +773,7 @@ ProcRenderTrapezoids (ClientPtr client) static int ProcRenderTriangles (ClientPtr client) { - int ntris; + int rc, ntris; PicturePtr pSrc, pDst; PictFormatPtr pFormat; REQUEST(xRenderTrianglesReq); @@ -808,15 +794,10 @@ ProcRenderTriangles (ClientPtr client) return BadMatch; if (stuff->maskFormat) { - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->maskFormat, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->maskFormat; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->maskFormat, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; } else pFormat = 0; @@ -834,7 +815,7 @@ ProcRenderTriangles (ClientPtr client) static int ProcRenderTriStrip (ClientPtr client) { - int npoints; + int rc, npoints; PicturePtr pSrc, pDst; PictFormatPtr pFormat; REQUEST(xRenderTrianglesReq); @@ -855,15 +836,10 @@ ProcRenderTriStrip (ClientPtr client) return BadMatch; if (stuff->maskFormat) { - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->maskFormat, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->maskFormat; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->maskFormat, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; } else pFormat = 0; @@ -881,7 +857,7 @@ ProcRenderTriStrip (ClientPtr client) static int ProcRenderTriFan (ClientPtr client) { - int npoints; + int rc, npoints; PicturePtr pSrc, pDst; PictFormatPtr pFormat; REQUEST(xRenderTrianglesReq); @@ -902,15 +878,10 @@ ProcRenderTriFan (ClientPtr client) return BadMatch; if (stuff->maskFormat) { - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->maskFormat, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->maskFormat; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->maskFormat, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; } else pFormat = 0; @@ -954,15 +925,11 @@ ProcRenderCreateGlyphSet (ClientPtr client) REQUEST_SIZE_MATCH(xRenderCreateGlyphSetReq); LEGAL_NEW_RESOURCE(stuff->gsid, client); - format = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->format, - PictFormatType, - DixReadAccess); - if (!format) - { - client->errorValue = stuff->format; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&format, stuff->format, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; + switch (format->depth) { case 1: f = GlyphFormat1; @@ -1300,7 +1267,7 @@ ProcRenderCompositeGlyphs (ClientPtr client) int nlist; int space; int size; - int n; + int rc, n; REQUEST(xRenderCompositeGlyphsReq); @@ -1327,28 +1294,18 @@ ProcRenderCompositeGlyphs (ClientPtr client) return BadMatch; if (stuff->maskFormat) { - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->maskFormat, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->maskFormat; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->maskFormat, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; } else pFormat = 0; - glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client, - stuff->glyphset, - GlyphSetType, - DixUseAccess); - if (!glyphSet) - { - client->errorValue = stuff->glyphset; - return RenderErrBase + BadGlyphSet; - } + rc = dixLookupResourceByType((pointer *)&glyphSet, stuff->glyphset, + GlyphSetType, client, DixUseAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadGlyphSet : rc; buffer = (CARD8 *) (stuff + 1); end = (CARD8 *) stuff + (client->req_len << 2); @@ -1402,18 +1359,16 @@ ProcRenderCompositeGlyphs (ClientPtr client) if (buffer + sizeof (GlyphSet) < end) { memcpy(&gs, buffer, sizeof(GlyphSet)); - glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client, - gs, - GlyphSetType, - DixUseAccess); - if (!glyphSet) + rc = dixLookupResourceByType((pointer *)&glyphSet, gs, + GlyphSetType, client, + DixUseAccess); + if (rc != Success) { - client->errorValue = gs; if (glyphsBase != glyphsLocal) xfree (glyphsBase); if (listsBase != listsLocal) xfree (listsBase); - return RenderErrBase + BadGlyphSet; + return (rc == BadValue) ? RenderErrBase + BadGlyphSet : rc; } } buffer += 4; @@ -1902,13 +1857,12 @@ ProcRenderCreateAnimCursor (ClientPtr client) elt = (xAnimCursorElt *) (stuff + 1); for (i = 0; i < ncursor; i++) { - cursors[i] = (CursorPtr)SecurityLookupIDByType(client, elt->cursor, - RT_CURSOR, DixReadAccess); - if (!cursors[i]) + ret = dixLookupResourceByType((pointer *)(cursors + 1), elt->cursor, + RT_CURSOR, client, DixReadAccess); + if (ret != Success) { xfree (cursors); - client->errorValue = elt->cursor; - return BadCursor; + return (ret == BadValue) ? BadCursor : ret; } deltas[i] = elt->delay; elt++; @@ -2689,11 +2643,10 @@ SProcRenderDispatch (ClientPtr client) #include "panoramiXsrv.h" #define VERIFY_XIN_PICTURE(pPicture, pid, client, mode, err) {\ - pPicture = SecurityLookupIDByType(client, pid, XRT_PICTURE, mode);\ - if (!pPicture) { \ - client->errorValue = pid; \ - return err; \ - } \ + int rc = dixLookupResourceByType((pointer *)&(pPicture), pid,\ + XRT_PICTURE, client, mode);\ + if (rc != Success)\ + return (rc == BadValue) ? err : rc;\ } #define VERIFY_XIN_ALPHA(pPicture, pid, client, mode, err) {\ @@ -2713,12 +2666,13 @@ PanoramiXRenderCreatePicture (ClientPtr client) { REQUEST(xRenderCreatePictureReq); PanoramiXRes *refDraw, *newPict; - int result = Success, j; + int result, j; REQUEST_AT_LEAST_SIZE(xRenderCreatePictureReq); - if(!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&refDraw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(!(newPict = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes)))) return BadAlloc; newPict->type = XRT_PICTURE; diff --git a/xfixes/cursor.c b/xfixes/cursor.c index eb83cfeb7..6fa2dff8e 100644 --- a/xfixes/cursor.c +++ b/xfixes/cursor.c @@ -203,6 +203,8 @@ XFixesSelectCursorInput (ClientPtr pClient, CARD32 eventMask) { CursorEventPtr *prev, e; + pointer val; + int rc; for (prev = &cursorEvents; (e = *prev); prev = &e->next) { @@ -235,7 +237,10 @@ XFixesSelectCursorInput (ClientPtr pClient, * Add a resource hanging from the window to * catch window destroy */ - if (!LookupIDByType(pWindow->drawable.id, CursorWindowType)) + rc = dixLookupResourceByType( &val, pWindow->drawable.id, + CursorWindowType, serverClient, + DixGetAttrAccess); + if (rc != Success) if (!AddResource (pWindow->drawable.id, CursorWindowType, (pointer) pWindow)) { diff --git a/xfixes/select.c b/xfixes/select.c index 795b8bd4c..a5811bdc0 100644 --- a/xfixes/select.c +++ b/xfixes/select.c @@ -133,6 +133,7 @@ XFixesSelectSelectionInput (ClientPtr pClient, WindowPtr pWindow, CARD32 eventMask) { + pointer val; int rc; SelectionEventPtr *prev, e; @@ -173,7 +174,10 @@ XFixesSelectSelectionInput (ClientPtr pClient, * Add a resource hanging from the window to * catch window destroy */ - if (!LookupIDByType(pWindow->drawable.id, SelectionWindowType)) + rc = dixLookupResourceByType (&val, pWindow->drawable.id, + SelectionWindowType, serverClient, + DixGetAttrAccess); + if (rc != Success) if (!AddResource (pWindow->drawable.id, SelectionWindowType, (pointer) pWindow)) { From 0d9d3f3e361f769822caedccf4c2a58cc9930ecc Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Mon, 27 Apr 2009 15:11:10 -0700 Subject: [PATCH 18/89] DRI2: Force allocation of real-front buffer for non-windows as well For redirected rendering we end up with pixmaps (which the app thinks are windows) that are double buffered. Signed-off-by: Ian Romanick Tested-by: Pierre Willenbrock --- hw/xfree86/dri2/dri2.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 9ded048eb..1d49d7c65 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -206,18 +206,21 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height, * attachments. The counting logic in the loop accounts for the case * where the client requests both the fake and real front-buffer. */ - if (pDraw->type == DRAWABLE_WINDOW) { - if (attachment == DRI2BufferBackLeft) { - need_real_front++; - front_format = format; - } + if (attachment == DRI2BufferBackLeft) { + need_real_front++; + front_format = format; + } - if (attachment == DRI2BufferFrontLeft) { - need_real_front--; + if (attachment == DRI2BufferFrontLeft) { + need_real_front--; + front_format = format; + + if (pDraw->type == DRAWABLE_WINDOW) { need_fake_front++; - front_format = format; } + } + if (pDraw->type == DRAWABLE_WINDOW) { if (attachment == DRI2BufferFakeFrontLeft) { need_fake_front--; have_fake_front = 1; From 557dbadf3be273255e8fdb12d9321f4e88bf2b65 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Sat, 2 May 2009 00:26:18 -0700 Subject: [PATCH 19/89] XkbSetNamedIndicator should ignore SD's without LED's When ProcXkbSetNamedIndicator is called on a core device, and we walk the slaves to set the LED's on each of them, ignore any slaves that do not have either a KbdFeedbackCtrl or LedCtrl structure. (This is much more critical in xserver-1.5-branch, where we walk *all* devices, not just the slaves of the specified master, and thus return failure when setting an LED on the Core Keyboard and hit a xf86-input-mouse device with no LED's to set.) Signed-off-by: Alan Coopersmith Acked-by: Peter Hutterer --- xkb/xkb.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xkb/xkb.c b/xkb/xkb.c index e7c9a312d..b2fe11cae 100644 --- a/xkb/xkb.c +++ b/xkb/xkb.c @@ -3433,6 +3433,7 @@ ProcXkbSetNamedIndicator(ClientPtr client) for (other = inputInfo.devices; other; other = other->next) { if ((other != dev) && !other->isMaster && (other->u.master == dev) && + (other->kbdfeed || other->leds) && (XaceHook(XACE_DEVICE_ACCESS, client, other, DixSetAttrAccess) == Success)) { rc = _XkbCreateIndicatorMap(other, stuff->indicator, @@ -3456,6 +3457,7 @@ ProcXkbSetNamedIndicator(ClientPtr client) for (other = inputInfo.devices; other; other = other->next) { if ((other != dev) && !other->isMaster && (other->u.master == dev) && + (other->kbdfeed || other->leds) && (XaceHook(XACE_DEVICE_ACCESS, client, other, DixSetAttrAccess) == Success)) { _XkbSetNamedIndicator(client, other, stuff); From 7d85169c7ab1d05c21fdbb2877ffd79f344dbb6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 4 May 2009 10:14:43 +0200 Subject: [PATCH 20/89] Fix typo in ProcRenderCreateAnimCursor. --- render/render.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/render/render.c b/render/render.c index 8487b60de..5622994e3 100644 --- a/render/render.c +++ b/render/render.c @@ -1857,7 +1857,7 @@ ProcRenderCreateAnimCursor (ClientPtr client) elt = (xAnimCursorElt *) (stuff + 1); for (i = 0; i < ncursor; i++) { - ret = dixLookupResourceByType((pointer *)(cursors + 1), elt->cursor, + ret = dixLookupResourceByType((pointer *)(cursors + i), elt->cursor, RT_CURSOR, client, DixReadAccess); if (ret != Success) { From 94648bb797d94b025746c60679c584e5be2fae28 Mon Sep 17 00:00:00 2001 From: Jesse Barnes Date: Mon, 4 May 2009 15:38:22 -0700 Subject: [PATCH 21/89] Don't prepare outputs & crtcs if set_mode_major is present A driver with this hook will take care of preparing the outputs & crtcs, so calling the prepare functions will just cause unnecessary flicker. Fixes bug #21077 --- hw/xfree86/modes/xf86Crtc.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index c6eed3377..1b241cd33 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -2549,18 +2549,23 @@ Bool xf86SetDesiredModes (ScrnInfoPtr scrn) { xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn); + xf86CrtcPtr crtc = config->crtc[0]; int c; - xf86PrepareOutputs(scrn); - xf86PrepareCrtcs(scrn); + /* A driver with this hook will take care of this */ + if (!crtc->funcs->set_mode_major) { + xf86PrepareOutputs(scrn); + xf86PrepareCrtcs(scrn); + } for (c = 0; c < config->num_crtc; c++) { - xf86CrtcPtr crtc = config->crtc[c]; xf86OutputPtr output = NULL; int o; RRTransformPtr transform; + crtc = config->crtc[c]; + /* Skip disabled CRTCs */ if (!crtc->enabled) continue; From f1bed0959e803784af142a0f45177ee3b675d78a Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 1 May 2009 15:15:04 +1000 Subject: [PATCH 22/89] Xext: fix core Xtest button presses, don't call PickPointer. We already did the device selection before, so dev should be the XTest virtual pointer. Signed-off-by: Peter Hutterer --- Xext/xtest.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Xext/xtest.c b/Xext/xtest.c index d21eedcde..8aca6a0f7 100644 --- a/Xext/xtest.c +++ b/Xext/xtest.c @@ -376,12 +376,6 @@ ProcXTestFakeInput(ClientPtr client) break; case ButtonPress: case ButtonRelease: - if (!extension) - { - dev = PickPointer(client); - if (dev->u.lastSlave) - dev = dev->u.lastSlave; - } if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons) { client->errorValue = ev->u.u.detail; From 14d5471981151b27678de826daa078977217477a Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 1 May 2009 15:22:37 +1000 Subject: [PATCH 23/89] Xext: return BadDevice from XTest if we don't have keys/buttons/valuators. BadDevice is an XI error, but this cannot happen for core XTest fake input anyway since the device will be the matching virtual XTest slave device. Signed-off-by: Peter Hutterer --- Xext/xtest.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Xext/xtest.c b/Xext/xtest.c index 8aca6a0f7..cb32c2858 100644 --- a/Xext/xtest.c +++ b/Xext/xtest.c @@ -49,6 +49,7 @@ #include #include #include +#include "exglobals.h" #include "modinit.h" @@ -342,6 +343,9 @@ ProcXTestFakeInput(ClientPtr client) { case KeyPress: case KeyRelease: + if (!dev->key) + return BadDevice; + if (ev->u.u.detail < dev->key->xkbInfo->desc->min_key_code || ev->u.u.detail > dev->key->xkbInfo->desc->max_key_code) { @@ -350,6 +354,9 @@ ProcXTestFakeInput(ClientPtr client) } break; case MotionNotify: + if (!dev->valuator) + return BadDevice; + /* broken lib, XI events have root uninitialized */ if (extension || ev->u.keyButtonPointer.root == None) root = GetCurrentRootWindow(dev); @@ -376,6 +383,9 @@ ProcXTestFakeInput(ClientPtr client) break; case ButtonPress: case ButtonRelease: + if (!dev->button) + return BadDevice; + if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons) { client->errorValue = ev->u.u.detail; From a38d33f6ac765bc5a3296b325e2c9b4a6a10ebf1 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 1 May 2009 15:24:02 +1000 Subject: [PATCH 24/89] Xext: shut up compiler warnings in xtest.c Signed-off-by: Peter Hutterer --- Xext/xtest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Xext/xtest.c b/Xext/xtest.c index cb32c2858..96380b769 100644 --- a/Xext/xtest.c +++ b/Xext/xtest.c @@ -50,6 +50,7 @@ #include #include #include "exglobals.h" +#include "mipointer.h" #include "modinit.h" @@ -162,7 +163,6 @@ ProcXTestFakeInput(ClientPtr client) int i; int base = 0; int flags = 0; - DeviceIntPtr xtstdevice; nev = (stuff->length << 2) - sizeof(xReq); if ((nev % sizeof(xEvent)) || !nev) @@ -415,7 +415,7 @@ ProcXTestFakeInput(ClientPtr client) } for (i = 0; i < nevents; i++) - mieqProcessDeviceEvent(dev, (events+i)->event, NULL); + mieqProcessDeviceEvent(dev, (InternalEvent*)(events+i)->event, NULL); miPointerUpdateSprite(dev); return client->noClientException; From 7ecedb0f2ee5b53513205d1f0aa381451893b9c5 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 1 May 2009 14:35:12 +1000 Subject: [PATCH 25/89] include: up the number of max. input devices to 40. With the Xtest virtual slave devices we have 4 devices for each MD pointer/keyboard pair, plus the AllDevices and AllMasterDevices reserved deviceids. It's quite easy to hit the current limit. Signed-off-by: Peter Hutterer --- include/misc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/misc.h b/include/misc.h index 6a920cc9f..61dd9474c 100644 --- a/include/misc.h +++ b/include/misc.h @@ -86,7 +86,7 @@ OF THIS SOFTWARE. #define MAXCLIENTS 256 #define MAXEXTENSIONS 128 #define MAXFORMATS 8 -#define MAXDEVICES 20 /* input devices */ +#define MAXDEVICES 40 /* input devices */ #define EXTENSION_EVENT_BASE 64 #define EXTENSION_BASE 128 From 749cae82204f347248c815b1068ffcae9825fe70 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 30 Apr 2009 14:58:00 +1000 Subject: [PATCH 26/89] mi: don't crash if we're trying to update the pointer for a keyboard. If a device doesn't have a pointer, just return. Signed-off-by: Peter Hutterer --- mi/mipointer.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mi/mipointer.c b/mi/mipointer.c index 3d34481ef..1c61b57a9 100644 --- a/mi/mipointer.c +++ b/mi/mipointer.c @@ -367,6 +367,9 @@ miPointerUpdateSprite (DeviceIntPtr pDev) pPointer = MIPOINTER(pDev); + if (!pPointer) + return; + pScreen = pPointer->pScreen; if (!pScreen) return; From 1b1b20d6e3e696e4437a9ef56128cde70a485f66 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 5 May 2009 13:47:55 +1000 Subject: [PATCH 27/89] Change glib require for tests to auto. Signed-off-by: Peter Hutterer --- configure.ac | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 3fc4dd405..daddd094a 100644 --- a/configure.ac +++ b/configure.ac @@ -440,8 +440,8 @@ AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [Enable debugging (default: disabled)]), [DEBUGGING=$enableval], [DEBUGGING=no]) AC_ARG_ENABLE(unit-tests, AS_HELP_STRING([--enable-unit-tests], - [Enable unit-tests (default: enabled)]), - [UNITTESTS=$enableval], [UNITTESTS=yes]) + [Enable unit-tests (default: auto)]), + [UNITTESTS=$enableval], [UNITTESTS=auto]) AC_ARG_WITH(int10, AS_HELP_STRING([--with-int10=BACKEND], [int10 backend: vm86, x86emu or stub]), [INT10="$withval"], [INT10="$DEFAULT_INT10"]) @@ -1144,6 +1144,9 @@ if test "x$DEBUGGING" = xyes; then fi AM_CONDITIONAL(DEBUG, [test "x$DEBUGGING" = xyes]) +if test "x$UNITTESTS" = xauto; then + PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16], [UNITTESTS=yes], [UNITTESTS=no]) +fi if test "x$UNITTESTS" = xyes; then AC_DEFINE(UNITTESTS, 1, [Enable unit tests]) PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16]) From 35fce4e5c7fa34f98b3e4010c6cb09ce38a9205c Mon Sep 17 00:00:00 2001 From: Simon Thum Date: Thu, 30 Apr 2009 12:58:48 +0200 Subject: [PATCH 28/89] dix: fix warning in pointer acceleration newer gcc's warn against how this cast is done (though it eludes me why), and lrintf() is also faster especially on insane processors like the P4 (http://www.mega-nerd.com/FPcast). Signed-off-by: Peter Hutterer --- dix/ptrveloc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c index 99efc794c..0a9a22ec2 100644 --- a/dix/ptrveloc.c +++ b/dix/ptrveloc.c @@ -994,14 +994,20 @@ acceleratePointerPredictable( if (dx) { tmp = mult * fdx + pDev->last.remainder[0]; - *px = (int)roundf(tmp); + /* Since it may not be apparent: lrintf() does not offer + * strong statements about rounding; however because we + * process each axis conditionally, there's no danger + * of a toggling remainder. Its lack of guarantees hopefully + * makes it faster on the average target. */ + *px = lrintf(tmp); pDev->last.remainder[0] = tmp - (float)*px; } if (dy) { tmp = mult * fdy + pDev->last.remainder[1]; - *py = (int)roundf(tmp); + *py = lrintf(tmp); pDev->last.remainder[1] = tmp - (float)*py; } + DebugAccelF("pos (%i | %i) remainders x: %.3f y: %.3f delta x:%.3f y:%.3f\n", *px, *py, pDev->last.remainder[0], pDev->last.remainder[1], fdx, fdy); } } } From 9d1597cbefea6a5e7959f2099c46f1a284def7ad Mon Sep 17 00:00:00 2001 From: Simon Thum Date: Thu, 30 Apr 2009 13:01:17 +0200 Subject: [PATCH 29/89] dix: remove superfluous includes from ptrveloc.c Signed-off-by: Peter Hutterer --- dix/ptrveloc.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c index 0a9a22ec2..7732e9569 100644 --- a/dix/ptrveloc.c +++ b/dix/ptrveloc.c @@ -28,11 +28,8 @@ #include #include -#include #include #include -#include -#include #include From 3fc6fcfb267888d65a22ed7c3eda175a2530a3d5 Mon Sep 17 00:00:00 2001 From: Simon Thum Date: Wed, 6 May 2009 10:39:16 +0200 Subject: [PATCH 30/89] dix: add 'none' pointer acceleration profile with number -1 This is a shorthand for disabling acceleration, while retaining the possiblity to use constant deceleration. If constant deceleration is also unused, it will optimize motion processing. Other possiblities to deactivate acceleration were quite hidden, and didn't always work as expected. E.g. xset m 1 1 would retain adaptive deceleration, while xset m 1 0 would not (in the default profile). Also removes the 'reserved' profile; it was unused and it's trivial to add new ones anyway. Signed-off-by: Peter Hutterer --- dix/ptrveloc.c | 36 ++++++++++++++++++++++++++++-------- include/ptrveloc.h | 7 +++---- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c index 7732e9569..2907d40a8 100644 --- a/dix/ptrveloc.c +++ b/dix/ptrveloc.c @@ -77,9 +77,12 @@ GetAccelerationProfile(DeviceVelocityPtr s, int profile_num); #endif /******************************** - * Init/Uninit etc + * Init/Uninit *******************************/ +/* some int which is not a profile number */ +#define PROFILE_UNINITIALIZE (-100) + /** * Init struct so it should match the average case */ @@ -108,7 +111,7 @@ InitVelocityData(DeviceVelocityPtr s) static void FreeVelocityData(DeviceVelocityPtr s){ xfree(s->tracker); - SetAccelerationProfile(s, -1); + SetAccelerationProfile(s, PROFILE_UNINITIALIZE); } @@ -824,6 +827,16 @@ LinearProfile( } +static float +NoProfile( + DeviceVelocityPtr pVel, + float velocity, + float threshold, + float acc) +{ + return 1.0f; +} + static PointerAccelerationProfileFunc GetAccelerationProfile( DeviceVelocityPtr s, @@ -844,8 +857,8 @@ GetAccelerationProfile( return PowerProfile; case AccelProfileLinear: return LinearProfile; - case AccelProfileReserved: - /* reserved for future use, e.g. a user-defined profile */ + case AccelProfileNone: + return NoProfile; default: return NULL; } @@ -856,8 +869,10 @@ GetAccelerationProfile( * Intended to make profiles exchangeable at runtime. * If you created a profile, give it a number here and in the header to * make it selectable. In case some profile-specific init is needed, here - * would be a good place, since FreeVelocityData() also calls this with -1. - * returns FALSE (0) if profile number is unavailable. + * would be a good place, since FreeVelocityData() also calls this with + * PROFILE_UNINITIALIZE. + * + * returns FALSE if profile number is unavailable, TRUE otherwise. */ int SetAccelerationProfile( @@ -867,7 +882,7 @@ SetAccelerationProfile( PointerAccelerationProfileFunc profile; profile = GetAccelerationProfile(s, profile_num); - if(profile == NULL && profile_num != -1) + if(profile == NULL && profile_num != PROFILE_UNINITIALIZE) return FALSE; if(s->profile_private != NULL){ @@ -955,6 +970,11 @@ acceleratePointerPredictable( if (!num_valuators || !valuators || !velocitydata) return; + if (velocitydata->statistics.profile_number == AccelProfileNone && + velocitydata->const_acceleration == 1.0f) { + return; /*we're inactive anyway, so skip the whole thing.*/ + } + if (first_valuator == 0) { dx = valuators[0]; px = &valuators[0]; @@ -994,7 +1014,7 @@ acceleratePointerPredictable( /* Since it may not be apparent: lrintf() does not offer * strong statements about rounding; however because we * process each axis conditionally, there's no danger - * of a toggling remainder. Its lack of guarantees hopefully + * of a toggling remainder. Its lack of guarantees likely * makes it faster on the average target. */ *px = lrintf(tmp); pDev->last.remainder[0] = tmp - (float)*px; diff --git a/include/ptrveloc.h b/include/ptrveloc.h index 6ef8c754e..83d188c54 100644 --- a/include/ptrveloc.h +++ b/include/ptrveloc.h @@ -27,9 +27,9 @@ #include /* DeviceIntPtr */ -/* constants for acceleration profiles; - * see */ +/* constants for acceleration profiles */ +#define AccelProfileNone -1 #define AccelProfileClassic 0 #define AccelProfileDeviceSpecific 1 #define AccelProfilePolynomial 2 @@ -37,8 +37,7 @@ #define AccelProfileSimple 4 #define AccelProfilePower 5 #define AccelProfileLinear 6 -#define AccelProfileReserved 7 -#define AccelProfileLAST AccelProfileReserved +#define AccelProfileLAST AccelProfileLinear /* fwd */ struct _DeviceVelocityRec; From 50cc8adafca4ba3838d468278d6eb8a4692d2488 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 6 May 2009 16:55:32 +1000 Subject: [PATCH 31/89] Xi: don't double-swap the XListDeviceProperties reply. Signed-off-by: Peter Hutterer --- Xi/xiproperty.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c index d633f5141..8c6d53a5a 100644 --- a/Xi/xiproperty.c +++ b/Xi/xiproperty.c @@ -706,13 +706,6 @@ ProcXListDeviceProperties (ClientPtr client) rep.length = (numProps * sizeof(Atom)) >> 2; rep.sequenceNumber = client->sequence; rep.nAtoms = numProps; - if (client->swapped) - { - int n; - swaps (&rep.sequenceNumber, n); - swapl (&rep.length, n); - swaps (&rep.nAtoms, n); - } temppAtoms = pAtoms; for (prop = dev->properties.properties; prop; prop = prop->next) *temppAtoms++ = prop->propertyName; From 7ab5e9b97c300bba793a23fa13506b0c77c50ddf Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 6 May 2009 12:07:07 +1000 Subject: [PATCH 32/89] xfree86: fix xf86PostMotionEventP type checking We only put internal events into the queue now, so let's check for ET_Motion rather than the MotionNotify. Signed-off-by: Peter Hutterer --- hw/xfree86/common/xf86Xinput.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c index a035fca7f..8a718618f 100644 --- a/hw/xfree86/common/xf86Xinput.c +++ b/hw/xfree86/common/xf86Xinput.c @@ -743,7 +743,7 @@ xf86PostMotionEventP(DeviceIntPtr device, int i = 0, nevents = 0; int dx = 0, dy = 0; Bool drag = xf86SendDragEvents(device); - xEvent *xE = NULL; + DeviceEvent *event; int index; int flags = 0; @@ -789,10 +789,11 @@ xf86PostMotionEventP(DeviceIntPtr device, valuators); for (i = 0; i < nevents; i++) { - xE = (xf86Events + i)->event; + event = (DeviceEvent*)((xf86Events + i)->event); /* Don't post core motion events for devices not registered to send * drag events. */ - if (xE->u.u.type != MotionNotify || drag) { + if (event->header == ET_Internal && + (event->type != ET_Motion || drag)) { mieqEnqueue(device, (InternalEvent*)((xf86Events + i)->event)); } } From 8b583ca2b21155359c6255f406c96599b277c762 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 6 May 2009 22:25:28 +1000 Subject: [PATCH 33/89] Xi: fix copy/paste error causing sizeof against wrong struct. This wrong check may cause BadLength to be returned to the client even if the length is correct. Signed-off-by: Peter Hutterer --- Xi/xiproperty.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c index 8c6d53a5a..7e20e0320 100644 --- a/Xi/xiproperty.c +++ b/Xi/xiproperty.c @@ -747,7 +747,7 @@ ProcXChangeDeviceProperty (ClientPtr client) return BadValue; } len = stuff->nUnits; - if (len > ((0xffffffff - sizeof(xChangePropertyReq)) >> 2)) + if (len > ((0xffffffff - sizeof(xChangeDevicePropertyReq)) >> 2)) return BadLength; sizeInBytes = format>>3; totalSize = len * sizeInBytes; From 0e31d3906deaee5d9ada66e538b9e93574a4d610 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 5 May 2009 21:07:07 +1000 Subject: [PATCH 34/89] xkb: remove some now-useless XFUNCPROTOBEGIN We bring them back if we start rewriting the server in C++, promise. Signed-off-by: Peter Hutterer --- include/xkbsrv.h | 4 ---- xkb/xkbgeom.h | 4 ---- 2 files changed, 8 deletions(-) diff --git a/include/xkbsrv.h b/include/xkbsrv.h index df3308534..74d5f290c 100644 --- a/include/xkbsrv.h +++ b/include/xkbsrv.h @@ -334,8 +334,6 @@ extern _X_EXPORT int DeviceEnterNotify,DeviceLeaveNotify; #define False FALSE #endif -_XFUNCPROTOBEGIN - extern _X_EXPORT void XkbUseMsg( void ); @@ -1000,8 +998,6 @@ extern _X_EXPORT XkbDescPtr XkbCompileKeymap( XkbRMLVOSet * /* rmlvo */ ); -_XFUNCPROTOEND - #define XkbAtomGetString(s) NameForAtom(s) #endif /* _XKBSRV_H_ */ diff --git a/xkb/xkbgeom.h b/xkb/xkbgeom.h index 173affee9..fe4da3806 100644 --- a/xkb/xkbgeom.h +++ b/xkb/xkbgeom.h @@ -311,8 +311,6 @@ typedef struct _XkbGeometrySizes { unsigned short num_key_aliases; } XkbGeometrySizesRec,*XkbGeometrySizesPtr; -_XFUNCPROTOBEGIN - extern XkbPropertyPtr XkbAddGeomProperty( XkbGeometryPtr /* geom */, @@ -630,6 +628,4 @@ XkbFindOverlayForKey( char * /* under */ ); -_XFUNCPROTOEND - #endif /* _XKBGEOM_H_ */ From 5cf70183812541b33a6e83c7e1e3bc6198730cbe Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 5 May 2009 21:00:31 +1000 Subject: [PATCH 35/89] xkb: remove _XkbAlloc, _XkbCalloc, _XkbRealloc and _XkbFree We all agree that wrapping is fun, but seriously. One of these days someone will get hurt. Signed-off-by: Peter Hutterer --- include/xkbsrv.h | 4 --- xkb/XKBAlloc.c | 28 ++++++++++---------- xkb/XKBGAlloc.c | 40 ++++++++++++++-------------- xkb/XKBMAlloc.c | 68 ++++++++++++++++++++++++------------------------ xkb/XKBMisc.c | 2 +- xkb/maprules.c | 44 +++++++++++++++---------------- xkb/xkb.c | 40 ++++++++++++++-------------- xkb/xkbEvents.c | 4 +-- xkb/xkbInit.c | 34 ++++++++++++------------ xkb/xkbLEDs.c | 6 ++--- xkb/xkmread.c | 6 ++--- 11 files changed, 136 insertions(+), 140 deletions(-) diff --git a/include/xkbsrv.h b/include/xkbsrv.h index 74d5f290c..c3f64916e 100644 --- a/include/xkbsrv.h +++ b/include/xkbsrv.h @@ -301,15 +301,11 @@ extern _X_EXPORT pointer XkbLastRepeatEvent; extern _X_EXPORT CARD32 xkbDebugFlags; -#define _XkbAlloc(s) xalloc((s)) -#define _XkbCalloc(n,s) Xcalloc((n)*(s)) -#define _XkbRealloc(o,s) Xrealloc((o),(s)) #define _XkbTypedAlloc(t) ((t *)xalloc(sizeof(t))) #define _XkbTypedCalloc(n,t) ((t *)Xcalloc((n)*sizeof(t))) #define _XkbTypedRealloc(o,n,t) \ ((o)?(t *)Xrealloc((o),(n)*sizeof(t)):_XkbTypedCalloc(n,t)) #define _XkbClearElems(a,f,l,t) bzero(&(a)[f],((l)-(f)+1)*sizeof(t)) -#define _XkbFree(p) Xfree(p) #define _XkbLibError(c,l,d) /* Epoch fail */ #define _XkbErrCode2(a,b) ((XID)((((unsigned int)(a))<<24)|((b)&0xffffff))) diff --git a/xkb/XKBAlloc.c b/xkb/XKBAlloc.c index 559a52483..7265d83f2 100644 --- a/xkb/XKBAlloc.c +++ b/xkb/XKBAlloc.c @@ -58,7 +58,7 @@ XkbSymInterpretRec *prev_interpret; compat->sym_interpret= _XkbTypedRealloc(compat->sym_interpret, nSI,XkbSymInterpretRec); if (compat->sym_interpret==NULL) { - _XkbFree(prev_interpret); + xfree(prev_interpret); compat->size_si= compat->num_si= 0; return BadAlloc; } @@ -74,7 +74,7 @@ XkbSymInterpretRec *prev_interpret; if (nSI>0) { compat->sym_interpret= _XkbTypedCalloc(nSI,XkbSymInterpretRec); if (!compat->sym_interpret) { - _XkbFree(compat); + xfree(compat); return BadAlloc; } } @@ -100,12 +100,12 @@ register XkbCompatMapPtr compat; bzero((char *)&compat->groups[0],XkbNumKbdGroups*sizeof(XkbModsRec)); if (which&XkbSymInterpMask) { if ((compat->sym_interpret)&&(compat->size_si>0)) - _XkbFree(compat->sym_interpret); + xfree(compat->sym_interpret); compat->size_si= compat->num_si= 0; compat->sym_interpret= NULL; } if (freeMap) { - _XkbFree(compat); + xfree(compat); xkb->compat= NULL; } return; @@ -161,7 +161,7 @@ XkbNamesPtr names; _XkbClearElems(names->key_aliases,names->num_key_aliases, nTotalAliases-1,XkbKeyAliasRec); } else { - _XkbFree(prev_aliases); + xfree(prev_aliases); } } if (names->key_aliases==NULL) { @@ -183,7 +183,7 @@ XkbNamesPtr names; _XkbClearElems(names->radio_groups,names->num_rg,nTotalRG-1, Atom); } else { - _XkbFree(prev_radio_groups); + xfree(prev_radio_groups); } } if (names->radio_groups==NULL) @@ -211,29 +211,29 @@ XkbNamesPtr names; type= map->types; for (i=0;inum_types;i++,type++) { if (type->level_names!=NULL) { - _XkbFree(type->level_names); + xfree(type->level_names); type->level_names= NULL; } } } } if ((which&XkbKeyNamesMask)&&(names->keys!=NULL)) { - _XkbFree(names->keys); + xfree(names->keys); names->keys= NULL; names->num_keys= 0; } if ((which&XkbKeyAliasesMask)&&(names->key_aliases)){ - _XkbFree(names->key_aliases); + xfree(names->key_aliases); names->key_aliases=NULL; names->num_key_aliases=0; } if ((which&XkbRGNamesMask)&&(names->radio_groups)) { - _XkbFree(names->radio_groups); + xfree(names->radio_groups); names->radio_groups= NULL; names->num_rg= 0; } if (freeMap) { - _XkbFree(names); + xfree(names); xkb->names= NULL; } return; @@ -261,7 +261,7 @@ static void XkbFreeControls(XkbDescPtr xkb,unsigned which,Bool freeMap) { if (freeMap && (xkb!=NULL) && (xkb->ctrls!=NULL)) { - _XkbFree(xkb->ctrls); + xfree(xkb->ctrls); xkb->ctrls= NULL; } return; @@ -286,7 +286,7 @@ static void XkbFreeIndicatorMaps(XkbDescPtr xkb) { if ((xkb!=NULL)&&(xkb->indicators!=NULL)) { - _XkbFree(xkb->indicators); + xfree(xkb->indicators); xkb->indicators= NULL; } return; @@ -330,6 +330,6 @@ XkbFreeKeyboard(XkbDescPtr xkb,unsigned which,Bool freeAll) if (which&XkbControlsMask) XkbFreeControls(xkb,XkbAllControlsMask,True); if (freeAll) - _XkbFree(xkb); + xfree(xkb); return; } diff --git a/xkb/XKBGAlloc.c b/xkb/XKBGAlloc.c index 9561a3df8..752b11a94 100644 --- a/xkb/XKBGAlloc.c +++ b/xkb/XKBGAlloc.c @@ -51,7 +51,7 @@ _XkbFreeGeomLeafElems( Bool freeAll, if ((freeAll)||(*elems==NULL)) { *num_inout= *sz_inout= 0; if (*elems!=NULL) { - _XkbFree(*elems); + xfree(*elems); *elems= NULL; } return; @@ -115,7 +115,7 @@ register char *ptr; if (freeAll) { (*num_inout)= (*sz_inout)= 0; if (*elems) { - _XkbFree(*elems); + xfree(*elems); *elems= NULL; } } @@ -138,11 +138,11 @@ _XkbClearProperty(char *prop_in) XkbPropertyPtr prop= (XkbPropertyPtr)prop_in; if (prop->name) { - _XkbFree(prop->name); + xfree(prop->name); prop->name= NULL; } if (prop->value) { - _XkbFree(prop->value); + xfree(prop->value); prop->value= NULL; } return; @@ -184,7 +184,7 @@ _XkbClearColor(char *color_in) XkbColorPtr color= (XkbColorPtr)color_in; if (color->spec) - _XkbFree(color->spec); + xfree(color->spec); return; } @@ -381,11 +381,11 @@ XkbDoodadPtr doodad= (XkbDoodadPtr)doodad_in; case XkbTextDoodad: { if (doodad->text.text!=NULL) { - _XkbFree(doodad->text.text); + xfree(doodad->text.text); doodad->text.text= NULL; } if (doodad->text.font!=NULL) { - _XkbFree(doodad->text.font); + xfree(doodad->text.font); doodad->text.font= NULL; } } @@ -393,7 +393,7 @@ XkbDoodadPtr doodad= (XkbDoodadPtr)doodad_in; case XkbLogoDoodad: { if (doodad->logo.logo_name!=NULL) { - _XkbFree(doodad->logo.logo_name); + xfree(doodad->logo.logo_name); doodad->logo.logo_name= NULL; } } @@ -413,7 +413,7 @@ register XkbDoodadPtr doodad; _XkbClearDoodad((char *)doodad); } if (freeAll) - _XkbFree(doodads); + xfree(doodads); } return; } @@ -442,10 +442,10 @@ XkbFreeGeometry(XkbGeometryPtr geom,unsigned which,Bool freeMap) XkbFreeGeomKeyAliases(geom,0,geom->num_key_aliases,True); if (freeMap) { if (geom->label_font!=NULL) { - _XkbFree(geom->label_font); + xfree(geom->label_font); geom->label_font= NULL; } - _XkbFree(geom); + xfree(geom); } return; } @@ -469,8 +469,8 @@ _XkbGeomAlloc( void ** old, *total= (*num)+num_new; if ((*old)!=NULL) - (*old)= _XkbRealloc((*old),(*total)*sz_elem); - else (*old)= _XkbCalloc((*total),sz_elem); + (*old)= xrealloc((*old),(*total)*sz_elem); + else (*old)= xcalloc((*total),sz_elem); if ((*old)==NULL) { *total= *num= 0; return BadAlloc; @@ -664,8 +664,8 @@ register XkbPropertyPtr prop; for (i=0,prop=geom->properties;inum_properties;i++,prop++) { if ((prop->name)&&(strcmp(name,prop->name)==0)) { if (prop->value) - _XkbFree(prop->value); - prop->value= (char *)_XkbAlloc(strlen(value)+1); + xfree(prop->value); + prop->value= xalloc(strlen(value)+1); if (prop->value) strcpy(prop->value,value); return prop; @@ -676,13 +676,13 @@ register XkbPropertyPtr prop; return NULL; } prop= &geom->properties[geom->num_properties]; - prop->name= (char *)_XkbAlloc(strlen(name)+1); + prop->name= xalloc(strlen(name)+1); if (!name) return NULL; strcpy(prop->name,name); - prop->value= (char *)_XkbAlloc(strlen(value)+1); + prop->value= xalloc(strlen(value)+1); if (!value) { - _XkbFree(prop->name); + xfree(prop->name); prop->name= NULL; return NULL; } @@ -738,7 +738,7 @@ register XkbColorPtr color; } color= &geom->colors[geom->num_colors]; color->pixel= pixel; - color->spec= (char *)_XkbAlloc(strlen(spec)+1); + color->spec= xalloc(strlen(spec)+1); if (!color->spec) return NULL; strcpy(color->spec,spec); @@ -852,7 +852,7 @@ XkbSectionPtr section; return NULL; if ((sz_doodads>0)&&(_XkbAllocDoodads(section,sz_doodads)!=Success)) { if (section->rows) { - _XkbFree(section->rows); + xfree(section->rows); section->rows= NULL; section->sz_rows= section->num_rows= 0; } diff --git a/xkb/XKBMAlloc.c b/xkb/XKBMAlloc.c index de8ee29fa..728c0297b 100644 --- a/xkb/XKBMAlloc.c +++ b/xkb/XKBMAlloc.c @@ -79,7 +79,7 @@ XkbClientMapPtr map; map->types= _XkbTypedRealloc(map->types,nTotalTypes,XkbKeyTypeRec); if (map->types==NULL) { - _XkbFree(prev_types); + xfree(prev_types); map->num_types= map->size_types= 0; return BadAlloc; } @@ -172,7 +172,7 @@ XkbServerMapPtr map; need= map->num_acts+nNewActions; map->acts= _XkbTypedRealloc(map->acts,need,XkbAction); if (map->acts==NULL) { - _XkbFree(prev_acts); + xfree(prev_acts); map->num_acts= map->size_acts= 0; return BadAlloc; } @@ -222,15 +222,15 @@ XkbCopyKeyType(XkbKeyTypePtr from,XkbKeyTypePtr into) if ((!from)||(!into)) return BadMatch; if (into->map) { - _XkbFree(into->map); + xfree(into->map); into->map= NULL; } if (into->preserve) { - _XkbFree(into->preserve); + xfree(into->preserve); into->preserve= NULL; } if (into->level_names) { - _XkbFree(into->level_names); + xfree(into->level_names); into->level_names= NULL; } *into= *from; @@ -299,10 +299,10 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys; type= &xkb->map->types[type_ndx]; if (map_count==0) { if (type->map!=NULL) - _XkbFree(type->map); + xfree(type->map); type->map= NULL; if (type->preserve!=NULL) - _XkbFree(type->preserve); + xfree(type->preserve); type->preserve= NULL; type->map_count= 0; } @@ -313,7 +313,7 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys; type->map=_XkbTypedRealloc(type->map,map_count,XkbKTMapEntryRec); if (!type->map) { if (prev_map) - _XkbFree(prev_map); + xfree(prev_map); return BadAlloc; } if (want_preserve) { @@ -325,12 +325,12 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys; } if (!type->preserve) { if (prev_preserve) - _XkbFree(prev_preserve); + xfree(prev_preserve); return BadAlloc; } } else if (type->preserve!=NULL) { - _XkbFree(type->preserve); + xfree(type->preserve); type->preserve= NULL; } type->map_count= map_count; @@ -342,7 +342,7 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys; type->level_names=_XkbTypedRealloc(type->level_names,new_num_lvls,Atom); if (!type->level_names) { if (prev_level_names) - _XkbFree(prev_level_names); + xfree(prev_level_names); return BadAlloc; } } @@ -422,7 +422,7 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys; } } type->num_levels= new_num_lvls; - _XkbFree(xkb->map->syms); + xfree(xkb->map->syms); xkb->map->syms= newSyms; xkb->map->num_syms= nSyms; return Success; @@ -518,7 +518,7 @@ KeySym *newSyms; xkb->map->key_sym_map[i].offset = nSyms; nSyms+= nKeySyms; } - _XkbFree(xkb->map->syms); + xfree(xkb->map->syms); xkb->map->syms = newSyms; xkb->map->num_syms = nSyms; return &xkb->map->syms[xkb->map->key_sym_map[key].offset]; @@ -640,7 +640,7 @@ int tmp; xkb->map->key_sym_map= _XkbTypedRealloc(xkb->map->key_sym_map, (maxKC+1),XkbSymMapRec); if (!xkb->map->key_sym_map) { - _XkbFree(prev_key_sym_map); + xfree(prev_key_sym_map); return BadAlloc; } bzero((char *)&xkb->map->key_sym_map[xkb->max_key_code], @@ -658,7 +658,7 @@ int tmp; xkb->map->modmap= _XkbTypedRealloc(xkb->map->modmap, (maxKC+1),unsigned char); if (!xkb->map->modmap) { - _XkbFree(prev_modmap); + xfree(prev_modmap); return BadAlloc; } bzero((char *)&xkb->map->modmap[xkb->max_key_code],tmp); @@ -677,7 +677,7 @@ int tmp; xkb->server->behaviors=_XkbTypedRealloc(xkb->server->behaviors, (maxKC+1),XkbBehavior); if (!xkb->server->behaviors) { - _XkbFree(prev_behaviors); + xfree(prev_behaviors); return BadAlloc; } bzero((char *)&xkb->server->behaviors[xkb->max_key_code], @@ -695,7 +695,7 @@ int tmp; xkb->server->key_acts= _XkbTypedRealloc(xkb->server->key_acts, (maxKC+1),unsigned short); if (!xkb->server->key_acts) { - _XkbFree(prev_key_acts); + xfree(prev_key_acts); return BadAlloc; } bzero((char *)&xkb->server->key_acts[xkb->max_key_code], @@ -713,7 +713,7 @@ int tmp; xkb->server->vmodmap= _XkbTypedRealloc(xkb->server->vmodmap, (maxKC+1),unsigned short); if (!xkb->server->vmodmap) { - _XkbFree(prev_vmodmap); + xfree(prev_vmodmap); return BadAlloc; } bzero((char *)&xkb->server->vmodmap[xkb->max_key_code], @@ -732,7 +732,7 @@ int tmp; xkb->names->keys= _XkbTypedRealloc(xkb->names->keys, (maxKC+1),XkbKeyNameRec); if (!xkb->names->keys) { - _XkbFree(prev_keys); + xfree(prev_keys); return BadAlloc; } bzero((char *)&xkb->names->keys[xkb->max_key_code], @@ -793,7 +793,7 @@ XkbAction *newActs; xkb->server->key_acts[i]= nActs; nActs+= nKeyActs; } - _XkbFree(xkb->server->acts); + xfree(xkb->server->acts); xkb->server->acts = newActs; xkb->server->num_acts= nActs; return &xkb->server->acts[xkb->server->key_acts[key]]; @@ -816,42 +816,42 @@ XkbClientMapPtr map; XkbKeyTypePtr type; for (i=0,type=map->types;inum_types;i++,type++) { if (type->map!=NULL) { - _XkbFree(type->map); + xfree(type->map); type->map= NULL; } if (type->preserve!=NULL) { - _XkbFree(type->preserve); + xfree(type->preserve); type->preserve= NULL; } type->map_count= 0; if (type->level_names!=NULL) { - _XkbFree(type->level_names); + xfree(type->level_names); type->level_names= NULL; } } } - _XkbFree(map->types); + xfree(map->types); map->num_types= map->size_types= 0; map->types= NULL; } } if (what&XkbKeySymsMask) { if (map->key_sym_map!=NULL) { - _XkbFree(map->key_sym_map); + xfree(map->key_sym_map); map->key_sym_map= NULL; } if (map->syms!=NULL) { - _XkbFree(map->syms); + xfree(map->syms); map->size_syms= map->num_syms= 0; map->syms= NULL; } } if ((what&XkbModifierMapMask)&&(map->modmap!=NULL)) { - _XkbFree(map->modmap); + xfree(map->modmap); map->modmap= NULL; } if (freeMap) { - _XkbFree(xkb->map); + xfree(xkb->map); xkb->map= NULL; } return; @@ -868,31 +868,31 @@ XkbServerMapPtr map; what= XkbAllServerInfoMask; map= xkb->server; if ((what&XkbExplicitComponentsMask)&&(map->explicit!=NULL)) { - _XkbFree(map->explicit); + xfree(map->explicit); map->explicit= NULL; } if (what&XkbKeyActionsMask) { if (map->key_acts!=NULL) { - _XkbFree(map->key_acts); + xfree(map->key_acts); map->key_acts= NULL; } if (map->acts!=NULL) { - _XkbFree(map->acts); + xfree(map->acts); map->num_acts= map->size_acts= 0; map->acts= NULL; } } if ((what&XkbKeyBehaviorsMask)&&(map->behaviors!=NULL)) { - _XkbFree(map->behaviors); + xfree(map->behaviors); map->behaviors= NULL; } if ((what&XkbVirtualModMapMask)&&(map->vmodmap!=NULL)) { - _XkbFree(map->vmodmap); + xfree(map->vmodmap); map->vmodmap= NULL; } if (freeMap) { - _XkbFree(xkb->server); + xfree(xkb->server); xkb->server= NULL; } return; diff --git a/xkb/XKBMisc.c b/xkb/XKBMisc.c index 82d37d19f..9cb7061f3 100644 --- a/xkb/XKBMisc.c +++ b/xkb/XKBMisc.c @@ -507,7 +507,7 @@ unsigned changed,tmp; mc->changed|= changed; } if (interps!=ibuf) - _XkbFree(interps); + xfree(interps); return True; } diff --git a/xkb/maprules.c b/xkb/maprules.c index a0141a3d1..168c5277f 100644 --- a/xkb/maprules.c +++ b/xkb/maprules.c @@ -78,7 +78,7 @@ static void FreeInputLine(InputLine *line) { if (line->line!=line->buf) - _XkbFree(line->line); + xfree(line->line); line->line_num= 1; line->num_line= 0; line->sz_line= DFLT_LINE_SIZE; @@ -91,11 +91,11 @@ InputLineAddChar(InputLine *line,int ch) { if (line->num_line>=line->sz_line) { if (line->line==line->buf) { - line->line= (char *)_XkbAlloc(line->sz_line*2); + line->line= xalloc(line->sz_line*2); memcpy(line->line,line->buf,line->sz_line); } else { - line->line=(char *)_XkbRealloc((char *)line->line,line->sz_line*2); + line->line= xrealloc((char *)line->line,line->sz_line*2); } line->sz_line*= 2; } @@ -553,9 +553,9 @@ MakeMultiDefs(XkbRF_MultiDefsPtr mdefs, XkbRF_VarDefsPtr defs) static void FreeMultiDefs(XkbRF_MultiDefsPtr defs) { - if (defs->options) _XkbFree(defs->options); - if (defs->layout[1]) _XkbFree(defs->layout[1]); - if (defs->variant[1]) _XkbFree(defs->variant[1]); + if (defs->options) xfree(defs->options); + if (defs->layout[1]) xfree(defs->layout[1]); + if (defs->variant[1]) xfree(defs->variant[1]); } static void @@ -769,7 +769,7 @@ int len, ndx; } str= index(&str[0],'%'); } - name= (char *)_XkbAlloc(len+1); + name= xalloc(len+1); str= orig; outstr= name; while (*str!='\0') { @@ -819,7 +819,7 @@ int len, ndx; } *outstr++= '\0'; if (orig!=name) - _XkbFree(orig); + xfree(orig); return name; } @@ -988,32 +988,32 @@ XkbRF_GroupPtr group; return; if (rules->rules) { for (i=0,rule=rules->rules;inum_rules;i++,rule++) { - if (rule->model) _XkbFree(rule->model); - if (rule->layout) _XkbFree(rule->layout); - if (rule->variant) _XkbFree(rule->variant); - if (rule->option) _XkbFree(rule->option); - if (rule->keycodes) _XkbFree(rule->keycodes); - if (rule->symbols) _XkbFree(rule->symbols); - if (rule->types) _XkbFree(rule->types); - if (rule->compat) _XkbFree(rule->compat); - if (rule->geometry) _XkbFree(rule->geometry); + if (rule->model) xfree(rule->model); + if (rule->layout) xfree(rule->layout); + if (rule->variant) xfree(rule->variant); + if (rule->option) xfree(rule->option); + if (rule->keycodes) xfree(rule->keycodes); + if (rule->symbols) xfree(rule->symbols); + if (rule->types) xfree(rule->types); + if (rule->compat) xfree(rule->compat); + if (rule->geometry) xfree(rule->geometry); bzero((char *)rule,sizeof(XkbRF_RuleRec)); } - _XkbFree(rules->rules); + xfree(rules->rules); rules->num_rules= rules->sz_rules= 0; rules->rules= NULL; } if (rules->groups) { for (i=0, group=rules->groups;inum_groups;i++,group++) { - if (group->name) _XkbFree(group->name); - if (group->words) _XkbFree(group->words); + if (group->name) xfree(group->name); + if (group->words) xfree(group->words); } - _XkbFree(rules->groups); + xfree(rules->groups); rules->num_groups= 0; rules->groups= NULL; } if (freeRules) - _XkbFree(rules); + xfree(rules); return; } diff --git a/xkb/xkb.c b/xkb/xkb.c index b2fe11cae..445c55ffd 100644 --- a/xkb/xkb.c +++ b/xkb/xkb.c @@ -1363,7 +1363,7 @@ unsigned i,len; char *desc,*start; len= (rep->length*4)-(SIZEOF(xkbGetMapReply)-SIZEOF(xGenericReply)); - start= desc= (char *)xcalloc(1, len); + start= desc= xcalloc(1, len); if (!start) return BadAlloc; if ( rep->nTypes>0 ) @@ -2184,8 +2184,8 @@ unsigned first,last; if (maxRG>(int)xkbi->nRadioGroups) { int sz = maxRG*sizeof(XkbRadioGroupRec); if (xkbi->radioGroups) - xkbi->radioGroups=(XkbRadioGroupPtr)_XkbRealloc(xkbi->radioGroups,sz); - else xkbi->radioGroups= (XkbRadioGroupPtr)_XkbCalloc(1, sz); + xkbi->radioGroups= xrealloc(xkbi->radioGroups,sz); + else xkbi->radioGroups= xcalloc(1, sz); if (xkbi->radioGroups) { if (xkbi->nRadioGroups) bzero(&xkbi->radioGroups[xkbi->nRadioGroups], @@ -2627,7 +2627,7 @@ int size; size= rep->length*4; if (size>0) { - data = (char *)xalloc(size); + data = xalloc(size); if (data) { register unsigned i,bit; xkbModsWireDesc * grp; @@ -2994,7 +2994,7 @@ register unsigned bit; length = rep->length*4; if (length>0) { CARD8 *to; - to= map= (CARD8 *)xalloc(length); + to= map= xalloc(length); if (map) { xkbIndicatorMapWireDesc *wire = (xkbIndicatorMapWireDesc *)to; for (i=0,bit=1;iindicators,n); } - start = desc = (char *)xalloc(length); + start = desc = xalloc(length); if ( !start ) return BadAlloc; if (xkb->names) { @@ -4116,7 +4116,7 @@ _XkbSetNames(ClientPtr client, DeviceIntPtr dev, xkbSetNamesReq *stuff) tmp+= stuff->nKeyAliases*2; } else if (names->key_aliases!=NULL) { - _XkbFree(names->key_aliases); + xfree(names->key_aliases); names->key_aliases= NULL; names->num_key_aliases= 0; } @@ -4135,7 +4135,7 @@ _XkbSetNames(ClientPtr client, DeviceIntPtr dev, xkbSetNamesReq *stuff) tmp+= stuff->nRadioGroups; } else if (names->radio_groups) { - _XkbFree(names->radio_groups); + xfree(names->radio_groups); names->radio_groups= NULL; names->num_rg= 0; } @@ -4735,7 +4735,7 @@ XkbSendGeometry( ClientPtr client, if (geom!=NULL) { len= rep->length*4; - start= desc= (char *)xalloc(len); + start= desc= xalloc(len); if (!start) return BadAlloc; desc= XkbWriteCountedString(desc,geom->label_font,client->swapped); @@ -4829,7 +4829,7 @@ CARD16 len,*plen; swaps(plen,n); } len= *plen; - str= (char *)_XkbAlloc(len+1); + str= xalloc(len+1); if (str) { memcpy(str,&wire[2],len); str[len]= '\0'; @@ -5444,7 +5444,7 @@ unsigned char *wire,*str,*tmp,*legal; wire= *pWire; len= (*(unsigned char *)wire++); if (len>0) { - str= (unsigned char *)_XkbCalloc(1, len+1); + str= xcalloc(1, len+1); if (str) { tmp= str; for (i=0;inoClientException; @@ -5869,11 +5869,11 @@ ProcXkbGetKbdByName(ClientPtr client) XkbFreeKeyboard(new,XkbAllComponentsMask,True); new= NULL; } - if (names.keycodes) { _XkbFree(names.keycodes); names.keycodes= NULL; } - if (names.types) { _XkbFree(names.types); names.types= NULL; } - if (names.compat) { _XkbFree(names.compat); names.compat= NULL; } - if (names.symbols) { _XkbFree(names.symbols); names.symbols= NULL; } - if (names.geometry) { _XkbFree(names.geometry); names.geometry= NULL; } + if (names.keycodes) { xfree(names.keycodes); names.keycodes= NULL; } + if (names.types) { xfree(names.types); names.types= NULL; } + if (names.compat) { xfree(names.compat); names.compat= NULL; } + if (names.symbols) { xfree(names.symbols); names.symbols= NULL; } + if (names.geometry) { xfree(names.geometry); names.geometry= NULL; } return client->noClientException; } @@ -6188,7 +6188,7 @@ char * str; } WriteToClient(client,SIZEOF(xkbGetDeviceInfoReply), (char *)&rep); - str= (char*) xalloc(nameLen); + str= xalloc(nameLen); if (!str) return BadAlloc; XkbWriteCountedString(str,dev->name,client->swapped); diff --git a/xkb/xkbEvents.c b/xkb/xkbEvents.c index 9293c60be..489f309a4 100644 --- a/xkb/xkbEvents.c +++ b/xkb/xkbEvents.c @@ -1136,7 +1136,7 @@ ClientPtr client = NULL; autoCtrls= interest->autoCtrls; autoValues= interest->autoCtrlValues; client= interest->client; - _XkbFree(interest); + xfree(interest); found= True; } while ((!found)&&(interest->next)) { @@ -1146,7 +1146,7 @@ ClientPtr client = NULL; autoCtrls= victim->autoCtrls; autoValues= victim->autoCtrlValues; client= victim->client; - _XkbFree(victim); + xfree(victim); found= True; } interest = interest->next; diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c index 7c611bcc7..bea8ce0cc 100644 --- a/xkb/xkbInit.c +++ b/xkb/xkbInit.c @@ -222,19 +222,19 @@ static void XkbSetRulesUsed(XkbRMLVOSet *rmlvo) { if (XkbRulesUsed) - _XkbFree(XkbRulesUsed); + xfree(XkbRulesUsed); XkbRulesUsed= (rmlvo->rules?_XkbDupString(rmlvo->rules):NULL); if (XkbModelUsed) - _XkbFree(XkbModelUsed); + xfree(XkbModelUsed); XkbModelUsed= (rmlvo->model?_XkbDupString(rmlvo->model):NULL); if (XkbLayoutUsed) - _XkbFree(XkbLayoutUsed); + xfree(XkbLayoutUsed); XkbLayoutUsed= (rmlvo->layout?_XkbDupString(rmlvo->layout):NULL); if (XkbVariantUsed) - _XkbFree(XkbVariantUsed); + xfree(XkbVariantUsed); XkbVariantUsed= (rmlvo->variant?_XkbDupString(rmlvo->variant):NULL); if (XkbOptionsUsed) - _XkbFree(XkbOptionsUsed); + xfree(XkbOptionsUsed); XkbOptionsUsed= (rmlvo->options?_XkbDupString(rmlvo->options):NULL); if (XkbWantRulesProp) QueueWorkProc(XkbWriteRulesProp,NULL,NULL); @@ -246,27 +246,27 @@ XkbSetRulesDflts(XkbRMLVOSet *rmlvo) { if (rmlvo->rules) { if (XkbRulesDflt) - _XkbFree(XkbRulesDflt); + xfree(XkbRulesDflt); XkbRulesDflt= _XkbDupString(rmlvo->rules); } if (rmlvo->model) { if (XkbModelDflt) - _XkbFree(XkbModelDflt); + xfree(XkbModelDflt); XkbModelDflt= _XkbDupString(rmlvo->model); } if (rmlvo->layout) { if (XkbLayoutDflt) - _XkbFree(XkbLayoutDflt); + xfree(XkbLayoutDflt); XkbLayoutDflt= _XkbDupString(rmlvo->layout); } if (rmlvo->variant) { if (XkbVariantDflt) - _XkbFree(XkbVariantDflt); + xfree(XkbVariantDflt); XkbVariantDflt= _XkbDupString(rmlvo->variant); } if (rmlvo->options) { if (XkbOptionsDflt) - _XkbFree(XkbOptionsDflt); + xfree(XkbOptionsDflt); XkbOptionsDflt= _XkbDupString(rmlvo->options); } return; @@ -275,15 +275,15 @@ XkbSetRulesDflts(XkbRMLVOSet *rmlvo) void XkbDeleteRulesDflts(void) { - _XkbFree(XkbRulesDflt); + xfree(XkbRulesDflt); XkbRulesDflt = NULL; - _XkbFree(XkbModelDflt); + xfree(XkbModelDflt); XkbModelDflt = NULL; - _XkbFree(XkbLayoutDflt); + xfree(XkbLayoutDflt); XkbLayoutDflt = NULL; - _XkbFree(XkbVariantDflt); + xfree(XkbVariantDflt); XkbVariantDflt = NULL; - _XkbFree(XkbOptionsDflt); + xfree(XkbOptionsDflt); XkbOptionsDflt = NULL; XkbFreeKeyboard(xkb_cached_map, XkbAllComponentsMask, True); @@ -643,7 +643,7 @@ void XkbFreeInfo(XkbSrvInfoPtr xkbi) { if (xkbi->radioGroups) { - _XkbFree(xkbi->radioGroups); + xfree(xkbi->radioGroups); xkbi->radioGroups= NULL; } if (xkbi->mouseKeyTimer) { @@ -675,7 +675,7 @@ XkbFreeInfo(XkbSrvInfoPtr xkbi) XkbFreeKeyboard(xkbi->desc,XkbAllComponentsMask,True); xkbi->desc= NULL; } - _XkbFree(xkbi); + xfree(xkbi); return; } diff --git a/xkb/xkbLEDs.c b/xkb/xkbLEDs.c index a70ac841d..59cdba416 100644 --- a/xkb/xkbLEDs.c +++ b/xkb/xkbLEDs.c @@ -605,12 +605,12 @@ void XkbFreeSrvLedInfo(XkbSrvLedInfoPtr sli) { if ((sli->flags&XkbSLI_IsDefault)==0) { - if (sli->maps) _XkbFree(sli->maps); - if (sli->names) _XkbFree(sli->names); + if (sli->maps) xfree(sli->maps); + if (sli->names) xfree(sli->names); } sli->maps= NULL; sli->names= NULL; - _XkbFree(sli); + xfree(sli); return; } diff --git a/xkb/xkmread.c b/xkb/xkmread.c index dc8ab612d..206c40382 100644 --- a/xkb/xkmread.c +++ b/xkb/xkmread.c @@ -57,7 +57,7 @@ char *new; if (str==NULL) return NULL; - new= (char *)_XkbCalloc(strlen(str)+1,sizeof(char)); + new= xcalloc(strlen(str)+1,sizeof(char)); if (new) strcpy(new,str); return new; @@ -73,10 +73,10 @@ int newCount= *newCountRtrn; if (oldPtr==NULL) { if (newCount==0) return NULL; - oldPtr= _XkbCalloc(newCount,elemSize); + oldPtr= xcalloc(newCount,elemSize); } else if (oldCount Date: Thu, 30 Apr 2009 18:49:06 -0700 Subject: [PATCH 36/89] Fix a couple off-by-one array boundary checks. Error: Write outside array bounds at Xext/geext.c:406 in function 'GEWindowSetMask' [Symbolic analysis] In array dereference of cli->nextSib[extension] with index 'extension' Array size is 128 elements (of 4 bytes each), index <= 128 Error: Buffer overflow at dix/events.c:592 in function 'SetMaskForEvent' [Symbolic analysis] In array dereference of filters[deviceid] with index 'deviceid' Array size is 20 elements (of 512 bytes each), index >= 0 and index <= 20 Error: Read buffer overflow at hw/xfree86/loader/loader.c:226 in function 'LoaderOpen' [Symbolic analysis] In array dereference of refCount[new_handle] with index 'new_handle' Array size is 256 elements (of 4 bytes each), index >= 1 and index <= 256 These bugs were found using the Parfait source code analysis tool. For more information see http://research.sun.com/projects/parfait Signed-off-by: Alan Coopersmith Signed-off-by: Adam Jackson Acked-by: Peter Hutterer --- Xext/geext.c | 2 +- dix/events.c | 2 +- hw/xfree86/loader/loader.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Xext/geext.c b/Xext/geext.c index a58db038e..7ab99517d 100644 --- a/Xext/geext.c +++ b/Xext/geext.c @@ -364,7 +364,7 @@ GEWindowSetMask(ClientPtr pClient, DeviceIntPtr pDev, extension = (extension & 0x7F); - if (extension > MAXEXTENSIONS) + if (extension >= MAXEXTENSIONS) { ErrorF("Invalid extension number.\n"); return; diff --git a/dix/events.c b/dix/events.c index be88891a4..157f9a8a1 100644 --- a/dix/events.c +++ b/dix/events.c @@ -588,7 +588,7 @@ XineramaConfineCursorToWindow(DeviceIntPtr pDev, void SetMaskForEvent(int deviceid, Mask mask, int event) { - if (deviceid < 0 || deviceid > MAXDEVICES) + if (deviceid < 0 || deviceid >= MAXDEVICES) FatalError("SetMaskForEvent: bogus device id"); filters[deviceid][event] = mask; } diff --git a/hw/xfree86/loader/loader.c b/hw/xfree86/loader/loader.c index ab7736254..1803d0eb1 100644 --- a/hw/xfree86/loader/loader.c +++ b/hw/xfree86/loader/loader.c @@ -223,7 +223,7 @@ LoaderOpen(const char *module, const char *cname, int handle, * Find a free handle. */ new_handle = 1; - while (refCount[new_handle] && new_handle < MAX_HANDLE) + while (new_handle < MAX_HANDLE && refCount[new_handle]) new_handle++; if (new_handle == MAX_HANDLE) { From 1e816065e5ec3b9394dc1fa5815457a664e15fd9 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 8 May 2009 21:31:01 -0700 Subject: [PATCH 37/89] Don't printf NULL pointers on HAL connection error Fixes Solaris bug 6801386 Xorg core dumps on startup if hald not running http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6801386 Signed-off-by: Alan Coopersmith --- config/hal.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/config/hal.c b/config/hal.c index 36fa839fb..731d9b8fc 100644 --- a/config/hal.c +++ b/config/hal.c @@ -493,12 +493,14 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info) } if (!libhal_ctx_init(info->hal_ctx, &error)) { LogMessage(X_ERROR, "config/hal: couldn't initialise context: %s (%s)\n", - error.name, error.message); + error.name ? error.name : "unknown error", + error.message ? error.message : "null"); goto out_ctx; } if (!libhal_device_property_watch_all(info->hal_ctx, &error)) { LogMessage(X_ERROR, "config/hal: couldn't watch all properties: %s (%s)\n", - error.name, error.message); + error.name ? error.name : "unknown error", + error.message ? error.message : "null"); goto out_ctx2; } libhal_ctx_set_device_added(info->hal_ctx, device_added); @@ -518,7 +520,8 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info) out_ctx2: if (!libhal_ctx_shutdown(info->hal_ctx, &error)) LogMessage(X_WARNING, "config/hal: couldn't shut down context: %s (%s)\n", - error.name, error.message); + error.name ? error.name : "unknown error", + error.message ? error.message : "null"); out_ctx: libhal_ctx_free(info->hal_ctx); out_err: From c2b668e6fff11c52f2a3f0dc3f4d1fc2c5bcf3e6 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Tue, 5 May 2009 20:27:53 -0700 Subject: [PATCH 38/89] XQuartz: pbproxy standalone: added missing variable declarations. (cherry picked from commit 2d947d17a3ef5fb8cef959bff0eb08b8bb5b6548) --- hw/xquartz/pbproxy/app-main.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw/xquartz/pbproxy/app-main.m b/hw/xquartz/pbproxy/app-main.m index cb0fa5744..d4b43c6ae 100644 --- a/hw/xquartz/pbproxy/app-main.m +++ b/hw/xquartz/pbproxy/app-main.m @@ -50,6 +50,9 @@ static void signal_handler (int sig) { } int main (int argc, const char *argv[]) { + const char *s; + int i; + #ifdef DEBUG printf("pid: %u\n", getpid()); #endif From ebfd6688d1927288155221e7a78fbca9f9293952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Sun, 10 May 2009 23:27:56 -0400 Subject: [PATCH 39/89] Make compositing with transformed windows work again. The coordinate translation was broken in pretty much every way imaginable. --- fb/fbpict.c | 24 ++++++++---------------- render/mipict.c | 4 ++-- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/fb/fbpict.c b/fb/fbpict.c index 1355e9071..c89691d1b 100644 --- a/fb/fbpict.c +++ b/fb/fbpict.c @@ -159,22 +159,9 @@ fbComposite (CARD8 op, { pixman_image_t *src, *mask, *dest; - xDst += pDst->pDrawable->x; - yDst += pDst->pDrawable->y; - if (pSrc->pDrawable) - { - xSrc += pSrc->pDrawable->x; - ySrc += pSrc->pDrawable->y; - } - if (pMask && pMask->pDrawable) - { - xMask += pMask->pDrawable->x; - yMask += pMask->pDrawable->y; - } - - miCompositeSourceValidate (pSrc, xSrc, ySrc, width, height); + miCompositeSourceValidate (pSrc, xSrc - xDst, ySrc - yDst, width, height); if (pMask) - miCompositeSourceValidate (pMask, xMask, yMask, width, height); + miCompositeSourceValidate (pMask, xMask - xDst, yMask - yDst, width, height); src = image_from_pict (pSrc, TRUE); mask = image_from_pict (pMask, TRUE); @@ -292,7 +279,8 @@ create_bits_picture (PicturePtr pict, fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff); - bits = (FbBits*)((CARD8*)bits + yoff * stride * sizeof(FbBits) + xoff * (bpp / 8)); + bits = (FbBits*)((CARD8*)bits + + pict->pDrawable->y * stride * sizeof(FbBits) + pict->pDrawable->x * (bpp / 8)); image = pixman_image_create_bits ( pict->format, @@ -321,8 +309,12 @@ create_bits_picture (PicturePtr pict, { if (pict->clientClipType != CT_NONE) pixman_image_set_has_client_clip (image, TRUE); + + pixman_region_translate (pict->pCompositeClip, - pict->pDrawable->x, - pict->pDrawable->y); pixman_image_set_clip_region (image, pict->pCompositeClip); + + pixman_region_translate (pict->pCompositeClip, pict->pDrawable->x, pict->pDrawable->y); } /* Indexed table */ diff --git a/render/mipict.c b/render/mipict.c index 777f111e5..c653ec4f5 100644 --- a/render/mipict.c +++ b/render/mipict.c @@ -358,8 +358,6 @@ miCompositeSourceValidate (PicturePtr pPicture, if (pScreen->SourceValidate) { - x -= pPicture->pDrawable->x; - y -= pPicture->pDrawable->y; if (pPicture->transform) { xPoint points[4]; @@ -394,6 +392,8 @@ miCompositeSourceValidate (PicturePtr pPicture, width = xmax - xmin; height = ymax - ymin; } + x += pPicture->pDrawable->x; + y += pPicture->pDrawable->y; (*pScreen->SourceValidate) (pDrawable, x, y, width, height); } } From ac13145dbcb284293582435409d8a90f276785c5 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 11 May 2009 15:45:46 +1000 Subject: [PATCH 40/89] xkb: if kbd init failed, NULL out the pointers after freeing them (#21278) Reproducible: Configure a server that uses the keyboard driver with an invalid ruleset, e.g. (Option "XkbRules" "foobar"). Ensure that Option "AllowEmptyInput" is "off" in the ServerFlags or ServerLayout section. Start the server. After failing to init the keymap, the server will try to clean up after the device, double-freeing some xkb structs that have not been reset properly. X.Org Bug 21278 Signed-off-by: Peter Hutterer --- xkb/xkbInit.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c index bea8ce0cc..e707f7ad3 100644 --- a/xkb/xkbInit.c +++ b/xkb/xkbInit.c @@ -622,10 +622,13 @@ unwind_desc: XkbFreeKeyboard(xkb, 0, TRUE); unwind_info: xfree(xkbi); + dev->key->xkbInfo = NULL; unwind_kbdfeed: xfree(dev->kbdfeed); + dev->kbdfeed = NULL; unwind_key: xfree(dev->key); + dev->key = NULL; return FALSE; } From 0952d12717031e9dda9e48123bb922d0f4e81834 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Mon, 11 May 2009 15:27:46 -0400 Subject: [PATCH 41/89] xselinux: Relax ownership restriction on SetSelectionUseContext. Instead, clients should keep track of the selection instances they use. --- Xext/xselinux.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Xext/xselinux.c b/Xext/xselinux.c index 2c7262140..3a6f0960d 100644 --- a/Xext/xselinux.c +++ b/Xext/xselinux.c @@ -1346,15 +1346,6 @@ ProcSELinuxSetCreateContext(ClientPtr client, unsigned offset) goto out; privPtr = &serverClient->devPrivates; } - else if (offset == USE_SEL) { - /* Selection use context currently requires no selections owned */ - Selection *pSel; - for (pSel = CurrentSelections; pSel; pSel = pSel->next) - if (pSel->client == client) { - rc = BadMatch; - goto out; - } - } ptr = dixLookupPrivate(privPtr, subjectKey); pSid = (security_id_t *)(ptr + offset); From f250eea2e90fc50bec5214c2f41132b95edc2c46 Mon Sep 17 00:00:00 2001 From: Jerome Glisse Date: Mon, 11 May 2009 22:52:46 +0200 Subject: [PATCH 42/89] DRI2: update DRI2 private drawable width & height according to X drawable --- hw/xfree86/dri2/dri2.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 1d49d7c65..385c5e8d4 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -257,6 +257,8 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height, pPriv->buffers = buffers; pPriv->bufferCount = *out_count; + pPriv->width = pDraw->width; + pPriv->height = pDraw->height; *width = pPriv->width; *height = pPriv->height; From b746a00cffca5c553b607a8e9c1074294a23b443 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Tue, 12 May 2009 16:11:01 -0700 Subject: [PATCH 43/89] Resync COPYING file with notices in code base as of xorg-server-1.6.1 Remove notices for code no longer in tree (Xprint, Xgl, kdrive, cfb, etc.) Add/update notices for new/changed code in tree Signed-off-by: Alan Coopersmith --- COPYING | 793 ++++++++------------------------------------------------ 1 file changed, 111 insertions(+), 682 deletions(-) diff --git a/COPYING b/COPYING index 6faa4b196..f92d653d9 100644 --- a/COPYING +++ b/COPYING @@ -7,10 +7,12 @@ Juliusz Chroboczek sorts before Intel Corporation sorts before Daniel Stone). Copyright © 2000-2001 Juliusz Chroboczek +Copyright © 1998 Egbert Eich Copyright © 2006-2007 Intel Corporation Copyright © 2006 Nokia Corporation Copyright © 2006-2008 Peter Hutterer Copyright © 1999 Keith Packard +Copyright © 2007-2008 Red Hat, Inc. Copyright © 2005-2007 Daniel Stone Copyright © 2006-2008 Simon Thum Copyright © 2006 Luc Verhaegen @@ -88,30 +90,6 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 2005 Kean Johnston -Copyright 1999 by The XFree86 Project, Inc. - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the names of The XFree86 Project, Inc -and Kean Johnston not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -The XFree86 Project, Inc and Kean Johnston make no representations -about the suitability of this software for any purpose. It is provided -"as is" without express or implied warranty. - -THE XFREE86 PROJECT, INC AND KEAN JOHNSTON DISCLAIM ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THOMAS ROELL, DAVID WEXELBLAT -OR KEAN JOHNSTON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - Copyright 1985-1998, 2001 The Open Group Copyright 2002 Red Hat Inc., Durham, North Carolina. @@ -161,6 +139,7 @@ in this Software without prior written authorization from the X Consortium. Copyright © 1999-2000 SuSE, Inc. +Copyright © 2007 Red Hat, Inc. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that @@ -180,28 +159,6 @@ OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright © 2005 Novell, Inc. - -Permission to use, copy, modify, distribute, and sell this software -and its documentation for any purpose is hereby granted without -fee, provided that the above copyright notice appear in all copies -and that both that copyright notice and this permission notice -appear in supporting documentation, and that the name of -Novell, Inc. not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -Novell, Inc. makes no representations about the suitability of this -software for any purpose. It is provided "as is" without express or -implied warranty. - -NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA. All Rights Reserved @@ -228,32 +185,6 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA. -All Rights Reserved - -Permission to use, copy, modify, and distribute this -software and its documentation for any purpose and without -fee is hereby granted, provided that the above copyright no- -tice appear in all copies and that both that copyright no- -tice and this permission notice appear in supporting docu- -mentation, and that the names of Sun or The Open Group -not be used in advertising or publicity pertaining to -distribution of the software without specific prior -written permission. Sun and The Open Group make no -representations about the suitability of this software for -any purpose. It is provided "as is" without any express or -implied warranty. - -SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT- -NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI- -ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH -THE USE OR PERFORMANCE OF THIS SOFTWARE. - - Copyright © 2006 Sun Microsystems Permission to use, copy, modify, distribute, and sell this software and its @@ -321,26 +252,6 @@ OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1987-1992 by Digital Equipment Corp., Maynard, MA -X11R6 Changes Copyright (c) 1994 by Robert Chesler of Absol-Puter, Hudson, NH. - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Digital not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -DIGITAL AND ABSOL-PUTER DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL DIGITAL OR ABSOL-PUTER BE LIABLE FOR ANY -SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - Copyright 1997 Digital Equipment Corporation. All rights reserved. @@ -545,7 +456,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Copyright 2005 Red Hat, Inc. +Copyright © 2008 Red Hat, Inc. +Partly based on code Copyright © 2000 SuSE, Inc. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without @@ -558,14 +470,31 @@ Hat makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. -RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +Red Hat DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -NO EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR +NO EVENT SHALL Red Hat BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of SuSE not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. SuSE makes no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE +BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + Copyright (c) 2006, Red Hat, Inc. @@ -590,7 +519,7 @@ used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from Red Hat. -Copyright © 2006 Red Hat, Inc +Copyright © 2006, 2007 Red Hat, Inc Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without @@ -693,26 +622,6 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Copyright IBM Corporation 1987,1988,1989 -All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of IBM not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - - (C) Copyright IBM Corporation 2003 All Rights Reserved. @@ -931,29 +840,6 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 2000 Intel Corporation. All Rights Reserved. - -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, sub license, 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 NON-INFRINGEMENT. -IN NO EVENT SHALL INTEL, AND/OR ITS SUPPLIERS 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. - - Copyright © 2004 Nokia Permission to use, copy, modify, distribute, and sell this software and its @@ -975,30 +861,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1998-2003 VIA Technologies, Inc. -Copyright 2001-2003 S3 Graphics, Inc. -All Rights Reserved. - -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, sub license, -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 NON-INFRINGEMENT. IN NO EVENT SHALL -VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS 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. - - (c)Copyright 1988,1991 Adobe Systems Incorporated. All rights reserved. @@ -1106,60 +968,26 @@ Copyright © 1999 Keith Packard Copyright © 2000 Compaq Computer Corporation Copyright © 2002 MontaVista Software Inc. Copyright © 2005 OpenedHand Ltd. +Copyright © 2006 Nokia Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting -documentation, and that the name of Keith Packard or Compaq not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Keith Packard and Compaq makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. +documentation, and that the name of the authors and/or copyright holders +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. The authors and/or +copyright holders make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. -KEITH PACKARD AND COMPAQ DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, -IN NO EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Michael Taht or MontaVista not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Michael Taht and Montavista make no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -MICHAEL TAHT AND MONTAVISTA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, -IN NO EVENT SHALL EITHER BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Matthew Allum or OpenedHand not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Matthew Allum and OpenedHand make no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -MATTHEW ALLUM AND OPENEDHAND DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, -IN NO EVENT SHALL EITHER BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. +THE AUTHORS AND/OR COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL THE AUTHORS AND/OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Copyright 1993 by Davor Matic @@ -1173,31 +1001,6 @@ the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. -(c) Copyright 1996 by Sebastien Marineau - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -HOLGER VEIT 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. - -Except as contained in this notice, the name of Sebastien Marineau shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from Sebastien Marineau. - - Copyright (C) 2001-2004 Harold L Hunt II All Rights Reserved. @@ -1270,29 +1073,6 @@ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany -Copyright 1993 by David Dawes - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the names of Thomas Roell and David Dawes -not be used in advertising or publicity pertaining to distribution of -the software without specific, written prior permission. Thomas Roell and -David Dawes makes no representations about the suitability of this -software for any purpose. It is provided "as is" without express or -implied warranty. - -THOMAS ROELL AND DAVID DAWES DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL THOMAS ROELL OR DAVID DAWES BE LIABLE FOR -ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - Copyright 1990,91,92,93 by Thomas Roell, Germany. Copyright 1991,92,93 by SGCS (Snitily Graphics Consulting Services), USA. @@ -1316,124 +1096,6 @@ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 2001-2005 by Kean Johnston -Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany -Copyright 1993 by David Wexelblat - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the names of Thomas Roell, David Wexelblat -and Kean Johnston not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -Thomas Roell, David Wexelblat and Kean Johnston make no representations -about the suitability of this software for any purpose. It is provided -"as is" without express or implied warranty. - -THOMAS ROELL, DAVID WEXELBLAT AND KEAN JOHNSTON DISCLAIM ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THOMAS ROELLm DAVID WEXELBLAT -OR KEAN JOHNSTON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -Copyright 2001-2005 by Kean Johnston -Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany -Copyright 1993 by David Dawes -Copyright 1993 by David Wexelblat - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the names of Thomas Roell, David Dawes -and Kean Johnston not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -Thomas Roell, David Dawes and Kean Johnston make no representations -about the suitability of this software for any purpose. It is provided -"as is" without express or implied warranty. - -THOMAS ROELL, DAVID DAWES AND KEAN JOHNSTON DISCLAIM ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THOMAS ROELLm DAVID WEXELBLAT -OR KEAN JOHNSTON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -Copyright (c) 2001-2003 Torrey T. Lyons. -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -TORREY T. LYONS 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. - -Except as contained in this notice, the name(s) of the above copyright -holders shall not be used in advertising or otherwise to promote the sale, -use or other dealings in this Software without prior written authorization. - - -Copyright © 2004 David Reveman - -Permission to use, copy, modify, distribute, and sell this software -and its documentation for any purpose is hereby granted without -fee, provided that the above copyright notice appear in all copies -and that both that copyright notice and this permission notice -appear in supporting documentation, and that the name of -David Reveman not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -David Reveman makes no representations about the suitability of this -software for any purpose. It is provided "as is" without express or -implied warranty. - -DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -Copyright 1993 Gerrit Jan Akkerman - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Gerrit Jan Akkerman not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -GERRIT JAN AKKERMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, -IN NO EVENT SHALL GERRIT JAN AKKERMAN BE LIABLE FOR ANY SPECIAL, INDIRECT -OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright 1998 by Alan Hourihane, Wigan, England. Copyright 2000-2002 by Alan Hourihane, Flint Mountain, North Wales. @@ -1504,27 +1166,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1993 by Thomas Mueller - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Thomas Mueller not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Thomas Mueller makes no representations -about the suitability of this software for any purpose. It is provided -"as is" without express or implied warranty. - -THOMAS MUELLER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL THOMAS MUELLER BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright 2004, Egbert Eich Permission is hereby granted, free of charge, to any person obtaining a copy @@ -1662,27 +1303,6 @@ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Copyright 2001,2005 by Kean Johnston - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name Kean Johnston not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Kean Johnston makes no -representations about the suitability of this software for any purpose. -It is provided "as is" without express or implied warranty. - -KEAN JOHNSTON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL KEAN JOHNSTON BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright 1992 by Rich Murphey Copyright 1993 by David Wexelblat @@ -1729,69 +1349,6 @@ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright © 2004 Franco Catrin - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Franco Catrin not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Franco Catrin makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -FRANCO CATRIN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL FRANCO CATRIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - -Copyright © 2004 Ralph Thomas - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Ralph Thomas not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Ralph Thomas makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -RALPH THOMAS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL RALPH THOMAS BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - -Copyright © 2004 Damien Ciabrini - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Anders Carlsson not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Anders Carlsson makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -DAMIEN CIABRINI DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL ANDERS CARLSSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright © 2003-2004 Anders Carlsson Permission to use, copy, modify, distribute, and sell this software and its @@ -1836,31 +1393,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan. -Copyright 2003 Eric Anholt -All Rights Reserved. - -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, sub license, 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 NON-INFRINGEMENT. IN NO EVENT SHALL -ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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. - - Copyright © 2004 PillowElephantBadgerBankPond Permission to use, copy, modify, distribute, and sell this software and its @@ -1882,27 +1414,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 2004 by Costas Stylianou +44(0)7850 394095 - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Costas Sylianou not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Costas Stylianou makes no representations -about the suitability of this software for any purpose. It is provided -"as is" without express or implied warranty. - -COSTAS STYLIANOU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL COSTAS STYLIANOU BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright (c) 1998 Todd C. Miller Permission to use, copy, modify, and distribute this software for any @@ -1918,32 +1429,6 @@ OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright (C) 1995 Pascal Haible. All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -PASCAL HAIBLE 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. - -Except as contained in this notice, the name of Pascal Haible shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from -Pascal Haible. - - Copyright © 2003-2004 Philip Blundell Permission to use, copy, modify, distribute, and sell this software and its @@ -2005,16 +1490,19 @@ Copyright © 2004, 2005 Red Hat, Inc. Copyright © 2004 Nicholas Miell Copyright © 2005 Trolltech AS Copyright © 2006 Intel Corporation +Copyright © 2006-2007 Keith Packard +Copyright © 2008 Red Hat, Inc +Copyright © 2008 George Sapountzis Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Red Hat not be used in advertising or +the above copyright notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting documentation, and +that the name of the copyright holders not be used in advertising or publicity pertaining to distribution of the software without specific, -written prior permission. Red Hat makes no representations about the -suitability of this software for any purpose. It is provided "as is" -without express or implied warranty. +written prior permission. The copyright holders make no representations +about the suitability of this software for any purpose. It is provided "as +is" without express or implied warranty. THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND @@ -2053,7 +1541,8 @@ Copyright 1987, 1998 The Open Group Copyright © 1998-1999, 2001 The XFree86 Project, Inc. Copyright © 2000 VA Linux Systems, Inc. Copyright (c) 2000, 2001 Nokia Home Communications -Copyright 2003-2006 Sun Microsystems, Inc. +Copyright 2003-2006, 2008 Sun Microsystems, Inc. +Copyright © 2007, 2008 Red Hat, Inc. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a @@ -2082,33 +1571,6 @@ or other dealings in this Software without prior written authorization of the copyright holder. -Copyright (c) 1998-1999 Shunsuke Akiyama . -Copyright (c) 1998-1999 X-TrueType Server Project -Copyright (c) 1999 Lennart Augustsson -All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - - Copyright 1996 by Thomas E. Dickey All Rights Reserved @@ -2131,45 +1593,14 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996, 2004 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. -Copyright (c) 2003-2005 Roland Mainz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT 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. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. - - Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. Copyright (c) 2001 Andreas Monitzer. Copyright (c) 2001-2004 Greg Parker. Copyright (c) 2001-2004 Torrey T. Lyons Copyright (c) 2002-2003 Apple Computer, Inc. Copyright (c) 2004-2005 Alexander Gottwald -Copyright (c) 2002-2007 Apple Inc. +Copyright (c) 2002-2009 Apple Inc. +Copyright (c) 2007 Jeremy Huddleston All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a @@ -2196,6 +1627,8 @@ use or other dealings in this Software without prior written authorization. Copyright (C) 1999,2000 by Eric Sunshine +Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria. + All rights reserved. Redistribution and use in source and binary forms, with or without @@ -2274,6 +1707,7 @@ the author(s). Copyright (C) 1996-1999 SciTech Software, Inc. Copyright (C) David Mosberger-Tang Copyright (C) 1999 Egbert Eich +Copyright (C) 2008 Bart Trojanowski, Symbio Technologies, LLC Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, @@ -2360,26 +1794,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1994 by Glenn G. Lai -All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyr notice and this permission notice appear in -supporting documentation, and that the name of Glenn G. Lai not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -Glenn G. Lai DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - - Copyright 1990, 1991 by Thomas Roell, Dinkelscherben, Germany Copyright 1992 by David Dawes Copyright 1992 by Jim Tsillas @@ -2453,28 +1867,6 @@ 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. -Copyright (C) 1996 David S. Miller (davem@redhat.com) -Copyright (C) 1999 Jakub Jelinek (jj@ultra.linux.cz) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -JAKUB JELINEK OR DAVID MILLER 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. - - Copyright 1997,1998 by UCHIYAMA Yasushi Permission to use, copy, modify, distribute, and sell this software and its @@ -2557,28 +1949,10 @@ 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. -Copyright © 2006-2007 Keith Packard - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that copyright -notice and this permission notice appear in supporting documentation, and -that the name of the copyright holders not be used in advertising or -publicity pertaining to distribution of the software without specific, -written prior permission. The copyright holders make no representations -about the suitability of this software for any purpose. It is provided "as -is" without express or implied warranty. - -THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -OF THIS SOFTWARE. Copyright 2006 Adam Jackson. +Copyright 2007 Red Hat, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), @@ -2597,3 +1971,58 @@ FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS 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. + + +Copyright © 2007 OpenedHand Ltd + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of OpenedHand Ltd not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. OpenedHand Ltd makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +OpenedHand Ltd DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL OpenedHand Ltd BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright (c) 1989, 1990, 1993, 1994 + The Regents of the University of California. All rights reserved. + +This code is derived from software contributed to Berkeley by +Chris Torek. + +This code is derived from software contributed to Berkeley by +Michael Rendell of Memorial University of Newfoundland. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. From f3c61377d0fb1f09a18833995556fc9ffd11e097 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Tue, 12 May 2009 18:27:09 -0700 Subject: [PATCH 44/89] COPYING file updates for git master changes since 1.6 branch Signed-off-by: Alan Coopersmith --- COPYING | 45 ++++++++++++--------------------------------- 1 file changed, 12 insertions(+), 33 deletions(-) diff --git a/COPYING b/COPYING index f92d653d9..b2cf8b26c 100644 --- a/COPYING +++ b/COPYING @@ -11,10 +11,11 @@ Copyright © 1998 Egbert Eich Copyright © 2006-2007 Intel Corporation Copyright © 2006 Nokia Corporation Copyright © 2006-2008 Peter Hutterer +Copyright © 2009 NVIDIA Corporation Copyright © 1999 Keith Packard -Copyright © 2007-2008 Red Hat, Inc. -Copyright © 2005-2007 Daniel Stone -Copyright © 2006-2008 Simon Thum +Copyright © 2007-2009 Red Hat, Inc. +Copyright © 2005-2008 Daniel Stone +Copyright © 2006-2009 Simon Thum Copyright © 2006 Luc Verhaegen Permission is hereby granted, free of charge, to any person obtaining a @@ -45,6 +46,7 @@ licenses. Copyright (C) 1994-2003 The XFree86 Project, Inc. All Rights Reserved. +Copyright (C) Colin Harrison 2005-2008 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 @@ -68,16 +70,16 @@ be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the XFree86 Project. -Copyright 1997-2003 by The XFree86 Project, Inc. +Copyright 1997 by The XFree86 Project, Inc. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting -documentation, and that the names of Orest Zborowski and David Wexelblat +documentation, and that the name of the XFree86 Project, Inc. not be used in advertising or publicity pertaining to distribution of -the software without specific, written prior permission. Orest Zborowski -and David Wexelblat make no representations about the suitability of this +the software without specific, written prior permission. The Xfree86 +Project, Inc. makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. @@ -597,7 +599,7 @@ authorization from the X Consortium. Copyright 1998-2000 Precision Insight, Inc., Cedar Park, Texas. Copyright 2000 VA Linux Systems, Inc. -Copyright (c) 2002 Apple Computer, Inc. +Copyright (c) 2002, 2008, 2009 Apple Computer, Inc. Copyright (c) 2003-2004 Torrey T. Lyons. All Rights Reserved. @@ -1001,8 +1003,8 @@ the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. -Copyright (C) 2001-2004 Harold L Hunt II -All Rights Reserved. +Copyright (C) 2001-2004 Harold L Hunt II All Rights Reserved. +Copyright (C) Colin Harrison 2005-2008 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -1280,29 +1282,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright (C) 1999 Jeff Hartmann -Copyright (C) 1999 Precision Insight, Inc. -Copyright (C) 1999 Xi Graphics, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS 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. - - Copyright 1992 by Rich Murphey Copyright 1993 by David Wexelblat From fc3ce861cdab8606610726ce7c53f57d950c2407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Thu, 14 May 2009 11:35:25 +0200 Subject: [PATCH 45/89] randr12: Fix calculation of gamma ramp values. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The reciprocal gamma value was missed in the first copy and this mistake was propagated to the second one. Signed-off-by: Michel Dänzer --- hw/xfree86/modes/xf86Crtc.c | 6 +++--- hw/xfree86/modes/xf86RandR12.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index 1b241cd33..0ab2f3df9 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -2228,19 +2228,19 @@ xf86CrtcSetInitialGamma(xf86CrtcPtr crtc, float gamma_red, float gamma_green, red[i] = i << 8; else red[i] = (CARD16)(pow((double)i/(double)(size - 1), - (double)gamma_red) * (double)(size - 1) * 256); + 1. / (double)gamma_red) * (double)(size - 1) * 256); if (gamma_green == 1.0) green[i] = i << 8; else green[i] = (CARD16)(pow((double)i/(double)(size - 1), - (double)gamma_green) * (double)(size - 1) * 256); + 1. / (double)gamma_green) * (double)(size - 1) * 256); if (gamma_blue == 1.0) blue[i] = i << 8; else blue[i] = (CARD16)(pow((double)i/(double)(size - 1), - (double)gamma_blue) * (double)(size - 1) * 256); + 1. / (double)gamma_blue) * (double)(size - 1) * 256); } /* Default size is 256, so anything else is failure. */ diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c index f941a3b4a..c71cfe5c3 100644 --- a/hw/xfree86/modes/xf86RandR12.c +++ b/hw/xfree86/modes/xf86RandR12.c @@ -1703,7 +1703,7 @@ gamma_to_ramp(float gamma, CARD16 *ramp, int size) if (gamma == 1.0) ramp[i] = i << 8; else - ramp[i] = (CARD16)(pow((double)i / (double)(size - 1), gamma) + ramp[i] = (CARD16)(pow((double)i / (double)(size - 1), 1. / gamma) * (double)(size - 1) * 256); } } From 2c1190f888515292de01e60fe74657c34b99fd9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Thu, 14 May 2009 11:39:16 +0200 Subject: [PATCH 46/89] randr12: Initialize and keep track of updates to VidMode extension gamma value. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This way clients querying the gamma value via the VidMode extension at least get the last value set via the same, rather than always something bogus. Signed-off-by: Michel Dänzer --- hw/xfree86/common/xf86Helper.c | 10 +++++----- hw/xfree86/modes/xf86RandR12.c | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c index 0db77178a..61b3390e2 100644 --- a/hw/xfree86/common/xf86Helper.c +++ b/hw/xfree86/common/xf86Helper.c @@ -919,11 +919,6 @@ Bool xf86SetGamma(ScrnInfoPtr scrp, Gamma gamma) { MessageType from = X_DEFAULT; - /* Pretend we succeeded if we support better a gamma system. - * This avoids a confusing message. - */ - if (xf86_crtc_supports_gamma(scrp)) - return TRUE; #if 0 xf86MonPtr DDC = (xf86MonPtr)(scrp->monitor->DDC); #endif @@ -955,6 +950,11 @@ xf86SetGamma(ScrnInfoPtr scrp, Gamma gamma) scrp->gamma.green = 1.0; scrp->gamma.blue = 1.0; } + /* Pretend we succeeded if we support better a gamma system. + * This avoids a confusing message. + */ + if (xf86_crtc_supports_gamma(scrp)) + return TRUE; xf86DrvMsg(scrp->scrnIndex, from, "Using gamma correction (%.1f, %.1f, %.1f)\n", scrp->gamma.red, scrp->gamma.green, scrp->gamma.blue); diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c index c71cfe5c3..1e3b70c09 100644 --- a/hw/xfree86/modes/xf86RandR12.c +++ b/hw/xfree86/modes/xf86RandR12.c @@ -1740,6 +1740,8 @@ xf86RandR12ChangeGamma(int scrnIndex, Gamma gamma) xfree(points); + pScrn->gamma = gamma; + return Success; } From 2075d4bf9e53b8baef0b919da6c44771220cd4a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Thu, 14 May 2009 11:46:41 +0200 Subject: [PATCH 47/89] glx: If a destroyed window is bound to the current context, make it not current. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avoids subsequent crashes due to stale pointers to the DrawableRec, see https://bugs.freedesktop.org/show_bug.cgi?id=21132#c15 and previous comments. Signed-off-by: Michel Dänzer --- glx/glxext.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/glx/glxext.c b/glx/glxext.c index 93391e9fd..6bc7bef8e 100644 --- a/glx/glxext.c +++ b/glx/glxext.c @@ -126,6 +126,10 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid) __GLXcontext *c; for (c = glxAllContexts; c; c = c->next) { + if (c->isCurrent && (c->drawPriv == glxPriv || c->readPriv == glxPriv)) { + (*c->loseCurrent)(c); + __glXFlushContextCache(); + } if (c->drawPriv == glxPriv) c->drawPriv = NULL; if (c->readPriv == glxPriv) From c66cf7b64c7bcb31c81b9fde27cc40c1440753b1 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 14 May 2009 06:53:08 -0400 Subject: [PATCH 48/89] Update several of my and/or Red Hat's licenses to standard form. --- COPYING | 70 +---------------------------- dix/window.c | 29 ++++++------ hw/xfree86/ddc/interpret_edid.c | 21 ++++----- hw/xfree86/ddc/print_edid.c | 21 ++++----- hw/xfree86/xf8_16bpp/cfb8_16.h | 15 ++++--- hw/xfree86/xf8_16bpp/xf8_16module.c | 15 ++++--- mi/mibstore.c | 21 ++++----- os/backtrace.c | 21 ++++----- 8 files changed, 75 insertions(+), 138 deletions(-) diff --git a/COPYING b/COPYING index b2cf8b26c..09f330e0f 100644 --- a/COPYING +++ b/COPYING @@ -11,6 +11,7 @@ Copyright © 1998 Egbert Eich Copyright © 2006-2007 Intel Corporation Copyright © 2006 Nokia Corporation Copyright © 2006-2008 Peter Hutterer +Copyright © 2006 Adam Jackson Copyright © 2009 NVIDIA Corporation Copyright © 1999 Keith Packard Copyright © 2007-2009 Red Hat, Inc. @@ -498,51 +499,6 @@ OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright (c) 2006, Red Hat, Inc. - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -RED HAT 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. - -Except as contained in this notice, the name of Red Hat shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from Red Hat. - - -Copyright © 2006, 2007 Red Hat, Inc - -Permission to use, copy, modify, distribute, and sell this software -and its documentation for any purpose is hereby granted without -fee, provided that the above copyright notice appear in all copies -and that both that copyright notice and this permission notice -appear in supporting documentation, and that the name of Red Hat, -Inc not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior -permission. Red Hat, Inc makes no representations about the -suitability of this software for any purpose. It is provided "as -is" without express or implied warranty. - -RED HAT, INC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -NO EVENT SHALL RED HAT, INC BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - Copyright © 2006 Red Hat, Inc. (C) Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. All Rights Reserved. @@ -1928,30 +1884,6 @@ 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. - - -Copyright 2006 Adam Jackson. -Copyright 2007 Red Hat, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -on the rights to use, copy, modify, merge, publish, distribute, sub -license, 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 NON-INFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS 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. - - Copyright © 2007 OpenedHand Ltd Permission to use, copy, modify, distribute, and sell this software and its diff --git a/dix/window.c b/dix/window.c index 324ddb71e..df8ac53f7 100644 --- a/dix/window.c +++ b/dix/window.c @@ -2,25 +2,24 @@ Copyright (c) 2006, Red Hat, Inc. -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The 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 -RED HAT 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. - -Except as contained in this notice, the name of Red Hat shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from Red Hat. +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. Copyright 1987, 1998 The Open Group diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c index c0e3df96c..3edfd1fb5 100644 --- a/hw/xfree86/ddc/interpret_edid.c +++ b/hw/xfree86/ddc/interpret_edid.c @@ -3,22 +3,23 @@ * Copyright 2007 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software") - * to deal in the software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * them Software is furnished to do so, subject to the following conditions: + * 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 MERCHANTIBILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS 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. + * 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. * * interpret_edid.c: interpret a primary EDID block */ diff --git a/hw/xfree86/ddc/print_edid.c b/hw/xfree86/ddc/print_edid.c index 7b6e2989a..e16dcbb9a 100644 --- a/hw/xfree86/ddc/print_edid.c +++ b/hw/xfree86/ddc/print_edid.c @@ -3,22 +3,23 @@ * Copyright 2007 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software") - * to deal in the software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * them Software is furnished to do so, subject to the following conditions: + * 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 MERCHANTIBILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS 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. + * 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. * * print_edid.c: print out all information retrieved from display device */ diff --git a/hw/xfree86/xf8_16bpp/cfb8_16.h b/hw/xfree86/xf8_16bpp/cfb8_16.h index d847a60c1..b6ab955f3 100644 --- a/hw/xfree86/xf8_16bpp/cfb8_16.h +++ b/hw/xfree86/xf8_16bpp/cfb8_16.h @@ -4,9 +4,9 @@ * 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 - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, 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 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 @@ -14,10 +14,11 @@ * * 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS 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. + * 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. */ #ifndef _CFB8_16_H diff --git a/hw/xfree86/xf8_16bpp/xf8_16module.c b/hw/xfree86/xf8_16bpp/xf8_16module.c index dd4f011b1..6a4529ae8 100644 --- a/hw/xfree86/xf8_16bpp/xf8_16module.c +++ b/hw/xfree86/xf8_16bpp/xf8_16module.c @@ -4,9 +4,9 @@ * 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 - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, 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 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 @@ -14,10 +14,11 @@ * * 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS 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. + * 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. */ #ifdef HAVE_XORG_CONFIG_H diff --git a/mi/mibstore.c b/mi/mibstore.c index ef89a76c7..262b4944d 100644 --- a/mi/mibstore.c +++ b/mi/mibstore.c @@ -2,22 +2,23 @@ * Copyright 2007 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software") - * to deal in the software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * them Software is furnished to do so, subject to the following conditions: + * 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 MERCHANTIBILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS 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. + * 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. */ #ifdef HAVE_DIX_CONFIG_H diff --git a/os/backtrace.c b/os/backtrace.c index 19ff58d7a..3cfae3e16 100644 --- a/os/backtrace.c +++ b/os/backtrace.c @@ -2,22 +2,23 @@ * Copyright 2008 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software") - * to deal in the software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * them Software is furnished to do so, subject to the following conditions: + * 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 MERCHANTIBILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS 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. + * 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. */ #ifdef HAVE_DIX_CONFIG_H From ed9aecf8517bf74e943e3e5dd3ee407524e8f122 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 14 May 2009 06:55:21 -0400 Subject: [PATCH 49/89] COPYING: SGI FreeB 1.1 -> SGI FreeB 2.0 --- COPYING | 89 ++++++++++++--------------------------------------------- 1 file changed, 19 insertions(+), 70 deletions(-) diff --git a/COPYING b/COPYING index 09f330e0f..e2a71d60d 100644 --- a/COPYING +++ b/COPYING @@ -310,79 +310,28 @@ dealings in this Software without prior written authorization from Digital Equipment Corporation. -Copyright (c) 1993-1997 by Silicon Graphics Computer Systems, Inc. +SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. -Permission to use, copy, modify, and distribute this -software and its documentation for any purpose and without -fee is hereby granted, provided that the above copyright -notice appear in all copies and that both that copyright -notice and this permission notice appear in supporting -documentation, and that the name of Silicon Graphics not be -used in advertising or publicity pertaining to distribution -of the software without specific prior written permission. -Silicon Graphics makes no representation about the suitability -of this software for any purpose. It is provided "as is" -without any express or implied warranty. +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: -SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON -GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH -THE USE OR PERFORMANCE OF THIS SOFTWARE. +The above copyright notice including the dates of first publication and +either this permission notice or a reference to +http://oss.sgi.com/projects/FreeB/ +shall be included in all copies or substantial portions of the Software. - -License Applicability. Except to the extent portions of this file are -made subject to an alternative license as permitted in the SGI Free -Software License B, Version 1.1 (the "License"), the contents of this -file are subject only to the provisions of the License. You may not use -this file except in compliance with the License. You may obtain a copy -of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 -Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: - -http://oss.sgi.com/projects/FreeB - -Note that, as provided in the License, the Software is distributed on an -"AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS -DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND -CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A -PARTICULAR PURPOSE, AND NON-INFRINGEMENT. - -Original Code. The Original Code is: OpenGL Sample Implementation, -Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, -Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc. -Copyright in any portions created by third parties is as indicated -elsewhere herein. All Rights Reserved. - -Additional Notice Provisions: The application programming interfaces -established by SGI in conjunction with the Original Code are The -OpenGL(R) Graphics System: A Specification (Version 1.2.1), released -April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version -1.3), released November 4, 1998; and OpenGL(R) Graphics with the X -Window System(R) (Version 1.3), released October 19, 1998. This software -was created using the OpenGL(R) version 1.2.1 Sample Implementation -published by SGI, but has not been independently verified as being -compliant with the OpenGL(R) version 1.2.1 Specification. - - -The contents of this file are subject to the GLX Public License Version 1.0 -(the "License"). You may not use this file except in compliance with the -License. You may obtain a copy of the License at Silicon Graphics, Inc., -attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA 94043 -or at http://www.sgi.com/software/opensource/glx/license.html. - -Software distributed under the License is distributed on an "AS IS" -basis. ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY -IMPLIED WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR -PURPOSE OR OF NON- INFRINGEMENT. See the License for the specific -language governing rights and limitations under the License. - -The Original Software is GLX version 1.2 source code, released February, -1999. The developer of the Original Software is Silicon Graphics, Inc. -Those portions of the Subject Software created by Silicon Graphics, Inc. -are Copyright (c) 1991-9 Silicon Graphics, Inc. All Rights Reserved. +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 +SILICON GRAPHICS, INC. 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. Copyright (c) 1994, 1995 Hewlett-Packard Company From 4cc33190ef1a4207c0f8fc74201cdf2568a239c2 Mon Sep 17 00:00:00 2001 From: Julien Cristau Date: Thu, 14 May 2009 17:01:57 +0200 Subject: [PATCH 50/89] xfree86: Add two __FreeBSD_kernel__ checks Debian bug#525475 Reported-by: Petr Salinger Signed-off-by: Julien Cristau --- hw/xfree86/os-support/bus/Pci.h | 3 ++- hw/xfree86/os-support/shared/stdResource.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/xfree86/os-support/bus/Pci.h b/hw/xfree86/os-support/bus/Pci.h index 7623e9738..79b38f015 100644 --- a/hw/xfree86/os-support/bus/Pci.h +++ b/hw/xfree86/os-support/bus/Pci.h @@ -168,7 +168,8 @@ #endif /* !defined(DEBUGPCI) */ -#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || \ +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ + defined(__OpenBSD__) || defined(__NetBSD__) || \ defined(__DragonFly__) || defined(__sun) || defined(__GNU__) #define ARCH_PCI_INIT bsdPciInit #endif diff --git a/hw/xfree86/os-support/shared/stdResource.c b/hw/xfree86/os-support/shared/stdResource.c index a4c162d97..9db349bc0 100644 --- a/hw/xfree86/os-support/shared/stdResource.c +++ b/hw/xfree86/os-support/shared/stdResource.c @@ -43,7 +43,8 @@ /* Avoid Imakefile changes */ #include "bus/Pci.h" -#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \ +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ + defined(__NetBSD__) || defined(__OpenBSD__) || \ defined(__DragonFly__) || defined(__sun) || defined(__GNU__) #define xf86StdAccResFromOS xf86AccResFromOS #endif From c1bbac2708bbccbec01cecba39cdf2b8160c1dc3 Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Thu, 14 May 2009 16:00:41 -0400 Subject: [PATCH 51/89] Fix mem_barrier() on Alpha Some clean up (da086901c6579e41b28b1418fa12ebb82744fc87) went a bit too far and removed the needed mem_barrier macro on Alpha. This re-adds it. --- hw/xfree86/common/compiler.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h index 2601693ca..40b463efb 100644 --- a/hw/xfree86/common/compiler.h +++ b/hw/xfree86/common/compiler.h @@ -357,7 +357,8 @@ static __inline__ void stw_u(unsigned long r5, unsigned short * r11) # endif } -# define write_mem_barrier() __asm__ __volatile__("wmb" : : : "memory") +# define mem_barrier() __asm__ __volatile__("mb" : : : "memory") +# define write_mem_barrier() __asm__ __volatile__("wmb" : : : "memory") # elif defined(linux) && defined(__ia64__) From 850675d4de4373e5df95507dbf2cd9affaaf54bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Fri, 15 May 2009 15:48:37 +0200 Subject: [PATCH 52/89] EXA: Take GC client clip type into account for migration. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes http://bugs.freedesktop.org/show_bug.cgi?id=18950 . Signed-off-by: Michel Dänzer --- exa/exa_accel.c | 35 +++++++++++++++++------------------ exa/exa_priv.h | 10 ++++++---- exa/exa_render.c | 2 +- exa/exa_unaccel.c | 2 +- 4 files changed, 25 insertions(+), 24 deletions(-) diff --git a/exa/exa_accel.c b/exa/exa_accel.c index d284ff560..39f343784 100644 --- a/exa/exa_accel.c +++ b/exa/exa_accel.c @@ -406,7 +406,8 @@ exaHWCopyNtoN (DrawablePtr pSrcDrawable, xfree(rects); if (!pGC || !exaGCReadsDestination(pDstDrawable, pGC->planemask, - pGC->fillStyle, pGC->alu)) { + pGC->fillStyle, pGC->alu, + pGC->clientClipType)) { dstregion = REGION_CREATE(pScreen, NullBox, 0); REGION_COPY(pScreen, dstregion, srcregion); REGION_TRANSLATE(pScreen, dstregion, dst_off_x - dx - src_off_x, @@ -734,7 +735,8 @@ exaPolySegment (DrawablePtr pDrawable, GCPtr pGC, int nseg, } static Bool exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion, - Pixel pixel, CARD32 planemask, CARD32 alu); + Pixel pixel, CARD32 planemask, CARD32 alu, + unsigned int clientClipType); static void exaPolyFillRect(DrawablePtr pDrawable, @@ -787,10 +789,11 @@ exaPolyFillRect(DrawablePtr pDrawable, if (((pGC->fillStyle == FillSolid || pGC->tileIsPixel) && exaFillRegionSolid(pDrawable, pReg, pGC->fillStyle == FillSolid ? pGC->fgPixel : pGC->tile.pixel, pGC->planemask, - pGC->alu)) || + pGC->alu, pGC->clientClipType)) || (pGC->fillStyle == FillTiled && !pGC->tileIsPixel && exaFillRegionTiled(pDrawable, pReg, pGC->tile.pixmap, &pGC->patOrg, - pGC->planemask, pGC->alu))) { + pGC->planemask, pGC->alu, + pGC->clientClipType))) { goto out; } } @@ -952,11 +955,8 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc) } static Bool -exaFillRegionSolid (DrawablePtr pDrawable, - RegionPtr pRegion, - Pixel pixel, - CARD32 planemask, - CARD32 alu) +exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion, Pixel pixel, + CARD32 planemask, CARD32 alu, unsigned int clientClipType) { ExaScreenPriv(pDrawable->pScreen); PixmapPtr pPixmap = exaGetDrawablePixmap (pDrawable); @@ -969,7 +969,8 @@ exaFillRegionSolid (DrawablePtr pDrawable, pixmaps[0].as_src = FALSE; pixmaps[0].pPix = pPixmap; pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillSolid, - alu) ? NULL : pRegion; + alu, clientClipType) + ? NULL : pRegion; exaGetDrawableDeltas(pDrawable, pPixmap, &xoff, &yoff); REGION_TRANSLATE(pScreen, pRegion, xoff, yoff); @@ -1032,12 +1033,9 @@ out: * Based on fbFillRegionTiled(), fbTile(). */ Bool -exaFillRegionTiled (DrawablePtr pDrawable, - RegionPtr pRegion, - PixmapPtr pTile, - DDXPointPtr pPatOrg, - CARD32 planemask, - CARD32 alu) +exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile, + DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu, + unsigned int clientClipType) { ExaScreenPriv(pDrawable->pScreen); PixmapPtr pPixmap; @@ -1060,13 +1058,14 @@ exaFillRegionTiled (DrawablePtr pDrawable, if (tileWidth == 1 && tileHeight == 1) return exaFillRegionSolid(pDrawable, pRegion, exaGetPixmapFirstPixel (pTile), planemask, - alu); + alu, clientClipType); pixmaps[0].as_dst = TRUE; pixmaps[0].as_src = FALSE; pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable); pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillTiled, - alu) ? NULL : pRegion; + alu, clientClipType) + ? NULL : pRegion; pixmaps[1].as_dst = FALSE; pixmaps[1].as_src = TRUE; pixmaps[1].pPix = pTile; diff --git a/exa/exa_priv.h b/exa/exa_priv.h index 9efbbc98c..874e7e987 100644 --- a/exa/exa_priv.h +++ b/exa/exa_priv.h @@ -415,11 +415,12 @@ ExaCheckAddTraps (PicturePtr pPicture, static _X_INLINE Bool exaGCReadsDestination(DrawablePtr pDrawable, unsigned long planemask, - unsigned int fillStyle, unsigned char alu) + unsigned int fillStyle, unsigned char alu, + unsigned int clientClipType) { - return ((alu != GXcopy && alu != GXclear &&alu != GXset && + return ((alu != GXcopy && alu != GXclear && alu != GXset && alu != GXcopyInverted) || fillStyle == FillStippled || - !EXA_PM_IS_SOLID(pDrawable, planemask)); + clientClipType != CT_NONE || !EXA_PM_IS_SOLID(pDrawable, planemask)); } void @@ -427,7 +428,8 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc); Bool exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile, - DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu); + DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu, + unsigned int clientClipType); void exaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h, diff --git a/exa/exa_render.c b/exa/exa_render.c index a9344977f..14d710b57 100644 --- a/exa/exa_render.c +++ b/exa/exa_render.c @@ -945,7 +945,7 @@ exaComposite(CARD8 op, ret = exaFillRegionTiled(pDst->pDrawable, ®ion, (PixmapPtr)pSrc->pDrawable, - &patOrg, FB_ALLONES, GXcopy); + &patOrg, FB_ALLONES, GXcopy, CT_NONE); REGION_UNINIT(pDst->pDrawable->pScreen, ®ion); diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c index 4279c877c..0d53b67d8 100644 --- a/exa/exa_unaccel.c +++ b/exa/exa_unaccel.c @@ -106,7 +106,7 @@ ExaCheckPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth, EXA_GC_PROLOGUE(pGC); EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable))); if (exaGCReadsDestination(pDrawable, pGC->planemask, pGC->fillStyle, - pGC->alu)) + pGC->alu, pGC->clientClipType)) exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); else exaPrepareAccessReg (pDrawable, EXA_PREPARE_DEST, pExaPixmap->pDamage ? From 7c8327f0a75087a85864256a9cea80dd4b86def5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Fri, 15 May 2009 15:48:37 +0200 Subject: [PATCH 53/89] EXA: Always damage glyph cache pixmap manually after uploading a glyph. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michel Dänzer --- exa/exa_glyphs.c | 71 ++++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c index d2a0168b4..b8d2e52bf 100644 --- a/exa/exa_glyphs.c +++ b/exa/exa_glyphs.c @@ -354,8 +354,14 @@ exaGlyphCacheHashRemove(ExaGlyphCachePtr cache, * is to use the UploadToScreen() driver hook; this allows us to * pipeline glyph uploads and to avoid creating offscreen pixmaps for * glyphs that we'll never use again. + * + * If we can't do it with UploadToScreen (because the glyph is offscreen, etc), + * we fall back to CompositePicture. + * + * We need to damage the cache pixmap manually in either case because the damage + * layer unwrapped the picture screen before calling exaGlyphs. */ -static Bool +static void exaGlyphCacheUploadGlyph(ScreenPtr pScreen, ExaGlyphCachePtr cache, int pos, @@ -369,16 +375,16 @@ exaGlyphCacheUploadGlyph(ScreenPtr pScreen, ExaMigrationRec pixmaps[1]; if (!pExaScr->info->UploadToScreen || pExaScr->swappedOut || pExaPixmap->accel_blocked) - return FALSE; + goto composite; /* If the glyph pixmap is already uploaded, no point in doing * things this way */ if (exaPixmapIsOffscreen(pGlyphPixmap)) - return FALSE; + goto composite; /* UploadToScreen only works if bpp match */ if (pGlyphPixmap->drawable.bitsPerPixel != pCachePixmap->drawable.bitsPerPixel) - return FALSE; + goto composite; /* cache pixmap must be offscreen. */ pixmaps[0].as_dst = TRUE; @@ -388,26 +394,37 @@ exaGlyphCacheUploadGlyph(ScreenPtr pScreen, exaDoMigration (pixmaps, 1, TRUE); if (!exaPixmapIsOffscreen(pCachePixmap)) - return FALSE; + goto composite; /* CACHE_{X,Y} are in pixmap coordinates, no need for cache{X,Y}off */ - if (!pExaScr->info->UploadToScreen(pCachePixmap, - CACHE_X(pos), - CACHE_Y(pos), - pGlyph->info.width, - pGlyph->info.height, - (char *)pExaPixmap->sys_ptr, - pExaPixmap->sys_pitch)) - return FALSE; + if (pExaScr->info->UploadToScreen(pCachePixmap, + CACHE_X(pos), + CACHE_Y(pos), + pGlyph->info.width, + pGlyph->info.height, + (char *)pExaPixmap->sys_ptr, + pExaPixmap->sys_pitch)) + goto damage; - /* This pixmap should never be bound to a window, so no need to offset coordinates. */ +composite: + CompositePicture (PictOpSrc, + pGlyphPicture, + None, + cache->picture, + 0, 0, + 0, 0, + CACHE_X(pos), + CACHE_Y(pos), + pGlyph->info.width, + pGlyph->info.height); + +damage: + /* The cache pixmap isn't a window, so no need to offset coordinates. */ exaPixmapDirty (pCachePixmap, CACHE_X(pos), CACHE_Y(pos), - CACHE_X(pos) + pGlyph->info.width, - CACHE_Y(pos) + pGlyph->info.height); - - return TRUE; + CACHE_X(pos) + cache->glyphWidth, + CACHE_Y(pos) + cache->glyphHeight); } static ExaGlyphCacheResult @@ -483,23 +500,7 @@ exaGlyphCacheBufferGlyph(ScreenPtr pScreen, cache->evictionPosition = rand() % cache->size; } - /* Now actually upload the glyph into the cache picture; if - * we can't do it with UploadToScreen (because the glyph is - * offscreen, etc), we fall back to CompositePicture. - */ - if (!exaGlyphCacheUploadGlyph(pScreen, cache, pos, pGlyph)) { - CompositePicture (PictOpSrc, - GlyphPicture(pGlyph)[pScreen->myNum], - None, - cache->picture, - 0, 0, - 0, 0, - CACHE_X(pos), - CACHE_Y(pos), - pGlyph->info.width, - pGlyph->info.height); - } - + exaGlyphCacheUploadGlyph(pScreen, cache, pos, pGlyph); } buffer->mask = cache->picture; From 2be5eecb4b0f30b9c55d12521415edbb88c1f8fd Mon Sep 17 00:00:00 2001 From: Julien Cristau Date: Fri, 15 May 2009 17:29:32 +0200 Subject: [PATCH 54/89] xfree86: add edid quirk for Samsung Syncmaster 2333HD It reports vertical size in cm in the detailed mode. X.Org bug#21750 Reported-by: Peter Poklop Signed-off-by: Julien Cristau --- hw/xfree86/modes/xf86EdidModes.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c index 9e6a666f7..4340edd1f 100644 --- a/hw/xfree86/modes/xf86EdidModes.c +++ b/hw/xfree86/modes/xf86EdidModes.c @@ -160,6 +160,11 @@ static Bool quirk_detailed_v_in_cm (int scrnIndex, xf86MonPtr DDC) DDC->vendor.prod_id == 47360) return TRUE; + /* Bug #21750: Samsung Syncmaster 2333HD */ + if (memcmp (DDC->vendor.name, "SAM", 4) == 0 && + DDC->vendor.prod_id == 1157) + return TRUE; + return FALSE; } From 94c5093c8bc803d0b14429b5a4d07ae46da865cc Mon Sep 17 00:00:00 2001 From: David Marx Date: Wed, 13 May 2009 17:53:30 -0700 Subject: [PATCH 55/89] Solaris: Make sure non-inline versions of asm routines end with ret statements Signed-off-by: Alan Coopersmith --- hw/xfree86/os-support/solaris/solaris-amd64.S | 2 +- hw/xfree86/os-support/solaris/solaris-ia32.S | 2 +- hw/xfree86/os-support/solaris/solaris-sparcv8plus.S | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/xfree86/os-support/solaris/solaris-amd64.S b/hw/xfree86/os-support/solaris/solaris-amd64.S index 9f5e58cb0..4a0e0f48a 100644 --- a/hw/xfree86/os-support/solaris/solaris-amd64.S +++ b/hw/xfree86/os-support/solaris/solaris-amd64.S @@ -32,7 +32,7 @@ #define _ASM #include #define FUNCTION_START(f,n) ENTRY(f) -#define FUNCTION_END(f) SET_SIZE(f) +#define FUNCTION_END(f) ret; SET_SIZE(f) #endif FUNCTION_START(inb,4) diff --git a/hw/xfree86/os-support/solaris/solaris-ia32.S b/hw/xfree86/os-support/solaris/solaris-ia32.S index e2d9cf60a..280154bab 100644 --- a/hw/xfree86/os-support/solaris/solaris-ia32.S +++ b/hw/xfree86/os-support/solaris/solaris-ia32.S @@ -32,7 +32,7 @@ #define _ASM #include #define FUNCTION_START(f,n) ENTRY(f) -#define FUNCTION_END(f) SET_SIZE(f) +#define FUNCTION_END(f) ret; SET_SIZE(f) #endif FUNCTION_START(inb,4) diff --git a/hw/xfree86/os-support/solaris/solaris-sparcv8plus.S b/hw/xfree86/os-support/solaris/solaris-sparcv8plus.S index fb23942ef..dbaa0308b 100644 --- a/hw/xfree86/os-support/solaris/solaris-sparcv8plus.S +++ b/hw/xfree86/os-support/solaris/solaris-sparcv8plus.S @@ -33,7 +33,7 @@ #define _ASM #include #define FUNCTION_START(f,n) ENTRY(f) -#define FUNCTION_END(f) SET_SIZE(f) +#define FUNCTION_END(f) retl; nop; SET_SIZE(f) #endif /* Converted from common/compiler.h gcc inline format to Sun cc inline From 8609a4e883e917d1652fbe810108de99bc89713f Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 15 May 2009 11:22:32 -0700 Subject: [PATCH 56/89] Correct some Sun license notices to Sun's standard X11 license format Signed-off-by: Alan Coopersmith --- COPYING | 21 --------------------- composite/compalloc.c | 41 ++++++++++++++++++++++++----------------- composite/compext.c | 41 ++++++++++++++++++++++++----------------- composite/compinit.c | 41 ++++++++++++++++++++++++----------------- composite/compint.h | 41 ++++++++++++++++++++++++----------------- composite/compoverlay.c | 41 ++++++++++++++++++++++++----------------- composite/compwindow.c | 41 ++++++++++++++++++++++++----------------- xfixes/cursor.c | 41 ++++++++++++++++++++++++----------------- xfixes/xfixes.c | 41 ++++++++++++++++++++++++----------------- xfixes/xfixesint.h | 41 ++++++++++++++++++++++++----------------- 10 files changed, 216 insertions(+), 174 deletions(-) diff --git a/COPYING b/COPYING index e2a71d60d..5dc8c1dfb 100644 --- a/COPYING +++ b/COPYING @@ -188,27 +188,6 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright © 2006 Sun Microsystems - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Sun Microsystems not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Sun Microsystems makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright 1987-1991, 1993 by Digital Equipment Corporation, Maynard, Massachusetts. Copyright 1991 Massachusetts Institute of Technology, Cambridge, Massachusetts. Copyright 1991, 1993 Olivetti Research Limited, Cambridge, England. diff --git a/composite/compalloc.c b/composite/compalloc.c index 1bac9a417..3f427dbe1 100644 --- a/composite/compalloc.c +++ b/composite/compalloc.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * 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, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS 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 + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/composite/compext.c b/composite/compext.c index 829c90fbf..608f29a8a 100644 --- a/composite/compext.c +++ b/composite/compext.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * 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, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS 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 + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/composite/compinit.c b/composite/compinit.c index ee269afa0..dfc3929ee 100644 --- a/composite/compinit.c +++ b/composite/compinit.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * 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, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS 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 + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/composite/compint.h b/composite/compint.h index fd2fea153..852c277c2 100644 --- a/composite/compint.h +++ b/composite/compint.h @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * 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, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS 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 + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/composite/compoverlay.c b/composite/compoverlay.c index 68b4f1288..e213ce71e 100644 --- a/composite/compoverlay.c +++ b/composite/compoverlay.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * 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, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS 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 + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/composite/compwindow.c b/composite/compwindow.c index 577fa733e..4267a51c7 100644 --- a/composite/compwindow.c +++ b/composite/compwindow.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * 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, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS 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 + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/xfixes/cursor.c b/xfixes/cursor.c index 6fa2dff8e..534c82605 100644 --- a/xfixes/cursor.c +++ b/xfixes/cursor.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * 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, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS 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 + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2002 Keith Packard * diff --git a/xfixes/xfixes.c b/xfixes/xfixes.c index 3b8ed5a13..25c92ea93 100644 --- a/xfixes/xfixes.c +++ b/xfixes/xfixes.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * 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, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS 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 + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2002 Keith Packard * diff --git a/xfixes/xfixesint.h b/xfixes/xfixesint.h index 04117a46c..d7c53ee07 100644 --- a/xfixes/xfixesint.h +++ b/xfixes/xfixesint.h @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * 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, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS 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 + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2002 Keith Packard * From c1d7deca9281ba1df0df1abcea1fe7f841b10ff9 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 12 May 2009 21:24:07 +1000 Subject: [PATCH 57/89] mi: un-deprecate miPointerWarpCursor This function was deprecated in ef68273f5bdb27a492ec0b69548ec4fbede46c08 because it didn't take a device argument. The device argument was added in 1c7568b8a1417257fa67c7fca69aa253099b9461 though, so the deprecation is obsolete. Signed-off-by: Peter Hutterer --- mi/mipointer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mi/mipointer.h b/mi/mipointer.h index 8b13f0848..7dc1ae7cc 100644 --- a/mi/mipointer.h +++ b/mi/mipointer.h @@ -108,7 +108,7 @@ extern _X_EXPORT void miPointerWarpCursor( ScreenPtr /*pScreen*/, int /*x*/, int /*y*/ -) _X_DEPRECATED; +); /* Deprecated in favour of miPointerSetPosition. */ extern _X_EXPORT void miPointerAbsoluteCursor( From 6f9e22049862ee9ac7f604411d005d8bb1b2dd1c Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 11 May 2009 12:51:40 +1000 Subject: [PATCH 58/89] dix: ensure Activate/DeactivateGrab has a valid value. Xephyr doesn't manually set Activate/DeactivateGrab for new devices, resulting in a NULL-pointer dereference later when a grab is activated. Avoid the segfault by ensuring that the pointer is always valid. Signed-off-by: Peter Hutterer --- dix/devices.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dix/devices.c b/dix/devices.c index afe340b2f..6f464e7ca 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -224,6 +224,8 @@ AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart) /* device grab defaults */ dev->deviceGrab.grabTime = currentTime; + dev->deviceGrab.ActivateGrab = ActivateKeyboardGrab; + dev->deviceGrab.DeactivateGrab = DeactivateKeyboardGrab; dev->coreEvents = TRUE; From b1b5ec45c1cb650ccb8c659218f9481379c777d9 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 11 May 2009 12:53:56 +1000 Subject: [PATCH 59/89] kdrive: set Activate/Deactivate grab for input devices (#21591) X.Org Bug 21591 --- hw/kdrive/src/kinput.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c index 7ed36017f..0d216a9b8 100644 --- a/hw/kdrive/src/kinput.c +++ b/hw/kdrive/src/kinput.c @@ -915,6 +915,8 @@ KdAddKeyboard (KdKeyboardInfo *ki) return !Success; } + ki->dixdev->deviceGrab.ActivateGrab = ActivateKeyboardGrab; + ki->dixdev->deviceGrab.DeactivateGrab = DeactivateKeyboardGrab; RegisterOtherDevice(ki->dixdev); #ifdef DEBUG @@ -984,6 +986,8 @@ KdAddPointer (KdPointerInfo *pi) return BadDevice; } + pi->dixdev->deviceGrab.ActivateGrab = ActivatePointerGrab; + pi->dixdev->deviceGrab.DeactivateGrab = DeactivatePointerGrab; RegisterOtherDevice(pi->dixdev); for (prev = &kdPointers; *prev; prev = &(*prev)->next); From 2f6253376df45e508284ff7766b186cfc7fb56d6 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Sat, 9 May 2009 10:33:20 +1000 Subject: [PATCH 60/89] xfree86: Remove superfluous ifdef DEBUG checks. Signed-off-by: Peter Hutterer --- hw/xfree86/common/xf86Bus.c | 46 ++++++------------- hw/xfree86/common/xf86Config.c | 12 ++--- hw/xfree86/common/xf86Events.c | 20 ++------ hw/xfree86/common/xf86Helper.c | 46 ++++++------------- hw/xfree86/common/xf86Init.c | 18 ++------ hw/xfree86/common/xf86Mode.c | 16 ++----- hw/xfree86/common/xf86VidMode.c | 18 +++----- hw/xfree86/common/xf86fbman.c | 36 +++++---------- hw/xfree86/common/xf86sbusBus.c | 14 ++---- hw/xfree86/os-support/linux/int10/linux.c | 36 ++++----------- .../os-support/linux/int10/vm86/linux_vm86.c | 4 +- hw/xfree86/os-support/linux/lnx_acpi.c | 14 ++---- hw/xfree86/os-support/linux/lnx_apm.c | 14 ++---- hw/xfree86/os-support/linux/lnx_axp.c | 12 ++--- hw/xfree86/os-support/linux/lnx_font.c | 12 ++--- hw/xfree86/os-support/linux/lnx_video.c | 20 +++----- hw/xfree86/os-support/sco/sco_video.c | 8 +--- hw/xfree86/os-support/shared/bios_mmap.c | 4 +- hw/xfree86/os-support/shared/posix_tty.c | 21 +++------ hw/xfree86/ramdac/TI.c | 4 +- hw/xfree86/vbe/vbeModes.c | 4 +- hw/xfree86/vgahw/vgaHW.c | 40 +++++----------- 22 files changed, 118 insertions(+), 301 deletions(-) diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c index 8040f580b..8382d911a 100644 --- a/hw/xfree86/common/xf86Bus.c +++ b/hw/xfree86/common/xf86Bus.c @@ -639,9 +639,7 @@ xf86EnableAccess(ScrnInfoPtr pScrn) register xf86AccessPtr pAcc; EntityAccessPtr tmp; -#ifdef DEBUG - ErrorF("Enable access %i\n",pScrn->scrnIndex); -#endif + DebugF("Enable access %i\n",pScrn->scrnIndex); /* Entity is not under access control or currently enabled */ if (!pScrn->access) { @@ -844,10 +842,8 @@ checkConflictBlock(resRange *range, resPtr pRes) case ResBlock: if (range->rBegin < pRes->block_end && range->rEnd > pRes->block_begin) { -#ifdef DEBUG - ErrorF("b-b conflict w: %lx %lx\n", + DebugF("b-b conflict w: %lx %lx\n", pRes->block_begin,pRes->block_end); -#endif return pRes->block_end < range->rEnd ? pRes->block_end : range->rEnd; } @@ -856,12 +852,10 @@ checkConflictBlock(resRange *range, resPtr pRes) if (pRes->sparse_base > range->rEnd) return 0; val = (~pRes->sparse_mask | pRes->sparse_base) & getMask(range->rEnd); -#ifdef DEBUG - ErrorF("base = 0x%lx, mask = 0x%lx, begin = 0x%lx, end = 0x%lx ," + DebugF("base = 0x%lx, mask = 0x%lx, begin = 0x%lx, end = 0x%lx ," "val = 0x%lx\n", pRes->sparse_base, pRes->sparse_mask, range->rBegin, range->rEnd, val); -#endif i = sizeof(memType) * 8; tmp = prev = pRes->sparse_base; @@ -873,11 +867,9 @@ checkConflictBlock(resRange *range, resPtr pRes) prev = tmp; } if (tmp >= range->rBegin) { -#ifdef DEBUG - ErrorF("conflict found at: 0x%lx\n",tmp); - ErrorF("b-d conflict w: %lx %lx\n", + DebugF("conflict found at: 0x%lx\n",tmp); + DebugF("b-d conflict w: %lx %lx\n", pRes->sparse_base,pRes->sparse_mask); -#endif return tmp; } else @@ -902,10 +894,8 @@ checkConflictSparse(resRange *range, resPtr pRes) case ResSparse: tmp = pRes->sparse_mask & range->rMask; if ((tmp & pRes->sparse_base) == (tmp & range->rBase)) { -#ifdef DEBUG - ErrorF("s-b conflict w: %lx %lx\n", + DebugF("s-b conflict w: %lx %lx\n", pRes->sparse_base,pRes->sparse_mask); -#endif return pRes->sparse_mask; } return 0; @@ -918,9 +908,7 @@ checkConflictSparse(resRange *range, resPtr pRes) tmp = prev = range->rBase; while (i) { -#ifdef DEBUG - ErrorF("tmp = 0x%lx\n",tmp); -#endif + DebugF("tmp = 0x%lx\n",tmp); tmp |= 1<< (--i) & val; if (tmp > pRes->block_end) tmp = prev; @@ -947,11 +935,9 @@ checkConflictSparse(resRange *range, resPtr pRes) m_mask = mask > m_mask ? mask : m_mask; base = base + mask + 1; } -#ifdef DEBUG - ErrorF("conflict found at: 0x%lx\n",tmp); - ErrorF("b-b conflict w: %lx %lx\n", + DebugF("conflict found at: 0x%lx\n",tmp); + DebugF("b-b conflict w: %lx %lx\n", pRes->block_begin,pRes->block_end); -#endif return ~m_mask; } } @@ -1557,12 +1543,10 @@ xf86EnterServerState(xf86State state) * We take care not to call xf86BlockSIGIO() twice. */ SetSIGIOForState(state); -#ifdef DEBUG if (state == SETUP) - ErrorF("Entering SETUP state\n"); + DebugF("Entering SETUP state\n"); else - ErrorF("Entering OPERATING state\n"); -#endif + DebugF("Entering OPERATING state\n"); /* When servicing a dumb framebuffer we don't need to do anything */ if (doFramebufferMode) return; @@ -1620,10 +1604,8 @@ xf86EnterServerState(xf86State state) xf86Screens[i]->busAccess = NULL; } -#ifdef DEBUG if (xf86Screens[i]->busAccess) - ErrorF("Screen %i setting vga route\n",i); -#endif + DebugF("Screen %i setting vga route\n",i); switch (rt) { case MEM_IO: xf86MsgVerb(X_INFO, 3, "Screen %i shares mem & io resources\n",i); @@ -1967,9 +1949,7 @@ xf86PostScreenInit(void) return; } -#ifdef DEBUG - ErrorF("PostScreenInit generation: %i\n",serverGeneration); -#endif + DebugF("PostScreenInit generation: %i\n",serverGeneration); if (serverGeneration == 1) { checkRoutingForScreens(OPERATING); for (i=0; ilist.next; } -#ifdef DEBUG - ErrorF("Found %d screens in the layout section %s", + DebugF("Found %d screens in the layout section %s", count, conf_layout->lay_identifier); -#endif if (!count) /* alloc enough storage even if no screen is specified */ count = 1; @@ -1678,10 +1676,8 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout, count++; idp = (XF86ConfInactivePtr)idp->list.next; } -#ifdef DEBUG - ErrorF("Found %d inactive devices in the layout section %s\n", + DebugF("Found %d inactive devices in the layout section %s\n", count, conf_layout->lay_identifier); -#endif gdp = xnfalloc((count + 1) * sizeof(GDevRec)); gdp[count].identifier = NULL; idp = conf_layout->lay_inactive_lst; @@ -1703,10 +1699,8 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout, count++; irp = (XF86ConfInputrefPtr)irp->list.next; } -#ifdef DEBUG - ErrorF("Found %d input devices in the layout section %s\n", + DebugF("Found %d input devices in the layout section %s\n", count, conf_layout->lay_identifier); -#endif indp = xnfcalloc((count + 1), sizeof(IDevPtr)); indp[count] = NULL; irp = conf_layout->lay_input_lst; diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c index aa818c358..e9b4dfe60 100644 --- a/hw/xfree86/common/xf86Events.c +++ b/hw/xfree86/common/xf86Events.c @@ -183,9 +183,7 @@ ProcessInputEvents (void) void xf86ProcessActionEvent(ActionEvent action, void *arg) { -#ifdef DEBUG - ErrorF("ProcessActionEvent(%d,%x)\n", (int) action, arg); -#endif + DebugF("ProcessActionEvent(%d,%x)\n", (int) action, arg); switch (action) { case ACTION_TERMINATE: if (!xf86Info.dontZap) { @@ -429,9 +427,7 @@ xf86VTSwitch(void) InputInfoPtr pInfo; IHPtr ih; -#ifdef DEBUG - ErrorF("xf86VTSwitch()\n"); -#endif + DebugF("xf86VTSwitch()\n"); #ifdef XFreeXDGA if(!DGAVTSwitch()) @@ -444,10 +440,8 @@ xf86VTSwitch(void) */ if (xf86Screens[0]->vtSema) { -#ifdef DEBUG - ErrorF("xf86VTSwitch: Leaving, xf86Exiting is %s\n", + DebugF("xf86VTSwitch: Leaving, xf86Exiting is %s\n", BOOLTOSTRING((dispatchException & DE_TERMINATE) ? TRUE : FALSE)); -#endif #ifdef DPMSExtension if (DPMSPowerLevel != DPMSModeOn) DPMSSet(serverClient, DPMSModeOn); @@ -483,9 +477,7 @@ xf86VTSwitch(void) * switch failed */ -#ifdef DEBUG - ErrorF("xf86VTSwitch: Leave failed\n"); -#endif + DebugF("xf86VTSwitch: Leave failed\n"); prevSIGIO = xf86BlockSIGIO(); xf86AccessEnter(); xf86EnterServerState(SETUP); @@ -534,9 +526,7 @@ xf86VTSwitch(void) } } else { -#ifdef DEBUG - ErrorF("xf86VTSwitch: Entering\n"); -#endif + DebugF("xf86VTSwitch: Entering\n"); if (!xf86VTSwitchTo()) return; prevSIGIO = xf86BlockSIGIO(); diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c index 61b3390e2..441efb098 100644 --- a/hw/xfree86/common/xf86Helper.c +++ b/hw/xfree86/common/xf86Helper.c @@ -212,15 +212,13 @@ xf86AllocateScreen(DriverPtr drv, int flags) xf86Screens[i]->CurrentAccess = &xf86CurrentAccess; xf86Screens[i]->resourceType = MEM_IO; -#ifdef DEBUG /* OOps -- What's this ? */ - ErrorF("xf86AllocateScreen - xf86Screens[%d]->pScreen = %p\n", + DebugF("xf86AllocateScreen - xf86Screens[%d]->pScreen = %p\n", i, xf86Screens[i]->pScreen ); if ( NULL != xf86Screens[i]->pScreen ) { - ErrorF("xf86Screens[%d]->pScreen->CreateWindow = %p\n", + DebugF("xf86Screens[%d]->pScreen->CreateWindow = %p\n", i, xf86Screens[i]->pScreen->CreateWindow ); } -#endif xf86Screens[i]->DriverFunc = drv->driverFunc; @@ -1735,9 +1733,7 @@ xf86MatchPciInstances(const char *driverName, int vendorID, } -#ifdef DEBUG - ErrorF("%s instances found: %d\n", driverName, allocatedInstances); -#endif + DebugF("%s instances found: %d\n", driverName, allocatedInstances); /* * Check for devices that need duplicated instances. This is required @@ -1820,9 +1816,7 @@ xf86MatchPciInstances(const char *driverName, int vendorID, instances[i].dev = dev; } } -#ifdef DEBUG - ErrorF("%s instances found: %d\n", driverName, numClaimedInstances); -#endif + DebugF("%s instances found: %d\n", driverName, numClaimedInstances); /* * Now check that a chipset or chipID override in the device section * is valid. Chipset has precedence over chipID. @@ -1926,11 +1920,9 @@ xf86MatchPciInstances(const char *driverName, int vendorID, if (instances[i].screen == 0 && !xf86CheckPciSlot( pPci )) continue; -#ifdef DEBUG - ErrorF("%s: card at %d:%d:%d is claimed by a Device section\n", + DebugF("%s: card at %d:%d:%d is claimed by a Device section\n", driverName, pPci->bus, pPci->dev, pPci->func); -#endif - + /* Allocate an entry in the lists to be returned */ numFound++; retEntities = xnfrealloc(retEntities, numFound * sizeof(int)); @@ -2621,10 +2613,8 @@ xf86RegisterRootWindowProperty(int ScrnIndex, Atom property, Atom type, int i; Bool existing = FALSE; -#ifdef DEBUG - ErrorF("xf86RegisterRootWindowProperty(%d, %ld, %ld, %d, %ld, %p)\n", + DebugF("xf86RegisterRootWindowProperty(%d, %ld, %ld, %d, %ld, %p)\n", ScrnIndex, property, type, format, len, value); -#endif if (ScrnIndex<0 || ScrnIndex>=xf86NumScreens) { return(BadMatch); @@ -2660,15 +2650,11 @@ xf86RegisterRootWindowProperty(int ScrnIndex, Atom property, Atom type, pNewProp->size = len; pNewProp->data = value; -#ifdef DEBUG - ErrorF("new property filled\n"); -#endif + DebugF("new property filled\n"); if (NULL==xf86RegisteredPropertiesTable) { -#ifdef DEBUG - ErrorF("creating xf86RegisteredPropertiesTable[] size %d\n", + DebugF("creating xf86RegisteredPropertiesTable[] size %d\n", xf86NumScreens); -#endif if ( NULL==(xf86RegisteredPropertiesTable=(RootWinPropPtr*)xnfcalloc(sizeof(RootWinProp),xf86NumScreens) )) { return(BadAlloc); } @@ -2677,12 +2663,10 @@ xf86RegisterRootWindowProperty(int ScrnIndex, Atom property, Atom type, } } -#ifdef DEBUG - ErrorF("xf86RegisteredPropertiesTable %p\n", + DebugF("xf86RegisteredPropertiesTable %p\n", (void *)xf86RegisteredPropertiesTable); - ErrorF("xf86RegisteredPropertiesTable[%d] %p\n", + DebugF("xf86RegisteredPropertiesTable[%d] %p\n", ScrnIndex, (void *)xf86RegisteredPropertiesTable[ScrnIndex]); -#endif if (!existing) { if ( xf86RegisteredPropertiesTable[ScrnIndex] == NULL) { @@ -2690,17 +2674,13 @@ xf86RegisterRootWindowProperty(int ScrnIndex, Atom property, Atom type, } else { pRegProp = xf86RegisteredPropertiesTable[ScrnIndex]; while (pRegProp->next != NULL) { -#ifdef DEBUG - ErrorF("- next %p\n", (void *)pRegProp); -#endif + DebugF("- next %p\n", (void *)pRegProp); pRegProp = pRegProp->next; } pRegProp->next = pNewProp; } } -#ifdef DEBUG - ErrorF("xf86RegisterRootWindowProperty succeeded\n"); -#endif + DebugF("xf86RegisterRootWindowProperty succeeded\n"); return(Success); } diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c index cf28ae73e..c4e5898ae 100644 --- a/hw/xfree86/common/xf86Init.c +++ b/hw/xfree86/common/xf86Init.c @@ -316,9 +316,7 @@ xf86CreateRootWindow(WindowPtr pWin) CreateWindowProcPtr CreateWindow = (CreateWindowProcPtr) dixLookupPrivate(&pScreen->devPrivates, xf86CreateRootWindowKey); -#ifdef DEBUG - ErrorF("xf86CreateRootWindow(%p)\n", pWin); -#endif + DebugF("xf86CreateRootWindow(%p)\n", pWin); if ( pScreen->CreateWindow != xf86CreateRootWindow ) { /* Can't find hook we are hung on */ @@ -365,9 +363,7 @@ xf86CreateRootWindow(WindowPtr pWin) } } -#ifdef DEBUG - ErrorF("xf86CreateRootWindow() returns %d\n", ret); -#endif + DebugF("xf86CreateRootWindow() returns %d\n", ret); return (ret); } @@ -471,10 +467,8 @@ probe_devices_from_device_sections(DriverPtr drvp) if ( (devList[i]->screen == 0) && !xf86CheckPciSlot( pPci ) ) continue; -#ifdef DEBUG - ErrorF("%s: card at %d:%d:%d is claimed by a Device section\n", + DebugF("%s: card at %d:%d:%d is claimed by a Device section\n", drvp->driverName, pPci->bus, pPci->dev, pPci->func); -#endif /* Allocate an entry in the lists to be returned */ entry = xf86ClaimPciSlot(pPci, drvp, device_id, @@ -1246,12 +1240,10 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv) FatalError("AddScreen/ScreenInit failed for driver %d\n", i); } -#ifdef DEBUG - ErrorF("InitOutput - xf86Screens[%d]->pScreen = %p\n", + DebugF("InitOutput - xf86Screens[%d]->pScreen = %p\n", i, xf86Screens[i]->pScreen ); - ErrorF("xf86Screens[%d]->pScreen->CreateWindow = %p\n", + DebugF("xf86Screens[%d]->pScreen->CreateWindow = %p\n", i, xf86Screens[i]->pScreen->CreateWindow ); -#endif dixSetPrivate(&screenInfo.screens[scr_index]->devPrivates, xf86CreateRootWindowKey, diff --git a/hw/xfree86/common/xf86Mode.c b/hw/xfree86/common/xf86Mode.c index 522d3c28b..6dcebe15e 100644 --- a/hw/xfree86/common/xf86Mode.c +++ b/hw/xfree86/common/xf86Mode.c @@ -654,10 +654,8 @@ xf86CheckModeForMonitor(DisplayModePtr mode, MonPtr monitor) return MODE_ERROR; } -#ifdef DEBUG - ErrorF("xf86CheckModeForMonitor(%p %s, %p %s)\n", + DebugF("xf86CheckModeForMonitor(%p %s, %p %s)\n", mode, mode->name, monitor, monitor->id); -#endif /* Some basic mode validity checks */ if (0 >= mode->HDisplay || mode->HDisplay > mode->HSyncStart || @@ -808,10 +806,8 @@ xf86InitialCheckModeForDriver(ScrnInfoPtr scrp, DisplayModePtr mode, return MODE_ERROR; } -#ifdef DEBUG - ErrorF("xf86InitialCheckModeForDriver(%p, %p %s, %p, 0x%x, %d, %d, %d)\n", + DebugF("xf86InitialCheckModeForDriver(%p, %p %s, %p, 0x%x, %d, %d, %d)\n", scrp, mode, mode->name , clockRanges, strategy, maxPitch, virtualX, virtualY); -#endif /* Some basic mode validity checks */ if (0 >= mode->HDisplay || mode->HDisplay > mode->HSyncStart || @@ -1210,14 +1206,12 @@ xf86ValidateModes(ScrnInfoPtr scrp, DisplayModePtr availModes, range vrefresh[MAX_VREFRESH]; Bool inferred_virtual = FALSE; -#ifdef DEBUG - ErrorF("xf86ValidateModes(%p, %p, %p, %p,\n\t\t %p, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x)\n", + DebugF("xf86ValidateModes(%p, %p, %p, %p,\n\t\t %p, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x)\n", scrp, availModes, modeNames, clockRanges, linePitches, minPitch, maxPitch, pitchInc, minHeight, maxHeight, virtualX, virtualY, apertureSize, strategy ); -#endif /* Some sanity checking */ if (scrp == NULL || scrp->name == NULL || !scrp->monitor || @@ -1860,15 +1854,13 @@ xf86SetCrtcForModes(ScrnInfoPtr scrp, int adjustFlags) do { xf86SetModeCrtc(p, adjustFlags); -#ifdef DEBUG - ErrorF("%sMode %s: %d (%d) %d %d (%d) %d %d (%d) %d %d (%d) %d\n", + DebugF("%sMode %s: %d (%d) %d %d (%d) %d %d (%d) %d %d (%d) %d\n", (p->type & M_T_DEFAULT) ? "Default " : "", p->name, p->CrtcHDisplay, p->CrtcHBlankStart, p->CrtcHSyncStart, p->CrtcHSyncEnd, p->CrtcHBlankEnd, p->CrtcHTotal, p->CrtcVDisplay, p->CrtcVBlankStart, p->CrtcVSyncStart, p->CrtcVSyncEnd, p->CrtcVBlankEnd, p->CrtcVTotal); -#endif p = p->next; } while (p != NULL && p != scrp->modes); } diff --git a/hw/xfree86/common/xf86VidMode.c b/hw/xfree86/common/xf86VidMode.c index d855bd1a8..49b86e73a 100644 --- a/hw/xfree86/common/xf86VidMode.c +++ b/hw/xfree86/common/xf86VidMode.c @@ -56,12 +56,6 @@ static Bool VidModeClose(int i, ScreenPtr pScreen); #endif -#ifdef DEBUG -# define DEBUG_P(x) ErrorF(x"\n"); -#else -# define DEBUG_P(x) /**/ -#endif - Bool VidModeExtensionInit(ScreenPtr pScreen) { @@ -69,7 +63,7 @@ VidModeExtensionInit(ScreenPtr pScreen) VidModePtr pVidMode; if (!xf86GetVidModeEnabled()) { - DEBUG_P("!xf86GetVidModeEnabled()"); + DebugF("!xf86GetVidModeEnabled()\n"); return FALSE; } @@ -77,7 +71,7 @@ VidModeExtensionInit(ScreenPtr pScreen) if (!dixSetPrivate(&pScreen->devPrivates, VidModeKey, xcalloc(sizeof(VidModeRec), 1))) { - DEBUG_P("xcalloc failed"); + DebugF("xcalloc failed\n"); return FALSE; } @@ -89,7 +83,7 @@ VidModeExtensionInit(ScreenPtr pScreen) VidModeCount++; return TRUE; #else - DEBUG_P("no vidmode extension"); + DebugF("no vidmode extension\n"); return FALSE; #endif } @@ -123,13 +117,13 @@ VidModeAvailable(int scrnIndex) VidModePtr pVidMode; if (VidModeKey == NULL) { - DEBUG_P("VidModeKey == NULL"); + DebugF("VidModeKey == NULL\n"); return FALSE; } pScrn = xf86Screens[scrnIndex]; if (pScrn == NULL) { - DEBUG_P("pScrn == NULL"); + DebugF("pScrn == NULL\n"); return FALSE; } @@ -137,7 +131,7 @@ VidModeAvailable(int scrnIndex) if (pVidMode) return TRUE; else { - DEBUG_P("pVidMode == NULL"); + DebugF("pVidMode == NULL\n"); return FALSE; } } diff --git a/hw/xfree86/common/xf86fbman.c b/hw/xfree86/common/xf86fbman.c index 510c3d8c4..5b8871723 100644 --- a/hw/xfree86/common/xf86fbman.c +++ b/hw/xfree86/common/xf86fbman.c @@ -802,10 +802,10 @@ LinearRemoveCBWrapper(FBAreaPtr area) xfree(pLink); } -#ifdef DEBUG static void -Dump(FBLinearLinkPtr pLink) +DumpDebug(FBLinearLinkPtr pLink) { +#ifdef DEBUG if (!pLink) ErrorF("MMmm, PLINK IS NULL!\n"); while (pLink) { @@ -817,8 +817,8 @@ Dump(FBLinearLinkPtr pLink) pLink = pLink->next; } -} #endif +} static FBLinearPtr AllocateLinear( @@ -889,9 +889,7 @@ AllocateLinear( linear->linear.RemoveLinearCallback = NULL; linear->linear.devPrivate.ptr = NULL; -#ifdef DEBUG - Dump(offman->LinearAreas); -#endif + DumpDebug(offman->LinearAreas); return &(linear->linear); } @@ -916,15 +914,11 @@ localAllocateOffscreenLinear( xf86FBScreenKey); /* Try to allocate from linear memory first...... */ -#ifdef DEBUG - ErrorF("ALLOCATING LINEAR\n"); -#endif + DebugF("ALLOCATING LINEAR\n"); if ((linear = AllocateLinear(offman, length, gran, privData))) return linear; -#ifdef DEBUG - ErrorF("NOPE, ALLOCATING AREA\n"); -#endif + DebugF("NOPE, ALLOCATING AREA\n"); if(!(link = xalloc(sizeof(FBLinearLink)))) return NULL; @@ -978,9 +972,7 @@ localAllocateOffscreenLinear( } else xfree(link); -#ifdef DEBUG - Dump(offman->LinearAreas); -#endif + DumpDebug(offman->LinearAreas); return linear; } @@ -1005,17 +997,13 @@ localFreeOffscreenLinear(FBLinearPtr linear) } if(pLink->area) { /* really an XY area */ -#ifdef DEBUG - ErrorF("FREEING AREA\n"); -#endif + DebugF("FREEING AREA\n"); localFreeOffscreenArea(pLink->area); if(pLinkPrev) pLinkPrev->next = pLink->next; else offman->LinearAreas = pLink->next; xfree(pLink); -#ifdef DEBUG - Dump(offman->LinearAreas); -#endif + DumpDebug(offman->LinearAreas); return; } @@ -1037,10 +1025,8 @@ localFreeOffscreenLinear(FBLinearPtr linear) } } -#ifdef DEBUG - ErrorF("FREEING LINEAR\n"); - Dump(offman->LinearAreas); -#endif + DebugF("FREEING LINEAR\n"); + DumpDebug(offman->LinearAreas); } diff --git a/hw/xfree86/common/xf86sbusBus.c b/hw/xfree86/common/xf86sbusBus.c index 924c2bcb6..4936e75be 100644 --- a/hw/xfree86/common/xf86sbusBus.c +++ b/hw/xfree86/common/xf86sbusBus.c @@ -435,9 +435,7 @@ xf86MatchSbusInstances(const char *driverName, int sbusDevId, return actualcards; } -#ifdef DEBUG - ErrorF("%s instances found: %d\n", driverName, allocatedInstances); -#endif + DebugF("%s instances found: %d\n", driverName, allocatedInstances); for (i = 0; i < allocatedInstances; i++) { char *promPath = NULL; @@ -494,9 +492,7 @@ xf86MatchSbusInstances(const char *driverName, int sbusDevId, xfree(promPath); } -#ifdef DEBUG - ErrorF("%s instances found: %d\n", driverName, numClaimedInstances); -#endif + DebugF("%s instances found: %d\n", driverName, numClaimedInstances); /* * Of the claimed instances, check that another driver hasn't already @@ -510,11 +506,9 @@ xf86MatchSbusInstances(const char *driverName, int sbusDevId, if (!xf86CheckSbusSlot(psdp->fbNum)) continue; -#ifdef DEBUG - ErrorF("%s: card at fb%d %08x is claimed by a Device section\n", + DebugF("%s: card at fb%d %08x is claimed by a Device section\n", driverName, psdp->fbNum, psdp->node.node); -#endif - + /* Allocate an entry in the lists to be returned */ numFound++; retEntities = xnfrealloc(retEntities, numFound * sizeof(int)); diff --git a/hw/xfree86/os-support/linux/int10/linux.c b/hw/xfree86/os-support/linux/int10/linux.c index 8274bbbfb..0cf3507c3 100644 --- a/hw/xfree86/os-support/linux/int10/linux.c +++ b/hw/xfree86/os-support/linux/int10/linux.c @@ -115,9 +115,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) if ((!vidMem) || (!sysMem)) { if ((fd = open(DEV_MEM, O_RDWR, 0)) >= 0) { if (!sysMem) { -#ifdef DEBUG - ErrorF("Mapping sys bios area\n"); -#endif + DebugF("Mapping sys bios area\n"); if ((sysMem = mmap((void *)(SYS_BIOS), BIOS_SIZE, PROT_READ | PROT_EXEC, MAP_SHARED | MAP_FIXED, fd, SYS_BIOS)) @@ -128,9 +126,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) } } if (!vidMem) { -#ifdef DEBUG - ErrorF("Mapping VRAM area\n"); -#endif + DebugF("Mapping VRAM area\n"); if ((vidMem = mmap((void *)(V_RAM), VRAM_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_SHARED | MAP_FIXED, fd, V_RAM)) @@ -162,9 +158,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) (pointer)xnfcalloc(1, ALLOC_ENTRIES(pagesize)); if (!xf86IsEntityPrimary(entityIndex)) { -#ifdef DEBUG - ErrorF("Mapping high memory area\n"); -#endif + DebugF("Mapping high memory area\n"); if ((high_mem = shmget(counter++, HIGH_MEM_SIZE, IPC_CREAT | SHM_R | SHM_W)) == -1) { if (errno == ENOSYS) @@ -176,9 +170,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) goto error1; } } else { -#ifdef DEBUG - ErrorF("Mapping Video BIOS\n"); -#endif + DebugF("Mapping Video BIOS\n"); videoBiosMapped = TRUE; if ((fd = open(DEV_MEM, O_RDWR, 0)) >= 0) { if ((vMem = mmap((void *)(V_BIOS), SYS_BIOS - V_BIOS, @@ -195,9 +187,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) } ((linuxInt10Priv*)pInt->private)->highMem = high_mem; -#ifdef DEBUG - ErrorF("Mapping 640kB area\n"); -#endif + DebugF("Mapping 640kB area\n"); if ((low_mem = shmget(counter++, V_RAM, IPC_CREAT | SHM_R | SHM_W)) == -1) { xf86DrvMsg(screen, X_ERROR, @@ -229,16 +219,12 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) Int10Current = pInt; -#ifdef DEBUG - ErrorF("Mapping int area\n"); -#endif + DebugF("Mapping int area\n"); if (xf86ReadBIOS(0, 0, (unsigned char *)0, LOW_PAGE_SIZE) < 0) { xf86DrvMsg(screen, X_ERROR, "Cannot read int vect\n"); goto error3; } -#ifdef DEBUG - ErrorF("done\n"); -#endif + DebugF("done\n"); /* * Read in everything between V_BIOS and SYS_BIOS as some system BIOSes * have executable code there. Note that xf86ReadBIOS() can only bring in @@ -246,17 +232,13 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) */ if (!videoBiosMapped) { memset((pointer)V_BIOS, 0, SYS_BIOS - V_BIOS); -#ifdef DEBUG - ErrorF("Reading BIOS\n"); -#endif + DebugF("Reading BIOS\n"); for (cs = V_BIOS; cs < SYS_BIOS; cs += V_BIOS_SIZE) if (xf86ReadBIOS(cs, 0, (pointer)cs, V_BIOS_SIZE) < V_BIOS_SIZE) xf86DrvMsg(screen, X_WARNING, "Unable to retrieve all of segment 0x%06lX.\n", (long)cs); -#ifdef DEBUG - ErrorF("done\n"); -#endif + DebugF("done\n"); } if (xf86IsEntityPrimary(entityIndex) && !(initPrimary(options))) { diff --git a/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c b/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c index 9412b07a4..34afd9502 100644 --- a/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c +++ b/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c @@ -172,9 +172,7 @@ vm86_GP_fault(xf86Int10InfoPtr pInt) break; case 0xf4: -#ifdef DEBUG - ErrorF("hlt at %p\n", lina); -#endif + DebugF("hlt at %p\n", lina); return FALSE; case 0x0f: diff --git a/hw/xfree86/os-support/linux/lnx_acpi.c b/hw/xfree86/os-support/linux/lnx_acpi.c index 8e11f4a59..5fad19451 100644 --- a/hw/xfree86/os-support/linux/lnx_acpi.c +++ b/hw/xfree86/os-support/linux/lnx_acpi.c @@ -135,15 +135,11 @@ lnxACPIOpen(void) int r = -1; static int warned = 0; -#ifdef DEBUG - ErrorF("ACPI: OSPMOpen called\n"); -#endif + DebugF("ACPI: OSPMOpen called\n"); if (ACPIihPtr || !xf86Info.pmFlag) return NULL; -#ifdef DEBUG - ErrorF("ACPI: Opening device\n"); -#endif + DebugF("ACPI: Opening device\n"); if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) > -1) { memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; @@ -172,10 +168,8 @@ static void lnxCloseACPI(void) { int fd; - -#ifdef DEBUG - ErrorF("ACPI: Closing device\n"); -#endif + + DebugF("ACPI: Closing device\n"); if (ACPIihPtr) { fd = xf86RemoveGeneralHandler(ACPIihPtr); shutdown(fd, 2); diff --git a/hw/xfree86/os-support/linux/lnx_apm.c b/hw/xfree86/os-support/linux/lnx_apm.c index 9dae00e57..4ccc7d662 100644 --- a/hw/xfree86/os-support/linux/lnx_apm.c +++ b/hw/xfree86/os-support/linux/lnx_apm.c @@ -160,15 +160,11 @@ lnxAPMOpen(void) { int fd, pfd; -#ifdef DEBUG - ErrorF("APM: OSPMOpen called\n"); -#endif + DebugF("APM: OSPMOpen called\n"); if (APMihPtr || !xf86Info.pmFlag) return NULL; -#ifdef DEBUG - ErrorF("APM: Opening device\n"); -#endif + DebugF("APM: Opening device\n"); if ((fd = open( APM_DEVICE, O_RDWR )) > -1) { if (access( APM_PROC, R_OK ) || ((pfd = open( APM_PROC, O_RDONLY)) == -1)) { @@ -191,10 +187,8 @@ static void lnxCloseAPM(void) { int fd; - -#ifdef DEBUG - ErrorF("APM: Closing device\n"); -#endif + + DebugF("APM: Closing device\n"); if (APMihPtr) { fd = xf86RemoveGeneralHandler(APMihPtr); close(fd); diff --git a/hw/xfree86/os-support/linux/lnx_axp.c b/hw/xfree86/os-support/linux/lnx_axp.c index f7151c8f4..d25999924 100644 --- a/hw/xfree86/os-support/linux/lnx_axp.c +++ b/hw/xfree86/os-support/linux/lnx_axp.c @@ -69,21 +69,15 @@ lnxGetAXP(void) switch (count) { case 1: sscanf(res, "cpu model : %s",cpu); -#ifdef DEBUG - ErrorF("CPU %s\n",cpu); -#endif + DebugF("CPU %s\n",cpu); break; case 5: sscanf(res, "system type : %s",systype); -#ifdef DEBUG - ErrorF("system type : %s\n",systype); -#endif + DebugF("system type : %s\n",systype); break; case 6: sscanf(res, "system variation : %s",sysvari); -#ifdef DEBUG - ErrorF("system variation: %s\n",sysvari); -#endif + DebugF("system variation: %s\n",sysvari); break; } count++; diff --git a/hw/xfree86/os-support/linux/lnx_font.c b/hw/xfree86/os-support/linux/lnx_font.c index e9a5b6aef..5b2696af5 100644 --- a/hw/xfree86/os-support/linux/lnx_font.c +++ b/hw/xfree86/os-support/linux/lnx_font.c @@ -65,9 +65,7 @@ getfont(int *width, int *height, op.flags = 0; SYSCALL(result = ioctl(xf86Info.consoleFd, KDFONTOP, &op)); -#ifdef DEBUG - ErrorF("Console font read: h: %i count: %i\n",op.height,op.charcount); -#endif + DebugF("Console font read: h: %i count: %i\n",op.height,op.charcount); if (!result) { @@ -130,9 +128,7 @@ lnx_savefont(void) int fd; int width = 32, height = 32, charcount = 2048; -#ifdef DEBUG - ErrorF("SAVE font\n"); -#endif + DebugF("SAVE font\n"); #if CHECK_OS_VERSION /* Check if the kernel has full support for this */ @@ -247,9 +243,7 @@ lnx_restorefont(void) { if (lnxfont.data == NULL) return FALSE; -#ifdef DEBUG - ErrorF("RESTORE font\n"); -#endif + DebugF("RESTORE font\n"); #if 0 /* must wack the height to make the kernel reprogram the VGA registers */ if (!setfont(lnxfont.width, lnxfont.height + 1, lnxfont.charcount, diff --git a/hw/xfree86/os-support/linux/lnx_video.c b/hw/xfree86/os-support/linux/lnx_video.c index ed3576638..73409dfba 100644 --- a/hw/xfree86/os-support/linux/lnx_video.c +++ b/hw/xfree86/os-support/linux/lnx_video.c @@ -292,9 +292,7 @@ mtrr_add_wc_region(int screenNum, unsigned long base, unsigned long size, lbase = lbase >> 1, d_size <<= 1); while (d_size > n_size) d_size = d_size >> 1; -#ifdef DEBUG - ErrorF("WC_BASE: 0x%lx WC_END: 0x%lx\n",base,base+d_size-1); -#endif + DebugF("WC_BASE: 0x%lx WC_END: 0x%lx\n",base,base+d_size-1); n_base += d_size; n_size -= d_size; if (n_size) { @@ -424,11 +422,9 @@ mapVidMem(int ScreenNum, unsigned long Base, unsigned long Size, int flags) realBase = Base & ~(getpagesize() - 1); alignOff = Base - realBase; -#ifdef DEBUG - ErrorF("base: %lx, realBase: %lx, alignOff: %lx \n", + DebugF("base: %lx, realBase: %lx, alignOff: %lx \n", Base,realBase,alignOff); -#endif - + #if defined(__ia64__) || defined(__arm__) || defined(__s390__) #ifndef MAP_WRITECOMBINED #define MAP_WRITECOMBINED 0x00010000 @@ -469,9 +465,7 @@ mapVidMem(int ScreenNum, unsigned long Base, unsigned long Size, int flags) " (0x%08lx,0x%lx) (%s)\n", Base, Size, strerror(errno)); } -#ifdef DEBUG - ErrorF("base: %lx aligned base: %lx\n",base, base + alignOff); -#endif + DebugF("base: %lx aligned base: %lx\n",base, base + alignOff); return (char *)base + alignOff; } #endif /* !(__sparc__) */ @@ -481,10 +475,8 @@ unmapVidMem(int ScreenNum, pointer Base, unsigned long Size) { memType alignOff = (memType)Base - ((memType)Base & ~(getpagesize() - 1)); - -#ifdef DEBUG - ErrorF("alignment offset: %lx\n",alignOff); -#endif + + DebugF("alignment offset: %lx\n",alignOff); munmap((caddr_t)((memType)Base - alignOff), (Size + alignOff)); } diff --git a/hw/xfree86/os-support/sco/sco_video.c b/hw/xfree86/os-support/sco/sco_video.c index 7edf71db3..f63b71df8 100644 --- a/hw/xfree86/os-support/sco/sco_video.c +++ b/hw/xfree86/os-support/sco/sco_video.c @@ -124,9 +124,7 @@ mapVidMemMMAP(int ScreenNum, unsigned long Base, unsigned long Size, int flags) realBase = Base & ~(getpagesize() - 1); alignOff = Base - realBase; -#ifdef DEBUG - ErrorF("base: %lx, realBase: %lx, alignOff: %lx\n", Base,realBase,alignOff); -#endif + DebugF("base: %lx, realBase: %lx, alignOff: %lx\n", Base,realBase,alignOff); base = mmap((caddr_t)0, Size + alignOff, (flags & VIDMEM_READONLY) ? PROT_READ : (PROT_READ | PROT_WRITE), @@ -138,9 +136,7 @@ mapVidMemMMAP(int ScreenNum, unsigned long Base, unsigned long Size, int flags) return 0; /* NOTREACHED */ } -#ifdef DEBUG - ErrorF("base: %lx aligned base: %lx\n",base, base + alignOff); -#endif + DebugF("base: %lx aligned base: %lx\n",base, base + alignOff); return (pointer)((char *)base + alignOff); } diff --git a/hw/xfree86/os-support/shared/bios_mmap.c b/hw/xfree86/os-support/shared/bios_mmap.c index 96d56bf1c..40afd5b8e 100644 --- a/hw/xfree86/os-support/shared/bios_mmap.c +++ b/hw/xfree86/os-support/shared/bios_mmap.c @@ -68,10 +68,8 @@ xf86ReadBIOS(unsigned long Base, unsigned long Offset, unsigned char *Buf, close(fd); return(-1); } -#ifdef DEBUG - ErrorF("xf86ReadBIOS: BIOS at 0x%08x has signature 0x%04x\n", + DebugF("xf86ReadBIOS: BIOS at 0x%08x has signature 0x%04x\n", Base, ptr[0] | (ptr[1] << 8)); -#endif (void)memcpy(Buf, (void *)(ptr + Offset), Len); (void)munmap((caddr_t)ptr, mlen); (void)close(fd); diff --git a/hw/xfree86/os-support/shared/posix_tty.c b/hw/xfree86/os-support/shared/posix_tty.c index 697d0e51c..bf1bb03a3 100644 --- a/hw/xfree86/os-support/shared/posix_tty.c +++ b/hw/xfree86/os-support/shared/posix_tty.c @@ -400,17 +400,14 @@ int xf86ReadSerial (int fd, void *buf, int count) { int r; -#ifdef DEBUG int i; -#endif + SYSCALL (r = read (fd, buf, count)); -#ifdef DEBUG - ErrorF("ReadingSerial: 0x%x", + DebugF("ReadingSerial: 0x%x", (unsigned char)*(((unsigned char *)buf))); for (i = 1; i < r; i++) - ErrorF(", 0x%x",(unsigned char)*(((unsigned char *)buf) + i)); - ErrorF("\n"); -#endif + DebugF(", 0x%x",(unsigned char)*(((unsigned char *)buf) + i)); + DebugF("\n"); return (r); } @@ -418,14 +415,12 @@ int xf86WriteSerial (int fd, const void *buf, int count) { int r; -#ifdef DEBUG int i; - ErrorF("WritingSerial: 0x%x",(unsigned char)*(((unsigned char *)buf))); + DebugF("WritingSerial: 0x%x",(unsigned char)*(((unsigned char *)buf))); for (i = 1; i < count; i++) ErrorF(", 0x%x",(unsigned char)*(((unsigned char *)buf) + i)); - ErrorF("\n"); -#endif + DebugF("\n"); SYSCALL (r = write (fd, buf, count)); return (r); } @@ -482,9 +477,7 @@ xf86FlushInput(int fd) struct timeval timeout; char c[4]; -#ifdef DEBUG - ErrorF("FlushingSerial\n"); -#endif + DebugF("FlushingSerial\n"); if (tcflush(fd, TCIFLUSH) == 0) return 0; diff --git a/hw/xfree86/ramdac/TI.c b/hw/xfree86/ramdac/TI.c index f421fc39a..1c541d76b 100644 --- a/hw/xfree86/ramdac/TI.c +++ b/hw/xfree86/ramdac/TI.c @@ -115,10 +115,8 @@ TIramdacCalculateMNPForClock( VCO = 8.0 * IntRef * best_m / best_n; ActualClock = VCO / ( 1 << p ); -#ifdef DEBUG - ErrorF( "f_out=%ld f_vco=%.1f n=%d m=%d p=%d\n", + DebugF( "f_out=%ld f_vco=%.1f n=%d m=%d p=%d\n", ActualClock, VCO, *rN, *rM, *rP); -#endif return (ActualClock); } diff --git a/hw/xfree86/vbe/vbeModes.c b/hw/xfree86/vbe/vbeModes.c index fb730a708..1a4d2407c 100644 --- a/hw/xfree86/vbe/vbeModes.c +++ b/hw/xfree86/vbe/vbeModes.c @@ -414,11 +414,9 @@ VBESetModeParameters(ScrnInfoPtr pScrn, vbeInfoPtr pVbe) data->block->PixelClock = best->Clock * 1000; /* XXX May not have this. */ clock = VBEGetPixelClock(pVbe, data->mode, data->block->PixelClock); -#ifdef DEBUG - ErrorF("Setting clock %.2fMHz, closest is %.2fMHz\n", + DebugF("Setting clock %.2fMHz, closest is %.2fMHz\n", (double)data->block->PixelClock / 1000000.0, (double)clock / 1000000.0); -#endif if (clock) data->block->PixelClock = clock; data->mode |= (1 << 11); diff --git a/hw/xfree86/vgahw/vgaHW.c b/hw/xfree86/vgahw/vgaHW.c index 9d466e3dc..004376b75 100644 --- a/hw/xfree86/vgahw/vgaHW.c +++ b/hw/xfree86/vgahw/vgaHW.c @@ -1025,32 +1025,24 @@ vgaHWSaveMode(ScrnInfoPtr scrninfp, vgaRegPtr save) for (i = 0; i < save->numCRTC; i++) { save->CRTC[i] = hwp->readCrtc(hwp, i); -#ifdef DEBUG - ErrorF("CRTC[0x%02x] = 0x%02x\n", i, save->CRTC[i]); -#endif + DebugF("CRTC[0x%02x] = 0x%02x\n", i, save->CRTC[i]); } hwp->enablePalette(hwp); for (i = 0; i < save->numAttribute; i++) { save->Attribute[i] = hwp->readAttr(hwp, i); -#ifdef DEBUG - ErrorF("Attribute[0x%02x] = 0x%02x\n", i, save->Attribute[i]); -#endif + DebugF("Attribute[0x%02x] = 0x%02x\n", i, save->Attribute[i]); } hwp->disablePalette(hwp); for (i = 0; i < save->numGraphics; i++) { save->Graphics[i] = hwp->readGr(hwp, i); -#ifdef DEBUG - ErrorF("Graphics[0x%02x] = 0x%02x\n", i, save->Graphics[i]); -#endif + DebugF("Graphics[0x%02x] = 0x%02x\n", i, save->Graphics[i]); } for (i = 1; i < save->numSequencer; i++) { save->Sequencer[i] = hwp->readSeq(hwp, i); -#ifdef DEBUG - ErrorF("Sequencer[0x%02x] = 0x%02x\n", i, save->Sequencer[i]); -#endif + DebugF("Sequencer[0x%02x] = 0x%02x\n", i, save->Sequencer[i]); } } @@ -1088,18 +1080,16 @@ vgaHWSaveColormap(ScrnInfoPtr scrninfp, vgaRegPtr save) hwp->writeDacReadAddr(hwp, 0x00); for (i = 0; i < 6; i++) { save->DAC[i] = hwp->readDacData(hwp); -#ifdef DEBUG switch (i % 3) { case 0: - ErrorF("DAC[0x%02x] = 0x%02x, ", i / 3, save->DAC[i]); + DebugF("DAC[0x%02x] = 0x%02x, ", i / 3, save->DAC[i]); break; case 1: - ErrorF("0x%02x, ", save->DAC[i]); + DebugF("0x%02x, ", save->DAC[i]); break; case 2: - ErrorF("0x%02x\n", save->DAC[i]); + DebugF("0x%02x\n", save->DAC[i]); } -#endif } /* @@ -1131,18 +1121,16 @@ vgaHWSaveColormap(ScrnInfoPtr scrninfp, vgaRegPtr save) for (i = 6; i < 768; i++) { save->DAC[i] = hwp->readDacData(hwp); DACDelay(hwp); -#ifdef DEBUG switch (i % 3) { case 0: - ErrorF("DAC[0x%02x] = 0x%02x, ", i / 3, save->DAC[i]); + DebugF("DAC[0x%02x] = 0x%02x, ", i / 3, save->DAC[i]); break; case 1: - ErrorF("0x%02x, ", save->DAC[i]); + DebugF("0x%02x, ", save->DAC[i]); break; case 2: - ErrorF("0x%02x\n", save->DAC[i]); + DebugF("0x%02x\n", save->DAC[i]); } -#endif } } @@ -1772,9 +1760,7 @@ vgaHWMapMem(ScrnInfoPtr scrp) * XXX This is not correct but we do it * for now. */ -#ifdef DEBUG - ErrorF("Mapping VGAMem\n"); -#endif + DebugF("Mapping VGAMem\n"); hwp->Base = xf86MapDomainMemory(scr_index, VIDMEM_MMIO_32BIT, hwp->dev, hwp->MapPhys, hwp->MapSize); return hwp->Base != NULL; @@ -1790,9 +1776,7 @@ vgaHWUnmapMem(ScrnInfoPtr scrp) if (hwp->Base == NULL) return; -#ifdef DEBUG - ErrorF("Unmapping VGAMem\n"); -#endif + DebugF("Unmapping VGAMem\n"); xf86UnMapVidMem(scr_index, hwp->Base, hwp->MapSize); hwp->Base = NULL; } From 8331bde0adeccefb275c4d707e7b2cb1d95b1581 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Fri, 15 May 2009 21:36:28 +0100 Subject: [PATCH 61/89] Cygwin/X: link with libmain.a to provide main() Commit 987579c930bda803427a28cb82773c389f5110d6 moves main.c into into libmain.a to be linked with separately, and updates the various DDXs to link with libmain.a, except Xwin, which also needs this change. Signed-off-by: Jon TURNEY --- hw/xwin/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xwin/Makefile.am b/hw/xwin/Makefile.am index 504c2a6cd..4f9513088 100644 --- a/hw/xwin/Makefile.am +++ b/hw/xwin/Makefile.am @@ -147,7 +147,7 @@ XWin_SOURCES = $(SRCS) INCLUDES = -I$(top_srcdir)/miext/rootless XWin_DEPENDENCIES = $(XWIN_LIBS) -XWin_LDADD = $(XWIN_LIBS) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XWIN_SYS_LIBS) +XWin_LDADD = $(XWIN_LIBS) $(MAIN_LIB) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XWIN_SYS_LIBS) .rc.o: $(WINDRES) --use-temp-file -i $< --input-format=rc -o $@ -O coff -DPROJECT_NAME=\"$(VENDOR_NAME_SHORT)\" From 510cbd43cd4e34bd459e8f74ab2855714b4ca95d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 18 May 2009 17:48:57 +0200 Subject: [PATCH 62/89] EXA: Defragment offscreen memory. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit At most once per second, under the following circumstances: * We can't satisfy an offscreen memory allocation, but there seems to be enough offscreen memory available in total. or * The server has been idle for at least 100ms, and there is more than one available offscreen area. Signed-off-by: Michel Dänzer --- exa/exa.c | 53 ++++++++++ exa/exa.h | 13 +++ exa/exa_offscreen.c | 231 ++++++++++++++++++++++++++++++++++++++++++-- exa/exa_priv.h | 8 ++ 4 files changed, 297 insertions(+), 8 deletions(-) diff --git a/exa/exa.c b/exa/exa.c index 2de348a8d..089350b24 100644 --- a/exa/exa.c +++ b/exa/exa.c @@ -1048,6 +1048,50 @@ exaCreateScreenResources(ScreenPtr pScreen) return TRUE; } +static void +ExaBlockHandler(int screenNum, pointer blockData, pointer pTimeout, + pointer pReadmask) +{ + ScreenPtr pScreen = screenInfo.screens[screenNum]; + ExaScreenPriv(pScreen); + + unwrap(pExaScr, pScreen, BlockHandler); + (*pScreen->BlockHandler) (screenNum, blockData, pTimeout, pReadmask); + wrap(pExaScr, pScreen, BlockHandler, ExaBlockHandler); + + /* Try and keep the offscreen memory area tidy every now and then (at most + * once per second) when the server has been idle for at least 100ms. + */ + if (pExaScr->numOffscreenAvailable > 1) { + CARD32 now = GetTimeInMillis(); + + pExaScr->nextDefragment = now + + max(100, (INT32)(pExaScr->lastDefragment + 1000 - now)); + AdjustWaitForDelay(pTimeout, pExaScr->nextDefragment - now); + } +} + +static void +ExaWakeupHandler(int screenNum, pointer wakeupData, unsigned long result, + pointer pReadmask) +{ + ScreenPtr pScreen = screenInfo.screens[screenNum]; + ExaScreenPriv(pScreen); + + unwrap(pExaScr, pScreen, WakeupHandler); + (*pScreen->WakeupHandler) (screenNum, wakeupData, result, pReadmask); + wrap(pExaScr, pScreen, WakeupHandler, ExaWakeupHandler); + + if (result == 0 && pExaScr->numOffscreenAvailable > 1) { + CARD32 now = GetTimeInMillis(); + + if ((int)(now - pExaScr->nextDefragment) > 0) { + ExaOffscreenDefragment(pScreen); + pExaScr->lastDefragment = now; + } + } +} + /** * exaCloseScreen() unwraps its wrapped screen functions and tears down EXA's * screen private, before calling down to the next CloseSccreen. @@ -1063,6 +1107,10 @@ exaCloseScreen(int i, ScreenPtr pScreen) if (ps->Glyphs == exaGlyphs) exaGlyphsFini(pScreen); + if (pScreen->BlockHandler == ExaBlockHandler) + unwrap(pExaScr, pScreen, BlockHandler); + if (pScreen->WakeupHandler == ExaWakeupHandler) + unwrap(pExaScr, pScreen, WakeupHandler); unwrap(pExaScr, pScreen, CreateGC); unwrap(pExaScr, pScreen, CloseScreen); unwrap(pExaScr, pScreen, GetImage); @@ -1223,6 +1271,11 @@ exaDriverInit (ScreenPtr pScreen, /* * Replace various fb screen functions */ + if ((pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS) && + !(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) { + wrap(pExaScr, pScreen, BlockHandler, ExaBlockHandler); + wrap(pExaScr, pScreen, WakeupHandler, ExaWakeupHandler); + } wrap(pExaScr, pScreen, CreateGC, exaCreateGC); wrap(pExaScr, pScreen, CloseScreen, exaCloseScreen); wrap(pExaScr, pScreen, GetImage, exaGetImage); diff --git a/exa/exa.h b/exa/exa.h index 3e1f1c75a..0701ec98f 100644 --- a/exa/exa.h +++ b/exa/exa.h @@ -66,6 +66,9 @@ struct _ExaOffscreenArea { ExaOffscreenArea *next; unsigned eviction_cost; + + ExaOffscreenArea *prev; /* Double-linked list for defragmentation */ + int align; /* required alignment */ }; /** @@ -744,6 +747,16 @@ typedef struct _ExaDriver { */ #define EXA_SUPPORTS_PREPARE_AUX (1 << 4) +/** + * EXA_SUPPORTS_OFFSCREEN_OVERLAPS indicates to EXA that the driver Copy hooks + * can handle the source and destination occupying overlapping offscreen memory + * areas. This allows the offscreen memory defragmentation code to defragment + * areas where the defragmented position overlaps the fragmented position. + * + * Typically this is supported by traditional 2D engines but not by 3D engines. + */ +#define EXA_SUPPORTS_OFFSCREEN_OVERLAPS (1 << 5) + /** @} */ /* in exa.c */ diff --git a/exa/exa_offscreen.c b/exa/exa_offscreen.c index d7198cbdc..043fd83ae 100644 --- a/exa/exa_offscreen.c +++ b/exa/exa_offscreen.c @@ -172,7 +172,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, { ExaOffscreenArea *area; ExaScreenPriv (pScreen); - int tmp, real_size = 0; + int tmp, real_size = 0, free_total = 0, largest_avail = 0; #if DEBUG_OFFSCREEN static int number = 0; ErrorF("================= ============ allocating a new pixmap %d\n", ++number); @@ -213,6 +213,35 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, /* does it fit? */ if (real_size <= area->size) break; + + free_total += area->size; + + if (area->size > largest_avail) + largest_avail = area->size; + } + + if (!area && free_total >= size) { + CARD32 now = GetTimeInMillis(); + + /* Don't defragment more than once per second, to avoid adding more + * overhead than we're trying to prevent + */ + if (abs((INT32) (now - pExaScr->lastDefragment)) > 1000) { + area = ExaOffscreenDefragment(pScreen); + pExaScr->lastDefragment = now; + + if (area) { + /* adjust size to match alignment requirement */ + real_size = size; + tmp = area->base_offset % align; + if (tmp) + real_size += (align - tmp); + + /* does it fit? */ + if (real_size > area->size) + area = NULL; + } + } } if (!area) @@ -255,16 +284,31 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, if (!new_area) return NULL; new_area->base_offset = area->base_offset + real_size; + +#if DEBUG_OFFSCREEN + if (new_area->base_offset >= pExaScr->info->memorySize) + ErrorF("new_area->base_offset = 0x%08x >= memorySize!\n", + new_area->base_offset); +#endif + new_area->offset = new_area->base_offset; + new_area->align = 0; new_area->size = area->size - real_size; new_area->state = ExaOffscreenAvail; new_area->save = NULL; new_area->last_use = 0; new_area->eviction_cost = 0; new_area->next = area->next; + if (area->next) + area->next->prev = new_area; + else + pExaScr->info->offScreenAreas->prev = new_area; area->next = new_area; + new_area->prev = area; area->size = real_size; - } + } else + pExaScr->numOffscreenAvailable--; + /* * Mark this area as in use */ @@ -277,6 +321,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, area->last_use = pExaScr->offScreenCounter++; area->offset = (area->base_offset + align - 1); area->offset -= area->offset % align; + area->align = align; ExaOffscreenValidate (pScreen); @@ -391,7 +436,7 @@ exaEnableDisableFBAccess (int index, Bool enable) /* merge the next free area into this one */ static void -ExaOffscreenMerge (ExaOffscreenArea *area) +ExaOffscreenMerge (ExaScreenPrivPtr pExaScr, ExaOffscreenArea *area) { ExaOffscreenArea *next = area->next; @@ -399,7 +444,13 @@ ExaOffscreenMerge (ExaOffscreenArea *area) area->size += next->size; /* frob pointer */ area->next = next->next; + if (area->next) + area->next->prev = area; + else + pExaScr->info->offScreenAreas->prev = area; xfree (next); + + pExaScr->numOffscreenAvailable--; } /** @@ -436,19 +487,19 @@ exaOffscreenFree (ScreenPtr pScreen, ExaOffscreenArea *area) if (area == pExaScr->info->offScreenAreas) prev = NULL; else - for (prev = pExaScr->info->offScreenAreas; prev; prev = prev->next) - if (prev->next == area) - break; + prev = area->prev; + + pExaScr->numOffscreenAvailable++; /* link with next area if free */ if (next && next->state == ExaOffscreenAvail) - ExaOffscreenMerge (area); + ExaOffscreenMerge (pExaScr, area); /* link with prev area if free */ if (prev && prev->state == ExaOffscreenAvail) { area = prev; - ExaOffscreenMerge (area); + ExaOffscreenMerge (pExaScr, area); } ExaOffscreenValidate (pScreen); @@ -468,6 +519,167 @@ ExaOffscreenMarkUsed (PixmapPtr pPixmap) pExaPixmap->area->last_use = pExaScr->offScreenCounter++; } +/** + * Defragment offscreen memory by compacting allocated areas at the end of it, + * leaving the total amount of memory available as a single area at the + * beginning (when there are no pinned allocations). + */ +_X_HIDDEN ExaOffscreenArea* +ExaOffscreenDefragment (ScreenPtr pScreen) +{ + ExaScreenPriv (pScreen); + ExaOffscreenArea *area, *largest_available = NULL; + int largest_size = 0; + PixmapPtr pDstPix; + ExaPixmapPrivPtr pExaDstPix; + + pDstPix = (*pScreen->CreatePixmap) (pScreen, 0, 0, 0, 0); + + if (!pDstPix) + return NULL; + + pExaDstPix = ExaGetPixmapPriv (pDstPix); + pExaDstPix->offscreen = TRUE; + + for (area = pExaScr->info->offScreenAreas->prev; + area != pExaScr->info->offScreenAreas; + ) + { + ExaOffscreenArea *prev = area->prev; + PixmapPtr pSrcPix; + ExaPixmapPrivPtr pExaSrcPix; + Bool save_offscreen; + int save_pitch; + + if (area->state != ExaOffscreenAvail || + prev->state == ExaOffscreenLocked || + (prev->state == ExaOffscreenRemovable && + prev->save != exaPixmapSave)) { + area = prev; + continue; + } + + if (prev->state == ExaOffscreenAvail) { + if (area == largest_available) { + largest_available = prev; + largest_size += prev->size; + } + area = prev; + ExaOffscreenMerge (pExaScr, area); + continue; + } + + if (area->size > largest_size) { + largest_available = area; + largest_size = area->size; + } + + pSrcPix = prev->privData; + pExaSrcPix = ExaGetPixmapPriv (pSrcPix); + + pExaDstPix->fb_ptr = pExaScr->info->memoryBase + + area->base_offset + area->size - prev->size + prev->base_offset - + prev->offset; + pExaDstPix->fb_ptr -= (unsigned long)pExaDstPix->fb_ptr % prev->align; + + if (pExaDstPix->fb_ptr <= pExaSrcPix->fb_ptr) { + area = prev; + continue; + } + + if (!(pExaScr->info->flags & EXA_SUPPORTS_OFFSCREEN_OVERLAPS) && + (pExaSrcPix->fb_ptr + prev->size) > pExaDstPix->fb_ptr) { + area = prev; + continue; + } + + save_offscreen = pExaSrcPix->offscreen; + save_pitch = pSrcPix->devKind; + + pExaSrcPix->offscreen = TRUE; + pSrcPix->devKind = pExaSrcPix->fb_pitch; + + pDstPix->drawable.width = pSrcPix->drawable.width; + pDstPix->devKind = pSrcPix->devKind; + pDstPix->drawable.height = pSrcPix->drawable.height; + pDstPix->drawable.depth = pSrcPix->drawable.depth; + pDstPix->drawable.bitsPerPixel = pSrcPix->drawable.bitsPerPixel; + + if (!pExaScr->info->PrepareCopy (pSrcPix, pDstPix, -1, -1, GXcopy, ~0)) { + pExaSrcPix->offscreen = save_offscreen; + pSrcPix->devKind = save_pitch; + area = prev; + continue; + } + + pExaScr->info->Copy (pDstPix, 0, 0, 0, 0, pDstPix->drawable.width, + pDstPix->drawable.height); + pExaScr->info->DoneCopy (pDstPix); + exaMarkSync (pScreen); + + DBG_OFFSCREEN(("Before swap: prev=0x%08x-0x%08x-0x%08x area=0x%08x-0x%08x-0x%08x\n", + prev->base_offset, prev->offset, prev->base_offset + prev->size, + area->base_offset, area->offset, area->base_offset + area->size)); + + /* Calculate swapped area offsets and sizes */ + area->base_offset = prev->base_offset; + area->offset = area->base_offset; + prev->offset += pExaDstPix->fb_ptr - pExaSrcPix->fb_ptr; + assert(prev->offset >= pExaScr->info->offScreenBase && + prev->offset < pExaScr->info->memorySize); + prev->base_offset = prev->offset; + if (area->next) + prev->size = area->next->base_offset - prev->base_offset; + else + prev->size = pExaScr->info->memorySize - prev->base_offset; + area->size = prev->base_offset - area->base_offset; + + DBG_OFFSCREEN(("After swap: area=0x%08x-0x%08x-0x%08x prev=0x%08x-0x%08x-0x%08x\n", + area->base_offset, area->offset, area->base_offset + area->size, + prev->base_offset, prev->offset, prev->base_offset + prev->size)); + + /* Swap areas in list */ + if (area->next) + area->next->prev = prev; + else + pExaScr->info->offScreenAreas->prev = prev; + if (prev->prev->next) + prev->prev->next = area; + else + pExaScr->info->offScreenAreas = area; + prev->next = area->next; + area->next = prev; + area->prev = prev->prev; + prev->prev = area; + if (!area->prev->next) + pExaScr->info->offScreenAreas = area; + +#if DEBUG_OFFSCREEN + if (prev->prev == prev || prev->next == prev) + ErrorF("Whoops, prev points to itself!\n"); + + if (area->prev == area || area->next == area) + ErrorF("Whoops, area points to itself!\n"); +#endif + + pExaSrcPix->fb_ptr = pExaDstPix->fb_ptr; + pExaSrcPix->offscreen = save_offscreen; + pSrcPix->devKind = save_pitch; + } + + pDstPix->drawable.width = 0; + pDstPix->drawable.height = 0; + pDstPix->drawable.depth = 0; + pDstPix->drawable.bitsPerPixel = 0; + + (*pScreen->DestroyPixmap) (pDstPix); + + if (area->state == ExaOffscreenAvail && area->size > largest_size) + return area; + + return largest_available; +} + /** * exaOffscreenInit initializes the offscreen memory manager. * @@ -491,15 +703,18 @@ exaOffscreenInit (ScreenPtr pScreen) area->state = ExaOffscreenAvail; area->base_offset = pExaScr->info->offScreenBase; area->offset = area->base_offset; + area->align = 0; area->size = pExaScr->info->memorySize - area->base_offset; area->save = NULL; area->next = NULL; + area->prev = area; area->last_use = 0; area->eviction_cost = 0; /* Add it to the free areas */ pExaScr->info->offScreenAreas = area; pExaScr->offScreenCounter = 1; + pExaScr->numOffscreenAvailable = 1; ExaOffscreenValidate (pScreen); diff --git a/exa/exa_priv.h b/exa/exa_priv.h index 874e7e987..b3df1a586 100644 --- a/exa/exa_priv.h +++ b/exa/exa_priv.h @@ -145,6 +145,8 @@ typedef struct { typedef void (*EnableDisableFBAccessProcPtr)(int, Bool); typedef struct { ExaDriverPtr info; + ScreenBlockHandlerProcPtr SavedBlockHandler; + ScreenWakeupHandlerProcPtr SavedWakeupHandler; CreateGCProcPtr SavedCreateGC; CloseScreenProcPtr SavedCloseScreen; GetImageProcPtr SavedGetImage; @@ -170,6 +172,9 @@ typedef struct { unsigned disableFbCount; Bool optimize_migration; unsigned offScreenCounter; + unsigned numOffscreenAvailable; + CARD32 lastDefragment; + CARD32 nextDefragment; /* Store all accessed pixmaps, so we can check for duplicates. */ PixmapPtr prepare_access[6]; @@ -460,6 +465,9 @@ ExaOffscreenSwapOut (ScreenPtr pScreen); void ExaOffscreenSwapIn (ScreenPtr pScreen); +ExaOffscreenArea* +ExaOffscreenDefragment (ScreenPtr pScreen); + Bool exaOffscreenInit(ScreenPtr pScreen); From 4addfcd633484b7f53b5df1b92bfca8bfc1dc48d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 18 May 2009 17:53:35 +0200 Subject: [PATCH 63/89] EXA: Allocate from the end of free offscreen memory rather than from the start. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This way we don't always need to scan over previously allocated areas when looking for an available one, and there might be less fragmentation. Signed-off-by: Michel Dänzer --- exa/exa_offscreen.c | 45 ++++++++++++++------------------------------- 1 file changed, 14 insertions(+), 31 deletions(-) diff --git a/exa/exa_offscreen.c b/exa/exa_offscreen.c index 043fd83ae..eb53b2a30 100644 --- a/exa/exa_offscreen.c +++ b/exa/exa_offscreen.c @@ -93,7 +93,7 @@ exaFindAreaToEvict(ExaScreenPrivPtr pExaScr, int size, int align) { ExaOffscreenArea *begin, *end, *best; unsigned cost, best_cost; - int avail, real_size, tmp; + int avail, real_size; best_cost = UINT_MAX; begin = end = pExaScr->info->offScreenAreas; @@ -111,10 +111,7 @@ exaFindAreaToEvict(ExaScreenPrivPtr pExaScr, int size, int align) break; /* adjust size needed to account for alignment loss for this area */ - real_size = size; - tmp = begin->base_offset % align; - if (tmp) - real_size += (align - tmp); + real_size = size + (begin->base_offset + begin->size - size) % align; while (avail < real_size && end != NULL) { @@ -172,7 +169,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, { ExaOffscreenArea *area; ExaScreenPriv (pScreen); - int tmp, real_size = 0, free_total = 0, largest_avail = 0; + int real_size = 0, free_total = 0, largest_avail = 0; #if DEBUG_OFFSCREEN static int number = 0; ErrorF("================= ============ allocating a new pixmap %d\n", ++number); @@ -205,10 +202,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, continue; /* adjust size to match alignment requirement */ - real_size = size; - tmp = area->base_offset % align; - if (tmp) - real_size += (align - tmp); + real_size = size + (area->base_offset + area->size - size) % align; /* does it fit? */ if (real_size <= area->size) @@ -232,10 +226,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, if (area) { /* adjust size to match alignment requirement */ - real_size = size; - tmp = area->base_offset % align; - if (tmp) - real_size += (align - tmp); + real_size = size + (area->base_offset + area->size - size) % align; /* does it fit? */ if (real_size > area->size) @@ -257,10 +248,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, } /* adjust size needed to account for alignment loss for this area */ - real_size = size; - tmp = area->base_offset % align; - if (tmp) - real_size += (align - tmp); + real_size = size + (area->base_offset + area->size - size) % align; /* * Kick out first area if in use @@ -283,13 +271,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, ExaOffscreenArea *new_area = xalloc (sizeof (ExaOffscreenArea)); if (!new_area) return NULL; - new_area->base_offset = area->base_offset + real_size; - -#if DEBUG_OFFSCREEN - if (new_area->base_offset >= pExaScr->info->memorySize) - ErrorF("new_area->base_offset = 0x%08x >= memorySize!\n", - new_area->base_offset); -#endif + new_area->base_offset = area->base_offset; new_area->offset = new_area->base_offset; new_area->align = 0; @@ -298,13 +280,14 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, new_area->save = NULL; new_area->last_use = 0; new_area->eviction_cost = 0; - new_area->next = area->next; - if (area->next) - area->next->prev = new_area; + new_area->next = area; + new_area->prev = area->prev; + if (area->prev->next) + area->prev->next = new_area; else - pExaScr->info->offScreenAreas->prev = new_area; - area->next = new_area; - new_area->prev = area; + pExaScr->info->offScreenAreas = new_area; + area->prev = new_area; + area->base_offset = new_area->base_offset + new_area->size; area->size = real_size; } else pExaScr->numOffscreenAvailable--; From 3cea176d5abcb0f14eefbdcbe17fed0847524dd4 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Tue, 19 May 2009 19:30:33 -0400 Subject: [PATCH 64/89] xace: Fix a bad device access hook call. Add a proper access mode, and reverse the logic of the return value. Zero ("Success") is returned on success from the hook calls. Signed-off-by: Eamon Walsh --- dix/events.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dix/events.c b/dix/events.c index 157f9a8a1..b3caec8be 100644 --- a/dix/events.c +++ b/dix/events.c @@ -4088,10 +4088,10 @@ CoreFocusEvent(DeviceIntPtr dev, int type, int mode, int detail, WindowPtr pWin) { xKeymapEvent ke; ClientPtr client = clients[CLIENT_ID(pWin->drawable.id)]; - if (XaceHook(XACE_DEVICE_ACCESS, client, dev, FALSE)) - memmove((char *)&ke.map[0], (char *)&dev->key->down[1], 31); - else + if (XaceHook(XACE_DEVICE_ACCESS, client, dev, DixReadAccess)) bzero((char *)&ke.map[0], 31); + else + memmove((char *)&ke.map[0], (char *)&dev->key->down[1], 31); ke.type = KeymapNotify; DeliverEventsToWindow(dev, pWin, (xEvent *)&ke, 1, From 77e90261d5f91e1170c6e02deb0e3739c24fcfd6 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Tue, 19 May 2009 19:36:03 -0400 Subject: [PATCH 65/89] dix/events.c: Use wClient where appropriate. Signed-off-by: Eamon Walsh --- dix/events.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/dix/events.c b/dix/events.c index b3caec8be..fd9337682 100644 --- a/dix/events.c +++ b/dix/events.c @@ -3989,8 +3989,7 @@ CoreEnterLeaveEvent( if ((type == EnterNotify) && (mask & KeymapStateMask)) { xKeymapEvent ke; - ClientPtr client = grab ? rClient(grab) - : clients[CLIENT_ID(pWin->drawable.id)]; + ClientPtr client = grab ? rClient(grab) : wClient(pWin); if (XaceHook(XACE_DEVICE_ACCESS, client, keybd, DixReadAccess)) bzero((char *)&ke.map[0], 31); else @@ -4087,7 +4086,7 @@ CoreFocusEvent(DeviceIntPtr dev, int type, int mode, int detail, WindowPtr pWin) ((pWin->eventMask | wOtherEventMasks(pWin)) & KeymapStateMask)) { xKeymapEvent ke; - ClientPtr client = clients[CLIENT_ID(pWin->drawable.id)]; + ClientPtr client = wClient(pWin); if (XaceHook(XACE_DEVICE_ACCESS, client, dev, DixReadAccess)) bzero((char *)&ke.map[0], 31); else @@ -5181,7 +5180,7 @@ DeleteWindowFromAnyEvents(WindowPtr pWin, Bool freeResources) to None */ #ifdef NOTDEF - || clients[CLIENT_ID(parent->drawable.id)]->clientGone + || wClient(parent)->clientGone #endif ); DoFocusEvents(keybd, pWin, parent, focusEventMode); From 22a33a7250f879b8f3eb84176a1dc57027d8cfe4 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Tue, 19 May 2009 22:45:26 -0400 Subject: [PATCH 66/89] glx: Register names for the GLX resource types. Signed-off-by: Eamon Walsh --- glx/glxext.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/glx/glxext.c b/glx/glxext.c index 6bc7bef8e..bdacf8865 100644 --- a/glx/glxext.c +++ b/glx/glxext.c @@ -36,6 +36,7 @@ #include "glxserver.h" #include #include +#include #include "privates.h" #include #include "g_disptab.h" @@ -317,6 +318,10 @@ void GlxExtensionInit(void) __glXDrawableRes = CreateNewResourceType((DeleteType)DrawableGone); __glXSwapBarrierRes = CreateNewResourceType((DeleteType)SwapBarrierGone); + RegisterResourceName(__glXContextRes, "GLXContext"); + RegisterResourceName(__glXDrawableRes, "GLXDrawable"); + RegisterResourceName(__glXSwapBarrierRes, "GLXSwapBarrier"); + if (!dixRequestPrivate(glxClientPrivateKey, sizeof (__GLXclientState))) return; if (!AddCallback (&ClientStateCallback, glxClientCallback, 0)) From 79138eec1b49cbaca6a16f2bdd8579b5828aeb28 Mon Sep 17 00:00:00 2001 From: Matthias Hopf Date: Tue, 10 Mar 2009 16:03:26 +0100 Subject: [PATCH 67/89] randr: Setting gamma: inverse logic looks more sane --- hw/xfree86/modes/xf86Crtc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index 0ab2f3df9..353b26874 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -353,7 +353,7 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati } /* Only upload when needed, to avoid unneeded delays. */ - if (!crtc->active) + if (crtc->active) crtc->funcs->gamma_set(crtc, crtc->gamma_red, crtc->gamma_green, crtc->gamma_blue, crtc->gamma_size); From a2c5ee36b21c2ee5c0468f1b251e74c1412dbecb Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 21 May 2009 10:20:48 -0400 Subject: [PATCH 68/89] EDID: Be more cautious about finding vendor blocks. Many old monitors zero-fill the detailed descriptors, so check for that to avoid a useless warning like: (WW) RADEON(0): Unknown vendor-specific block 0 --- hw/xfree86/ddc/interpret_edid.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c index 3edfd1fb5..bdcc92e64 100644 --- a/hw/xfree86/ddc/interpret_edid.c +++ b/hw/xfree86/ddc/interpret_edid.c @@ -285,6 +285,8 @@ get_std_timing_section(Uchar *c, struct std_timings *r, } } +static const unsigned char empty_block[18]; + static void get_dt_md_section(Uchar *c, struct edid_version *ver, struct detailed_monitor_section *det_mon) @@ -336,10 +338,10 @@ get_dt_md_section(Uchar *c, struct edid_version *ver, det_mon[i].type = DS_UNKOWN; break; } - if (c[3] <= 0x0F) { + if (c[3] <= 0x0F && memcmp(c, empty_block, sizeof(empty_block))) { det_mon[i].type = DS_VENDOR + c[3]; } - } else { + } else { det_mon[i].type = DT; get_detailed_timing_section(c,&det_mon[i].section.d_timings); } From a8bd1e1f96d8e5380972a7dce8d9940cd912aa09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Thu, 21 May 2009 18:21:28 -0400 Subject: [PATCH 69/89] Fix alpha map computation in miComputeCompositeRegion() According to the RENDER spec, the origin of the alpha map is interpreted relative to the origin of the drawable of the image, not the origin of drawable of the alpha map. The only use of alpha maps I have been able to find is in Qt and they don't use a non-zero alpha origin. --- render/mipict.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/render/mipict.c b/render/mipict.c index 777f111e5..fe1b8dad5 100644 --- a/render/mipict.c +++ b/render/mipict.c @@ -459,8 +459,8 @@ miComputeCompositeRegion (RegionPtr pRegion, if (pSrc->alphaMap) { if (!miClipPictureSrc (pRegion, pSrc->alphaMap, - xDst - (xSrc + pSrc->alphaOrigin.x), - yDst - (ySrc + pSrc->alphaOrigin.y))) + xDst - (xSrc - pSrc->alphaOrigin.x), + yDst - (ySrc - pSrc->alphaOrigin.y))) { pixman_region_fini (pRegion); return FALSE; @@ -477,8 +477,8 @@ miComputeCompositeRegion (RegionPtr pRegion, if (pMask->alphaMap) { if (!miClipPictureSrc (pRegion, pMask->alphaMap, - xDst - (xMask + pMask->alphaOrigin.x), - yDst - (yMask + pMask->alphaOrigin.y))) + xDst - (xMask - pMask->alphaOrigin.x), + yDst - (yMask - pMask->alphaOrigin.y))) { pixman_region_fini (pRegion); return FALSE; From cabff9007a4abad026b450a4aab155c7bcd94326 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 15 May 2009 08:33:07 +1000 Subject: [PATCH 70/89] xfree86: treat other drivers as mouse drivers in the config. Historically, if no input device was referenced in the ServerLayout, the server would pick the first "mouse" device found in the xorg.conf. This patch gives evdev, synaptics, vmmouse and void the same status. If there is a section in the config file using this driver - use it as the core pointer. Device selection is in driver-order, not in config-order. If a "mouse" device is listed after a "synaptics" device, the "mouse" device gets preference. This replicates the original behaviour. This code only takes effect if AllowEmptyInput is off and there is no core pointer in the server layout. Signed-off-by: Peter Hutterer --- hw/xfree86/common/xf86Config.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c index 73235a974..165958b07 100644 --- a/hw/xfree86/common/xf86Config.c +++ b/hw/xfree86/common/xf86Config.c @@ -1090,8 +1090,8 @@ Bool xf86DRI2Enabled(void) * 2. The "CorePointer" and "CoreKeyboard" InputDevices referred to by * the active ServerLayout. * 3. The first InputDevices marked as "CorePointer" and "CoreKeyboard". - * 4. The first InputDevices that use the 'mouse' and 'keyboard' or 'kbd' - * drivers. + * 4. The first InputDevices that use 'keyboard' or 'kbd' and a valid mouse + * driver (mouse, synaptics, evdev, vmmouse, void) * 5. Default devices with an empty (default) configuration. These defaults * will reference the 'mouse' and 'keyboard' drivers. */ @@ -1110,6 +1110,8 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout) int count = 0; MessageType from = X_DEFAULT; int found = 0; + const char *mousedrivers[] = { "mouse", "synaptics", "evdev", "vmmouse", + "void", NULL }; /* * First check if a core pointer or core keyboard have been specified @@ -1219,13 +1221,15 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout) } } - /* 4. First pointer with 'mouse' as the driver. */ + /* 4. First pointer with an allowed mouse driver. */ if (!foundPointer && !xf86Info.allowEmptyInput) { + const char **driver = mousedrivers; confInput = xf86findInput(CONF_IMPLICIT_POINTER, xf86configptr->conf_input_lst); - if (!confInput) { - confInput = xf86findInputByDriver("mouse", + while (driver && !confInput) { + confInput = xf86findInputByDriver(*driver, xf86configptr->conf_input_lst); + driver++; } if (confInput) { foundPointer = TRUE; @@ -1280,10 +1284,13 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout) * section ... deal. */ for (devs = servlayoutp->inputs; devs && *devs; devs++) { - if (!strcmp((*devs)->driver, "void") || !strcmp((*devs)->driver, "mouse") || - !strcmp((*devs)->driver, "vmmouse") || !strcmp((*devs)->driver, "evdev") || - !strcmp((*devs)->driver, "synaptics")) { - found = 1; break; + const char **driver = mousedrivers; + while(*driver) { + if (!strcmp((*devs)->driver, *driver)) { + found = 1; + break; + } + driver++; } } if (!found && !xf86Info.allowEmptyInput) { From 7db55a0806c82bd4143c8bf1b8eb2b62e456ad9a Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 20 May 2009 14:38:25 +1000 Subject: [PATCH 71/89] dix: remove superfluous loop in change_modmap. A device can only be attached to a single master device. So instead of looping and searching for the master device, we can just use dev->u.master directly. Signed-off-by: Peter Hutterer --- dix/inpututils.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/dix/inpututils.c b/dix/inpututils.c index c6300880b..152214506 100644 --- a/dix/inpututils.c +++ b/dix/inpututils.c @@ -275,14 +275,10 @@ change_modmap(ClientPtr client, DeviceIntPtr dev, KeyCode *modkeymap, do_modmap_change(client, tmp, modmap); } } - else { - for (tmp = inputInfo.devices; tmp; tmp = tmp->next) { - if (tmp->isMaster && tmp->u.lastSlave == dev) { - /* If this fails, expect the results to be weird. */ - if (check_modmap_change(client, tmp, modmap)) - do_modmap_change(client, tmp, modmap); - } - } + else if (dev->u.master && dev->u.master->u.lastSlave == dev) { + /* If this fails, expect the results to be weird. */ + if (check_modmap_change(client, dev->u.master, modmap)) + do_modmap_change(client, dev->u.master, modmap); } return Success; From 525aa17f804d37d1cfcbbf6b8e6cddb45e999b20 Mon Sep 17 00:00:00 2001 From: Tomas Janousek Date: Wed, 20 May 2009 15:03:01 +0200 Subject: [PATCH 72/89] Bug #6428, #16458, #21464: Fix crash due to uninitialized VModMap fields. In ProcXkbGetKbdByName, mrep.firstVModMapKey, .nVModMapKeys and .totalVModMapKeys were not initialized, contained random values and caused accesses to unallocated and later modified memory, causing XkbSizeVirtualModMap and XkbWriteVirtualModMap to see different number of nonzero values, resulting in writes past the end of an array in XkbSendMap. This patch initializes those values sensibly and reverts commits 5c0a2088 and 6dd4fc46, which have been plain non-sense. Signed-off-by: Tomas Janousek Signed-off-by: Peter Hutterer --- xkb/xkb.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/xkb/xkb.c b/xkb/xkb.c index 445c55ffd..ec46238b8 100644 --- a/xkb/xkb.c +++ b/xkb/xkb.c @@ -1308,7 +1308,7 @@ XkbSizeVirtualModMap(XkbDescPtr xkb,xkbGetMapReply *rep) rep->totalVModMapKeys= 0; return 0; } - for (nRtrn=i=0;inVModMapKeys-1;i++) { + for (nRtrn=i=0;inVModMapKeys;i++) { if (xkb->server->vmodmap[i+rep->firstVModMapKey]!=0) nRtrn++; } @@ -1327,7 +1327,7 @@ unsigned short * pMap; wire= (xkbVModMapWireDesc *)buf; pMap= &xkb->server->vmodmap[rep->firstVModMapKey]; - for (i=0;inVModMapKeys-1;i++,pMap++) { + for (i=0;inVModMapKeys;i++,pMap++) { if (*pMap!=0) { wire->key= i+rep->firstVModMapKey; wire->vmods= *pMap; @@ -5670,7 +5670,7 @@ ProcXkbGetKbdByName(ClientPtr client) mrep.present = 0; mrep.totalSyms = mrep.totalActs = mrep.totalKeyBehaviors= mrep.totalKeyExplicit= - mrep.totalModMapKeys= 0; + mrep.totalModMapKeys= mrep.totalVModMapKeys= 0; if (rep.reported&(XkbGBN_TypesMask|XkbGBN_ClientSymbolsMask)) { mrep.present|= XkbKeyTypesMask; mrep.firstType = 0; @@ -5696,6 +5696,8 @@ ProcXkbGetKbdByName(ClientPtr client) mrep.firstKeyExplicit = new->min_key_code; mrep.nKeyActs = mrep.nKeyBehaviors = mrep.nKeyExplicit = XkbNumKeys(new); + mrep.firstVModMapKey= new->min_key_code; + mrep.nVModMapKeys= XkbNumKeys(new); } else { mrep.virtualMods= 0; From 99e22b86c5f1a3653f3caaf01368a777d2b208d0 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Fri, 22 May 2009 12:01:55 -0400 Subject: [PATCH 73/89] EDID: Add modes from Established Timings III descriptor to mode pool EDID 1.4, section 3.10.3.9 --- hw/xfree86/ddc/edid.h | 2 +- hw/xfree86/ddc/interpret_edid.c | 1 + hw/xfree86/modes/xf86EdidModes.c | 87 ++++++++++++++++++++++++++++++-- 3 files changed, 86 insertions(+), 4 deletions(-) diff --git a/hw/xfree86/ddc/edid.h b/hw/xfree86/ddc/edid.h index b55600329..42ee9d15e 100644 --- a/hw/xfree86/ddc/edid.h +++ b/hw/xfree86/ddc/edid.h @@ -533,7 +533,7 @@ struct detailed_monitor_section { struct whitePoints wp[2]; /* 32 */ /* color management data */ struct cvt_timings cvt[4]; /* 64 */ - /* established timings III */ + Uchar est_iii[6]; /* 6 */ } section; /* max: 80 */ }; diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c index bdcc92e64..12a52545e 100644 --- a/hw/xfree86/ddc/interpret_edid.c +++ b/hw/xfree86/ddc/interpret_edid.c @@ -330,6 +330,7 @@ get_dt_md_section(Uchar *c, struct edid_version *ver, break; case ADD_EST_TIMINGS: det_mon[i].type = DS_EST_III; + memcpy(det_mon[i].section.est_iii, c + 6, 6); break; case ADD_DUMMY: det_mon[i].type = DS_DUMMY; diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c index 4340edd1f..50b669c3e 100644 --- a/hw/xfree86/modes/xf86EdidModes.c +++ b/hw/xfree86/modes/xf86EdidModes.c @@ -641,6 +641,85 @@ DDCModesFromCVT(int scrnIndex, struct cvt_timings *t) } #endif +static const struct { + short w; + short h; + short r; + short rb; +} EstIIIModes[] = { + /* byte 6 */ + { 640, 350, 85, 0 }, + { 640, 400, 85, 0 }, + { 720, 400, 85, 0 }, + { 640, 480, 85, 0 }, + { 848, 480, 60, 0 }, + { 800, 600, 85, 0 }, + { 1024, 768, 85, 0 }, + { 1152, 864, 75, 0 }, + /* byte 7 */ + { 1280, 768, 60, 1 }, + { 1280, 768, 60, 0 }, + { 1280, 768, 75, 0 }, + { 1280, 768, 85, 0 }, + { 1280, 960, 60, 0 }, + { 1280, 960, 85, 0 }, + { 1280, 1024, 60, 0 }, + { 1280, 1024, 85, 0 }, + /* byte 8 */ + { 1360, 768, 60, 0 }, + { 1440, 900, 60, 1 }, + { 1440, 900, 60, 0 }, + { 1440, 900, 75, 0 }, + { 1440, 900, 85, 0 }, + { 1400, 1050, 60, 1 }, + { 1400, 1050, 60, 0 }, + { 1400, 1050, 75, 0 }, + /* byte 9 */ + { 1400, 1050, 85, 0 }, + { 1680, 1050, 60, 1 }, + { 1680, 1050, 60, 0 }, + { 1680, 1050, 75, 0 }, + { 1680, 1050, 85, 0 }, + { 1600, 1200, 60, 0 }, + { 1600, 1200, 65, 0 }, + { 1600, 1200, 70, 0 }, + /* byte 10 */ + { 1600, 1200, 75, 0 }, + { 1600, 1200, 85, 0 }, + { 1792, 1344, 60, 0 }, + { 1792, 1344, 85, 0 }, + { 1856, 1392, 60, 0 }, + { 1856, 1392, 75, 0 }, + { 1920, 1200, 60, 1 }, + { 1920, 1200, 60, 0 }, + /* byte 11 */ + { 1920, 1200, 75, 0 }, + { 1920, 1200, 85, 0 }, + { 1920, 1440, 60, 0 }, + { 1920, 1440, 75, 0 }, +}; + +static DisplayModePtr +DDCModesFromEstIII(unsigned char *est) +{ + DisplayModePtr modes = NULL; + int i, j, m; + + for (i = 0; i < 6; i++) { + for (j = 7; j > 0; j--) { + if (est[i] & (1 << j)) { + m = (i * 8) + (7 - j); + modes = xf86ModesAdd(modes, + FindDMTMode(EstIIIModes[m].w, + EstIIIModes[m].h, + EstIIIModes[m].r, + EstIIIModes[m].rb)); + } + } + } + + return modes; +} /* * This is only valid when the sink claims to be continuous-frequency @@ -811,6 +890,7 @@ xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC) for (i = 0; i < DET_TIMINGS; i++) { struct detailed_monitor_section *det_mon = &DDC->det_mon[i]; + Mode = NULL; switch (det_mon->type) { case DT: Mode = DDCModeFromDetailedTiming(scrnIndex, @@ -818,22 +898,23 @@ xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC) preferred, quirks); preferred = FALSE; - Modes = xf86ModesAdd(Modes, Mode); break; case DS_STD_TIMINGS: Mode = DDCModesFromStandardTiming(det_mon->section.std_t, quirks, timing_level, rb); - Modes = xf86ModesAdd(Modes, Mode); break; #if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(7,0,0,0,0) case DS_CVT: Mode = DDCModesFromCVT(scrnIndex, det_mon->section.cvt); - Modes = xf86ModesAdd(Modes, Mode); break; #endif + case DS_EST_III: + Mode = DDCModesFromEstIII(det_mon->section.est_iii); + break; default: break; } + Modes = xf86ModesAdd(Modes, Mode); } /* Add established timings */ From c70511931ca1441878daed50e710fa514f6ab077 Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Sun, 24 May 2009 10:32:38 +0200 Subject: [PATCH 74/89] fix typo in cabff9007 which led to an unintialized memory read and a crash. --- hw/xfree86/common/xf86Config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c index 165958b07..24049aaa0 100644 --- a/hw/xfree86/common/xf86Config.c +++ b/hw/xfree86/common/xf86Config.c @@ -1226,7 +1226,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout) const char **driver = mousedrivers; confInput = xf86findInput(CONF_IMPLICIT_POINTER, xf86configptr->conf_input_lst); - while (driver && !confInput) { + while (*driver && !confInput) { confInput = xf86findInputByDriver(*driver, xf86configptr->conf_input_lst); driver++; From 12e725d08b4cf7dbb7f09b9ec09fa1b621156ea9 Mon Sep 17 00:00:00 2001 From: Julien Cristau Date: Fri, 22 May 2009 09:54:38 +0200 Subject: [PATCH 75/89] randr: fix server crash in RRGetScreenInfo We don't return rates to randr < 1.1 clients, so don't allocate space for them. This fixes a FatalError due to not all allocated space being used. X.Org bug#21861 Reported-by: Guillaume Quintin Signed-off-by: Julien Cristau --- randr/rrscreen.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/randr/rrscreen.c b/randr/rrscreen.c index 94bf3ce99..46890bf74 100644 --- a/randr/rrscreen.c +++ b/randr/rrscreen.c @@ -664,8 +664,9 @@ ProcRRGetScreenInfo (ClientPtr client) rep.sizeID = pData->size; rep.rate = pData->refresh; - extraLen = (rep.nSizes * sizeof (xScreenSizes) + - rep.nrateEnts * sizeof (CARD16)); + extraLen = rep.nSizes * sizeof (xScreenSizes); + if (has_rate) + extraLen += rep.nrateEnts * sizeof (CARD16); if (extraLen) { From 6583477035234e23ead2fad9db7a07e5862447a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolai=20H=C3=A4hnle?= Date: Sat, 23 May 2009 13:35:24 +0200 Subject: [PATCH 76/89] Remove reference to non-existing requestLog and requestLogIndex These fields were removed in 252ec504817e05b185e4896a2d899e9c00b8aeef. Signed-off-by: Nicolai Haehnle Signed-off-by: Peter Hutterer --- dix/dispatch.c | 6 ------ include/dixstruct.h | 4 ---- 2 files changed, 10 deletions(-) diff --git a/dix/dispatch.c b/dix/dispatch.c index ce3294d32..dbb97e05f 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -413,12 +413,6 @@ Dispatch(void) } client->sequence++; -#ifdef DEBUG - if (client->requestLogIndex == MAX_REQUEST_LOG) - client->requestLogIndex = 0; - client->requestLog[client->requestLogIndex] = MAJOROP; - client->requestLogIndex++; -#endif #ifdef XSERVER_DTRACE XSERVER_REQUEST_START(LookupMajorName(MAJOROP), MAJOROP, ((xReq *)client->requestBuffer)->length, diff --git a/include/dixstruct.h b/include/dixstruct.h index 7335fad95..696b793ff 100644 --- a/include/dixstruct.h +++ b/include/dixstruct.h @@ -37,10 +37,6 @@ SOFTWARE. * translation from client ids to server addresses. */ -#ifdef DEBUG -#define MAX_REQUEST_LOG 100 -#endif - extern _X_EXPORT CallbackListPtr ClientStateCallback; typedef struct { From d053c3b35f730fdaddd22f841dbd8ed6c9a07ba0 Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Sun, 2 Nov 2008 20:46:40 +0000 Subject: [PATCH 77/89] Xming: Slightly adjust the formatting of the logged command line Copyright (C) Colin Harrison 2005-2008 http://www.straightrunning.com/XmingNotes/ http://sourceforge.net/projects/xming/ Signed-off-by: Jon TURNEY --- hw/xwin/winprocarg.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/xwin/winprocarg.c b/hw/xwin/winprocarg.c index 38ee9a2df..f20598db9 100755 --- a/hw/xwin/winprocarg.c +++ b/hw/xwin/winprocarg.c @@ -1448,13 +1448,13 @@ winLogCommandLine (int argc, char *argv[]) for (i = 0, iCurrLen = 0; i < argc; ++i) if (argv[i]) { - /* Add a character for lines that overflow */ + /* Adds two characters for lines that overflow */ if ((strlen (argv[i]) < CHARS_PER_LINE && iCurrLen + strlen (argv[i]) > CHARS_PER_LINE) || strlen (argv[i]) > CHARS_PER_LINE) { iCurrLen = 0; - ++iSize; + iSize += 2; } /* Add space for item and trailing space */ @@ -1484,7 +1484,7 @@ winLogCommandLine (int argc, char *argv[]) iCurrLen = 0; /* Add line break if it fits */ - strncat (g_pszCommandLine, "\n", iSize - strlen (g_pszCommandLine)); + strncat (g_pszCommandLine, "\n ", iSize - strlen (g_pszCommandLine)); } strncat (g_pszCommandLine, argv[i], iSize - strlen (g_pszCommandLine)); From a72865868f03b675f86990476fcee601822894b3 Mon Sep 17 00:00:00 2001 From: Joe Krahn Date: Tue, 20 Jan 2009 17:09:43 +0000 Subject: [PATCH 78/89] Cygwin/X: Consolidate dialog initialization in winInitDialog() Changed windialogs.c to set icons via window properties rather than class properties, and use LoadImage() for small icons, because LoadIcon() can only open large icons. Since this code is redundant across the dialogs, I put it in the winCenterDialog function, along with a few other redundant instructions, and renamed in winInitDialog(). Also, don't bogusly put our dialogs at the center of the virtual desktop if we are on a multimonitor system (this causes the dialog to end up split across two monitors in a dual-monitor side-by-side setup) Corrections to use HWND_TOPMOST instead of HWND_TOP and not to use SWP_NOZORDER from Colin Harrison fd.o bugzilla #4491 Signed-off-by: Jon TURNEY --- hw/xwin/windialogs.c | 116 +++++++++++++++++++------------------------ 1 file changed, 50 insertions(+), 66 deletions(-) diff --git a/hw/xwin/windialogs.c b/hw/xwin/windialogs.c index ab06b0d00..274c04618 100755 --- a/hw/xwin/windialogs.c +++ b/hw/xwin/windialogs.c @@ -181,32 +181,64 @@ winUnoverrideURLButton (HWND hwnd, int id) /* * Center a dialog window in the desktop window + * and set small and large icons to X icons. */ static void -winCenterDialog (HWND hwndDlg) +winInitDialog (HWND hwndDlg) { HWND hwndDesk; - RECT rc, rcDlg, rcDesk; + RECT rc, rcDlg, rcDesk; + HICON hIcon, hIconSmall; hwndDesk = GetParent (hwndDlg); if (!hwndDesk || IsIconic (hwndDesk)) hwndDesk = GetDesktopWindow (); - GetWindowRect (hwndDesk, &rcDesk); - GetWindowRect (hwndDlg, &rcDlg); - CopyRect (&rc, &rcDesk); - - OffsetRect (&rcDlg, -rcDlg.left, -rcDlg.top); - OffsetRect (&rc, -rc.left, -rc.top); - OffsetRect (&rc, -rcDlg.right, -rcDlg.bottom); - - SetWindowPos (hwndDlg, - HWND_TOP, - rcDesk.left + (rc.right / 2), - rcDesk.top + (rc.bottom / 2), + /* Remove minimize and maximize buttons */ + SetWindowLong (hwndDlg, GWL_STYLE, + GetWindowLong (hwndDlg, GWL_STYLE) + & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX)); + + /* Set Window not to show in the task bar */ + SetWindowLong (hwndDlg, GWL_EXSTYLE, + GetWindowLong (hwndDlg, GWL_EXSTYLE) & ~WS_EX_APPWINDOW ); + + /* Center dialog window in the screen. Not done for multi-monitor systems, where + * it is likely to end up split across the screens. In that case, it appears + * near the Tray icon. + */ + if (GetSystemMetrics(SM_CMONITORS)>1) { + /* Still need to refresh the frame change. */ + SetWindowPos (hwndDlg, HWND_TOPMOST, 0,0,0,0, + SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED); + } else { + GetWindowRect (hwndDesk, &rcDesk); + GetWindowRect (hwndDlg, &rcDlg); + CopyRect (&rc, &rcDesk); + + OffsetRect (&rcDlg, -rcDlg.left, -rcDlg.top); + OffsetRect (&rc, -rc.left, -rc.top); + OffsetRect (&rc, -rcDlg.right, -rcDlg.bottom); + + SetWindowPos (hwndDlg, + HWND_TOPMOST, + rcDesk.left + (rc.right / 2), + rcDesk.top + (rc.bottom / 2), 0, 0, - SWP_NOSIZE | SWP_NOZORDER); + SWP_NOSIZE | SWP_FRAMECHANGED); + } + + /* Set icon to standard app icon */ + hIcon = LoadIcon (g_hInstance, MAKEINTRESOURCE(IDI_XWIN)); + hIconSmall = LoadImage (g_hInstance, + MAKEINTRESOURCE(IDI_XWIN), IMAGE_ICON, + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + LR_SHARED); + + PostMessage (hwndDlg, WM_SETICON, ICON_BIG, (LPARAM) hIcon); + PostMessage (hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM) hIconSmall); } @@ -271,15 +303,6 @@ winDisplayExitDialog (winPrivScreenPtr pScreenPriv) winExitDlgProc, (int) pScreenPriv); - /* Drop minimize and maximize buttons */ - SetWindowLong (g_hDlgExit, GWL_STYLE, - GetWindowLong (g_hDlgExit, GWL_STYLE) - & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX)); - SetWindowLong (g_hDlgExit, GWL_EXSTYLE, - GetWindowLong (g_hDlgExit, GWL_EXSTYLE) & ~WS_EX_APPWINDOW ); - SetWindowPos (g_hDlgExit, HWND_TOPMOST, 0, 0, 0, 0, - SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE); - /* Show the dialog box */ ShowWindow (g_hDlgExit, SW_SHOW); @@ -314,14 +337,7 @@ winExitDlgProc (HWND hDialog, UINT message, /* Store pointers to private structures for future use */ s_pScreenPriv = (winPrivScreenPtr) lParam; - winCenterDialog (hDialog); - - /* Set icon to standard app icon */ - PostMessage (hDialog, - WM_SETICON, - ICON_SMALL, - (LPARAM) LoadIcon (g_hInstance, - MAKEINTRESOURCE(IDI_XWIN))); + winInitDialog (hDialog); /* Format the connected clients string */ pszConnectedClients = Xprintf (CONNECTED_CLIENTS_FORMAT, @@ -413,17 +429,6 @@ winDisplayDepthChangeDialog (winPrivScreenPtr pScreenPriv) pScreenPriv->hwndScreen, winChangeDepthDlgProc, (int) pScreenPriv); - - /* Drop minimize and maximize buttons */ - SetWindowLong (g_hDlgDepthChange, GWL_STYLE, - GetWindowLong (g_hDlgDepthChange, GWL_STYLE) - & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX)); - SetWindowLong (g_hDlgDepthChange, GWL_EXSTYLE, - GetWindowLong (g_hDlgDepthChange, GWL_EXSTYLE) - & ~WS_EX_APPWINDOW ); - SetWindowPos (g_hDlgDepthChange, 0, 0, 0, 0, 0, - SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOZORDER | SWP_NOSIZE); - /* Show the dialog box */ ShowWindow (g_hDlgDepthChange, SW_SHOW); @@ -480,13 +485,7 @@ winChangeDepthDlgProc (HWND hwndDialog, UINT message, s_pScreenPriv->dwLastWindowsBitsPixel); #endif - winCenterDialog( hwndDialog ); - - /* Set icon to standard app icon */ - PostMessage (hwndDialog, - WM_SETICON, - ICON_SMALL, - (LPARAM) LoadIcon (g_hInstance, MAKEINTRESOURCE(IDI_XWIN))); + winInitDialog( hwndDialog ); return TRUE; @@ -572,15 +571,6 @@ winDisplayAboutDialog (winPrivScreenPtr pScreenPriv) winAboutDlgProc, (int) pScreenPriv); - /* Drop minimize and maximize buttons */ - SetWindowLong (g_hDlgAbout, GWL_STYLE, - GetWindowLong (g_hDlgAbout, GWL_STYLE) - & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX)); - SetWindowLong (g_hDlgAbout, GWL_EXSTYLE, - GetWindowLong (g_hDlgAbout, GWL_EXSTYLE) & ~WS_EX_APPWINDOW); - SetWindowPos (g_hDlgAbout, 0, 0, 0, 0, 0, - SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE); - /* Show the dialog box */ ShowWindow (g_hDlgAbout, SW_SHOW); @@ -622,13 +612,7 @@ winAboutDlgProc (HWND hwndDialog, UINT message, s_pScreenInfo = s_pScreenPriv->pScreenInfo; s_pScreen = s_pScreenInfo->pScreen; - winCenterDialog (hwndDialog); - - /* Set icon to standard app icon */ - PostMessage (hwndDialog, - WM_SETICON, - ICON_SMALL, - (LPARAM) LoadIcon (g_hInstance, MAKEINTRESOURCE(IDI_XWIN))); + winInitDialog (hwndDialog); /* Override the URL buttons */ winOverrideURLButton (hwndDialog, ID_ABOUT_CHANGELOG); From 888e6961a4ee76d05d212cfb946f089caafb3f69 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Wed, 7 Jan 2009 18:29:16 +0000 Subject: [PATCH 79/89] Cygwin/X: Correctly allow for the native window frame width in ValidateSizing() Fix internal WM to correctly calculate the native window border when validating window sizing Signed-off-by: Jon TURNEY --- hw/xwin/winmultiwindowwndproc.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/hw/xwin/winmultiwindowwndproc.c b/hw/xwin/winmultiwindowwndproc.c index b5e789c2c..0dd88851f 100644 --- a/hw/xwin/winmultiwindowwndproc.c +++ b/hw/xwin/winmultiwindowwndproc.c @@ -207,6 +207,8 @@ ValidateSizing (HWND hwnd, WindowPtr pWin, WinXSizeHints sizeHints; RECT *rect; int iWidth, iHeight; + RECT rcClient, rcWindow; + int iBorderWidthX, iBorderWidthY; /* Invalid input checking */ if (pWin==NULL || lParam==0) @@ -228,19 +230,20 @@ ValidateSizing (HWND hwnd, WindowPtr pWin, iWidth = rect->right - rect->left; iHeight = rect->bottom - rect->top; - /* Now remove size of any borders */ - iWidth -= 2 * GetSystemMetrics(SM_CXSIZEFRAME); - iHeight -= (GetSystemMetrics(SM_CYCAPTION) - + 2 * GetSystemMetrics(SM_CYSIZEFRAME)); - + /* Now remove size of any borders and title bar */ + GetClientRect(hwnd, &rcClient); + GetWindowRect(hwnd, &rcWindow); + iBorderWidthX = (rcWindow.right - rcWindow.left) - (rcClient.right - rcClient.left); + iBorderWidthY = (rcWindow.bottom - rcWindow.top) - (rcClient.bottom - rcClient.top); + iWidth -= iBorderWidthX; + iHeight -= iBorderWidthY; /* Constrain the size to legal values */ ConstrainSize (sizeHints, &iWidth, &iHeight); - /* Add back the borders */ - iWidth += 2 * GetSystemMetrics(SM_CXSIZEFRAME); - iHeight += (GetSystemMetrics(SM_CYCAPTION) - + 2 * GetSystemMetrics(SM_CYSIZEFRAME)); + /* Add back the size of borders and title bar */ + iWidth += iBorderWidthX; + iHeight += iBorderWidthY; /* Adjust size according to where we're dragging from */ switch(wParam) { From 4ec110327bdc4f2617cd6116539812d7ef96b24e Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Sun, 4 Jan 2009 18:29:49 +0000 Subject: [PATCH 80/89] Xming: Prevent the mouse wheel from stalling when another window is minimized. Fix internal WM to prevent the mouse wheel from stalling when another window is minimized. Signed-off-by: Jon TURNEY --- hw/xwin/winmultiwindowwndproc.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/xwin/winmultiwindowwndproc.c b/hw/xwin/winmultiwindowwndproc.c index 0dd88851f..becae2949 100644 --- a/hw/xwin/winmultiwindowwndproc.c +++ b/hw/xwin/winmultiwindowwndproc.c @@ -786,6 +786,10 @@ winTopLevelWindowProc (HWND hwnd, UINT message, if (!pWin || !pWin->overrideRedirect) /* for OOo menus */ winSendMessageToWM (s_pScreenPriv->pWMInfo, &wmMsg); } + /* Prevent the mouse wheel from stalling when another window is minimized */ + if (HIWORD(wParam) == 0 && LOWORD(wParam) == WA_ACTIVE && + (HWND)lParam != NULL && (HWND)lParam != (HWND)GetParent(hwnd)) + SetFocus(hwnd); return 0; case WM_ACTIVATEAPP: From 71ba9856a4f01aa7a42f1178c8da98a2e5ac23ae Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Tue, 3 Feb 2009 15:52:11 +0000 Subject: [PATCH 81/89] Xming: Cache atom lookups in clipboard integration code Cache the CLIPBOARD atom lookups in winClipboardWindowProc() Cache atom lookups in winClipboardFlushXEvents() Recache on server regeneration Copyright (C) Colin Harrison 2005-2008 http://www.straightrunning.com/XmingNotes/ http://sourceforge.net/projects/xming/ Signed-off-by: Jon TURNEY --- hw/xwin/winclipboardwndproc.c | 26 +++++++++++++------------- hw/xwin/winclipboardxevents.c | 27 +++++++++++++++------------ 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/hw/xwin/winclipboardwndproc.c b/hw/xwin/winclipboardwndproc.c index 04c0c586a..65faedf65 100644 --- a/hw/xwin/winclipboardwndproc.c +++ b/hw/xwin/winclipboardwndproc.c @@ -36,6 +36,7 @@ #include #include #include "winclipboard.h" +#include "misc.h" extern void winFixClipboardChain(); @@ -261,6 +262,8 @@ winClipboardWindowProc (HWND hwnd, UINT message, case WM_DRAWCLIPBOARD: { + static Atom atomClipboard; + static int generation; static Bool s_fProcessingDrawClipboard = FALSE; Display *pDisplay = g_pClipboardDisplay; Window iWindow = g_iClipboardWindow; @@ -268,6 +271,12 @@ winClipboardWindowProc (HWND hwnd, UINT message, winDebug ("winClipboardWindowProc - WM_DRAWCLIPBOARD: Enter\n"); + if (generation != serverGeneration) + { + generation = serverGeneration; + atomClipboard = XInternAtom (pDisplay, "CLIPBOARD", False); + } + /* * We've occasionally seen a loop in the clipboard chain. * Try and fix it on the first hint of recursion. @@ -355,17 +364,13 @@ winClipboardWindowProc (HWND hwnd, UINT message, /* Release CLIPBOARD selection if owned */ iReturn = XGetSelectionOwner (pDisplay, - XInternAtom (pDisplay, - "CLIPBOARD", - False)); + atomClipboard); if (iReturn == g_iClipboardWindow) { winDebug ("winClipboardWindowProc - WM_DRAWCLIPBOARD - " "CLIPBOARD selection is owned by us.\n"); XSetSelectionOwner (pDisplay, - XInternAtom (pDisplay, - "CLIPBOARD", - False), + atomClipboard, None, CurrentTime); } @@ -399,17 +404,12 @@ winClipboardWindowProc (HWND hwnd, UINT message, /* Reassert ownership of the CLIPBOARD */ iReturn = XSetSelectionOwner (pDisplay, - XInternAtom (pDisplay, - "CLIPBOARD", - False), + atomClipboard, iWindow, CurrentTime); if (iReturn == BadAtom || iReturn == BadWindow || - XGetSelectionOwner (pDisplay, - XInternAtom (pDisplay, - "CLIPBOARD", - False)) != iWindow) + XGetSelectionOwner (pDisplay, atomClipboard) != iWindow) { winErrorFVerb (1, "winClipboardWindowProc - WM_DRAWCLIPBOARD - " "Could not reassert ownership of CLIPBOARD\n"); diff --git a/hw/xwin/winclipboardxevents.c b/hw/xwin/winclipboardxevents.c index 95e86b1dc..ab8d5e42f 100644 --- a/hw/xwin/winclipboardxevents.c +++ b/hw/xwin/winclipboardxevents.c @@ -34,6 +34,7 @@ #include #endif #include "winclipboard.h" +#include "misc.h" /* @@ -53,18 +54,20 @@ winClipboardFlushXEvents (HWND hwnd, Display *pDisplay, Bool fUseUnicode) { - Atom atomLocalProperty = XInternAtom (pDisplay, - WIN_LOCAL_PROPERTY, - False); - Atom atomUTF8String = XInternAtom (pDisplay, - "UTF8_STRING", - False); - Atom atomCompoundText = XInternAtom (pDisplay, - "COMPOUND_TEXT", - False); - Atom atomTargets = XInternAtom (pDisplay, - "TARGETS", - False); + static Atom atomLocalProperty; + static Atom atomCompoundText; + static Atom atomUTF8String; + static Atom atomTargets; + static int generation; + + if (generation != serverGeneration) + { + generation = serverGeneration; + atomLocalProperty = XInternAtom (pDisplay, WIN_LOCAL_PROPERTY, False); + atomUTF8String = XInternAtom (pDisplay, "UTF8_STRING", False); + atomCompoundText = XInternAtom (pDisplay, "COMPOUND_TEXT", False); + atomTargets = XInternAtom (pDisplay, "TARGETS", False); + } /* Process all pending events */ while (XPending (pDisplay)) From fbe9ed27b1c2f932a74aa6ced134ecec021a3fc1 Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Thu, 29 Jan 2009 10:55:38 +0000 Subject: [PATCH 82/89] Xming: Avoid log spam if a windows application won't provide CF_UNICODETEXT clipboard format Signed-off-by: Jon TURNEY --- hw/xwin/winclipboardxevents.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/hw/xwin/winclipboardxevents.c b/hw/xwin/winclipboardxevents.c index ab8d5e42f..0a64ba6db 100644 --- a/hw/xwin/winclipboardxevents.c +++ b/hw/xwin/winclipboardxevents.c @@ -191,8 +191,13 @@ winClipboardFlushXEvents (HWND hwnd, if (fUseUnicode && !IsClipboardFormatAvailable (CF_UNICODETEXT)) { - ErrorF ("winClipboardFlushXEvents - CF_UNICODETEXT is not " - "available from Win32 clipboard. Aborting.\n"); + static int count; /* Hack to stop acroread spamming the log */ + static HWND lasthwnd; /* I've not seen any other client get here repeatedly? */ + if (hwnd != lasthwnd) count = 0; + count++; + if (count < 6) ErrorF ("winClipboardFlushXEvents - CF_UNICODETEXT is not " + "available from Win32 clipboard. Aborting %d.\n", count); + lasthwnd = hwnd; /* Abort */ fAbort = TRUE; From d190a27a33ab8c198568baf184fad14df57e24ad Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Thu, 29 Jan 2009 11:00:49 +0000 Subject: [PATCH 83/89] Xming: Various tidy ups in winClipboardFlushXEvents() Signed-off-by: Jon TURNEY --- hw/xwin/winclipboardxevents.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/hw/xwin/winclipboardxevents.c b/hw/xwin/winclipboardxevents.c index 0a64ba6db..ec40814db 100644 --- a/hw/xwin/winclipboardxevents.c +++ b/hw/xwin/winclipboardxevents.c @@ -311,6 +311,7 @@ winClipboardFlushXEvents (HWND hwnd, /* Initialize the text property */ xtpText.value = NULL; + xtpText.nitems = 0; /* Create the text property from the text list */ if (fUseUnicode) @@ -371,10 +372,13 @@ winClipboardFlushXEvents (HWND hwnd, /* Release the clipboard data */ GlobalUnlock (hGlobal); pszGlobalData = NULL; + fCloseClipboard = FALSE; + CloseClipboard (); /* Clean up */ XFree (xtpText.value); xtpText.value = NULL; + xtpText.nitems = 0; /* Setup selection notify event */ eventSelection.type = SelectionNotify; @@ -405,7 +409,11 @@ winClipboardFlushXEvents (HWND hwnd, winClipboardFlushXEvents_SelectionRequest_Done: /* Free allocated resources */ if (xtpText.value) + { XFree (xtpText.value); + xtpText.value = NULL; + xtpText.nitems = 0; + } if (pszConvertData) free (pszConvertData); if (hGlobal && pszGlobalData) @@ -446,7 +454,10 @@ winClipboardFlushXEvents (HWND hwnd, /* Close clipboard if it was opened */ if (fCloseClipboard) + { + fCloseClipboard = FALSE; CloseClipboard (); + } break; @@ -628,6 +639,7 @@ winClipboardFlushXEvents (HWND hwnd, /* Conversion succeeded or some unconvertible characters */ if (ppszTextList != NULL) { + iReturnDataLen = 0; for (i = 0; i < iCount; i++) { iReturnDataLen += strlen(ppszTextList[i]); @@ -673,6 +685,7 @@ winClipboardFlushXEvents (HWND hwnd, ppszTextList = NULL; XFree (xtpText.value); xtpText.value = NULL; + xtpText.nitems = 0; /* Convert the X clipboard string to DOS format */ winClipboardUNIXtoDOS (&pszReturnData, strlen (pszReturnData)); @@ -786,7 +799,11 @@ winClipboardFlushXEvents (HWND hwnd, if (ppszTextList) XFreeStringList (ppszTextList); if (xtpText.value) + { XFree (xtpText.value); + xtpText.value = NULL; + xtpText.nitems = 0; + } if (pszConvertData) free (pszConvertData); if (pwszUnicodeStr) From 966c8fccf16e77c8f459b4b175718323f2ec5d58 Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Mon, 5 Jan 2009 18:04:42 +0000 Subject: [PATCH 84/89] Xming: Fix some log spam Signed-off-by: Jon TURNEY --- hw/xwin/winmultiwindowwm.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/xwin/winmultiwindowwm.c b/hw/xwin/winmultiwindowwm.c index ea9dfca36..194dbf64c 100644 --- a/hw/xwin/winmultiwindowwm.c +++ b/hw/xwin/winmultiwindowwm.c @@ -1359,7 +1359,9 @@ winMultiWindowXMsgProcErrorHandler (Display *pDisplay, XErrorEvent *pErr) pErr->error_code, pszErrorMsg, sizeof (pszErrorMsg)); +#if CYGMULTIWINDOW_DEBUG ErrorF ("winMultiWindowXMsgProcErrorHandler - ERROR: %s\n", pszErrorMsg); +#endif return 0; } From 9955252564922e7e8702dfb6eab52c75605a4a22 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Mon, 5 Jan 2009 17:55:58 +0000 Subject: [PATCH 85/89] Cygwin/X: Remove unused TimeSinceLastInputEvent() Signed-off-by: Jon TURNEY --- hw/xwin/InitInput.c | 10 ---------- hw/xwin/win.h | 1 - hw/xwin/winmouse.c | 1 - 3 files changed, 12 deletions(-) diff --git a/hw/xwin/InitInput.c b/hw/xwin/InitInput.c index 76c1715cf..2eaa024a8 100644 --- a/hw/xwin/InitInput.c +++ b/hw/xwin/InitInput.c @@ -48,7 +48,6 @@ DISPATCH_PROC(winProcSetSelectionOwner); * Local global declarations */ -CARD32 g_c32LastInputEventTime = 0; DeviceIntPtr g_pwinPointer; DeviceIntPtr g_pwinKeyboard; @@ -110,15 +109,6 @@ void DDXRingBell(int volume, int pitch, int duration) } -int -TimeSinceLastInputEvent () -{ - if (g_c32LastInputEventTime == 0) - g_c32LastInputEventTime = GetTickCount (); - return GetTickCount () - g_c32LastInputEventTime; -} - - /* See Porting Layer Definition - p. 17 */ void InitInput (int argc, char *argv[]) diff --git a/hw/xwin/win.h b/hw/xwin/win.h index 8005d5b33..9009df29b 100644 --- a/hw/xwin/win.h +++ b/hw/xwin/win.h @@ -636,7 +636,6 @@ extern DevPrivateKey g_iGCPrivateKey; extern DevPrivateKey g_iPixmapPrivateKey; extern DevPrivateKey g_iWindowPrivateKey; extern unsigned long g_ulServerGeneration; -extern CARD32 g_c32LastInputEventTime; extern DWORD g_dwEnginesSupported; extern HINSTANCE g_hInstance; extern int g_copyROP[]; diff --git a/hw/xwin/winmouse.c b/hw/xwin/winmouse.c index 188126b3a..9cfc945f8 100644 --- a/hw/xwin/winmouse.c +++ b/hw/xwin/winmouse.c @@ -354,7 +354,6 @@ winMouseButtonsHandle (ScreenPtr pScreen, void winEnqueueMotion(int x, int y) { miPointerSetPosition(g_pwinPointer, &x, &y); - g_c32LastInputEventTime = GetTickCount(); int i, nevents; int valuators[2]; From 996357e905c1082479bb238110b93bc170b8cb84 Mon Sep 17 00:00:00 2001 From: Joe Krahn Date: Tue, 20 Jan 2009 17:22:37 +0000 Subject: [PATCH 86/89] Cygwin/X: Update icons directly, rather than modifying the window's class Update icons directly to windows rather than modifying the window's class. Respect custom icons overriden via the configuration file. fd.o bugzilla #4491 Signed-off-by: Jon TURNEY --- hw/xwin/winmultiwindowicons.c | 58 ++++++++++++++------------------ hw/xwin/winprefs.c | 35 +++++++++---------- hw/xwin/winwin32rootlesswindow.c | 8 ++--- 3 files changed, 46 insertions(+), 55 deletions(-) diff --git a/hw/xwin/winmultiwindowicons.c b/hw/xwin/winmultiwindowicons.c index 88416bb70..8200aad88 100644 --- a/hw/xwin/winmultiwindowicons.c +++ b/hw/xwin/winmultiwindowicons.c @@ -364,43 +364,37 @@ void winUpdateIcon (Window id) { WindowPtr pWin; - HICON hIcon, hiconOld; + HICON hIcon, hIconSmall=NULL, hIconOld; pWin = (WindowPtr) LookupIDByType (id, RT_WINDOW); if (!pWin) return; - hIcon = winOverrideIcon ((unsigned long)pWin); - - if (!hIcon) - hIcon = winXIconToHICON (pWin, GetSystemMetrics(SM_CXICON)); - - if (hIcon) - { - winWindowPriv(pWin); - - if (pWinPriv->hWnd) - { - hiconOld = (HICON) SetClassLong (pWinPriv->hWnd, - GCL_HICON, - (int) hIcon); - - /* Delete the icon if its not the default */ - winDestroyIcon(hiconOld); - } + winWindowPriv(pWin); + if (pWinPriv->hWnd) { + hIcon = winOverrideIcon ((unsigned long)pWin); + if (!hIcon) { + hIcon = winXIconToHICON (pWin, GetSystemMetrics(SM_CXICON)); + if (!hIcon) { + hIcon = g_hIconX; + hIconSmall = g_hSmallIconX; + } else { + /* Leave undefined if not found */ + hIconSmall = winXIconToHICON (pWin, GetSystemMetrics(SM_CXSMICON)); + } } - - hIcon = winXIconToHICON (pWin, GetSystemMetrics(SM_CXSMICON)); - if (hIcon) - { - winWindowPriv(pWin); - if (pWinPriv->hWnd) - { - hiconOld = (HICON) SetClassLong (pWinPriv->hWnd, - GCL_HICONSM, - (int) hIcon); - winDestroyIcon (hiconOld); - } - } + /* Set the large icon */ + hIconOld = (HICON) SendMessage (pWinPriv->hWnd, + WM_SETICON, ICON_BIG, (LPARAM) hIcon); + + /* Delete the icon if its not the default */ + winDestroyIcon(hIconOld); + + /* Same for the small icon */ + hIconOld = (HICON) SendMessage (pWinPriv->hWnd, + WM_SETICON, ICON_SMALL, (LPARAM) hIconSmall); + winDestroyIcon(hIconOld); + + } } void winInitGlobalIcons (void) diff --git a/hw/xwin/winprefs.c b/hw/xwin/winprefs.c index 8152064cb..fe49ae224 100644 --- a/hw/xwin/winprefs.c +++ b/hw/xwin/winprefs.c @@ -189,35 +189,28 @@ ReloadEnumWindowsProc (HWND hwnd, LPARAM lParam) /* It's our baby, either clean or dirty it */ if (lParam==FALSE) { - hicon = (HICON)GetClassLong(hwnd, GCL_HICON); + /* Reset the window's icon to undefined. */ + hicon = (HICON)SendMessage(hwnd, WM_SETICON, ICON_BIG, 0); - /* Unselect any icon in the class structure */ - SetClassLong (hwnd, GCL_HICON, (LONG)LoadIcon (NULL, IDI_APPLICATION)); - - /* If it's generated on-the-fly, get rid of it, will regen */ + /* If the old icon is generated on-the-fly, get rid of it, will regen */ winDestroyIcon (hicon); - - hicon = (HICON)GetClassLong(hwnd, GCL_HICONSM); - /* Unselect any icon in the class structure */ - SetClassLong (hwnd, GCL_HICONSM, 0); - - /* If it's generated on-the-fly, get rid of it, will regen */ + /* Same for the small icon */ + hicon = (HICON)SendMessage(hwnd, WM_SETICON, ICON_SMALL, 0); winDestroyIcon (hicon); - - /* Remove any menu additions, use bRevert flag */ + + /* Remove any menu additions; bRevert=TRUE destroys any modified menus */ GetSystemMenu (hwnd, TRUE); - /* This window is now clean of our taint */ + /* This window is now clean of our taint (but with undefined icons) */ } else { - /* Make the icon default, dynamic, or from xwinrc */ - SetClassLong (hwnd, GCL_HICON, (LONG)g_hIconX); - SetClassLong (hwnd, GCL_HICONSM, (LONG)g_hSmallIconX); + /* winUpdateIcon() will set the icon default, dynamic, or from xwinrc */ wid = (Window)GetProp (hwnd, WIN_WID_PROP); if (wid) winUpdateIcon (wid); + /* Update the system menu for this window */ SetupSysMenu ((unsigned long)hwnd); @@ -241,8 +234,12 @@ ReloadPrefs (void) int i; #ifdef XWIN_MULTIWINDOW - /* First, iterate over all windows replacing their icon with system */ - /* default one and deleting any custom system menus */ + /* First, iterate over all windows, deleting their icons and custom menus. + * This is really only needed because winDestroyIcon() will try to + * destroy the old global icons, which will have changed. + * It is probably better to set a windows USER_DATA to flag locally defined + * icons, and use that to accurately know when to destroy old icons. + */ EnumThreadWindows (g_dwCurrentThreadID, ReloadEnumWindowsProc, FALSE); #endif diff --git a/hw/xwin/winwin32rootlesswindow.c b/hw/xwin/winwin32rootlesswindow.c index 3f521d600..2b2f63010 100755 --- a/hw/xwin/winwin32rootlesswindow.c +++ b/hw/xwin/winwin32rootlesswindow.c @@ -177,12 +177,12 @@ winMWExtWMUpdateIcon (Window id) if (pRLWinPriv->hWnd) { - hiconOld = (HICON) SetClassLong (pRLWinPriv->hWnd, - GCL_HICON, - (int) hIcon); - + + hiconOld = (HICON) SendMessage (pRLWinPriv->hWnd, + WM_SETICON, ICON_BIG, (LPARAM) hIcon); winDestroyIcon(hiconOld); } + hIcon=NULL; } } From f1441b83538e6ba8a1557c4f5ea50c53a1837087 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Wed, 27 May 2009 10:06:10 -0700 Subject: [PATCH 87/89] XQuartz: More localization updates (cherry picked from commit b107390c9f30571902556b4d053e62d345a06254) --- .../Resources/Dutch.lproj/locversion.plist | 2 +- .../Dutch.lproj/main.nib/designable.nib | 127 +- .../Dutch.lproj/main.nib/keyedobjects.nib | Bin 46175 -> 46115 bytes .../Resources/French.lproj/locversion.plist | 2 +- .../Resources/German.lproj/locversion.plist | 2 +- .../German.lproj/main.nib/designable.nib | 317 +-- .../German.lproj/main.nib/keyedobjects.nib | Bin 50746 -> 53122 bytes .../Resources/Italian.lproj/locversion.plist | 2 +- .../Resources/Japanese.lproj/locversion.plist | 2 +- .../Resources/Spanish.lproj/locversion.plist | 2 +- .../Spanish.lproj/main.nib/designable.nib | 221 +- .../Spanish.lproj/main.nib/keyedobjects.nib | Bin 53308 -> 53745 bytes .../Resources/da.lproj/locversion.plist | 2 +- .../da.lproj/main.nib/designable.nib | 2 +- .../da.lproj/main.nib/keyedobjects.nib | Bin 49367 -> 49339 bytes .../Resources/fi.lproj/locversion.plist | 2 +- .../fi.lproj/main.nib/designable.nib | 494 +++-- .../fi.lproj/main.nib/keyedobjects.nib | Bin 50882 -> 53312 bytes .../Resources/ko.lproj/locversion.plist | 2 +- .../ko.lproj/main.nib/designable.nib | 34 +- .../ko.lproj/main.nib/keyedobjects.nib | Bin 46775 -> 46678 bytes .../Resources/no.lproj/locversion.plist | 2 +- .../Resources/pl.lproj/locversion.plist | 2 +- .../pl.lproj/main.nib/designable.nib | 435 ++-- .../pl.lproj/main.nib/keyedobjects.nib | Bin 49985 -> 52417 bytes .../Resources/pt.lproj/locversion.plist | 2 +- .../pt.lproj/main.nib/designable.nib | 44 +- .../pt.lproj/main.nib/keyedobjects.nib | Bin 50446 -> 50446 bytes .../Resources/pt_PT.lproj/locversion.plist | 2 +- .../pt_PT.lproj/main.nib/designable.nib | 1968 +++++------------ .../pt_PT.lproj/main.nib/keyedobjects.nib | Bin 51308 -> 51384 bytes .../Resources/ru.lproj/locversion.plist | 2 +- .../Resources/sv.lproj/locversion.plist | 2 +- .../sv.lproj/main.nib/designable.nib | 602 +++-- .../sv.lproj/main.nib/keyedobjects.nib | Bin 50165 -> 52576 bytes .../Resources/zh_CN.lproj/locversion.plist | 2 +- .../Resources/zh_TW.lproj/locversion.plist | 2 +- .../zh_TW.lproj/main.nib/designable.nib | 20 +- .../zh_TW.lproj/main.nib/keyedobjects.nib | Bin 41976 -> 42003 bytes 39 files changed, 1731 insertions(+), 2567 deletions(-) diff --git a/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist index 51e3827a3..151315080 100644 --- a/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib index 05eca0db4..ab78847d0 100644 --- a/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib @@ -1,18 +1,17 @@ - + 1050 - 10A222 - 708 - 994.5 - 404.00 + 10A314 + 718 + 1013 + 415.00 com.apple.InterfaceBuilder.CocoaPlugin - 708 + 718 YES - YES @@ -20,7 +19,7 @@ YES - + YES @@ -194,7 +193,7 @@ - UHJvZ3JhbW1hJ3M + Programma's 1048576 2147483647 @@ -202,7 +201,7 @@ submenuAction: - UHJvZ3JhbW1hJ3M + Programma's YES @@ -398,10 +397,10 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} - + 256 YES @@ -461,9 +460,7 @@ 67239424 4194304 - QWxzIHUgZGV6ZSBvcHRpZSBpbnNjaGFrZWx0LCBrYW4gaGV0IGdlYnJ1aWsgdmFuIHRvZXRzY29tYmlu -YXRpZXMgdm9vciBtZW51Y29tbWFkbydzIGNvbmZsaWN0ZXJlbiBtZXQgWDExLXByb2dyYW1tYSdzIGRp -ZSBkZSBNZXRhLW1vZGlmaWVyIGdlYnJ1aWtlbi4 + Als u deze optie inschakelt, kan het gebruik van toetscombinaties voor menucommado's conflicteren met X11-programma's die de Meta-modifier gebruiken. LucidaGrande 11 @@ -475,9 +472,9 @@ ZSBkZSBNZXRhLW1vZGlmaWVyIGdlYnJ1aWtlbi4 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NjY3AA @@ -619,9 +616,7 @@ ZW4uCg 67239424 4194304 - Vm9vciBYMTEtZ2VsdWlkc3NpZ25hbGVuIHdvcmR0IGhldCB3YWFyc2NodXdpbmdzc2lnbmFhbCB2YW4g -aGV0IHN5c3RlZW0gZ2VicnVpa3QsIHpvYWxzIGluZ2VzdGVsZCBpbiBoZXQgdGFiYmxhZCAnR2VsdWlk -c2VmZmVjdGVuJyB2YW4gaGV0IHN5c3RlZW12b29ya2V1cmVucGFuZWVsICdHZWx1aWQnLg + Voor X11-geluidssignalen wordt het waarschuwingssignaal van het systeem gebruikt, zoals ingesteld in het tabblad 'Geluidseffecten' van het systeemvoorkeurenpaneel 'Geluid'. @@ -861,9 +856,7 @@ c2VmZmVjdGVuJyB2YW4gaGV0IHN5c3RlZW12b29ya2V1cmVucGFuZWVsICdHZWx1aWQnLg 67239424 4194304 - SGllcm1lZSBzY2hha2VsdCB1IGhldCBtZW51b25kZXJkZWVsICJrb3BpZWVyIiBpbiBlbiBtYWFrdCB1 -IHN5bmNocm9uaXNhdGllIG1vZ2VsaWprIHR1c3NlbiBoZXQga2xlbWJvcmQgdmFuIE9TIFggZW4gZGUg -Q0xJUEJPQVJELSBlbiBQUklNQVJZLWJ1ZmZlciB2YW4gWDExLg + Hiermee schakelt u het menuonderdeel "kopieer" in en maakt u synchronisatie mogelijk tussen het klembord van OS X en de CLIPBOARD- en PRIMARY-buffer van X11. @@ -983,8 +976,7 @@ Q0xJUEJPQVJELSBlbiBQUklNQVJZLWJ1ZmZlciB2YW4gWDExLg 67239424 4194304 - VmFud2VnZSBiZXBlcmtpbmdlbiBpbiBoZXQgWDExLXByb3RvY29sIHdlcmt0IGRlemUgb3B0aWUgbW9n -ZWxpamsgbmlldCBhbHRpamQgaW4gYWxsZSBwcm9ncmFtbWEncy4 + Vanwege beperkingen in het X11-protocol werkt deze optie mogelijk niet altijd in alle programma's. @@ -1114,7 +1106,7 @@ ZWxpamsgbmlldCBhbHRpamQgaW4gYWxsZSBwcm9ncmFtbWEncy4 67239424 4194304 - Indien ingeschakeld, wordt bij aanmaak van een nieuw X11-venster X11.app op de voorgrond geplaatst (in plaats van Finder.app, Terminal.app, enz.) + Indien ingeschakeld, wordt bij aanmaak van een nieuw X11-venster X11.app op de voorgrond geplaatst (in plaats van Finder.app, Terminal.app, enz.). @@ -1187,10 +1179,7 @@ ZWxpamsgbmlldCBhbHRpamQgaW4gYWxsZSBwcm9ncmFtbWEncy4 67239424 4194304 - V2FubmVlciB1IFgxMSBzdGFydCwgd29yZGVuIGVyIFhhdXRob3JpdHktdG9lZ2FuZ3Njb250cm9sZXNs -ZXV0ZWxzIGFhbmdlbWFha3QuIEFscyBoZXQgSVAtYWRyZXMgdmFuIGhldCBzeXN0ZWVtIHdvcmR0IGdl -d2lqemlnZCwgd29yZGVuIGRlemUgdG9ldHNlbiBvbmdlbGRpZyB3YWFyZG9vciBoZXQgbW9nZWxpamsg -aXMgZGF0IFgxMS1wcm9ncmFtbWEncyBuaWV0IGt1bm5lbiB3b3JkZW4gZ2VzdGFydC4 + Wanneer u X11 start, worden er Xauthority-toegangscontrolesleutels aangemaakt. Als het IP-adres van het systeem wordt gewijzigd, worden deze toetsen ongeldig waardoor het mogelijk is dat X11-programma's niet kunnen worden gestart. @@ -1207,10 +1196,7 @@ aXMgZGF0IFgxMS1wcm9ncmFtbWEncyBuaWV0IGt1bm5lbiB3b3JkZW4gZ2VzdGFydC4 67239424 4194304 - QWxzIHUgZGV6ZSBvcHRpZSBpbnNjaGFrZWx0LCBtb2V0ICdWb2VyIGlkZW50aXRlaXRzY29udHJvbGUg -dWl0IHZvb3IgdmVyYmluZGluZ2VuJyBvb2sgd29yZGVuIGluZ2VzY2hha2VsZCB0ZXIgYmV2ZWlsaWdp -bmcgdmFuIGhldCBzeXN0ZWVtLiBBbHMgZGV6ZSBvcHRpZSBpcyB1aXRnZXNjaGFrZWxkLCB3b3JkZW4g -dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 + Als u deze optie inschakelt, moet 'Voer identiteitscontrole uit voor verbindingen' ook worden ingeschakeld ter beveiliging van het systeem. Als deze optie is uitgeschakeld, worden verbindingen van externe programma's niet toegestaan. @@ -1255,11 +1241,10 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 {564, 308} - {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1272,7 +1257,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1361,8 +1346,8 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 62.730998992919922 1000 - 75628032 - 0 + 75628096 + 2048 Naam @@ -1399,8 +1384,8 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 40 1000 - 75628032 - 0 + 75628096 + 2048 Commando @@ -1426,8 +1411,8 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 10 1000 - 67239424 - 0 + 75628096 + 2048 Toetsen @@ -1454,7 +1439,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 6 System controlBackgroundColor - + @@ -1484,6 +1469,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 -1 0 YES + 0 {{1, 17}, {301, 198}} @@ -1567,7 +1553,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps @@ -1587,7 +1573,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 - UHJvZ3JhbW1hJ3M + Programma's 1048576 2147483647 @@ -1595,7 +1581,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 submenuAction: - UHJvZ3JhbW1hJ3M + Programma's YES @@ -1611,7 +1597,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 - UGFzIGFhbuKApg + Pas aan… 1048576 2147483647 @@ -2186,28 +2172,26 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES 0 - - YES - + -2 - - RmlsZSdzIE93bmVyA + + File's Owner -1 - + First Responder -3 - + Application @@ -2221,7 +2205,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 - + MainMenu @@ -2466,7 +2450,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 196 - + X11Controller @@ -2476,7 +2460,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES - + PrefsPanel @@ -2740,7 +2724,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES - + EditPrograms @@ -2763,7 +2747,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 - + DockMenu @@ -3317,6 +3301,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES YES + -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3606,6 +3591,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3673,9 +3659,9 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 com.apple.InterfaceBuilder.CocoaPlugin {{271, 666}, {301, 153}} - {{437, 672}, {564, 308}} + {{325, 672}, {564, 308}} com.apple.InterfaceBuilder.CocoaPlugin - {{437, 672}, {564, 308}} + {{325, 672}, {564, 308}} {{184, 290}, {481, 345}} @@ -3896,9 +3882,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES - - YES - + YES @@ -3906,9 +3890,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES - - YES - + YES @@ -3946,6 +3928,15 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 0 + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES ../X11.xcodeproj 3 diff --git a/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/keyedobjects.nib index 4aa9bb3c923b2aea8ff8b0a90107fff59838e258..ea9418ee9c022f9a4f4681c4dad5afcee8e851ca 100644 GIT binary patch literal 46115 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 literal 46175 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 L|JMJD4#ocfe~jf> diff --git a/hw/xquartz/bundle/Resources/French.lproj/locversion.plist b/hw/xquartz/bundle/Resources/French.lproj/locversion.plist index 02995842e..6adec6831 100644 --- a/hw/xquartz/bundle/Resources/French.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/French.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/German.lproj/locversion.plist b/hw/xquartz/bundle/Resources/German.lproj/locversion.plist index 4e0034631..5272fed2a 100644 --- a/hw/xquartz/bundle/Resources/German.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/German.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib index d71a98a56..12517fe8f 100644 --- a/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib @@ -1,11 +1,15 @@ - + 1050 - 9C31 - 677 - 949.26 - 352.00 + 10A222 + 708 + 994.5 + 404.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 708 + YES @@ -393,7 +397,7 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -428,7 +432,7 @@ Drei Maustasten nachbilden LucidaGrande - 1.300000e+01 + 13 1044 @@ -461,7 +465,7 @@ bsO8bGVpc3RlIGRpZSBYMTEtUHJvZ3JhbW1lIHN0w7ZyZW4sIGRpZSBNZXRhLVNvbmRlcnRhc3RlbiB2 ZXJ3ZW5kZW4uA LucidaGrande - 1.100000e+01 + 11 3100 @@ -470,9 +474,9 @@ ZXJ3ZW5kZW4uA 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NwA @@ -639,7 +643,7 @@ LCB3aWUgaW4gZGVyIFN5c3RlbWVpbnN0ZWxsdW5nIOKAnlRvbmVmZmVrdGXigJwgZmVzdGdlbGVndC4< 1 LucidaGrande - 1.300000e+01 + 13 16 @@ -706,6 +710,7 @@ LCB3aWUgaW4gZGVyIFN5c3RlbWVpbnN0ZWxsdW5nIOKAnlRvbmVmZmVrdGXigJwgZmVzdGdlbGVndC4< + 3 YES @@ -1262,7 +1267,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1275,7 +1280,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1360,9 +1365,9 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 YES - 1.227310e+02 - 6.273100e+01 - 1.000000e+03 + 122.73099999999999 + 62.731000000000002 + 1000 75628032 0 @@ -1398,9 +1403,9 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 - 1.000000e+02 - 4.000000e+01 - 1.000000e+03 + 100 + 40 + 1000 75628032 0 @@ -1425,9 +1430,9 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 - 6.900000e+01 - 1.000000e+01 - 1.000000e+03 + 69 + 10 + 1000 67239424 0 @@ -1447,7 +1452,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 Textzelle LucidaGrande - 1.200000e+01 + 12 16 @@ -1457,7 +1462,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 6 System controlBackgroundColor - + @@ -1467,8 +1472,8 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 - 3.000000e+00 - 2.000000e+00 + 3 + 2 6 @@ -1479,8 +1484,10 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 MC41AA - 1.700000e+01 + 17 1379958784 + + 1 -1 0 @@ -1501,7 +1508,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 _doScroller: - 9.949238e-01 + 0.99492380000000002 @@ -1511,7 +1518,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 1 _doScroller: - 6.885246e-01 + 0.68852460000000004 @@ -1568,7 +1575,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps @@ -3316,11 +3323,8 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 YES - + YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3375,7 +3379,6 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 169.editorWindowContentRectSynchronizationRect 19.IBPluginDependency 19.ImportedFromIB2 - 196.IBPluginDependency 196.ImportedFromIB2 200295.IBPluginDependency 200295.IBShouldRemoveOnLegacySave @@ -3390,6 +3393,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 244.IBEditorWindowLastContentRect + 244.IBPluginDependency 244.IBViewEditorWindowController.showingLayoutRectangles 244.IBWindowTemplateEditedContentRect 244.ImportedFromIB2 @@ -3409,6 +3413,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 272.IBPluginDependency 272.ImportedFromIB2 285.IBEditorWindowLastContentRect + 285.IBPluginDependency 285.IBViewEditorWindowController.showingBoundsRectangles 285.IBViewEditorWindowController.showingLayoutRectangles 285.IBWindowTemplateEditedContentRect @@ -3608,14 +3613,11 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 YES + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3636,265 +3638,266 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{168, 821}, {113, 23}} com.apple.InterfaceBuilder.CocoaPlugin - + {{202, 626}, {154, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - + {{349, 858}, {315, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + {{271, 666}, {301, 153}} {{325, 198}, {613, 302}} + com.apple.InterfaceBuilder.CocoaPlugin {{325, 198}, {613, 302}} - + {{184, 290}, {481, 345}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{58, 803}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{100, 746}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{68, 585}, {512, 271}} - - + com.apple.InterfaceBuilder.CocoaPlugin + + {{68, 585}, {512, 271}} - + {{433, 406}, {486, 327}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - + {{145, 836}, {375, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + {{67, 819}, {336, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{20, 641}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + {{79, 616}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + diff --git a/hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib index a95fee95b159798500ccdac0ff5f9bd9ad64fc4d..a017a7f401d1e90405ad02bb736e623e2c6f84e9 100644 GIT binary patch literal 53122 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 z ztzDQ{{o+60+MBJX8(-;&EPPdB`n7m7-h!I(_47)7Wr5mMj+ks6ncU{2%JRHCZ=f+& z6|%!Mc6d%*dvI@RS#cX`#&@KGJ2|<|6u;G_C|qMl?Ucnj+TPvHVrUzF0RIIw%bI&05rD{^|b5jP3NfOiVTFgryt;7{3rP53js zhs|MgJI2Kq_)QQb`0KW~m~{Y(VXre8ZNtB|Dh4sJRY3Od@OTqMFd<2RiHe$ui_LQY zp5GSWvWiJ|AX;Sy<94`X*og<-MqF$G8_3EMXPacQ0oRbOth^lwNq0g3W^yp;g__Bs z$+v>!t4NY?VflZX*R>y)Y#3HPLMcV^8 zp7awyP9l?0Gntay7ywz71TqjrK2(kBPzVK)jot^LKBuYuTGJD2m5@@@OlGI9Whd9F z@muEfdT(*0dYKmtyjnXvr@sACWzJG)8(D~&$)ePyT5O=&`4y2!z1{KYC6$TIRJG;U z%0K5=5=>04Ct=h~8ZwcEHD@AQmW1Tkh}8wnM-dc7P3U73MR62EUQ~rb=wlQ|aiLbj zbB<{bTs*P*3bGP4lhv6h6T1_uhm)(v||xC9SvaK*iFfB zk}tT*E-&>hpBf6(I^m+pkx*lOxTrB6iQ2K?s$jU*7hf52yebG7&9!3<5zy9t>#$N^ zaWqg{3uA;c20r1`NVGH(o*AhQgoMjDDNwzvHX3OR*G!ItBGC$PsU6pNajCC35Dz$0 z7nk~`*?}56IzMPP`K_L%zUkq(9j&%QAzwqFIvB2_u#3F@&z7VQ2A0rM{!0L1#A$OMO$q!VC3746E%c7X)kKb(LTPRfTK^F)_cDS?Vha zg(6L{vXu?C&kotuamLw6T`;mR;}&9<)Hv|B1-?r~kw}=ZDO>6B+9IN8%rL zI=ju)f1>6*V`sVEB0rM7WFN{T&yeTH3*;yAGx>%5N}9><-V^zDY+3 zghB|-UJ;*RuLR63NQ4O&minq4)Kmyp6KD=0zv4(W3}ZJl#)-~}hpp}6LTs%iagxDU z#p+?XdD-5)Q6ty9hBB#^*v7NeMVe^_)oBJb7A5c@);Wzac1jnF*eUGP&Njb?W{S;s z7n?tb>|r;vlR4?$`gTsbv6B}j-aTTC@B--}^iaV-0{N}Hv6=R!edu8jS?iM6N$bP; z5LOl3-NL4?wxW~vrTr+P11Mr=urt|O*!SA^=n>>CvKM92L1Z7z0*L96* zAB*bai6Cm+4#yMwoR%EMPGP4r&dEVmJ|{gmF*ts`3(lNnSw&ui#DA9{1pjgTIt+Ak zlIgd)tzJDWH$U5(yC&PaIn>S)j0)gY`_$B^S&fiQYIH*hibHc=+lh}Z3>10|= zr?9ixHEhdUD3cyVr%{bgr$^HnbS5pKrF0hBLFbTW>Z4_J9-WVN(DF(M=gb9ZVZ%Xz zBOZtcCfgx6cnJ*Ip%8>k0xQIsf**t7uM0p))Wqx9)h>1^ zW9*#%6VG*yRR4*ymYiP~-PYHluKp7%Z+-HvQRUX_w1O_8i%}+BLMzEj)K7NNV`zX@ z(P~-)0b)B86667Sko-BnLd3O!BtW(@dqrHFD-oh;Xoy7PnG*jUv32Ycww|5KE+~VL z(<>;G)}otf9SzcB=`tEBFZC@IYtJwBfly`VchL`J=k=d>xO2D{&upv?)&!1<2EsK? zP>@Dw!+a+izKKRe5Q;`=jK=AF+9)JeC=vzPC(uwAjN9zO8M!&b;Gg_aqmXk-n&^rJ z06-`b-9($vgjeY*lu1|9C_SF8p>cX5Wt2ncJ`fLtBDJu0zyyqkpObUhMeIVh!BW`8 z^L;C0al77cnRP-Qw;<$Y)VjaZ*oBjF6FXQ-&uDuT0l8b~ne;4rHa(~PNrlHEN(XCC z4ceg^_{-vCa14H#?@;K?7K)xLD7u86N6)7h&yPRFYx-Enatg=I)GT-=i{3Jg*anp2l7tROz)=m(0j#!ydTcXX2#g2l=D*Tz~SmYaiQ~5+tczFvWq^L zJS`5-Uz_Cl`IGFWc3p?$c$7YtPL7UI-TB_1C(ZOl`VxIv?EO{P`;CmT>r(bUpk?oK zoa5hi@2`_x^o_*c-^rBl?}%NW*!$Ls8I93ZRbu~bN%kRSWVayM4eato4!?_|@m4C| z(Ou*v!FjvsCkaqLM?1)`zh2&1LZ6#B(gl+pbb`Q&VoxFoG z$v&y8V_KjcQg^9`bdc0jI#}wNIQ1^}2)mEn&+Y{UeXpay!5aEmI#lW{^+7`=FUMzd zJOZ90j!*PkJyx&I8=mdW&n*N!n4dQ++nYCX&6@Y5{?Y)Tr8H1FTxf=KX{B_8G)T&l zjzrs}Y-tGDCFMv%rCcdbvgih>0Bw^Br4d4k6ouk;G#rTAkk3h&uq+;2ZhI3!2Jf;^uzHyt zZpm**V?=)ALDmD3Sxv!sb=^xSQ<@-6l!_K5@+Y7c*k9ShDI-RsF;cNKMIgn2RqV^L z+&4+ZXo3)1(oxd1#Yt#Dif@*VlBP>X??=)}Go_O9^3@05+E2L$> zbSP6glAbGtqr)R?!X8@zNT!1AY^{ zGCOK7wWCqHW=c&hm{#B}L$*&mEQ&@WO|v7hAS9LiRt+nIqdB+2PmUU;%sTr5&M9@syfNqg4Mz_%o(#8aO zpum8=$Of{@*b9s1N9w&Lk#H~`iTbTB{)R}yyas?ekxWbO^(rP+%!=1JE@CWU5=)!d zfXz}&+AM96u4B)zm)NW9jkiVIwmm#sr5jqIk#3W=p=Rk0_DY-0TUs*y^KwQ0@IvoY zh-Zd7+F57sxktJ;#3s9AcB zz18+jJ(F*G({FXpE6g6@EeVD~!ARH+@8_kC#CS=1S*Xz2Ko&=|fZ(`JdP#akI!by~ zdQIfUlT6>4o#-s~hVScNO^Ksx(0w?Nf>_3B{-+1`Yf`d4e=lE|T)(T)IJ? z(g{#MutR-^7eyc}2Otn2W@=UozpzAlbuVZx0m3?xVJWnnICit2C z!hV8N@Y8FpK^^k5TrTyNE96CTg}j90LXJmp?CpXP$6k*6`2n+V8b*w8Fq?m1han(W zkzI1NG*q^wJh_B!kb|9I_E)x@?Mq_TZ)KGQVsSeR_F_ZSuC8+qMI%Hry&_=>CYm@J ze#=UrXqmmzhPs+qDlaw2#{qIUrtFW7v9nxmlJ?3gg^b_;FiuE`77>t_Hw>U2mUn2gtjx%CC`K^6S!2`AsQL zev)pG-|Y;{ZUAPNRxl58zzj4l^@i<6yFTeawLlsP`@?oqLZhcL?Z@&i2huGZ9|Wlz zQ~p%`Ox`1ZE`NbC<-f~c%3sM}%iqY~%HPS~%Rk6J%6sK~@=x;5@-OnQ@^A9*@*h&6 zf)uO}I)8C8D>m1z29w=Mk%?-)g(7+ip~aR#5bj!7>RV7IJWs#XBRL`Aua*Ro<9$L= z!J@*46Q!t-;)w;83xBVJxxp~JOL!U1E+Fs_4A;UwoM$cj6NSnU@($Y0&%&g0W{Knx z1a>*@$??G)Z{oO5=Ij*^#@@{Fp&Vb$@wFWH=J*V z-glH9%0YA&*{Ae`PzK5*FDM6-H^|RQFXa%lL+MR7$UiAwrLX)G+Cg?H1N>HZs4jwZ zkzG?3sDdqmBjV(jlD|Rx82lGO5s_vpi#CR<197`Xl%&Qu9?kJ67sn&nWgPbrdhSY& z`?xsno806Pu*ov^Q}Xx0Y`}H$I%SBGBbO+-N*>2D$Nf1zlI`O-hvWQqQ5mH`8Lkw{ zWy(mo%*AmQ#{)PX*dlDfSSif*7C6dfL}9i!f8?4q9YkxDvC24QJYBC0q1DPHh?qHn z3^WlK;Ba;o$Nky493KG@vWT??O%fJ_7Zssp!v0t;3KF7;S~D+NhJHk06n3i4P>p!% zMP;Je5EAmv6G+rIpeVA1^^#JjhL)mVMJ-%%W}-Br@ zRF7=r6&BNv;vHd>jav5tE5=a(4M9E>L19sQ4W$E659#dCi*7T8PsIF$x1*FOrHOon2%&FLN|M2oj;J|T@yTTh7*c|ogE`J_p=J+< znt8)T@NC$~;o07T{Eo@FP^nNB(e+ABN8}s=1h2V0|D8*s6-gY>F-&E8imoE&a8r<$lVbgmMXP!nG#IWVJOGB?daeH zF$EnuJ682dSc%Z}N^VDV$OAg$q|jmM0URqZ-+=MZo*?N44-=FfW@J5CV5Q3wSYNrkizI!@$A<`nQBa|6cwBTd;)udgAz?1 zly+E^x+|-c)pD7#CSey22E ziQ!;On z%L>s5Awu9pd zDKEO4Nptd(Al}CYY*p@89+1kF2bG89u5zxjo#P^or?4kDp3ZRz`+|MT@tlsh<1yuN z$*=4XJ~zjcIG&v9bwl2u@IPc}D$gj-l3mJk(op3EDNnhdZctw7j5&&dIf`1D<4}hW zhAap~!}ijp_OiI$$`b81uM{Y6EAL2tUTA|!njg+dI6-e?L8EM z+6M^~7kU9Cel3cl_L4*?P`*;Wmi)@MNpv60@r+b-=Ru@DPlVOL`^wMlSWW(@>{a&B z^~!^ELwl=dCZKydSZ~7WDR)A^qdQU;Dpe)PuPVvylyW?)Wjjf=Jt|+g_@ls0D(G-O zs$0!ab-G@8s3Y>vhW(VJkiQTW3lc#0h8N934T8iDA%Qp`ilGcLsl>zRV3U^*M^Kjm)N@*(_FLyn3)<28VBFgjjMjK-0x^iz44D>aY=|#)YIeQJ&`mtYJ3lGL zy}qFBtqIy*C+xEaC7IL)B3nuWogB zDiT6h9m@u6RmZ90)d}iEwMd<$PF9OKUc|AV<7$p;IbOzbgyR^;P3=UN)LosXPFHi( z8ETG*WGv=*3C9bC!?Lh7UXv$`&I66&s1lT)c~!r9jGCiXsX311J%-~z`u@QM${Q(8UqKe7J6xFR|5O1F`V%}Dv950C^}zW7Q3=LV(o>0`Ds*f@xPi!< zA^JF>Y#Yqgun>1(e8Cxozty83QEkG^u1l;4qaBeNPMBM8Mj;C9tm7DOUbIS_R>vfB z1ULxtdhy;_$cM_27tL-lyQ@&d5$kDtNQ(a1s4*dyq2shcNDqiD!ydz8#mQ(UnvQ0p zNoW=-LUU1Z>N?&&Xf~RQrlS(^Y@v9TE?e5m5~;fyRby(7+L&O%8jkHYL@WTqN(9sj z9D@F7DnVVPt|q(GWm4O0uxpznJ{8a@b>8h&ZM~w4pS>70PEmg zI=-T#5FP4Ow4n`j`i4+Is5tOWg95u=^l^(x-jT|ax~pfXXR0~s*$E8QaU4v+P$Dfc ze3YYOK-w1kIfBktFCe?r3#FmzMN*zRk#0~g?F>Q30)lE=5p+z4gzg+UUNlHFGy}Lv zFVgYtyzP8Eup`=gaajVv?*B;?U#(uF=BU>uP#og8zCDVE2^1HM0%zp_cyOzF1KFkC zC=FF_mh#jhx-Fqdt&8S_8+&r63KAA2_**B;c?E#M)og?PQnw zh%{7vRLWB)(GBX3&af5*tVLR}HsJuV);X)Do#RgBz=57zr9gd7eO}E`UrcJKILD3Y zC@KK7Gpkob^qba=~g0-Se)E$Xx`L1r@1lbUce zV6-zT8NS$`x0LQJR zcQ+A=OJc`~bwUn!8H$K(FSt)I-U)I!mIC0$u}*;M?Wql`g0_M@vSVX7G-w}5g;9+t z2YJyv@qe&GV5hJ;1PQ_2i=xgA;>wDqV63`M|TyfNHL3l zO$jupf3N}9NtTA?n=~pvsmbgfjv2=p9G}8*7mnAqGjx>#&84}eo|-Q8bSy>A@ky!4 ztbFiSMmSztL1(8>v$QT+CS9-L_Ow13Xw6z^-T0^Byrf)B_0rmgS|QWFRM?0PrQrXL z?1Gc+1ni~?syTigoQ34sODa+4e1hTyTM;BYG{&tGXVIw}0P4fMB$t3C+jdp3Z6Fv6 zbcRz0|2d(*j!u?#sMcHRsU4QY_Ng47)(+eGj#XX&KJkbSta7ctHb5Il*K4#rwoeCa zpOV0~-BEQyeq}MMZ^2V~d1M%3z>sQtt!3ld>e8(l9FF&3OAH#^j&?$af*z9X?F@3r^#u z!*Qun&EXEn#3ZG}Ai-r0mqK+4_%;dI=k0^0iglfJTHogA7qCyjLvnaOl=2*8QVcbr z9F(;m*^}(%eKi?mbwaFKv9z~U;9S9WC#203RH9911GY$C%g1RmwGyqA?P7m$d>+T^ zIliPL(K1)_Nqe<<(q2cjoX_zEsWl$LV<~V%%gBOk@9@G713=nBtwLKw*K0E!)<{po zT?ou^UV=Fw4fj=oJ)q>LHI(BB@T5{{4d(y~lSC^|6cE)3vk?yUN|6WyQiVjMA5=vs zAud3qR0wv0ct6DKVnXRaG!PPQNn*kqTFDz1YGQ%d4=`J+!IaGHfD<_c6^RTG2r@@K z!5)DHQzMD+d#Zy3MhdLwxX-O(3ud*4Ayrj@ngaC-xhF^`LR7R??6f4!0S8zdf#>Y1 z7`5bI*bx1 z1==cYwX|1TlVp%fIo{a9AU#&EhEj?l39Xw8j#$77xFRpl-w?Hz#zg*KyI8wK^ok^EgzWl;P#|t^ z(k@057Kvg02B?ZjDOS=hS0_2eO4oyDo8h+(jjaq<`>R92hN?&)TH}vL{0&gcCVoqu zxk<@$X5Ij)&WuH3-ZFb-eIT`jPur@FbB5gnk=G2rWr~3vuX(FF!5MrDM95lp(>fTo z)3UeJ-Q1;4bY|WLp`#4H)vL{G1R&91eIU9rb>0JNku&dhh=*kOt)9+2XQV$^UvJk0 z193Z)Hfy^&*_m}GxWX9~Vouy%5zk9q`w6w!8Fe?fWhtZbQ%6066Fa|`je`yJh(~H` zLv~6vaoa`~?Iq=YXW{!Hk(jZlF=qQ?D`Qo*ord~1$XI9CUsx1Yw)RtfuDyrHID;Qz zxh$g+I4e*UX^f}8T-&LAj5d-n9B=3NuPlQ#_$^c100H=28jXbGP8q-UnYKriHd$B+9xJ9k!7^BW;*`YdB57}M zA=Dp|#M?Q3k`Y!kuP#_)r>^5tP=Cn7Zs+(ZM%eUPb_Vej{4)tV$?H?uwuW} z0~QiJCMlOt#?t0wqW-v8%z2IxHq~$SXbi)wqEIMp4m5OKgf7;0x_XkXV*CrNd>%AI zr7hPRZ6pQa@k=a&9kZl56p3|&R9Anrkrax7udocZbn&W4q`m{>yRy(m*I+U39hSlI zYwavnsk>{aE0-3y@@av{`n&NbdO!8MU?a7~i(T!ZNb*HqV0WM^yVf;JL4 z7cZO!Jx!N!{1(LbUW51^$8RqxZfpo8Iu;U@4z3wYn(eo`w>CBUYhV!6;-z7E7TV~V zBapHakn&zfNSWuFPYYb-38cKw@dqtPNrBjjvL7JCOI(#Mzv~#f!Br*Yx#rLfuBEQp z{X+a9K>VHq@ka}%gyT!?XxMIncbR}UGZkJtWVZn}f;Qqk0@z(FgU$6@R?7HxN2w8Q zbTx_5UjS-8=?FEeUB}Y`*9i&Ke9G}>9iS#ZUpT)9h?f_NB-^cm&0p+qtt!t7g%hXZN>0D{3=O z`a1cH?P~K#KCb1_A8j5<k%NPToa+DPsckA7qsY^5+w>g-TM8Xyt05&a+r0ju;& zo&OlxNJffBKd}rJTpYGn#5?Y<-tf}tfSE{ppCL44S!=9 z>4o3K zL1~rpfZ~%Zb-a6!@}Qh6@4}NbEI)~hl}qtdG8|{A+>gh&2CLIa zKjmvYUcL$UQ+sNw=`cJ{Itbl^C*VC~v|OlOL&hq(=zHlp^?5wjJ7x=LGI^9iAIv|2n4_g7;YC55yA_aGxBznUX=m41|) z$QWfix|dFI9Zx6Y0gOSY<_V5xaeN%qS?98TY$eBQprGy(wpJ8i7jWE%)p7iuDA$|J zc8MB;(QFnQ#h&GO3RLOd1N9c9CzK3*3q1x!A|Ty`P33qUo6f3P4%pgFY#hgHIc^fA z8D20Ib2)yE<0Y&TYM2V4t)qlvAIBRxF<6}4&$_a)Y%Yti?>Vk#Q79Sh%iiF)k>zvJ zOX%$&dj_KAXR;6kS(}*!7Vt6bFm@x9p?%3-;&?op!v?coL`nIP>>7>-a@>_;55&MX zL*%O#oc@U%tKiyYuwn>!m9S|L^&*+<9yEoAL?%T*dXl8b&Sx9vI0<*Yr(5YaA4`i9D2pfZ;85rS4|H(;jxR-|8yHiSkot)Cg$BNVxs^&fi7H z>9D*c`kr$?-*WR2)P-(#Kj$D2sF06_xnE*3CkLlr$^NJ9GwxU2ueo2R1@1THU)*oI z-*La|eorcNzpr5ThwhI!IfRo#IT^t5>n%Mdqz@KWotS9 zq+)f;KK|Q>4w5{K`Y>B)LqW{Oeo>EVoC0F1q(hv7l zbMQd;o0_BM$UjMboJ9-Nad?38Ap8~gP_}EO6yY9{g|^}>{3huq=c+}dpInA^N~_e# zI1BZ64OS;gtCUMLne@}BRF3+qIiw#5Smgn^tF%h4fQwS)61hw+BhAVX`APXE4bx)f zQZ+}~i?if)(q6H%z3_f%FGUo=e$-;Qj1Xy+YYy&DCu=2e!?QX;>Ph;!=b`?jAJkDx zehAT%ev%(;CC#oT(u{imea-^`R06@1pFmt5#+pQt^k|M>2MP5P$N3FpD`9+`v zV8$Sh=YTj}%LcJ~n8k9~ELI8XVHvArKe59=dBj)_BZ9SR;ny{g|EYw;))VmOg{;z% zom1Es@YpM^m)*yHVn2cA>MxR=8IX0nhU0ZGem87GX1m3vcf+pOZnhS%vQYfn#C~G) zVX60+kDU!dKL_?%&F*EDob+M@-VSx?YzJgLSS8!REO^%^jIluprp!2BFy%$0SuK*T z13QBZr^T&yhEgc(jEfyR!*x8^8A&Sx-Q#Lf$17huR)(@6-Oj)R$rzVlZ#B)*P{*m$ z<@M@EiVu$`{lL~x@6%S3J#?63X}IS(mIls3-z%%Z)=0H8Gzyl6TnM&?YcN&w9g0*fQv)&M?j zW)_$xF?NjLVz4)U;W!}djd2Nk<0Zj*31eel!qP}JGuVxsWWs^Hzs0_|z%entV3)Fc zT5ODr6dObEIG7m1l1bPY8$_B8uEujL4Y#IeIlQVLsSnn(^&xtWK2*=u^Ynaum|ma{ z*9-L#`bd40K3X56kJZQNC#q)*n1^(p#P{V08!K3zXrpP|pxOY~BGmOfjb zqtDfSdYL{?pRX^_%k_nNg}z8%tS`|kb-#X$9?+}wYQ09c^`&~PUZ)53WA$ZvNUzt! zdPHx~kJF=iOpoi0`f|NVU!kwmSLv(unCOZAQVW%}j%75bI>Rr=NXHTov~T79#= zMZZqJUf-(Upx>z9q~EOHqTh-S)wk)l>v!mP>UZgP>-XsQ>i6mQ>ksIE(I3Wk0&gbL;PA=qRJtr4&vVrNGT+GQO zoLtJuMouo{GbT?PM#st!?>-|7o@%Xpy?*E^`g%WJZh z%#Jj8=QVhp>uDm^w3M<&C@z3}HWXV=PISsaMe6^@1_}V;kQ5-=+`XOUx4JuYb1ty; z4szNOvLe=s0{|qMq3paL_aCNl5M@QIo{2Jg=-Qkvvg1(WFsP$XmY^&&1m*dy?kTu! zx%4^9Zyi(?sB+GN!#s(ipse|DK8EB+taJZc(ECr??ktYpB$2wYYrKwgn~*H6QYI^6 zos}p+fn0rcT1D}o1K`bnV&wH{!+z;ikXefpcR&c7E^7Jm(vU*GbO zUm%s`x4g+~6TEGJPPCzB`7KMF(m^fXOvIL`cdc{o#3GPa^O=c}hNsaog z9&meLu-Yrew+@O}V>_`*l6_VGL-%08=G&@@LV4a zKiu_aD*B(M7#L95KSgMCa%oQ+d#KHqfCMk4Ywp&v9-vhlG9*6U(;`3|WiP(`0NY6! z-O0Byvi#P;X<{)Y)tu$GG99thD!7K^Eq4Coydz?TI%eE|^gbyt$F}@8v-Q7hg)$)X zg#94%pS(E)z@O3SG3mIk^Z@&`TB<+y*EQr+X+mvidO5KWS;b|MhE~HRX|rT|6IvkK zn{K*gCodn%_NED@K`D}Nzm`?R>eh*u)8JH$XZfwHG$FSCv4hgac79J@ zR>V5#0KBAs0q#Bj0MPI+eVGz4Yu6NQn>6ebc7D?PPWRVawW{B`s+|S-f9k@AtcX?8 z#`8#ZzYZ*Rc7QVNKiYc=;&tW$Flc8{um8bfZD5NoPQ<|Z(u{C;{Z^Oxb~GNW4ulf1 z1v{GJ1m{Pr9-WBD4!&KBvQnmwSPUPhN$^!HVlDVD(=7J?ugf|Ol93TBz8{O>&%BCd z|44zq3df=@&&x}tZkfx{(?BcGhh;_vQ9fp5*O1JBj21#;ACr2;YrVKqx?LIFI z6T_XKwSRnPDBbf+`D#IyxXd(S-EaUr_h*N;qfo%Vw9nM16J9)k?{b3XscvUe{I@p? zXZbCET1e}E;tk%k6jvg^mdb^YDZ`4#b*D+ms0@Jx_83n$);9FVv3Lc0#hHHmLEusRz<8+4?qYdJA>O^oB>g9 zxZDVOZoyE6a66=RQm>c#hq*ft5OqkJ@sM_}TbAD%k@oa}KMIf)vFy|5@L#$q zEX@+m^IK+$X9-rK-#RkoFKMI|SN07JG{%y5^=0|3!&722`;B&-vmfd8FYn&>NI`k) zw~-PF^*q1TFYQEi^kssqh;{k_9G?G-ne-2NeTtA$?Q9hIgZS!Ymfsql!nywu8THnF z82Qi8`|qy)|CO%(G?_OH>X@9nJvu6__+N_T^iGigMevbvJ2egJw+d6ZHLYY|zu%k5 zide<}30PaNr~7ZaS|E)C1%9jde$FOHyspzC(cr2`IGz&6>NL~wza1m=TiIy>djH>~ z%<^0LDbzf`(2L*dmck-4A`Rk0N?CrZXUd;bzjv1v>4NbAtAu}Fc$2)R>!0ev8&HD> zrSWEK)l*Ah&?Fl^#Tbm+z)lCJux6U|m-Q!yHs5a@nKJiJ&Ol0FdAL8#{z=)*eiH+o zhVlOSR zEnG9_To@Nd2?MdfDZCuEcxo_Y9})A;Y6{!YwrR^WrO~d=Y-Adbq>bIbg7I4e)24P_ znQ~cLEa(4L1}Z%S*_t~8O>}U24RKn%_j?B{UpxP<&%bTL|0SC+V*R!s+sHBH|E(7P zN!4P+;`<@~zf2&nYr1fQ)|NKa2Fdb*M4O_gjFZE!PX4kW^_L3K6!w;KzwFaWq*aK~ zVWv(jMv_;8rHIYKx10AOnlF?c%in-=UU!#@KM2OBn6?i;4QN9VC zjuxP^Ni&@+7oxCw4LVcu<2O;93|Bu=-ogDO%QYWesNRSBqS>fSouEp1s89n zi8@~EO-E}!bc`z(m7|@g78l`ST8!>R$Ermb+Jc&t)$%&THCftA3(#u$b~T39(J813 z-6Q9^2WePyOO>P_+K8&;LeD_%w%_q>l|jW>Cox8juVOF@1RxkCywvqSmH$GcrSd)(#J+YtLIkc zW>HQQP7t#=kwwRC9~S5MVfGEnXZOO*3JW=YmVLzW&*HxD^TgH0li5D#@2q9di00qN z;m(M1xTxWGjM zfE~v1t!yHj%C2FDa(oxGC>L|QjpOG<>!-}|H_(~9TeLX8D=v<(IiYZ^Ll4%KeJh$$ z8Qdn(%qrpToa@+^@ZHx>IU&&WI-1Sr*n(Rv@Fnn_m_Nklpt`a-&?*{)yDJ`L!#Uo~ z=CUI=zL9+n_hKBx@r!ITI}xsG8^`fI&>i|cv{%PCzM0jrA~ucfWqqO5S=_>r&ze|2 zj{nZSfD0>fIQ~I=2W3e@0vIElLvM^UMj4}xF~(S9oH5>*U`#ZMj7i31qu7{YOf`-& zrWwRirx~XkYmGCEGmW#1vyF3%b;h~IdB*w11;&NOdgCHvgK@EOiE*j1(YVaG z+_=KH(zwdF+PKEpWL#@(Hnteo8P^+IjT?*`jhl>{ja!UcjoXZE#_h%(#+}Ap#@)s} z#=XXU#{I?v#$SvFjfaefjlUY(jYo{X8IKx|8IK!J7(0w7jb`I1<7wj=<5}Z5<9Xu+ z<3-~o<7ML&<5lA|<8|W=<4xl&<89*|<6YxD<9*`;<3r;kW2f=4vCG(Pd}4fRd}i!1 zJ~zHF{%(9}d}VxXd}DlTd}n-b{9ycO>^1foKN&w8zZkz7zZt(9f0)R`CNZfgnX;*v zs;QYS(`{y$y6G_u(=;u!3n!0o@;6Q%<>WC=9_Qo!xtDL;X$?KfF!O5GPyv51eoV>%yyPUko$@`pqz{!W4e8kC4 zPCn*j7bm+p`Gk{CIr)r}J)C^b$rqgbos%y)`HGXTIr)Z@Z#nsnlkYkCfs-FO*~`g3 zPJZI#XHI_MzY|IUUAn0jI+`E#!0rrz1HX#p!5H$8b89 z({Y@R=X3(66FDv7bP}hNIW6XN3a3*!J&Mz5oKENTXijHvI+N29PD?qR#p!HL=Wsfg zQy-^goX+EPKBo&fE$4J0rxlzo;&d^mOE|6M)X(WLoCY|p;p2Z`8sW5o)8jaeavI|_&S@j3%Q7|@*?1E#N=>IkK-BD>|Vf$j5hyp`L5fv0fLBK+ciUqsTSYlKJ5pYnM zfMAL#rkG+(k6G80jV7BIhA;z|o@{#WWz&<*rYDzJ1u(OSvjEIOPmz4UI}q?DdBQpX z69Hf%J>ee!Cf&mb;2j2FGyn$gQ4%8ELrza!3V`wVh#b!%j(Vcq9)O7n00!|y4IWtI zN#zjd0+=lTM(1(10GOp7UJqbu0L&Z!)9z8*0B@Ryi;2C&nE-|lVCDiCm&f_JoXwud z0ATDM-U?u}#18xpUfH%vdHUOB39xm{#gA8D-#6cd} z3t(CSj0wP`c>GXe4}h5oU}k&7&rL-E7#o0@3Si{ex__>cllGgxyy(f?1@r<74904#+z?96vXP@f<%rpQ~O>}q?AdejgU|Kx9AHYliFh5&b0$_-q`IUe- z)59Y@u!^_@zzhX2KldE%ak>F-4l$AVo_H4UP603?kB0)@A%J(dC(H#fi-}}U^z-hy ziE82;Vi$m!2Y6FG?jGVW05cB2i~%s~0dER`nGbmXe8z_Wm?i)NdvfM_V8zdutydx8 zWoy{~9lZ%}{=cI);r;)LM6V>mN5Ut~h>>}UB0XfN9ha#ar&~w(=#}c__j!-? z#uBk4EEUVZ24Gp(U@Qk4j*Y;Iuo7%6HXfURO~R&N)36!X0&FF=3aiE%uoi3+b~<)0 zwiDZpbz`?-_hFA?|HR(GKE!_V_438}`upO2>AqpUQNB{&MBilJlfI{Y&-$MCz2JMv z_loZ|-y6O+eQ){R@xAB!!1s~wW8Z&$pZmV@ee3(d_p|Re-~VtJ+(6tAoG;EFN5qkF zG#nGh!Uf|vxNuwqE(#Zolj7oVLve{XIW7&Cfy>6_;RNm-+#jn+Grr&Hom)}9Z6Mh%{?)p9R z`{F;?pX|@@5AbLCv;DdL;r={-zQ4df%3tU|%s zkia4E2@*m&A%l=b$RXqrst9U=hM*LTfyKZQU@dS8I1gL^ zE&*47zkt7iTflALE^wbTfaF8+CHax?BqE7QqLY}UL{c)zK!QjnQX|Pq8c&))nn;>N zY9UP}ts`w9xk!DaO{6WPZKNHfJ*0i41Elk$3#7NCPoyuTZ=@fje)2%_V6qRHMNTJY zlXJ=Wtaxr-nxq_@Dk0$?0UP)d>?jf%suP4J~J9z^cAv?)u$rs6&$ydqO$$ydW zknfQnkYADCkpH9bDFR9~MM8<8#8G6F1d5!JN=c^_Q>rO76dk3OVxlxs#!|*pCQyE- z*eG_2gMv~vQZ`ezP_|OGQ+85rP;OK1Qtne8QvRVlqr9NJqB5uf)L?2Tl}in$@~Hx9 zG*v>4p~|TRR3%kKt)|vc8>kS~Otnxus9n_M)Roj#)E??O>Ut_n?W1m@{zd(pdXM^m z`iT0N`Y-hv^)>Y^^*!}F4M$_q*t8HDhZaT?(Zn96T;>F?EGx-==}^HBZ5)FC}&hMsu*g9j#0}183sl@!^oJ=Si)G!=wx&;mNU8; zs~NvDb}=3>o-m#=o-HYUtOnJ#7@a}#q5b0>2ba}V4T=v+2`UXz1{s1T2Tci@7StLvE2u4KU(ki1zk>b=ddJ4F{n-RI zz$UY4Yz8}!&1Q$P!`MUFiR@%{DqF!;vh{2$dlI{y-NF8ay^_6(-NRnPKEb}mzR!Ne z{u(?em=YWsEC`MY76wNLOM+v9lY%pYvx9Sji-XOV6|x{? zQOJ^zr6HXmT_N2e?vULfdqWO{oD8`Y@+9PYC_XeWloOg0Ix2K@s5NwK==jhHp_4*e zLZ^mK51kRZAhbJlb?DmA-cV=gAECQL_k~^xy%KsY^hW5-(3hc~I9?oo4uuoMiQ-5& zN{))7=4d!tj-E4`GmbN!GmW!~^E+o9XFUhzY~UcAO`NNoo1EL6yPW%+hn#;nPdHCG z&$(1Coy*_`a9Lb7m(P`OrQAer1y{}0aJ5`L7v$D)o49khbGh@m3%QHAzi|(9uW|q8 z-r?TkKHxs$KIT5*KIJ~=zU20YVZsK44GP1Dal^vH_+f&usIbhilCY6sHDTkzn!_fB zO%9t9HYcnztSjudu->q~uw7xt!u|}q8TLHvW!USmw_)$YfpA7RGdwUnC_FekG(0Sv z7oHTJ5}qEO8J-=U7p@Oq6}~C_Sor1e`{D0-gLzb51TT^&3-eulB-c#Nu-hccdd?G)PFW@Kg zlldw9G`@mg!q@XbejUGo5AoaibNTc63;B!r9sEvy7a!rf_#63K_}ln9`4=KWB4Q%s z5k(QEh{+L4B9=yUMs!E4j#wK3M{I~dBAgMfh`xwT5nCg+N9>5$8F4b=bi~<+^AXo0 z?nOL^cqpI>f&@H4gg_(^3#5WrLA+q7AX$(iNE4I@)B=q_E6@u-fmJYDut=~(@SC7l zU=z3n8wHyMTLs$%4+M_{PX*5fF9oj!Zw2oK9|hk8KLq`ezLD(6;gN-rrIBTk<&l+< zRgvmQO=NAPA+kPlT;$xyZIL@7_eAcCJP>&(@<`;d$PH zEGi=^KWb!@E~+tVTvS_Bd(^zB1yPHlx}#iCeNmgDwnS}<+8_02)WxXFQCFj`N4*we zgad?wghPZ_Ay3E`3WQNYkx(p*5ylDggayJPVX3f8SRu3u9YR#-5^fgm5dII zFFYtbEIcYaE_@_>Bk~pv6b%;nh2aNalAM|oG2bCE*C4s zYH^KNFE)s$inoh*ig$_ki;swpiBE`6iO-17iT@N|6knEjNyw5g2~Q%BL`g)Fe93T0 zp`=(cQZhRE3N|Q3BEGb)> zBu$p4NYka6(rjs-bhs3h_DI)A*Gge2Ds@RWN;gZlNq0#9knWc5mHs7tEd4C~D*X}T z72_Qf91{}5i3yL1h>465#fW2aV`jw6ifN0PAG0K8Y0R%N%VJi>tcvN0SrfB1W@pT~ zm^(4|Vjjjkj`=rsaO{v+Y^+}_Ar^?G#L{BLu??|MtSPoBwmEiUY)kCa*w)yYv9n|6 z#LkUf7rQg|WbEnKbFmj5rs+Nr#h;CY?w+m2@`geA0!aOG#If{!6AOha~fp(~|R& zhbNaOE0fj9HOcy9L-MrbxyehCyOY->uS>Qi+mn%GSMv7coyohB4<(;YzL9)8`MG?M z+((X+q%?V2d0I=i_(^){gU=;+OqUP>6~bCxPfKr2pOxO0J~w@S`a%Uu5wDOd$`wk5T2Z6WD-4PT zMU!HzV!UF$Vv(Xl(W&TCtWc~~^eVP0b|`i!_9_l24l9l+PAbkQ{#86xJXgF@yj6Tq zd{%tRpkx$g6lIiTlxL_isx!11`V2!xeTFe(bcQ)&LB@s*M}{+_FJp7Ywv3$_yE86l ze8~8k(Vyv^IWTibCN|SA6Q5O*)tF_;YRVdyH6d$q*3_)ltd&_8vo2>{&AOR&H|u`Z zqpZhSPqUt9z07)@^)`EKc1QNo?9S|E*(vD~`qjMW`t+``z z$K^KX;qoH#1bI<;(RtFmxV)ixiFqUQ7UnI^>&WZM`z^0KZ%y9Xy!Cl--iACR&zUdE z&(9y8KO(;*zbwBZzbd~vzd3(-es})b{Pp>8z9S#acjs>$escIf!ygZSI{d}(*Tdfp z|2X_h0kJ?@AS*~JNGV7w$SBAv$Sue(6cuI{jw);{Y$_aAIH7P-;grJZg>wt%7cMO9 zDqLQ;z7Q^S6gmt03O5&SE4)~Esqkvyjl#bRZx`Mxd{Fp(M9>J%2>yu35yBDT5z-NH zBV-U-Y?{T1+cu7PE?j zi$jaUih0E;#WlrXv9Z`x+*sUHJhr&Gcw&j80Ougl(+eJJ}>_O8VyW(BK)T@g~TykcX;?usK7=PIsM+^cwAIk1vY8C{uB znO<2|sjM_qHdjupY^j`9*;=`#a%1J@%59Z9D|b~MtGrfuqw?>{JC*k;-zf(w2P?5k zKP6r%Ql===lo`rwWvQF&Q;P5GDdZ{=g< zXXRJr4`qK9rYfK+s!CKPsfw+NuS%~fttzXks8Uv`sv4`NSIwxJT{Wj_Zq@Rt4OM8B zyJ}3C1Bo#$PQwdawD!D36rBG$6K-GBFL{*Dws%pAwfvQ`z zMzv10UInY1s=cZMs>7p zD0Q9Ms5Yq^)mHU1^%C_j>Mr$i^-49Y-l5*5-mBiPKBT^*zN@~kex!b)ex`n@ep5ZT z8e8pGjjsl(Db>-{wbh2|`f5{kQ}yKPDb>@fXH?Iwo>M)ydO`K_>ffu^Rrgl!u0B(J zzWQSIHN?%`Y`wHOp&O)^yh#tT|P4rsizTotoD*?`l5Qe6IPX_0_LBCY_ObS<_PO?@wqNJ18>Abe!|G@{zAjQH(us9aU8Zi7u2QGcRqJYW zQ*?`T9lB0kmu|VvsoSeNpgXKPsynW`uDhwbt-GsxpnI?Tr2DG-uItwm^<+Iw&(H_z zg?h0*Mjxjis?XIA*N@N_>qqKAeZ3yioAefatA3V#j()CwfxcV6M!!zKUJvX0^qXsM z)!wPSU;D83aqZLE=e4hD-_*XV{aE|C_FL@_&gV(^nz+2#5@ILqud<;GXpM$T!x8Qs5BlsEo z2L3R383q^z8GH;l1Kt1_$Ofu`VF)m=48ev_1J}Sa2ns zh73cNA;*w!C@_pLR2Y;7&`@VE8cc>pgViv}&|;WoXf>=btTi|d+YDC?cMT5=&ke5( zZw&7Z9}Qm&-|8rJp>>gU@pWl+hPsBjrn+%;&2^LNTI#0NwbreuTU*y#2iI+=+gEq3 z?rz?iSe27h4Gc~jq#oFqw%xxoAHOS zAHqNbph3_O2n*pLJVb;@5Cx(`OehcvftM)W4dR0XnJgVYI<&ZWqM1&9fF* zi>#&AQPxVU%Br#Ite~~t3R%rot97ik**eKO#X8+O!#dmAZk=ykWbLqaT9;W@TDz@l ztm~{c>jo=obz84C&1$kYZ5xw2rf$r%u}x#wkKHr&>eyT3{u|F}PHI*+8=J>BFKPa> z`NstQg!~EB6HF6YC(NI4dQ#-1oJk`mnI=7+jG62=SF#d6uY=#ao6HaOZF}KyMwlL z>e6{jS1moU^i3zeliwNLIr3NV*O|ZWTGq5|>T=?8$#UcJ_ba?sgshOQIKSe*m9Z=H zR~lB0Ue&g0<*IF~u5^2M}~Ju>D|)1r+0tvf!>q7XL`@}UhTbM>#%j&x@;?Kzu9_hzuS6kux*14wYhDZY+G$R zY=7AH*!J5F+78=}*-qL{+s@f8*e=_y+HTlx+HTwK*&f&)*`C;**()@O*d?yaZkf z{|YaISHj)!8h9gFZ>LC0l$LZ!0+Kt@E78%adv+@(N4D0>`Xh$&bEizx%O~- zggwe0ZI{?%>~Z#?_F?v9dx|~Xo?*|n=h}zcN7zg3W%hEr(yq2^>^gg`z0TfXhwNs% z#olBeXK%Jow71x&*<0;1?QQmU`+WOC`x5(7`>*!p_LcTk_8$8h`&xUi-DcllN9`_q zpMA4^t9`ru5Bnbbe)}Q&Y5O@xn`5qHfn%{_spD72a>s9u9>?#FUI*-OIGm0?$7aVi z$4?jK-kxXabsqrl9F)CYpohqlIWOIub2Mm8cr6LG`Es zZ9qq(jc5}(4xNBbMyH~!=qz*&IuBilEx1Ns^LhW_WoI0rh1IDMV| zPNI|Sq&WkfY-gx5%qeh2IVH|mr_7n;Omk*AbDhJTBb+79kohnUoTHtM zPOEc_bG&n+v&A{p+3IX_&UG$ub~rno%bcs6tDU`0*y(UOotvCnoI9O+od=vpou{1V zotK?goj07foe!K(oKKxEoUff9oS&UPTwbmLuE8#x3-2Pks4luIz!l^QafQ1gU1C>^ zYp5&HmF!A&rMt3SxvoN2v1^p8(xq}~T(zz`*Jzj3HP$uWHQ6=Q)#{q%n(LbHTIA|* zb-8|X^|*d_^}05=5SPof(Y4LB)3w{R&vnps#C6hj&UMLk-F3@#-}Tt_)b+yk*7d>l z$@SIs!|m-J;>No1Zlas&X1D|0A#Sdl=N7o5-LdWjcal5Bo$k(d7rD#aO1H+Xb?e>r zZj-yo-Ry30Pjk<3&vMUoFLHOdyWA_>tK7f4d)*t{sC%P(n|p_QmwT`Kko&m%l>3bP zocmArCHGbLP4{j0J@-HEf8EdAuiYQqpWI*E-`xN8VfqI5`SjuX@O?lZrH|eh&==gt w=?m|R>=XAT^deKX@y?zdF@Bd}O=l|vZ8+~K`2gGY=asU7T literal 50746 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 diff --git a/hw/xquartz/bundle/Resources/Italian.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Italian.lproj/locversion.plist index 3c4e94cd1..26ba572cd 100644 --- a/hw/xquartz/bundle/Resources/Italian.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/Italian.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist index 8db4f8aba..b78c7c5fe 100644 --- a/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 76 + 83 diff --git a/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist index 05ec1981c..068c07777 100644 --- a/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib index d2eb1d110..adbcd6f5c 100644 --- a/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib @@ -1,14 +1,14 @@ - + 1050 - 10A222 - 708 - 994.5 - 404.00 + 10A314 + 718 + 1013 + 415.00 com.apple.InterfaceBuilder.CocoaPlugin - 708 + 718 YES @@ -19,7 +19,7 @@ YES - + YES @@ -229,7 +229,7 @@ - RWRpY2nDs24 + Edición 1048576 2147483647 @@ -237,7 +237,7 @@ submenuAction: - RWRpY2nDs24 + Edición YES @@ -314,7 +314,7 @@ - UmVjb3JyZXIgdmVudGFuYXMgYWwgcmV2w6lzA + Recorrer ventanas al revés ~ 1179914 2147483647 @@ -397,10 +397,10 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} - + 256 YES @@ -409,6 +409,7 @@ 256 {{13, 10}, {593, 292}} + YES @@ -425,11 +426,12 @@ 256 {{18, 210}, {402, 18}} + YES 67239424 0 - U2ltdWxhciByYXTDs24gZGUgdHJlcyBib3RvbmVzA + Simular ratón de tres botones LucidaGrande 13 @@ -456,13 +458,12 @@ 256 {{36, 40}, {501, 42}} + YES 67239424 4194304 - Q3VhbmRvIGVzdGEgb3BjacOzbiBlc3TDoSBhY3RpdmFkYSwgcHVlZGUgcXVlIGxvcyBlcXVpdmFsZW50 -ZXMgZGUgdGVjbGFkbyBkZSBsYSBiYXJyYSBkZSBtZW7DunMgaW50ZXJmaWVyYW4gY29uIGxhcyBhcGxp -Y2FjaW9uZXMgWDExIHF1ZSB1c2VuIGVsIG1vZGlmaWNhZG9yIE1ldGEuA + Cuando esta opción está activada, puede que los equivalentes de teclado de la barra de menús interfieran con las aplicaciones X11 que usen el modificador Meta. LucidaGrande 11 @@ -474,16 +475,16 @@ Y2FjaW9uZXMgWDExIHF1ZSB1c2VuIGVsIG1vZGlmaWNhZG9yIE1ldGEuA 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NjY3AA 6 System controlTextColor - + 3 MAA @@ -495,6 +496,7 @@ Y2FjaW9uZXMgWDExIHF1ZSB1c2VuIGVsIG1vZGlmaWNhZG9yIE1ldGEuA 256 {{36, 170}, {501, 34}} + YES 67239424 @@ -513,6 +515,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA256 {{18, 88}, {402, 18}} + YES 67239424 @@ -535,12 +538,12 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA256 {{36, 112}, {501, 28}} + YES 67239424 4194304 - UGVybWl0ZSBxdWUgbG9zIGNhbWJpb3MgZW4gZWwgbWVuw7ogZGUgdGVjbGFkbyByZWVtcGxhY2VuIGxh -IGRpc3RyaWJ1Y2nDs24gZGUgdGVjbGFzIGFjdHVhbCBkZSBYMTEuA + Permite que los cambios en el menú de teclado reemplacen la distribución de teclas actual de X11. @@ -553,11 +556,12 @@ IGRpc3RyaWJ1Y2nDs24gZGUgdGVjbGFzIGFjdHVhbCBkZSBYMTEuA 256 {{18, 146}, {402, 18}} + YES 67239424 0 - U2VndWlyIGxhIGRpc3RyaWJ1Y2nDs24gZGUgdGVjbGFkbyBkZWwgc2lzdGVtYQ + Seguir la distribución de teclado del sistema 1211912703 @@ -573,6 +577,7 @@ IGRpc3RyaWJ1Y2nDs24gZGUgdGVjbGFzIGFjdHVhbCBkZSBYMTEuA {{10, 33}, {573, 246}} + Entrada @@ -618,9 +623,7 @@ IGRpc3RyaWJ1Y2nDs24gZGUgdGVjbGFzIGFjdHVhbCBkZSBYMTEuA 67239424 4194304 - TG9zIHNvbmlkb3MgZGUgWDExIHVzYXLDoW4gZWwgc29uaWRvIGRlIGFsZXJ0YSBlc3TDoW5kYXIgZGVs -IHNpc3RlbWEgZGVmaW5pZG8gZW4gZWwgcGFuZWwg4oCcRWZlY3RvcyBkZSBzb25pZG/igJ0gZGUgUHJl -ZmVyZW5jaWFzIGRlbCBTaXN0ZW1hLg + Los sonidos de X11 usarán el sonido de alerta estándar del sistema definido en la pestaña “Efectos de sonido” del panel Sonido de Preferencias del Sistema. @@ -654,7 +657,7 @@ ZmVyZW5jaWFzIGRlbCBTaXN0ZW1hLg 75 - Los de la pantalla + Desde la pantalla 1048576 2147483647 @@ -744,8 +747,7 @@ ZmVyZW5jaWFzIGRlbCBTaXN0ZW1hLg 67239424 4194304 - RXN0YSBvcGNpw7NuIHNlcsOhIGVmZWN0aXZhIGxhIHByw7N4aW1hIHZleiBxdWUgc2UgaW5pY2llIFgx -MS4 + Esta opción será efectiva la próxima vez que se inicie X11. @@ -784,8 +786,7 @@ MS4 67239424 0 - TW9zdHJhIGJhcnJhIGRlIG1lbsO6cyBhdXRvbcOhdGljYW1lbnRlIGVuIGxhIG1vZGFsaWRhZCBkZSBw -YW50YWxsYSBjb21wbGV0YSA + Mostra barra de menús automáticamente en la modalidad de pantalla completa 1211912703 @@ -807,9 +808,7 @@ YW50YWxsYSBjb21wbGV0YSA 67239424 4194304 - QWN0aXZhIGxhIHZlbnRhbmEgcmHDrXogZGUgWDExLiBVc2UgbGEgY29tYmluYWNpw7NuIGRlIHRlY2xh -cyBDb21hbmRvICsgT3BjacOzbiArIEEgcGFyYSBlbnRyYXIgbyBzYWxpciBkZSBsYSBtb2RhbGlkYWQg -ZGUgcGFudGFsbGEgY29tcGxldGEuA + Activa la ventana raíz de X11. Use la combinación de teclas Comando + Opción + A para entrar o salir de la modalidad de pantalla completa. @@ -842,7 +841,7 @@ ZGUgcGFudGFsbGEgY29tcGxldGEuA 67239424 0 - QWN0aXZhciBzaW5jcm9uaXphY2nDs24 + Activar sincronización 1211912703 @@ -864,9 +863,7 @@ ZGUgcGFudGFsbGEgY29tcGxldGEuA 67239424 4194304 - QWN0aXZhIGVsIMOtdGVtIGRlIG1lbsO6ICJjb3BpYXIiIHkgcGVybWl0ZSBzaW5jcm9uaXphciBlbCBw -b3J0YXBhcGVsZXMgZGUgT1NYIHkgbG9zIGLDumZlcnMgQ0xJUEJPQVJEIHkgUFJJTUFSWSBkZSBYMTEu -A + Activa el ítem de menú “copiar” y permite sincronizar el portapapeles de OSX y los búfers CLIPBOARD y PRIMARY de X11. @@ -904,8 +901,7 @@ A 67239424 0 - QWN0dWFsaXphciBlbCBQUklNQVJZIChjbGljIGNvbiBlbCBib3TDs24gY2VudHJhbCkgY3VhbmRvIGNh -bWJpZSBlbCBwb3J0YXBhcGVsZXMuA + Actualizar el PRIMARY (clic con el botón central) cuando cambie el portapapeles. 1211912703 @@ -971,8 +967,7 @@ bWJpZSBlbCBwb3J0YXBhcGVsZXMuA 67239424 4194304 - RGVzYWN0aXZlIGVzdGEgb3BjacOzbiBzaSBkZXNlYSB1c2FyIHhjbGlwYm9hcmQsIGtsaXBwZXIgbyBj -dWFscXVpZXIgb3RybyBnZXN0b3IgZGUgcG9ydGFwYXBlbGVzIGRlIFgxMS4 + Desactive esta opción si desea usar xclipboard, klipper o cualquier otro gestor de portapapeles de X11. @@ -988,8 +983,7 @@ dWFscXVpZXIgb3RybyBnZXN0b3IgZGUgcG9ydGFwYXBlbGVzIGRlIFgxMS4 67239424 4194304 - QSBjYXVzYSBkZSBsYXMgbGltaXRhY2lvbmVzIGRlbCBwcm90b2NvbG8gZGUgWDExLCBwdWVkZSBxdWUg -ZXN0YSBvcGNpw7NuIG5vIGZ1bmNpb25lIHNpZW1wcmUgZW4gYWxndW5hcyBhcGxpY2FjaW9uZXMuA + A causa de las limitaciones del protocolo de X11, puede que esta opción no funcione siempre en algunas aplicaciones. @@ -1043,9 +1037,7 @@ ZXN0YSBvcGNpw7NuIG5vIGZ1bmNpb25lIHNpZW1wcmUgZW4gYWxndW5hcyBhcGxpY2FjaW9uZXMuA 67239424 4194304 - Q3VhbmRvIGVzdMOhIGFjdGl2YWRhLCBhbCBoYWNlciBjbGljIGVuIHVuYSB2ZW50YW5hIGluYWN0aXZh -LCBsYSB2ZW50YW5hIHNlIGFjdGl2YSB5IGFkZW3DoXMgZWwgY2xpYyBkZWwgcmF0w7NuIHNlIHRyYW5z -bWl0ZSBhIGVsbGEuA + Cuando está activada, al hacer clic en una ventana inactiva, la ventana se activa y además el clic del ratón se transmite a ella. @@ -1061,7 +1053,7 @@ bWl0ZSBhIGVsbGEuA 67239424 0 - RW5mb2NhciBsYSBwb3NpY2nDs24gZGVsIHJhdMOzbg + Enfocar la posición del ratón 1211912703 @@ -1121,9 +1113,7 @@ bWl0ZSBhIGVsbGEuA 67239424 4194304 - Q3VhbmRvIGVzdMOhIGFjdGl2YWRhLCBhbCBjcmVhciB1bmEgbnVldmEgdmVudGFuYSBkZSBYMTEgZWwg -YXJjaGl2byBYMTEuYXBwIHNlIHNpdMO6YSBlbiBwcmltZXIgcGxhbm8gKHBvciBlbmNpbWEgZGUgRmlu -ZGVyLmFwcCwgVGVybWluYWwuYXBwLCBldGMuKQ + Cuando está activada, al crear una nueva ventana de X11 el archivo X11.app se sitúa en primer plano (por encima de Finder.app, Terminal.app, etc.) @@ -1196,10 +1186,7 @@ ZGVyLmFwcCwgVGVybWluYWwuYXBwLCBldGMuKQ 67239424 4194304 - QWwgaW5pY2lhciBYMTEgc2UgY3JlYXLDoW4gdW5hcyBjbGF2ZXMgZGUgY29udHJvbCBkZSBhY2Nlc28g -WGF1dGhvcml0eS4gU2kgbGEgZGlyZWNjacOzbiBJUCBkZWwgc2lzdGVtYSBjYW1iaWEsIGVzdGFzIGNs -YXZlcyBkZWphcsOhbiBkZSBzZXIgdsOhbGlkYXMsIGxvIHF1ZSBpbXBlZGlyw61hIHF1ZSBwdWRpZXNl -biBlamVjdXRhcnNlIGxhcyBhcGxpY2FjaW9uZXMgWDExLg + Al iniciar X11 se crearán unas claves de control de acceso Xauthority. Si la dirección IP del sistema cambia, estas claves dejarán de ser válidas, lo que impediría que pudiesen ejecutarse las aplicaciones X11. @@ -1216,10 +1203,7 @@ biBlamVjdXRhcnNlIGxhcyBhcGxpY2FjaW9uZXMgWDExLg 67239424 4194304 - U2kgZXN0YSBvcGNpw7NuIGVzdMOhIGFjdGl2YWRhLCBsYSBvcGNpw7NuIOKAnEF1dGVudGljYXIgY29u -ZXhpb25lc+KAnSB0YW1iacOpbiBkZWJlIGVzdGFybG8gcGFyYSBnYXJhbnRpemFyIGxhIHNlZ3VyaWRh -ZCBkZWwgc2lzdGVtYS4gU2kgZXN0w6EgZGVzYWN0aXZhZGEsIGxhcyBjb25leGlvbmVzIGRlIGFwbGlj -YWNpb25lcyByZW1vdGFzIG5vIGVzdMOhbiBwZXJtaXRpZGFzLg + Si esta opción está activada, la opción “Autenticar conexiones” también debe estarlo para garantizar la seguridad del sistema. Si está desactivada, las conexiones de aplicaciones remotas no están permitidas. @@ -1236,8 +1220,7 @@ YWNpb25lcyByZW1vdGFzIG5vIGVzdMOhbiBwZXJtaXRpZGFzLg 67239424 4194304 - RXN0YXMgb3BjaW9uZXMgc2Vyw6FuIGVmZWN0aXZhcyBsYSBwcsOzeGltYSB2ZXogcXVlIHNlIGluaWNp -ZSBYMTEuA + Estas opciones serán efectivas la próxima vez que se inicie X11. @@ -1265,10 +1248,12 @@ ZSBYMTEuA {619, 308} + + {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1276,15 +1261,15 @@ ZSBYMTEuA 2 {{302, 440}, {454, 271}} 1350041600 - TWVuw7ogZGUgYXBsaWNhY2lvbmVzIFgxMQ + Menú de aplicaciones X11 NSPanel View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} - + 256 YES @@ -1293,6 +1278,7 @@ ZSBYMTEuA 265 {{340, 191}, {110, 32}} + YES 67239424 @@ -1316,6 +1302,7 @@ ZSBYMTEuA 265 {{340, 159}, {110, 32}} + YES 67239424 @@ -1349,12 +1336,14 @@ ZSBYMTEuA 256 {301, 198} + YES 256 {301, 17} + @@ -1362,6 +1351,7 @@ ZSBYMTEuA 256 {{302, 0}, {16, 17}} + YES @@ -1370,19 +1360,22 @@ ZSBYMTEuA 62.730998992919922 1000 - 75628032 - 0 + 75628096 + 2048 Nombre 3 MC4zMzMzMzI5OQA - + 6 System - headerTextColor - + disabledControlTextColor + + 3 + MC4zMzMzMzMzMzMzAA + @@ -1405,16 +1398,16 @@ ZSBYMTEuA - 99 + 88 40 1000 - 75628032 - 0 + 75628096 + 2048 Comando - + 338820672 @@ -1433,13 +1426,13 @@ ZSBYMTEuA - 71 + 82 10 1000 - 67239424 - 0 - RnVuY2nDs24gcsOhcGlkYQ + 75628096 + 2048 + Función rápida 6 @@ -1447,7 +1440,7 @@ ZSBYMTEuA headerColor - + 338820672 @@ -1465,7 +1458,7 @@ ZSBYMTEuA 6 System controlBackgroundColor - + @@ -1496,10 +1489,12 @@ ZSBYMTEuA -1 0 YES + 0 {{1, 17}, {301, 198}} + @@ -1510,6 +1505,7 @@ ZSBYMTEuA 256 {{302, 17}, {15, 198}} + _doScroller: 0.99492377042770386 @@ -1519,10 +1515,11 @@ ZSBYMTEuA 256 {{1, 215}, {301, 15}} + 1 _doScroller: - 0.68852460384368896 + 0.99668874172185429 @@ -1533,6 +1530,7 @@ ZSBYMTEuA {{1, 0}, {301, 17}} + @@ -1542,6 +1540,7 @@ ZSBYMTEuA {{20, 20}, {318, 231}} + 50 @@ -1556,11 +1555,12 @@ ZSBYMTEuA 265 {{340, 223}, {114, 32}} + YES -2080244224 137887744 - QcOxYWRpciDDrXRlbQ + Añadir ítem -2038284033 @@ -1576,14 +1576,16 @@ ZSBYMTEuA {454, 271} + + {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps - TWVuw7o + Menú YES @@ -1623,7 +1625,7 @@ ZSBYMTEuA - UGVyc29uYWxpemFy4oCmA + Personalizar… 1048576 2147483647 @@ -2198,28 +2200,26 @@ ZSBYMTEuA YES 0 - - YES - + -2 - - RmlsZSdzIE93bmVyA + + File's Owner -1 - + First Responder -3 - + Application @@ -2233,7 +2233,7 @@ ZSBYMTEuA - + MainMenu @@ -2478,7 +2478,7 @@ ZSBYMTEuA 196 - + X11Controller @@ -2488,7 +2488,7 @@ ZSBYMTEuA YES - + PrefsPanel @@ -2752,7 +2752,7 @@ ZSBYMTEuA YES - + EditPrograms @@ -2775,7 +2775,7 @@ ZSBYMTEuA - + DockMenu @@ -3329,6 +3329,7 @@ ZSBYMTEuA YES YES + -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3618,6 +3619,7 @@ ZSBYMTEuA YES + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3685,10 +3687,10 @@ ZSBYMTEuA com.apple.InterfaceBuilder.CocoaPlugin {{271, 666}, {301, 153}} - {{438, 548}, {619, 308}} + {{300, 409}, {619, 308}} com.apple.InterfaceBuilder.CocoaPlugin - - {{438, 548}, {619, 308}} + + {{300, 409}, {619, 308}} {{184, 290}, {481, 345}} @@ -3705,11 +3707,11 @@ ZSBYMTEuA {{100, 746}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - {{68, 585}, {454, 271}} + {{68, 453}, {454, 271}} com.apple.InterfaceBuilder.CocoaPlugin - {{68, 585}, {454, 271}} + {{68, 453}, {454, 271}} {{433, 406}, {486, 327}} @@ -3910,9 +3912,7 @@ ZSBYMTEuA YES - - YES - + YES @@ -3920,9 +3920,7 @@ ZSBYMTEuA YES - - YES - + YES @@ -3960,6 +3958,15 @@ ZSBYMTEuA 0 + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES ../X11.xcodeproj 3 diff --git a/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/keyedobjects.nib index fe4b554dbe8b9c179efa8601a3bedf730bb57046..6d445d1dbf8c3f496d87c43a9c04f97384eafdf4 100644 GIT binary patch literal 53745 zcmeFa349aP_Bei*+0ssCrezToA!0$QwbHT_L}lMp%2Fs4T4I_GC6Fd1Nm)hjMPzf| za2G{fL2*~qJ{J^sMGzNIdARf3cLkLH=iEusq)idu_xJsL-~YYG=K~~}J9q9m_uR9e zGu8FMKs45)$D0Tvf+&)Zj1;Sbb@=4GId&u(2!|%;g{x=U{#djk&lmB}2+Xk~6Y^r= z`doyU-n1cy-ilPDp%YLM>WxlD1JFP;6pciepsUe!=z4Smx*6Su?m-*SgXnqm0(up_ zhF(Wo(Oc+kv;%#HK1X}dSLl26J65oYv$26q+!h~>kHB5<3AhlSh*o`}ow zBwUT_a0rKS49~^$@VWQ`d?CIFUxU};Tk&mp1HKnOh9Ae9@#}aCegkjC@8b{fhxjx6 zJ>G}+6P0MhMcgEZ96^pG9m%nzJIN=74q@K(t3&=vU zlw3?MA=i=X$?fD0awoZ)+(#ZGkCP`zBYB2wA}^4isESmo(Hz>59z~C#$I*dw5FJKO zr)SbS8lnw!4xLZWrkt*%=hF-5#dH;2LvNvX&~@})dLMm|K1v^_o9S!xb^0#-n0`sW zqTkaW=mANRTvC?gmU5*wNR`@4M@k)~qow1d9#WAsLK-QZA&r*CN#mu7(iEvmnkMH61q^qR0(p}OzX}z>TdRTf!+9W+IZIRxPwn`sJyQIHMpGteAe@Nd* z-%3A8KTG?h{W6wavMF2gQF14_vz#Xv$S24r$^GS%(ZDkGG!$~a}JQmOcqYQmM9k~ z7b{mQ*C@9sw<~ujcPZOtq86wpsJ+!b>OggnI#?Z|o~Djg%hYM=bhTEEsSWBP^=x&Sx?H_Py;QwXU9H}( z-l0CEKCJ#teNufzeO2AAzNLPoeyo0}ex?4b{-Pexkmk~|v}{e++Gy>y&f2kBcdbY( z)=tv;YeThR+Gwp*o1{(FDzquunc57kUYo5g)XvhDXy<7cYnNzOYu9MEXlu1wwcE72 zkgBcI)@yfb_h=im`?UwON41UG-?S&SXSL_Fm$a9)E!rE}TiV;&d)oWjhuTNl=h`0a zYwa8DN9`wVueQ&HT-YVMvRv6N%a!A5?>fxY(RGxoi|ZIycUQiv&~>7#r>mE%pX(&o z0M|g*FjuLo+%?Hntfd>t}9(Px>mc^yY6<~>$=bN zul=X7f>sec}wq<>gwJYoISs!J6mGyPj_gOz={h0L&QnP-|R2tKb{lTfZMk#Yx$ZXZw(fTB_U^;n9o&bzk8mI9?&vgriW-qh1*~cs~`u5MspbH4pgG7KYz{Gpn#0WD<_L47Im$fEJl#CQ z9Br1GW6ZJUICH#NW==3Cn&svsbFx`sPBEvNm1dPW&GedQnm)7I^qV!NZB939%^7CE zoN3N7gJzu>GQ(!QIophwQ8Q*Xm~+gz<~(!0xxid#o@FjF&o<97naRz?=DFq)^E`8@ zxy)Q{t}s`c=bIOp7n&ED7n_%umztNEmz!6ZSDLHLtIVs-Ys_oS>&)xT8_XNc)#gp+ z&E^{O7IUq6t9hGwyLpFsr+JsT&RlQaZQf&UFz+?*Gw(MaFdsA@G9NY{F&{NInva=} zn@^aH=HJXG&8N(#&1cL_=CkH==4SJG^9A!o^Ck0T^A+<|^ELBzbBpD2DL@)PVOVMN1!87M|2eGggPS+ zIvRCB$Dlma6?H?$qV6ak9fyub1zzj0(y~E*za5PRssq75Z2p))P4skoe$;DOrDf%T zXrMZ1PYQ%;!gHflrDbCrN$(6WOUs4?ebJ~LE%yZ*?C8|evf&Y5ojo@knN?m|Ha;AV zd9A}U%B>eS7StD=g!)e| zEpxt4PGG>9=M;46w9>L64bfP*&cVzYbPDS4wX9KthlKrMUviURX@k&UG-OI?Sz%m> zW7 zZ{+xKjvG0ClH;d2-o)`{j$h#TC5~U=_%)8VaJ-e{H#vTb<99gT!SRP2@8S3hj=$&l zM~;8u_-BrP;rLgMf8%&B$NM?{o#O+XU`{9}GA9ZrDkmBzE>5yI$>v1o#Qi49MVF$> z(B{MD2nm9Ltq(Uu{5CU~n`JYSpuTIF%=D_sMMXox zp;#mw4BC;&HFnUh^~G#wTW>_Gy;j@OveH2Hn1)!;jwMgTE$Bvc6Y4)rTuc6%x}saq zTI68{>&7fb-bA;fTyzJz6WxW@q4ntQsikG3?NGz0m|YhwcaGDf(y|GGSkPvMI2gkDCkOe-xLZ%4&mhy&k&9md*EDlLnz&2&~WWQOgZRp*P$a`s>g zdPA^R=Zq%qUxT)w{!Np=iC$qH*b%I~7z*$Rpvz*(t$YW)JEaNdYtTEW{|>YhJ&fK< zV(|&|5V{k+k3K-Vl34s0HKI=^16u~(Q&C!0)=*t%hZLkR5;zXGc{I60FJ} z2#4(Gw5T)Ox&5SVf(-6N|3K@|r_95;vZE54`weXFx9B@|H0#pZ=KhFwrEKm#v_66M z&dt#NP6}-}Q2mj(6;srR<;3E}ZY7p}OdT4FY{5~&D1>|{hyrK<@}Y>Qo7fAiVb`=I zn;R5~_~ze&HJpX|Pbw`FU!7q(cE_n|4c1Zr$u(jBEZCEjV z_%Pgo9ml$|vsnJ*(Y`9OnoVGptRdrG;$v_g?uv6A zq~YUGBQ9VkIItJ8?&;7Mlua%wYPMg=V~cyBb+{N8uoGEVb_Od*ET<34TaQa{U)&F$ zg!|)@@hSLJJOB^GgYaP1gB7#htPeYxox%pPL2M`+&PK9PZ>JL+?iyd-NYsc=V}uf)do^jhZFh&|no*dc$w7cDF- z99Pf^k>QHOf`EhIGncS#(- z%kc`-h|kYO9T1AcF(3iQsa`7&PWT*OT^DN>V2V@FBtTB{NcL#pdIs#^R>3X zOVSp2RqG3U7hl`_Y~$R&ANdzM*M~9=ah%e%a zg=@mCA*eAim)OB)TSrh!c%F~L^D=$~HR9J&k#c$hDW_GI`GSE+{FIHGUFmgnPTQfX z3~~Z*!*Am4N#3#p9Wzk7!F|{E)a6|B4#%-o$#-uu~aDItAHKjvdK ztd<4XOjgJ0*=!bV31WZJS%5fz3`C7&aAIMwU;YG$)#XF%NW>QzH@D^e!{hg#MoveK zWOVBN(-ZgG6{7>8KpkxLxVn~8jB}q$9kB$HF8NFL%D6Q+d2b*<1VsZ7iOhnM)9 z=+*mY^h&13*FTfYLXD&@7g<<~-xf@)f0ozE8E^Z;k%%4f%yD)oI_}Jtkj#!x)IXPWZ}eQp|EuX8joz`M`08}5up%y&>W$P$B<7bMp5Ju>XAoWpM&rk_%8HxhNy*BVMcRgow{}_@~Dg^h}S~p_tv;axP2EDK_Jp)|WHQ zTUr)(X0*x$$qnR2vO0Nu)}lso8=LE_b6)e~GiTzU`3*JA4^NyIlDp74avPh^y0STm zW3vHH{=IBL%bmQRtadmcc?30*jfn@Qv9W~};&CA6rg}@u5}M=$P~THDQSv1I1g&BQ zJBN*9+0%UW^-*s$Ve+JodyZ@t;~rt0W$&^MBQKJd$jjsv@+x_aypD3o7V-w!O16W)8c7Uz`%A4<;v2sk+!eKj=*@Y)uFU(R48Ug{B|%{R`2r% zLbW69K<$j!=f{fDvIz;;I<~S}vD8ZNV?{#FQz}c#hWcVY2d1f|Wg{X1 zXYm!KWy3m{;oJPG?ZfV(|U@$y4I$?gjU1kSu ze~g`*gOP>VVhgbw*~9E1cHS`qk@JTwIc8vy^D%e)K!(~Ji2q?L*hB1o*D(XN_`t>N zLf206Gx>%5N`51IQ7(CpyhL6h+sHn$pKKGpiUa7Ag^(6B%L$?xE9Qrwj|MOdc*Sd?vGoN-IyB$tymY-NrMv6XBICpl9V_Uutq z;3?|YchTF_1NZ5?D6YVVMQP5r!MXjYCdNl0<9=V+OikdE# zgVWU(6qTU*w^ETy^JrH}=&`U8c0Rj+tpq4mvL(ALle|rSp~sWGw7}U6dIEWc7LslB zM6!?eAYYLWX;0dVd`SDy655ycqa`$(?4hU7Q|W-orDaiZA|3Z?%nrrk>nJbtJB}pb zhj3OpBp9fN%ax^N&ecJ6F>wEmOpIkK*kY@gla6dLCr5GoUJlOXq%Ftqv88Ou7|R;u zK}h_)8X@@0iN#3=uhn+p!k#^f3p_m*6?hgF^(pWal`M**b1)rJ_Yw1u2k?B9j zSuGvG@@}Cc=_q;{yNIo2ckHBR(9zUIOX(PtOUKf2bUZDi6VN7FPBx?Uw1Q5dQ)wlw zLYt^}8aRf=13R+e^Z|G9#e75TU{J6n2MrU#;oyWoeUe|mW$?)O=81C&9|Ixr(Qy+A z-Ub{?xSfX81cXy}60nh)*bEoDj&atOUCeGdX5hunfjnm5n5s+9Lw}! z|EIn_9Es&h{EvY-8e*5QYuPGxDZ8S)G+b95u|ZrLpqTvN#u?E}p|K zXO|r_u$#jea`cXsXEgW&HNFuMU#P}$JJPvyUb*9NUqj~#Hy2$%7t*t66NdQGK99cupLH)PW#VD7aOBc{3^gMbNT}GGF z6+pngm@gQv1&17<1IEMW#J%h)b|t&oQrI=+W%HvkyUuHMsEPXk<9^d5dbXjagwmj%?S&$JtW_Z93*1#{736~svDR;K+U1zK5 zRmsi1nqEV%rPq*Gf@5)Q(d^jd97%f<$MetSkZSYt<=7(s5^qCW=a zNQhm}I9tP3vm4lrtnIWRcCbb`Vq*5ZSU7#7Z=<(68+%-QW2LsK*tm;bIk*Tl--3JS za=Jkv_$GF<*RuSMA37sGA7EDw?h!}g<@BMo^m6(zeFXK-gb0TKHqytc(gfTZx)Jqn z{a`nWgZ&hpLZ6|V#KC^f#cmg;?AEkXHq-&pb;$&+$h;-pL( z60Y-wYQmZJYYTlNeZMmAMe9)P6i|FXr_jIC-2#e_T)DM{X9$H!9JL+k zG)sRZuhFaNPxR*`7WSb{WItLjPR-DWZ*H_nV{3t%dt7V-Ynw)y5|OAwncW?LEvwn$ zB$Y0gG_kmQ*?nHCeVh!No+DP8Le7#d4tJl#pOWU3Em?HAlq05mfIV1In^4eF=V-^S z9NMF>w?op>VN!=wjpJ77aOns~UZwtA;jraMI5sk6}0pJN+Y_S<9! z*(-HP=s0MTlqYqSx=F`M-KB1Ep5bDTvnSYNpcg#L9@{Ro2T;uRNykeC(h2Bz=|qk% z;kZAHKpdazwc0OSSk$|~Q(ROGVz(Cv;G({Z7JVQUQ=in6R!hC4-cldxr&mcOD3{t& zU#XvTlGI;1nS6xSqxI4NX`s|u8Y~T=tEFMmaG`dNwIhLWO~5a7);T^1VGVAG#loSu z=HCW1)0iCz`C>M(U64$ID<+~jzMvh7fvy;i)cJz(h>DeRS5uHB@vNbC&^Lct+JlO% z!*eD42g)6J^0))6Eo;mE#v0j1_7vO1Zm?dkh}Y^h(&x7$9)B?4_dsCCQ}2uVgy*aw z}o_4h&nj5`1c;kcrS2!{$HEGa4Q6!#EBSk$L)fv337 zqD8x`Hd3)PKZOuW=vC4JX(4(<5aL&K+`JhN7Ja=q38i4Scb-J*imJIr1V6L)w-~kZ9ZP{z=RrVr# z-Nm-B8*=a^E*JYCox@!wU7jX;Eeo{TV$@Sw#iX(Cf%jIr8ea=x7wH-iFBLH{>00SJ zvYUJ8egrfxK@pG)_#ytUFY=>h3M=^^$y+s@u$J9h$P8Q^+EdQ{q&0@ahKQF@xaEr77J zmSDU!wYYa5j~_HY$e?JswALQmp^(DD)QO&%Qx1|jsC2@r=#?3O+h(sV5BfWu9ISKKD;mOhforH`dg zL|{Kb=dG!m&SalSpI4QpPIa5~SrZqTSYy}6(zwT$XqVs$AF|FYdm2PWy+V{V^GZqI zqqSn($IN2c6=GcTA-|&g#gI=~8v4n`d3u|GKO=7r6H)77`{q3fLTY&jxFlbbVFu8eQaS(!G6W5o6)cE@XV zi^sD)Hlzv(<@-kVL zR|uBFvBa^QWI9bJucx5ML*ytI$rsC)B!Rv{UK|Jdn#@2eu&}sx>$SR#wIg+bSRj?7 z0MPzm075F_bHuKh5{EhFuTO>cMtQXZt(#+4X0o_NUMpA2x5deV<1CJ|QwSpo^Izkl z>*c%Udy+8UFRzZn{77b)by!{;=CE}XDnkKOhZ@9*hzL8@hhh+;O`e;Wh;u>Is~UyH zISe5iMJuQKX4&3qVW*_+`xA1bgNZgAo0<0gY55tcoBS*oVlIv?j&qVWn1h4f1)ieb zMSp?VUzA^xUryrSb-6K)gEuqdAQu*vf`efwgr=h~@(V7M;3V~eLnUL@aeM?*apbky zOb`1TqTcCY5jpVIg&U%&HmUrsyu(4p;T*Tigp3d5T~arBcN`h*IX)}}8F27>7kK*p zl{4_E{F(fD5*J^}JL0(bE;BAVz`BxW;K*U2>0uD6L0>ds&P6?;278V#ngli+@`miW zab+X*4E!wr;sARW$45e#%#`=a`{e!d@A4n=0R<@-iloSjqNs|dxRfjAshbA$nzycOJh zFgOr$2DeX46E~wr`@}4cciy%`@F;J~QHk5l#O>f73504ZO3NlqNCX3%^@%+1sZMM{ zd=}cKb4`TLz^l!1M~;u;_;!x(;J6FNw{h&@_*RbZ$Av|OCH+eJ z^s|re*`sfPC-vK+DGPfR_bBib_v*3e?PPok!b1C`0;RL!k*6zN_5GFUjOXDJnEz2k>L1Az{X$Nh`yBL<5}CVwHggU4MLfzL1E+pX6&dh zA}c(eVw3!Rw@6p;3&m-UP>6h}0C`Y7YCv{eHJU9x1LFgw3}%F10%ANUMbX^ zCX6DWP>4_@2qTO}$8}uTvRa`J!!`#|G`{hGzyyk$HW7XugX&XA2gquO(2ikyoJ|J3 z*@I??4S_^q*feL0fS5pk2TdNf3v_fKH5lV;ilaF=T7^GOP%s{5gl7Q(LAH$_%}9Pv zleDN1Wo5$lS;`{0S~(|)?VcR>%8YHtV=Infao^0?K2KSyEK`PM#&&Oxi_@^}iziIi zp+MXYX?~1={OV9O3M7w}b1VU}gniT6kpgVkaq9$dnrh=fCLJ942nwKT)R3}o&5x&Z zlwe1IVZd{p5zZkh%!JWPmCNL6<%*=1TEcPPOj>GDuRe#ap()oY*D2R0v=ZeeWw@i2 zD7R+TO8Rl!C!v*utrJigvQe#INkCH$qd9aeG%+c_Ks1g$z^>0xIC~U$96O_TNl%c1 zeG-xMqm?^vNu(fv>%V7#$8mA=?gs<=6~n+>Gzg7S?q+$nDuv1h zW6tqqZ=qb}L3F9|kn%8HqC6tcR5r@h%Hv7}B*8e+E}qW-0q+`cZA=f?5sn9OoX7D% zwx8nx93Kx4D@Hw)Cz&*^XwtAyEaI#2Ib7-)Ws?)}O9;y~%Co3{`cEyF@q$#Ryrfhl z9yEo$#PN`n2ffCmam5J`-(Y!nC|i|nQmwLGc}wmh4^ZCaco@f{*oz#G=6D?YhW*6x z#1_F9YRX$ceQ9ex))IXH1af13LGeM2ycvym< zyjI>sh+5b|k3HS?$HJgH`GR&N1_9onCmMiIx347-KPW#+b;{4mXsOP{@o5~NE`R`m z|58%i7YkQW@1mlDR{6|6Wxw*fvMn>8IRns{%GIw!XTxkpOI=SwOK@CrJ^MkVF|(GS9;4=|U6r>o)6)bvmZ|jA z9}R0oVFX1A=m&N-v3HInPw?D&6hS|rdBSG^Gy$2h3sRIZn86dL5l}?oTU^$(g#Sdf zhg7E)$KfyMcv2?#<8m9$Q_rHz8&ab7Rr@LLW`=(<#}m`wUx@~#=qL%u(sO(vx7UZh z60oJ7vO?rR6XQ@iQpoWkf{cfvsV3#yxhq}AYOYZo-$L(#Uk0V=Q$Xt=>7BC)x)SJe zpm!zCY661)iRZJhRXJD=wGlPG7Lr39u8vSgHc1Y~aTUjvO`=0R14Ktk^gu0@3e>Ua zcy&C-=QKqRrp2X;I+5kwp_Z$Y)X8dvIz^qTR;pDTdpY)VT+8t+j>8;BIiAb$!j{Bz zrs`8isD7!tI>N>AnH>8#t`bgHj;kE#;7Aw8tSAG_#DU z=GdE%F=4BH8kxanf#Ly-D-vgKP+b=%n3nL&Rp+TA)CJ0D0Z$FbwgV5xCnNv@SDRDSbEz9W~`;$i_Y&E2<7?=Qvfv@5$HNl9JimRuiAbv=C zfhs{@=JVr%Ad;dKXM!5A;mi(BHb)eJ001EZ!l_AIj6r2+a(w25by|(~#svY48-mV2 zqtIA17>z-L(0DX7K6)$~k4B-<;RV+-E7kMW5$c6;`kBFTAdP+?KGLhe(=V>` z9uoOnre3aIktCn1)yZ-4xgj(8%;dN>K|Wrq&me!S!70H3MPcy=Zf#y!^kzeK2oNfd5Yr^HeCa%L1pI1VRJ z=(R?r(?%)*fGQgZ)!8)xUo4!Um8k8Bf@@8bB|8a>!lxU~0PE}O7IlQWH4bZx3P-I)Lj^Z$a*8mu@Xw2%gL*;t@LP@W;z2)%0IC<96HXB*2>$rla(sB8(!uYb zM8MVBxT5ZO#T+%|&$w`_T=O?|uR22AAIIrg94|`8X}g6EPD_NVpjDJ=SR)!$t1_YV zY>pSEpfo1*BRJ3wauQ-G;nf0kI35{CxHdTs6LtdVuudEc7zzlL#2gNotvN>%_Dyp) zD>UQqpy|ncQ0Iw`xOY4_V6gz(0pkYMIt9#iG|bu)N!(&e{=jqt;R0p><*#IbOoC$?TDDMAtLGI6@mKb<<9Z!+0Ub7p1}o8d*<>iwSc* z5nX9XXk)ao+BmIKCJ-;?_<|&eVe7Jgg3v&l2VM<4HbGb+5lsOHcuOL4_^rce5}F9y z4UTUxwSkqyxvkKL>jfhL_5so%hW5q@16T<#GGKNNhX*zS&U%=kdz_;?Ob2X?I&q)# z^x?t|fzJ_?cnUDR3E~%Eo=*Rd)N2qs@uNbN->RWFIbI$e-JbAuI-X9gN|u}0(amg6 zoEHs3qqJ(4cdK+jUaZ;LbghEX7kIKCoD6cBEE0}T>}kmLCRWIEfO*hJ?H zHxYv4e{16KPM{2UNRwIPsIrboZt}_lM*&Yi_{e|^K*q&HLth9xrXCwQ)vZwN1uX((F44rcb|-|C2gs;Ok1u^&rB-UaeQ?esk|QFoCH#vs|wEV zt%)v2*g$8m%12O{Z%~THqRUNV5q_csgjXO(8*;19(khYcs%+RL5H1 zb|86hcLB68-r;(Q=Q_L*$kb5;os~y3iP6in%Vk-+GEOEpaC~DbnY3TH5V9gpD2iMC zVEANq!D`oP*J;;lwVCN;HOJSd(aFH13l>(N*zqP+)j4DdM}E317VdEN=6~RfZIz2x zl-acn5lBE4Q6=qm?T)4p)mrUNCm7cB)0C!+6cGXGktj&*QQWJ*Qv#8+L~co+;zizr zXQ5QgD=PBVN9^fQ=i&Ei_lZ*4c;=5?S0D7n>^0iGsQ*+k%v%q+E-5KU+C%D8Ck1Ie z7?Igtt7CM2$nW(B1NGHmU!=wx3w!H*(U>j1rQZ3tGTgcI9*8|=PZjsgvggNyX##wp3?d#*ss}B#63{xSd=>V zF15;;`!O)dQbrZ0j`{?j?2LMXodOGJ9}Cyk2JMuL<>tjQ+84@J=a#=glrDQ}L)7+0 z=SQn;I}P>Uk$%pwrmcdw+Ap}o8T<_E!Lp|TW%;VZ4YBlxYx}j|(JIoH5*_K=F|MCGrP2U&{DUgAWaGbET*M`{-VRXP?^4k!QY@bF zJj-S^UdyU;ny%RKEV`4D7}WN=+{gn__vbi%krCFzYaJDi)Yy^Xu$r=%FI3};)C>Yx zM5b5Tt!>aM>;UsJ%Vx##QxcsKPJhDT$ODN|&vE=JBW%#b8G#x*ZJy4^1JUc}IDVZG zHfl-?Qe&a~ENxU*rb(xSq7_D**72|fZY>szkNRe=jaE+uTuG6IMw1n(&ar{2VABf6*7kd^8_m{ND zp>vIOjU#(pWn_F*dmdVP`qf-`)P%RB~VzH zC@XYLc2&5hxTd1@t}43P<#i2(qC%IS?2cDYh7z_Ys&~z%C9Y@^Ngs3k zNg9$;fOfozhXnL|*8ukE(#awj)=p_dM`ZECfQ;t8113fGl09sB0y<7mD zn+miYw3|VE0a^ufJjd}rST-B)wXBr!EzZ|vXqD>xkh@zri1)e`6iknz4<421D5;OHBU zzjSak3k?!sd`Edt#()xJvO!?XOu<0NPG>L=pjGl}fq)+X0j_C|xc1NRg=+1Zv=a$vmd9h5~=X11* z^nq~%v20f7wXFJxJtq)uh-Mo7HCiQi5u*vqX5V<%6*3uGn5+%xI%6)Pd zt+&=m*&rV)57j!V^YB3Be)TgvNS!P{gZpV+lpob{b+6iyj>LUQUwN7Ala|TVc)K=B zS|R^}2N2731?fzBOAjcEND&>N4A+iOH=_H|cep=3NnWj1N!_Fe;mBOq`Nk7$x2dh2gnaU8UPB{&qf)9|-v~!eg zY9&-RsZ(5a>K1aZNc4Ii=i<(41umieo}gu`hg|Yz>a4Dwv$yt1}tZ5**ta%8^;EToa(PR-U-DHU$D_o26H>JIDQY} z(JMJ>a2O zsRa|_6-a0s!#axehAv?6*RUtp-6HMn6G*MO1B|=z9A5+}f5gM09Q)WPjwgxCy+TN+ z%Vz`GBz7Lh*K#}xH0*uA6vG^U#Bl>#5Ko>P!Md{vpzZe%{eLJsnv>&LJ=+6L`H3PR zeFZBN@!Jo;Rd%c(R5U8Q!9TYpii`)|kgb2en>!+-rlMSIDU2|>LPYyDtEbP_0SAnOvq-fEfR?lSp zmbEu)U)FwFlJ!T{fo!B$*+d$iO_es;a<;gz@2d?7k9 zyDgJBIX=TX1aMaNVQZjywKxM=-Lj8}bNkNd0jV1uDbK_wX|*^P=aSCS3Y@D9p@eM4 zN8_$|JMJo1yRM)m@($?$&XrfwQOJ{ZsXBs|D8uEMQk~XO>L$;G^jN8zIth1`XR4LB zt2#n%#9g%`lx^w=wMu!5Y{p$lXL+$)DXmZnaVO1|g2;or;sdk-hD^FjsZKH%`Df*iSmy}}49WRt)OtAzDH(!Q6iWcy*#Ftb=^R_H9M3WUrS_881j z#a@IZj0Pbz6{N);=4Bh%9q{8v>?Ow89uOrLzyb-};DzN(gvz4*91P`SSs|MMT=#0Y zrHbumBmrNP&0{aYufrGt_^TM;XAkS_%yb!h3@+BPJ?waqDY=^)Amt&`UKAUeoiwVaMrJ2uxrKm(Ch zG}l4YjoJ~)aP%Fzzqt;A9#E&s1Eip;feu1c`a_f5K{js-8&ILQVz3 zyC|a`0xAd_$Z`JvBR%8;j_aEAkgRU{D2G_})AZBzGxX7VsXj&@tB=#i>t*@`eWG5j zPtqsr75Wr?s$QvA>C<$tex~lzt98F#qucs)y;h&02lScxEIp{#=^;I=*Xy(Oh#u8r zdV@YkpR3Q)=j#jfh5A|gBK>Ur9G&T0U#y?2FVWA_m+H&(<@ySJrGCDCfqtQWk$$m$ ziGHbmnSQx`g?^>JO210KTE9lWR=-ZaUcW)VQD3d!q~ENs(Qnb$>bL5*>9^~5=y&RO z>Ff0M`rZ0H`Ud@8{XYGE{Q>-rY`4SlP=O@CA0uD_+ft-qtctMAZv>hJ0A>mP8^ zgOegoiaF`YNiR-%bJB;C5>EPZ(vOpqIO)&H$()?R$*G(S;A9{tgE$$?$q-J4ax#pQ z;hc=%WF#k}I5~}z(>XbVlhK@%ax#XKv7C(KWIQKjoJ`)dadI&ymvC|^Czo+@IVV?eawR9LIJt_Gt2w!blWRG-j+5&-xq*`# zIa$rgO`P1!$r?^>;bbi*w{mhDC%1EQ2Pbzjos+vbS;xtGPVVO99!@rJaxcs07PPjJ%6$=^76l9Q)6d76`F!dADqYSbWtu1?_r z#NPjj2GS5$ZwEbRJl#{@Ad-JVk=Hs_yc5MUI6TkO{UGJp`Ch9FG!OKMB1I20uJLqF z?^-CP>o~zz?E$6J1NF6@?y1>C`CiL%R*`%+Lw?vAFERt>p&0Ur+yO{zfwme$#3zUZ zcK^SQX950l#L69@MDyo-uVtqEHo2%Me`@l5HYfD}N^*DWjJ>BE| z3iHDjKLkAdTNhxW{IFGkCWsePL7KJ)m5V6;TtNb*qF%IG1ZN?{n_lezzZ|4zB5YvW zl}n1KPES{N6MH(dFw{%j`#Iiho#(}c!>qjMc6tV4HkiRs8)giaw>6WbcO;l z!l+Edpq-{PP6my0PP+g9zc^In`iyOe&hR*GvOL`r;evdx<@qyKg~XV4Q36 z(D*xoyjF*l4NBvLUh9~&`7$0T!&e_Fg@gy5Vf6osvG53=>?^+iq| z;J;-V1(3+mgGF@GuJJg&7)Q2rcbF*1nf$QT|Dc=lzf{@_i|f!#*d=n*^1aq^DPr~D zUAN*gAysHPMN#=->!yQ{L8dMZt>ykWX{$|1Wd9-Ags?}E7OdodJJmGbYZat1lRw%2 zuvKvo0{)lmWCn;0K_|+oirDVcYbAGYQn z0v`XZ3QJI`npWhs2B+}m^jfE6fltfYpVZ2r!avaj{^^ciX)7%bTbCcgR{eE3@NZVW z0IKrchk&U6_BrtU^*#rH+@*(rTqrC54=9@gbaX*O&5c&B6(9LwYxE&t`~RfH0xbH-6ay-?KU`rUs6C#PtC`*#mhZKCrD;Zo z))TYEZHLxCG~a6-m9n4~owD=G!G1WQSHe@1ZV`s9j}BoY{#&~N-i&|Y+6|OH1?V&? zl3Bgh;VA@>@X(0Yj3zyN-J2Su=Xp85xcQ7KEYKecU4e zucMok##PdFx>UvOFV?T;hpmhMpIYGmhMHHuR;1zoT2D0)!H2gJ8)@|&<0!u(>6=gS z()UcnMI66=YFHw_Rk)z`tU(mXfRscqTts`5w)RJw;@je^B7>wyJeg}gw z(UaTL%wHMrJ(^!RJP@>xje5q+4cU>fwe}En-@on;`wxtZRKiP7$40`n5no+2MIq`F zw(<@VjQEQ#j#LLV#I(e#+?;^;^@p&NsZUE(B{y%D0_xX)P$NY+QiCRh>zmF?;;0mO zoTy=eCpG1!z>|nc7I;!)0E-U7HU7<$OdR#IIFw>SK!OnzqosJ~avblR^L}9wn@u?- zy~5Ughd{rXIMH8KU;bnJ=!3bm`w)=)U)>Pe@IcEq2>$!6K#t()?>U_UpMKg9{hIfp;pd6mpU z4qMay)Dr%eW_U-ZFqqczneRRb9sk#S`5(Ln4CTj5f88-o3T{e#nVb4$fv9NPfzFhx z(L}P^RVNQcOVBxJ7FveRLQ_zcs-ZBNt}K$5;gj*Hq&Mk{zLh$oIkcRfro4;F&`Na@ z>8#GvYUS0kj23Dm)e&-~))7s>MMLsccA-mC)%jZa*fn_OF?xD&Lx}CZ0P|0gcP9% zltO8l)=3_qY)A7^1dUO2<$ZJp=_Ng&_CS+S1Dc5f$}n^hs&@@VW6@fzi}a8@6WkKY zHswcU2JVW!(=N}tS35`jOs!P+q8PasT`YA&OVJ9|hb~YjE5nto_!PAQdC`SvvFmDd zx;7no&^&o9>8Wlc{gff<8Z-l)E$>2g(hB7?&6b~`15mjvDI26Z+!qhR+g(>6Mn|FZ z&^SC$J{I?vYVlD}$c#eJ@sQ)Y*?#s3n+FxVzi@nj<6k-6#EH!DPaG4D+lqS1S2*6t zaW7~YaS9v6X0qArXlS^wgIx!$9VW8foM=#w>=mzIxE>0a_i+59X!uYCF9=-DK4J|V zKfrph^EheCve^q9Z|3-C(am%(RD8b4@$b;9!VATkeK{@@CCmX%6gG*~L)VAPSRLyF zZ6}Uo{a7W`Z;s+vW8Xk$iHA5o0*aN-=6D>G8h3_D=DXQYjz8qsV0%SlrN^QAcq%6@ zj=zVxQ0U^!4zRDG9JL*5!$w1y>nhQxY9*ACHn8rDbG(Ip&c-nx)R>;iUWb0TKZ!Rv zeZlco#>BfRM=+BGplQY=_9MsdaQrmKPeSP|(K&t%nn^thb<<1PPAHE)mg5bgO#5`G zw=HB{IKGjS<3!EreDU&*MI67y7I5Nbk8wgdQQ=)3BujMk=mQ0<14SM5I!>}V-p}#Z zEDP$Y3CDY&Q%Ehxv!Tg`(+Q)I<6k&FjN=!e);nKxkIjMh7N0>i?_l;4D`q31cKb_? ze`9Mo!E7@d&c0(OvlpS@`aSVVk(W5WkK;$;JiwUb9D8H3QDICmrW%z-l`+lm8fO|l zquTHrHHK|WH)@R;M!=Y9%rb&Toe?s^M!hlHh!{~LW;7UcjJd`BER~T0stBk9RtBq@n zYmMuS>x~&l?j3eU?LNn#H6NV z%BEtfre?a#EHm5GO}A;7rfHcuX0F-BY-_eN+na}(9n8bcBg`Ysj^>SDd92yp%r}oSk2ed<6U;*MM6-uk#L4rVyuiteoV>)z%bdKz$*Y{a#>wlP zY~kb$PPTHgjgvPy+0MyZoV?A+JDj}B$qr6-a`GN0?{o42C%ZWLJ14t2`H+*3IQf{9 zPdNFMlg~K$oRdAA{DYG(IQf#3uQ>UdlW#crmXq%|`JR&>IQfy2pE&uMlV3Rbm6P8% z*~`g3PWE&1J12i|a)49BDdv=LN;#D{l{r;7RXNo-b#a=-X*Q=ir*2LSPEAfNPIEZT z<+Kf_Z8>enX?so&2aJM&uIatCvaNG>4}{7;IxR-VorN<+KbcPoc7_ggwwv9_T%&oQ~miET`i*9nWbQ zrxQ4x$Z0vJlQ^BsX$7ZKIGxIAC8t%KPUF6x7RIIZT?&uI;(HmB1$t>ttErvXl9 zaypCCAg6VlhBys#TF>chP9vN~IgN4J!08-L=W;ra)A^h(;B+CUXK}iS)3Z4}hf~HW z=X5cr=W@D))AKl8%IPvrmvg#;)0Lc_&*=r6UdZW1oL1CW=&gm7LUdiby zPOswhYEG}=^jc1@$?B1sqc8kjo8H?d*?fon ze&0F2`Qv%s=Y5~K_nv#_oVkD9>xXrIuuz>qAcwjhz!`zS5b8t#Hyj2#f@962Gnj0*L^Q1OzJl1&+UkqyBukUxxXkjZ{8>iv@7K z0NgMDN2Q(t0?B~?mZ)+5YF|I>1aRX4oE*S;09-uvlmAsZfZIfE1aMpY;(*_@n|dC= z<@uvH0B85}Ha{c+xF|oj062%AO99;P0Ity=%KWerzzy-Y!SDl#+8YS`FADwdT)tnw ze*N_4xqc_&hyU6@spkOP2EW|nhh!k|zb=~nVyPdt`k@oR4FYh3fxrmA`fqhHf3z70 zWclae8i2z9+(>_FFMvz+_d}qb^~+6ukN`NVpSu9u6ae?%l2-#bAAlR}cM<{I2!FMV z7SN5{4B#gElPmyd0C0Nhc=QUAC3rUL)p=9|j+Uy&Xlr?RMQeTAkpztYqOnuin`hZxsU zSpiv1{tLOwz>(m9yg}xc)?whFOVki*sID|$Ht;{^0OJtjI9xzb05>2qATA&+ATvPO zYj&>%z3%n;8bk=<2E_%*gA_pxK`lW;gGL8U37Qww8RQGv7j!e|Y0#&juR;F={R|H9 zAMYC6D;OV43Z@1#gE_$=!TjLxU}3N*I5s#bI44*coENMP?iXAeJRsN_JR*2}@Pgpw z!Rv$3;BCQ2gHHwD3H~eiZSecx55Yh1!FVd3g%{u>@NT>pzZt(3za765zZ<_7zaM`P ze;9uhe;j`je;R)le*ymo{wn?k{x<#|{sI0m{we-B{uTZ${saCq{u}-W{ud#T(1Q>} zAP~p|fWRQI2_XbNA)Fv2L=(gWDItN7Oh_YS5V8mgLLQ-zP)tx0$_Z5j4WX7$PiQ1G z5ljS-&_aL+FkviVDq#^}HDL{59ifY`k>DZt2wMn;2&V~`3C{`dhyg@^NGCFhY$BH^ zA*K^^h$><+v6NUwEGO0yn}|lDh1f!DBQ7AWA#Nq^As!=MB;F&wAbul$Ck2oKN!>|3 zNkODw5}rgM0VEnpK$4LXNy(&CQZ}iA)SuKw8b}&V8bcaKnm}4aT1|42+@$NI`=sZj zm!x;352R0|FQjjz@8ke-Ah|mkAcvFV$qD2natb+{tRNSVRper_jXa1voIH{|iv0Wk z+iOiBPa`|YZnBrWnY@*}oxF#f9i~NZEp8So1qu?n3g+&oi5-G`)R7yG}gHlQ< zqm)xBDbnR&3nNVrIc+6v zEp0t*1I83HmAeHTo|Gj?t45#K1F% z3^IetU^3VYE+dwa#*j05GqM8m0+Ym~Faai=$zg^tdCWLwCbO7X$}D4+Gi#Z3 zOf6H#9K)Q*oXnicoX(udoXecgT*zF(T*W-jJjp!AyuiG~yv)4Hyw1GCyvMxH{G0iO z6~w}`h%7RT%Hpy@Su$24E18wbN@r!TGFjOy1uK_jWLa1(tTt9V3uX;w4P^~yjbV*r ztz~UwA*@X-l;vh^VQpjWU>#x|VLfI&W4&O#V!dI#V|`|QW&OkY#g1i5*a_?;b_zR< zEoW!2d$SenT(*&IVYjf`*zIhXJ(xX|J)Aw0J)7-jZ((m^?_lp@?_nQgA7&qAe`o*X zL~~*}@tg!s5+{X|#!2VMIoTWqr-?IwW8t)L+BoeTJ7+LwC}$RD8)pY+FK0jJAm=dW zDCZdGIOh!K9On+V2e%iO$R%^BTpE|bWpP8fe6D~i;-+%*xCLAlx0qYS?aQs<_UDe^ z{>~lC9nYP}oy?uVoyG0oF6DM{o!s5rz1;oWgWSX1OWcRt$J{5}zq!vtN<(Tw^dY~6 z%nEUb91i(A&%at>?LUXL#3nH+i>t_jvbt4|$JyPxy2`lh5XJ`8>XWAHk2}NAqL( zar`vCg5Q^~lfA>))rhwsZMO==! z8gV`1X2k7?yAdxVen$L?#6{vGNs%FuyhuT0YGit3Mr3AWc4TE_W28RP7}*v%IC5O% z)X2G!t0UJ(UW~jHc{%cGc0t8kz2mheyEL*ZlL6XD;&=fam! z!BJsR;Zc!MQBl!R$x+&)Yz!;Q4^vjMNNrX616O9MO0VR#;83} z`=Sm+9f~>)ligHAyqJAQSs7*9fG(|K`G($8? z)FE<-HjB21wuyF#c8T_i_KOaRu8MAmZj0`T?u#CYenh85tE20p;plPE9nou}w?rR~ zJ{o;0`h4`o=s%*bL|==(5q&HAPV~L#`_T_$xG~W&u`!YuX-ry-B1Rq4C#E8%e~ck! zSj?!HNip+cmd7|^+%Y?14#u2`xf%03=4H(5n71+SV{x&xSVk->mJ=HiE04{H&5X^C zRmA4S7R0Jz8)9{_hFEhf7~2v%KK5el!`N41yjUQP7c0eiVzszZ+*jOBTq~{ zI&qWOC>|gN#TIdkc%*og_;>LX@ig%~@dEKe@iFl^@ip-c@m=ws;s@eK;=jaC#V^IL z#cw4z2~k3pP$e`8LlP^=mZ&7flD-nHL?^LGS|n|fb_pz5Az39^C+U)GlpvB#5>(=r zY>{k}?2sIhT#xG>*E5a~M~b7w0de#=W*j??7Z(;69v2;#8P^=w8VASO;s(VHi5nI- zBJQ`iv2o+$CdSQ*TNCGu+ZT5_?q=MRxL0wXrQM}~lr4>wN~BV$OqwWFN~@%OrTwI} z(mJV0I#@bXI$SzZI!d}g+9lm6MWmagsPvTdwDhd>y!4{rOMJ}8L~`SwoD<*mF3IKvf;96vKg{jvJTl?876bf zyt2)*t+E}mU9vs0%L&8;asoYplMs@?O9)E{Pl!y2N{CK~O^_rUNw|~nD&bAS`-G1P zpA*@MoWzhsUSe2cM4~WJlo*p(m{^>sPApHXO4KCQB-SO`5}k>zL~r7@#2tyd689wT zPdu1-IPqxW@x+sf?~=MFF_YLyAxZosK~i>7PEu}CL6Rz|BuSmrCkaeiowO!tL(--s zG|8RhP1=&QJ!xms?xej*`;(p~y-)6z+#@+CnUG9MmL(@7Cnu*R%ab#cvy&Ccxykj( z^OF}QFH2sXye4^Fa#yk=c~df)>`wM3Z%%%b{3C^wLP?>eFjLqmsVQkG87WyQIVrg* z`6-1dx|GE!OH)>*tV`)i*_eW)xKi9H-jvNLTT`~Dd`JyW4N2vt3Q{9eqf+xy^HWu+ zC8_Gv^3=-I>eSZMb*Wvc&Qy1*H+6IB*3=!TyHoe3?oU0KdN}od>gTjxX~Aj4G)fwf zR+XkpgVKhk%}iUGwk~Z?+R3yBX&=&lrW4ZH>2c|@^rZCEba{GadQN(7dO>;U9IWEhX zH6d$a)|9O2Su?XbvgTzi$Xb-;&bpj+BkOL~{j5h>e`P(*dY1Jv>vi^)>?_$!izB&DJYIEvxw&k49xt?<`=Zhjh z5vU+3s0zA*rQj-fiZq2%QKZl)Y8Ca0MulEsR18p96$2G^#Yn{j#azWA#d^hF#R0`( z#WBSR#c9Pk#WlqZ#Vy4n#b1igif@V^ihq?jWp`yyWss7fj8%%2Qe}cNNtvolS7s=y zl+%?nm2;JgluMM$lq;00m1~vjl^c`}rBiuP`AYd(`A+#!`C0i*`9t|{E-N=HH#b+6 zTasIrTb^5)TbEE19-4>cdGog9ZOhx4wwy6l53V6yz2Z z6sQVH3d#z~3oHdQ3+5IqDp*>uqF_})XTjQnu7Zt)`wFiW-YxuG_^t3q;V)I7s)s5_ z1*qsMrb?oUS0$=aRB5UVRi3Iq)lb!5)u7U;3@WqAqH0yOtEQ`FsAj9?surjgtCp%( zsJ5zJsotnQs=ledtA46}6$KXcDC$)dTtp}$6=fII7c~^=iVQ{OB1=(gQG3zkqK!qa zB5%=_qU}XHi*^_7Ejmz)7N06UU3{+iV)5nTYsEK;Zx??kk(S6xQc5yPGE1^c6eW2j zg(XELB_-;TJ|&Y&)|IR;*;wK%K}$R(zLKpaXG?pO_9`Wo0;Tj)W+}Tgq?BJOD2*r; zmWoPGmi|@xr1V+o%hETc?@K?Heo<4@C2F<0Qr%BotFBWwsC8Vpp@2T&rAE|$orIpFcvdi+y3d&Sv#bxTU^0LaZ>M~7PO<6~os|+pklx;5C zR<^TjPuc#m>t$cde)b9M)1yyNAABETA95d{&%-{y$^*)~mG>+UE+>{#%4y}2^0M-( z@|yCxa&5V;ys6w+KA@tqqNQSJMMuTFiiH(RDwb8Otmv#jDmGQ1727IyR2;21UU918 zY{i9&KPs+Pys!9B@wwt##rKMTD{+>N=;>Lm9}a`)yS&R zRb#8hS52y#S~b0DUDc7QlU3)cE>>Nxx>|L;>SooQYGrj}wXWJwZLS8ZTdJXIYxU&n zjn%GdZ}pby?bSQ0cUSMNKG63`-(Q*_4PO(k5o)3}v6?tdswQ2Nrzy}BX-YMHG?kim zja6gQ4AuMQZ&#&)OUsK;wZ>=9$KcjwD z{ha#w^$Y8_)E})sUVp0oZ2kHATlFvMU)8^@|4{#_p;rT^A*6xd5Z(~kkk`<+pq$v)gIU0&_2+9 zYYb?lG=?_{8>1Uz8zqf7jTMd6jr|&H8|xZJG)`}v)i|edUgLts&PH$Jmd5RkI~#X5 z9&EhSc%|`rrwh@=>14VjU5YMESE1AD^g5%?tZUW%ru$tt zPB%d}NjG1&Ubj)_)VXw+Zny4??!4}j?y~Nh?u+iL?z`?^Jxu!;B-1ql{yWbByzii;PQ*%Z!_hn9*z8Y}{r%Zaif?YdmkfXnbIN zYBu%(=O9_)1Rh?roT*2P0vjKn0}fA%z@?}W|o<2=9$CH5$0rbnmNOqY0fcM zn5)hG%(dovbDP;}wwVW+hnlCDr<-S)JIwRU>&zR>h2k z02hHv!R6p8uoGMhc7Yo~1l$B-paDA?;8pNC zcoVz>-UAl5R14k0vT!V+7QRJb ziLgXjVk{Di)FQJaSyC->OK(e-MPbRa6j)T25{ueWZmF{LwbWSpTk0)Zi{4_i46s-% zt(JBRY_VH@vy8S(woJ3kw9K~5wJfu&uxzv-7MI0s@me-p_E`2=4q6UdZdo2#UR%C2 z^O~cZ#m&-YS+l&kcXM{LvN^B0pt-TRwRuqU@6FSiea%~&cQo&6KHPk?`9$;S=CjS` zo1ZklX@1xIvH5cgu|?D(YsqRUY^iMNXqnftuw_Zh@|IOCYg*Q~Y;1A1pe??Ztt~rR zcC}n-?bS+crM0qK(_8ae>str3PHdgkx~O$Y>+)8l)z`Yc^+4<4wpVR$+TOK&X#3Rm zwe6p_pKZS&9Mlc!0ri6L5D_9nREP#KAQr@dLZL7y0un+ZC>D}HQYZmRhSH!6C=1Gg za-n=k1rf$l-~p-0dY=x^vb^a^?dy@x(QU!Z@WpU|&%Tzj|np6x;H zgmzLprJdH!Z0EFxwDa1-+9TS9?V|SBc1gRmUDlr1p4^_=E^qJMp4F~s&u!0dSGAY4 ztK0ju*R|ki)9SKfR*!YFb(?jk zb+>h&^?>z|^@#Pj^_2Cj^}O|x^@{bH^``ZX^-t>q>m%zE>oe;M>uc*f>j&#+>o@Cn z>%TA#?hf~YgJB{}hN&)-}h2RFe+cmUiCx54f3KzI;51Rf5Lgh#_;;PLQ8cnUlXo(Xrr zbKwQ>B6umh0$vTTf!D!Z@J84Pqp%0w3~z{L75&a!juJiEXiX&2dJ?QwRQJ;|PGm)kS#Irdz8fxXCH zYVTvOwD+~w*z4?CyWVcJ53o1e+w4}m%|6&Z%s$dS+CJ7k!9LkO%|6rKVV`GTXkTJq zZeL|zV_#?AU`OmOyW8%wZ?*5R@3QZ;AFv;`AG4pdpRu2}U$S4ZU$@_~-?iVjKe9iu zKeNBIzZs+$R6A(gpbdkL4!S;g%;5Qhy9Rp)A0PbZkjF!nLu-echb|tvZs^{j?}q&` z?8R{M@XX-_!}Y@_4Zl15<%mxsxg+O~#75p4`C(N0DA%Z4qv!k{Fa{VS9aAzkXKd-% zjox7|^d8egrw^U6cqUwy(<-561)0s@NL+=Vc&-R8%}IEz2VG;D;usmIvn#H3ml6aOB~A`D;=GVb&d@V#Nl$d z9X`ia#}3DC$3DkF$6?1&$8pC=$7#n|#|6hF$7RPg#|_7A$34e=$0NrR$1}$Z$7{zs z$4AF!$2Z4!$4?{x2}HUhy^vspfRGUYVIXXTi|`Nu5`jb^(TEt4A_+(`l7`5U-bfar zKys0Mq!1}aN|7?80;xhYNDa~-X+U&{0Wl#U(t@-hR%9SzM}{E7k&(z~WGpfsnS@M5 zW+1bWImmouA+i`*imX6ZA)UxtqziE%n-CQ7AU_+w?`;kM)5#%^>5;=pM zM=l|kk!#3J#b?Ti4r`c(7 zwm2cD)oF7Mb`EonbdGk8b&hvVa!z&5aL#tlan5rtbS`!-buM?Vbapz|IlG(=r_pb8*>^$Q<@0#qI=9=m1aLscqbS-f$cdc@*ajkc4bU9t9%j4SY z+UDBn+T+^qI^;U)I^jC)I_J9Ry6n2c`jAr_5^F)5aSC1Yt=29|{>uso~~E5_7VIaY;fuv)AhYs8u` z69!@}7=*!?9UFoT$9}_p$Hrk3u_@SeY!)^Ln~yERmSQWg)!16B3v*zbFbwlzTd?ie zE^IG$06UBw!%kvnu=Cg@>$G+bT`Y*b@SW;cceSUEpf-Y6Wpn8xjWOXbQijd-F@8E?pk-fTkF=l4Q{i$#SOV( zx7|I&J={IoJ>EUhJ%#l6$L&waps*nQM}!hPC( z&V9js$$iCr&3)T_-~E^Sx%-X#qx+ltyZc{HfTx?Mrzglm@Q^$d58z>VSRSs2=Mi|K zJTV@rC&82KN%LfQay+@7e2>bb_LO`2dTKm%9-YVJ0X@y0c8}dN%rnw6+B4oW$ure6 z!!yUT(6h|5+OyuX!Gm~Q9=FHm+2Yym+2z^mIpjI+IpsO)x#0Q3bH#JhbH{Vf^T6}O z^TPAW^Vajp^VRdy8|dxf#d}F!nwRP2c=_H)ugEL$CU}#)sovh+d~dP0kGI-e>#g%@ zy#_DnZSh*YgS^ANqrGFj6TFkXGrV)W3%yIcE4`iGbzX;elh@<*dAED_c=vmcc#nHe zdCz+7*_xP6m51Vc- A-v9sr literal 53308 zcmeEv2Xs_b`uHuc&G6>E3BAf7paeolA%sps69hsDB_V-fNFHHeG81MdRMC4?R1`r( z?3JPd_OfDI1zmf?iWO0?3#+Ir>AMg?UccKuL zXhbJo(uTAp?Z_GAOwx_?B>l)xGK>r-<46%1PfAEBsU+1TOd@14SwfbQ6=XG8L#`(` zklV=}ev1GRo=sbOl{Sucg<~o9S)zc6tZhM(?4I(x>ST`Z9f&eoQ~1pVNKxuk>eng#Mi# zm8c{kMN%bQ@<>gkc2Xzlbg8e@PZ}f*mWE2hq><7XsYn_xO_rue)1}$cTq!6qX@zu& zv|hSFx>34Gx>dSEdQf^udRW>a?UbI8UYFjGc1iC^A4nfcpGteBFQhM}@1*agAEhHQ zlCf;artFnl$Q|U<zWEdNP%tsk~SIO#V`#iloSjqPP^d(nLv9 zS}0wWbR|dWuMAK|C?l0I%2;K*GEFH_W-ArSd?lnTR2C`cDNMOsS*@&5)+$#j*DITp zJCr+>yOal&KPfwu7nPTk_mthrr^;UCTje|DC*^15n2JpIuXu8pocU3a@4a6RIB!u6zUr|Wsw z3$9mPuesiGz3qD6^?_@TYoF_D*8$fd*RQVM+{CTAZ+745-s0ZszT5qT`$_ko-8=r?w{SixPNW3Mn6-3N`G44 zq3_h6(Vx}-qCclUufL$bsK2DYtiPhas=ubcuD_x0(%;nI(%;tK(cjhI(|7Cd>mTSJ z>L2MJ>!0X*^iTD@`e*v*`aXTX{)PUf{+0f<{*C^v{+<54en3B{|5g7%|4~1r|D^w{ z|Dyj*|5ZP%AJPA=|3m*xKdK+|AP@Es5A{eM*`s(=kLGcC+@2;L-Q)2X9@FFXqCt=Z0OZ+0+G zGdr3-vy*wc+1c!3b~Vp1&osN4>1KDchnZpaG&9X!W|o<4=9sx=Z!^#AW9FNE&305Tv$5cwPMqYis1`P;P;wE#p7)+z`i)6sCZ-~93K}52db&6kZ|3A_PP#F~T%6v-NK+)Of0C)3bmzp)$qr6$ z;p8b!Z+sKALOoF?>Q$CNBP@@}jJ}DoQ7e>#a!ZSfGh^{+FkCgGsJO7ECKRj)04A99 zCdxy7P(JEgVlUQ;O}9UU1J%|>)ED(b{RIHyYU6>~A*)!-Qc_f0_rZqVo@XE$v;hr5 z{bv>x537yEBh~grzt=l@=&(pdBv41!H&Fp#wXbc*Q#-SoK9!)?K(IixiCZj26Dw>8$P$`;@ z%1}9)fo38xqS(Pd~Ax}3S0$=?%~$4xj+uniQ}I+ z{)OXTIX=ws-#Pw`<71p)P6#KI6NwX<6NM9%6O9uW>+&|b0bF^Du)Ehxx8!GSg?2WM>bHgyYdjC}c%TDy@)J z6^L6lRc}H!Z$vkvTY#aO7Zn!;XOFLqhpc!V@6QxJ)_qN`=r*(gR>ZvQ40z<*=yr4m zYK87ZThLat4c#@ZsCaTP9*p=Wd>X+wrT>=Ks*v<-lpdrJ9exo@*>2Vv*xUYi?w0xToc|xF9=b8 z5xs<7o>^2p$%+YD2zhVCTCL*KFvtSj@`#Qh$KdjK6|o!IFoBJLh^2>n!_xU6I2Xy2XS4&V(Nu07}|I);%0 zQ@tBIJBzPI6Obj;Nd$#a0EJKxEkywo^_?MTfmN(+#2R)9b(v7Fh0$nW$+V(k@vl9s z3D!4Y9raJ}UP)!7Vm{EMPCT%Qy+S;?vE}u|12@Ml&^FwPrL%KbSJu5`Tp$>RTLqeM zTeNyJZin0B4)`?Ok@aBX*ko4DYLh6dM@wwt&bSNiiqCN1#ywcK6qIGM3$(yW$F5i7h!n6c0JvEpb!|#Q71-=OFz?am+Z)=3u zVAg^SvGLmlBz$2Y+N;uv1?-Q$nm{-n2!#T^ib!=$$chIh22QlVHTa5CTj2W*B^zId zyW$)0jrb0KJL_6@y^(Y9-IGeR#V*oAX#eq;Tnvk-I3(Ebr(`lu0ReeS`@mu(9 z{7%wN;1BERmhmY@p{RjgNwEX?Q(*@t*o^%dTD<{(j`y*NY*JFG)o15-@K^Zj2FMtn zqSR8%@A1fZ2Oq*e;h!C<)Vs0Rp$Vu9D;kT01EJv3Kr}Nm(;-Vk6#Ryd;$x)FtPr^# z3Z}6s&XjCw6&ismQ4m$2AUcG?jbnr$w2d@jQ&?A4A}~TcX!UKxV5O|f@xUA-O-VD- z9PJ=21!bqDU|~9I!ODQLQ-?)rf`RD7iW9&o5g3hf|gA9ugS zTCh2Af9bejI9Ls&o><-36cfoLQtaTT-V)|IxS2dX5~*{j>hUY-NXkfg1Aa{f<7E6w zI+8i0ip)hj$h`XN#~Pc@TCfnT-|tPEWK~3>Q7h_OXj3RQaaLoHEFe)5Lpw-qy~&zl zHw&{CECQ27ylv4WWT6TaK~WSH4v`Nn6s~w21%zW1Lq6di`NZ{w=xY?4c&@`=4WU1W zEdS@BznEM?RyKfb)x00C0Cx>a%TFAiWBjJlW0M5 z6SDt0`{$>7H)J<-p}pV4}>j!k6eF@rUk8K|j= z`D4z$rfwX0hCD0AarQ8b+v9D4T9FsXi{vHpGI@o(N?s$clQ+mN@+NtUyiMLA?~?b( zZt_0)fP6?kA|IojWDoh2>?NO(&&fWrpL|BXBwvxQ$zJj;`Hp-~4v>RrrwH?m4#%x% zg%t`F*90np;i_rD%J^Krw`oyvVJH+?6q~%H#wxZ#Rzt#ez#=+W3-?<@dHf!Gpw8%3!xt174Z6sI;hf^1_j!Kvk@y zsM!AC_qHxN4n+H*(_#N^@4w3-`V|e^kU7z{;^0!)DW4S$Rt}4VBCz|O3_DYMoiVYi z9U7>ZUlonihV3DxMa3h+V)x1(>Rg~9@t=!b=tb;7c7ErAZ2K24Zgwp3A3MM4qymQ0 zFzQ@jUxcBTunX9IY!$o7^#S>jyh;v{UF0Y7Gx>%5jl6|gkzdJS@{IWN8#zjjQAF`{ zv1l3ij6&rpS`RHZKJE=wQ=p20Y~h^=5N(lBBdH@bML zlfz_>`12c0BgbeniaBY|R4<{X*XO||Poxfac^k^&EZWC=y+t9YKKTk_MHOZ1w zArNT+{py&kv0?8B7=95@943cpN9v=U*h;pNT?(td>=Qsa?JSV~F6~0Ql3(ZkA@$?if zA@S#0gy4_g+kDxw+^n1oU)J&r-?HpJ8NTfN`akPkzM?1+gbP_G5lhIDJ z)egT1IR?d0r#yyPp%8>cf?=U)rh(e8jL#LZpAnTo5kv*i48#M@(7<9bWF`cGCV_6S zK*oehvGF=N5(!NX)_5sf-ML`=jJ2~6LY)g{hF^FZA>?A5UEjH2jV)j7HWzFD9xb7z zbUOI}wW4LToX(&#sh`fG0Xmy}3hZnxjtj96v6z~gNEEaM1n#VG9K!FgGC^w49M0z) zww_(V*06Q#x~398il!Dts%J;7x2XluI68+`(YZ88=S?jt2HjFpR6Iw_(YfFZTlCpl zc4eC0zI<$LMX)k(Rx}WY{G)l)(5awxfgK=Alg(6YV zdajsFTm&Ft z5QNTvp9AqgC{iT?Y1guAyb8OTT{X3MNi1$v`@QB|VHfJq=B)1mSl`gBx)oeRFWXEn zrkBu_^wQ&H7!WCl3iFH%TA@n#rQ8XE!I!Bvx*Li$Tza3D(940Us1^But`>A%L!O~) z>6LUHIf%B>tLZff$&5xqwq!OdDxMGuR9JH(p-L-ihwRzSjI$fr4eVBS6KmeIdG^tQ zGzrZdW`!z6U?grWjz^M2yZOhxSrXVUN0t-o1g|jrz~1XQNImulLgX=>0-oAEFQ2 z^2#=LE*Nfu(7B)l1jiPg&A%@?PYBU@ihL>rU{jp{OdA%d4umTszfYPM=}V2H{lp-= zLSLn?2@rPCHxnS-(Yc_D1H!~42-|)ig!kzOG(bN}fN&?<0y2z`qA(hXYEjtPM+zT& zFRDR7REYv96eS1grwNMQ#I^!O%WRntLi7RMe>``hoq|8V7W{b(ZKVh3LBZI=qk%=S zq-Wt0n7KB~5CwS#n8k+W@6{ z4W+hnjYhzo6HXS0=XBv63xiPS8B2y_3eWfv_6&H&wnHL}xzvn&C^eUwOD&~VQfsM= z$VPyqugceF=7=`^XM0;#Ypk$(|}h zg`_j3YAGyrlOhg7N;T2~DJsR#PN`N}NY_eJ(N40Djzv4AWn`apj#5ws*zSnmy>Z#i?mhRmIO<>UwWV(6mKV?@M`RxvYfm=z6x;ZEZDmq zx3m*K=n-kV^k~Y1o|2xf_n`Mu9%QoJQ^o~DfAkT5k)D&DPkF?v(rfh|@j=QXTC)#J z#sxzm$appeh%NGON^jjRy(PUZjgsDx-c2~06M!5^g)uY9-6z){yQTMUm)=imkQqg( zQ%$L~YT`-tf%Zrr3$@UZeJa!kBqaU9memUeq1&X-#W*kf491m;arKAXCw(o3G-LZ< zh~L{n3|b@#Z5jz2Ne85Z;)XBSw~eW!L((DXXXzKIwe&06$-ZP?vaf8r_;o#%^mpWw zev^)ZO1c76(oHEUDI3&Kw%A>svRynNOSWB8|)_C=j3`iAXjXoy-A z*20!6SP_W&Dk5QPvB-0mSt7{d57efhT~3pm3edl2KQsnnABp-`+MYFXhrvm+=+7>{ zx5ct$x%nBszPSKrUJm#;rvPWBJU9X8Pyy#~d4xPN0q3DQIDcsfXT&=OjYAPpFcd`r z=H8F`_+NNO!Fv6T$RSRjXEk|Jxlf(K7khsY86yadb_ z2$)yM7s(gfFmsF?pgE?EKs~{VRtMw3R2>3xR}l(A?m~QyT9wliFvlxulF+V_FSnsp zICeJzt>A=p@>No6`D&XJI93zTYDsASpvII}$u}mTy;VTFLEb2Da-da`(7GBz8}W8P z#VClXQLW(qsMxXwP#n^rbutncsU%1&%|;O+b75qmSoxg5e9J#u>@ZR&zD3?@<3Q)w z+XxO|*CpR4-!HY6A4EH0yT!35fdeCfgS-r1c3$=$;_@x>qX`^5DRA(V{ItBo!GWH{ zf!P=iMxZd7gCeLxXdFjt)Cg@bPJS0;HuPO6+_JEQU`roS~wgvF@9w9xivTO|mND zV&`E$2|^sfaFrcgx2&*z`M8JL52%|2A`qoT#nUE>tu{pIgO>dqu{jlmx{$1j1s00k zEXSvDyn*A59Jl4T9mj1rzK!D!9CvIwVKG7+Z|1l?$D91#*2|XV_Rh=j_0AJ+RG;jA z8NS@CzRQ>Uz0Fc9rxFDs(~62G1j1HGY#tO9M zm*vx!<>q8%_;Pw@Ew>{ckT-fy(UDIvB%k8t*eB9X9QWn;R7<;lbf#+s6-CByaKp_qKqtDM%n%m6HRrVePOZveRkKHz+KJ9hHmY(>d-a{vY7txSueTw{YB_-DofJ z3|Qm@c7%1YzjsHgZ^(I}>pL1!vM=sKkkZB>RT!`aOocVSm> zd?ve<<8G|Eh^aJ11qemFx1eFDR(L0sD1v;TaczG@lvXE7RqB4lgBcEMhO{j2R!o!mDICgzHw zIVdQ~6rec4CwwdT7v``F6~NB|4I2;;L2W0%=|d$b8)YM3-I{ArEaA~vLIc|#T~N#q zcf$(7dO=+>cypPl0mxsJQBFjY<8+8XmL~$5B8(~afXXp;Cq1)5v;y`CXOnaJH3p64i4O1=_wBrnUs zb9M@z?YOHDy_~)$!gDV=Q>jVdIj+OAW>{wje?2IL_^U5ma9gyQLs*w zY*7T5oK4D!#0cGM^O;XMztvvYbcVo_y8?HNx*aM5w_rDHipZk z$}*|7vfROC?}VR`mvlU{d-wSxPM4CUTwpsI%EjPlC@YmqmCGDQBRA=2^l9j5M7%vw zF|tsVP(Z*(wpuxL_>(FLV2>s626zqFJM^p!pS@|w%g+VV)+dqJR<59JHac|y5W3IJ z@YxZHynZmSUk(f`K&_N@X!U00G-bVVwQ`MeEyn{m9>Q@6$LDgqhIM(DE>>tR=T?v7RIYA4O!U;Q;s5s!b8^;4V9t5WI2*-nMOT8K8PRwS~ zv=QNWG*B6^bZX{z$L@`RiwXDUx|Je1>+?0JsQ=D3J`&kk`s={UOxArj?T#P$L>Ll;7KB3S=Fu zkk6W9Rm3CU4h2G1G!ALlkS`X5@DsHAbv5s{v}?Cgw_ zXqZRoOl5yU!+foL0~%%|XqeHBXqZdT*o5YY38M!YLfa^(O0iFvJ&Prh037Sqw>~Z=^5ayurS0!Kh(ILzjhcIIk>?P72c_KCi zVaBWzss6|5TIFzpFuy5BfiP#Y8#x|#9AQd@KVZfBH?&2t9+j$+lCLVxdd55JnUG?O z>{wZDKga=|(B?luXR021L28=X6c$tjoHFsa1x36A(1;T_e&7%RX8_F{%Gh?<(WW&h ziVmU0VuKIVhDy<;DNYs4;7d>+97_1sxcw0Dw^Cax`D$AS{$dCI$tmzBY%xemZuW@? z@)Vt^c1pnCRXqdXp9JtvX$1aDQDKV5;Xqcu<`rsP1L%7JTdMqIA|INPfYP=vc5n~u zHZ&0>ooM^6`W{n5|ER}tUKIRNSkF5GUI*)KOC5MV;F*CJrc)18HPIrugnqwPKL?> z!!o9GJR@N|W+vT{oSZ~P{nR4t>Ogg(Z9UW}U_I1nYKdCvSda3g_3$^e9uaTLdTa*7 z0+#|5S2UrZq1!CMFb%ATfXA=SQu5W=Nq7Q|c+5@_4?A>Q=c?{@3O(wI%hsra=u9=J z6w-BSNUa9Zm<6Iy0sF&SQ}>6p^;Qf@02KW936<)o=cF@wx?p}NMgitL9r@4_!MdPC zl8$a;Py;sX*&!lk8yPSSHR4x$zh(>2cvOr^5;Hry%-QHj!VrMb7>358(P#o1ipHZt zGzkq)jGlldq0wlZ_^q^V^^Gedf$yjqlUl2_Nqk!g{+W|7+r2Y<{Sw~nDYDOCby)o8o>ZMX^byX6uU;?mtNxUHY% z4q$VWfX#0RSj0Oa!DaR)BhhnN#}5su)-7er2&y*eN}PCum@YP&sgaK4<_Zkb$vLl4 z6yB=dCbd>KCQ(?OKw&tE!bEtvAB38JzgR~tP`4ydc(*{|z3P4H{SFF4NfbsJqR{Uh zU7t5n833HrV7S_<3B_XSI zH0nYdv^;RKa)bleyDuas`z~)(qYkAr)!jm)eyDx~8Z{0Y6*gk^HEIUmChTp-7 zfU8xBxSt)}vbF5*Y2lM-&AsYpO1`=;iPI$xPM6xEA#j>6f&eE&=`cD|{Z^p#fO-&6 zx)@Np>^PLhg?|JBZ6n7qOHPam&|w=N+qfnJfB-5OH1J{Vq!TCzsRLh z^Mqe^9>=R;ufDy`E&F@QUR^zkR^Kie8j`nYM1D?_*drWs4r#U(9P&#mk8`vj)uy>L zx00{vPIl>hhu{|^^aF%H^6gy|1h2tsZ^SLp5S^(t1Bz=cwN^lJ4ivxeIEwQ|!`3GX zPur2J#$%2)1#H|m>~gbrElEMOgWa}|-*9hW?{ZSd+O7`-je+8O1!Zk+OGZ2${sUj$ zNr&1q+5UYP#ZufRd)IB35HwU~f(q@m4obe((V@ac4izp=p@J=UCvy%pLT74c2r8s& z-GK@#fC`s1pn~5!YedLbQyaF!AXa!zWI?S3#wL_3$h5omeX(Fwt#C{#YNN48G}GrB z5d&Kk35P<~!hkOjs;Uh~V!mLwA`)I`h3zDGqcHZ;vXp!+$AJ+VWH@9=E=yS5Tu5Sx z?YfgCX^hb%I#cT>KpdzI0uWaMh^rca81Y{DPcRyI^PsCi$2yD^7FiJpXCKdGw!XC$ zjpK>H-4Moxtv0BVgtis_aE(wTpgzDl#LpKzmCl4uu>y+ao(H=?z63{x)E zhD(PM>ZlXPH?uE=E-FB+v{7jFX6b+&(Z*_UaYZrCv` zK&DM@hlsWeCmF$xtR*$Po$vx3l8kZLuB>g6!6w;+0gVFDdx(Gm8-R_Ai~I%$rV>WBr(1U@7r-KKZOz^=R zplck`HUdYAIGl*=!15680%&2pt@WJe+PV?g)OG~zmB)@Zqo7ijYRi;-4N_QwO|Ey? z*2oRMt$ks%t`lxK$>G z`D>sorLI~?E!1wbtA%Pfz7wj2{NDDlCE*HxMJQM^I}(Ui`r{FQO&}Jx#J9RTl`IVo zFk8oQF2`Hp&N6Y|d}~Q{AX$v34%F_nhm~`Dm;C@!3~Xdhb+C4iJ-CwNds0`E91P2; zTU*^~)FIkK_MLM%zR$k1ZG*=MK%&9wKy*p+z5?wr`@Rsz57_s$w(qk?`h(SWV89Bc z+%;5t+P*8!@k4Oeba4-~8D=Nv9;Q8Kk6O&}pX!gwsT+m+Yp=j4Hi+Zx_5xbQBUM!) zE2WUQeiMtbU3=4>cqqq@!98WQG0PuY5}R#VNz{{kZMT>?#_<#O%-$1Lq2oO56EQf8 z<3GdTnZQ|r*^%0K{fDD<+CFVR>BE|E{4~cq*aE-ToDIh?0)FR2BjLDR&aZu~eX~*f zM*9}Hv4wLC9yE;AorZV9!|~Q>2ekbp3!d=|JOhrbthSFJu@VJu{p&D@I%_{^`*9v4 z9RCGIXZgJyBGF1KIuce>91nym1JTMtfJGE#rQEtsJEHB!0+{FF)|`Zt#O6loJ;8;v z{dgce;YAo$IAw0I(n^`9vrEzT;{q7)G7K0!Jr4D&&=OW}l&gCFkTDx)};;~!&|9%>Fv7H=$kZ58MrEab~8zKMrA=@Fkm@YcMAlXmXRO^dS$?#fnQeRZm2Dr`^eM^3Ci)4?ZztSF2kIL&@ z9WvP zR~5&fbG*j^_p=j&J0cVWmQ8>=F9B}TRB)}3)d1Frwjb{USib-+ndJ9+Q^q$Cqjj!Y zZNF;~jQ(C==Bvgqv&?ml)Y^4!5;I>XF!N0cW^!^wNkeva?+oAXF~a$-MXn14W-b<( zS?Rjebs5^~x}4+hIR47P%(wM0V|TXUqlnqeFdr47A4Igm&LSpKJT_}wk-(Li0(;m> z)gbF!>$UyzDggbU09~1B+vAG4fpC>oSx-b^=on`xJDk*XVirZ{MSGUqhS#<`w{bkQ z!8PfCbB%q`;F271E^&++T$83c*Vyx^mmbyjlY8LO-+=H-g(ouC3f0tuB%%V{wB zD2)Ez?`?a0*GOY1e^=X&`?DsTAh>Uk-`n&!BU}%#_1b>Pfad@m*dwWc0rj>xmpIlN zUVAQit!aa6>cHf+@`l$2C$A+PADboAA<1hgU2TG0)WYPoq;rtCR*<}wbPDZja;9^Q z9TMqgx8}a-Uhh@X0d<%BpmYfL*QUtr%zwR9KG zmyhDpa6jAu-7jrco|k@ASCLy>i)fDg93HGZp^a01ls|Ws;Lo8DSdQQVJcRU?S7{y5 zeeOYWDe0vSB+p3Al}FXbfy|xf&f*GDsFS z$vw(b>TLXumZM}z2F)Xf)n4jGI)n~Zma9YQByG7g3lG43G~G3k>`@1)h01!@x#%{v zK>&G|_275_+syG~@W~dl8rF%;<9Mma z)?dS3W!qRD#~oQY8^|WJ_UwI*hqJFap2rq*{1qonIBv>Da$LmmbsUf7P~yLrO-xix zBQ~0iV%4IU`eN3M6BEMN0glTVhiLXlj-wnmXGd7Ah*!^qpk5Z6#`>_1>}OWW@fqwj zC^H+y@fr?6C5_|vSf;47BkXoITtvEebKH~T_3T|%#c?+CvvE+!Gl?x=L5}BeJb@KL zK(rs!ACRsbm$1{JzPgfiV@o-n#PMu4p5x1)%KH&c+On0R?jX!Iu**5lgS61~9N)lR zVg)RR;|n<6!!8sR4K4-P_!EZFb+~)GWiPPKk4Zez)_&eUJNI_kHgB-4Dn| z+z&~)?uXrfqTSuw736-*{kXRYC(SuIos-U-q(OrM@p96MlV%+6u4_;rO*!deHz>fF z2fghQ_}+QFGkiJu*~^zlyse#cqE8`8Ac8}}sJWl|!(9uuns^qi-sI}xnn(`27IFL@ z5O5{OUnPqF-7llno5^Q1kLFO7e9O+~q%9{+*a~)uGvX~c*XE#z{8K7?o`CDPui6WBmP^qdc>?K(I+I(ZGIbDcuSxO*sW~}JyDL|# z1>_m>jFP4HqJy<@(o|R@*bSlid&#A)MX0mdOP(N=$z!A%R}ZO7GEiq_J%rNZLXEBg z4Y`(m&t72NK;dqHGCDuU)0v-jgb#~_f?LmCW4FW5)~p-LWZjsTy#^}m3y$Z4Lf*|* zvh6IBy#OXY3OZFP9wihdB-Pj9kJoCfXN+^oV zWZPLEfQY~(9oZ4)XM`<=X=j1@U&)TJ?XaBPqA)weIO8HNG#zyMb?kY7z&0KUbw6D! z;47GLIy=H%V21%4@39xyBk&`G#J zn}Ua+b@D1r2d~5SI5Z+pAiWbFhbd11p96QaeGcVEwXNfIp!;mELmOv%9depls7%p1 zYGYlC9M8j*L;A=O+wV|U$w#pTeg}9Rj?W?09`ALiLzSNL8{l!s4@w)A$K`h5b&z~z zy;LJFA$iJnypKMF^Q5Wr=h7^aBbABrzdhh2+#nnea02o;{)Wx7osT@`WnTb_7jwLj zbz+l~?#E+n8#|qG@IHVi9ruGRW*tF6zbm+`NEqMU!tdZ%6Rrolo{a_%XB0S$im=(8 zSRmb>+VJzLMwbM@YOp58~#*Zb=I^#1w) zeV{%_AFL123-m&Ls6I>|u8+`1>SyVr^wIj+`WStzK29&v$LkaHiTWhHSf8v<(WmOu z^b);PpRSjo>+~7=Ox>@~(gXTzy+W_lEq#t&rO(xaxVb)G59!rf zt1r|S>5KIx`ci$FevZCeKUY6bXFAu<*Dug7)K};i=@;vl=qvS0^~>~C`sMm+eT{yF zzE;0dU#DNCuh*~EuhFm7uhXyBZ_sblZ_;npZ_#hnZ__vE8}&{4X8m^k4*gDji@sIg zrr)LCt>2^HtKX;JuRowas6V7Xtp7=WMBlDIsz0Vbu0Nqa$w?1RGC1kUNhT+~ILYE9 zo0A+)ayjYENggMCILYUvFDLyt>CedkP6l!^h?Bvb4B@1JlR{30ax#pQ;hc=%WF#kN zaWaaN(VU#k$rw(?ax#vSB2LD0GJ%tcoJ``Rn3KtzOyOiIC(}47;iQz4>70~tQqIW? zrgJir6F(=jI0!ip4^=41^gS8%eHlPft{$H`TktmouvPOjnPT28Lx&B;BS+{?**oZQdJ1Drg_ z$wQnx%*mfPd4!YgoIJ|OW1KwB$rGGB$;p`!@9Ah5nk%x9^N|k?MG>@Eq|#HX#Ub_9 zSV60ku!HpYgxc6#pMA=UubUHxO80wP!-+*c=sopyOFacXJ>s1ta_@^#9Qj0c9!f{x zM2TVI6Xe>u{r}Dwq4cTX-Sy1&d$UpiIh8j7q?g0NniHats%W4(1`P;9MNSjiJ|I_@ z3g!P<3l~a{c-x%h!Hq`5fSw&vpgr#3?R3A_Ou1f?ot^IY`kZ!S-{in-A7Cv(^+YFD zdRg78WO`b?*66`A>E$DXA?wVTZ~UUL6^(e$N5vuqY9Cf& z7jW22)a}2eN)E`n%|DUW1 z5uA{)*KiJ-uiHO!{3PgoI6K!T8vGLz)jzaXSRnf~XALFwgs-9k{g#0yix=ZTL#7W+ z6@^oagn$=`hWpt9a;U1Q-(Uv6oaFdefV)|W@k-S1rRtWPh`0QtUeUj869)j-HU+rU z_mriB6Vp89qH~;Iy5E~qj}cC#0XW_7?OgAs6PRxCyl&zx4e5Swi^SKI*QbePH5(O) z2A4+Q2uGh2di8tL>Mz!Um7bZRyiRh&PI|;U`Xp|`|Cd%!AkLJO<=5A}^*TKMSUXGl z%)}8s!s`Mux2#8+I&VD11M3^{_Be@O2&(&^I?M`y%&89~yff=}jy_9|cq1nvm#rs~ z&2>&irPCUhtnPFUWB~`;u0&5Z?%9=`$=+1^`bKps^$_9$->Ez zn&fWP*{Ejt?B?$bUuw%yhR><=&+ye%i>CX%O;e1N{f@3g$RH=;z4|0N?SJQ1)H}BV z$T7U0)jElJJV^s&y5AdyL#BfjwqM%q|GI%EU7QOS@t$!4ANQYl&lq^WCsGXm^a+bF zX_u2&{67@$i+FE632Xmx-I8o0`7h}w0(S4+kljzkQ3|K98AM0xg*qGu+m5!@y?8af zzAJ4z;}LJ^Nx0$P@&I8#T0M0u-ujpx@!tPW8oWOml=!bb1Q0Oa?s)&zKG(j#J3ZpP z@f1jqs$!gOj)qO9|78czfL5M%0w3_-R0bp7>ra8!|8sASb8p%-$crSs$cT5(NzCd0 zHg*5@o4V4v)K}S%|!b zP%Ww!B3W7f+9P*PI0IKkiWehn<7~_P2XVRPE$1vN&mur(T@#WE-i7 zm!E>3|BpUM7tk)=uUId=@qfOfjCemji7@;xs|KN6I7{f?u-6(?WE(U=oYFH_)YCw3 zzfTmx8{= z-jv=TD{*SCCi$I^RNbjt$E(p)B@5Z|ai>5^$GA7hde?Qu1J~E@iFfu;|3XJRuwJVa z+&NYm+?0rS=1C$1_Ga$iI1^f)niO*cEF~yXmeP9b_qK1~k)?)y(<9!yPoj_;^G^O3 zS#Yv%@WQB*yj}np(9Q}cN(Aj5@c@(#rv5I1RtdJe_9VpkUyK3H7D;{Ymas_|pMnCa zk2;%v|B=U_0?*kcAPw!yX(_7k_;*XDN4%R(0gsL8gOjJ${tLt35pTZ}guVU`YhnG~ zf|O0vKUwdTHr0y4yAe|>RXPn7r&U;$iRu-*{I#2Ssj~Q-$O-29z0(>-{Zo#+O?4ao zXbp(p+tPmAut=!3I_&F~cnvt{(fSvPBGt2_R(ix+dlEhRA67XU@h(3Ju>bL!*z|f# zce1*vloFxdes8-JeVF==tjtXCYEM=`^e^No>wBarFVKZ6^>Vw(1ccw4Q4hr54UnYS zGBL^uR9aCXq7m-}Ct;EQBIB6C0(rJpvDH~3t0)e}uS+R*OTJS1xRmB8?y^#z*T?V8 zO3~1#Scq7UORZ=u61Gne2QEF8x~pt|y~t!?g%z!Ux19)gbH;>7jc-a#qP1l@NI^`T zLFD(IS?^M!__YzYAqBvEyPc%B=r;2dyKlPH>67$KP5n{|eP|z$d(b6l7Ahjy+8FmB z+}&?I#Xnyo6xk1j?_ zTsg{ew3t4m5xPq{q@0G%Cx?|OYJrB(3RH|ghqgv_Ffru5(gAG>T8cZMc_@fhqTA2~ zbP^qcnA%n{ zc?u6wd!dQ))#Mge4<$>UfFkk~nuGhJ&gde%4|haoqiIqZilGuT6IG+ja37q9F4c4; zs5~z(Avx%NbqMaKKBg^4Rd_I3Nb^WXvg{Vxb!TFj*yQ2e2F9b(Jyn~j> zN9A_vY_tbkN`}-N-A8gsACiX_sk@Z*S`eK}_TVAXW_6HjBASmXXo2fo(Wu%Nm6Bd) zI$O$##PQwiPtf1ERDoe@?G{S zn+9hvtl{_$j$5(k#Ay*Par`Fq>b@cRA{TQkx;4*$rcUBwm7*>3QSs8D646Zg75fo7 zMh|iPi0IXY*GRAewpTQ9-p}y_j<<0_IsPlhABY~)18}m%3bqZpj0bT1cWCwPDcVIj zCzyTCCW@v?jw@Ly`xzRa*Kzy7#(9rxgJI3)Aj$hzJWjQR16T71|o8#fo0UBiOp*wb< zI85UPjvt3!+x>8mg`X3RF^-o)Q|vL0)7WcpoCmZ;vrgi@hCi{F;OvVZp+EH?9E1UF zs<;c=&YH1#Yyotaekl$O8N%^39RJKNWTW5^kXan>;rLmOA7r;fFE8}y_TgBD!#$cf zD!}L?q~6Fk`WpR={>A`fpfSi8Yz#39j6!3mG0Yflj4(zTXBnf6(Z<=v7-Ot4&L}d* z8xxF)#w4TIm~2cjrW(_X5~I|ZZj>42#tdVo;WuU(0b{mNVN@EHF~_Jf<{Cj`o-yAD z8P!JEh!{1-0wZd~jJQ#2EHoAwi;X45Qe&BMjW<(Gd36- zjZMa8<96c?<4$9XvDMgS+-2Nt++*Bp+-KZxJYYO%JY+m<{K@=P+o;ChrJZC&_ykNX&ykxv=ykfj+yk@*^ykYDz-Zb7a-ZtJb-ZkDc zb{p>-9~d7R9~mDTpBQ_LPmR6CXU6BoK4ZV}h4H2FmGQOljq$DVo$iA`csQ!-^!F;!DDU8dV?V(O;HG)&X< zaa`F-Wv5lXp0I zmy`E6+0DuOoP5B^hn#%G$;X_0!pR;^KILRDC!cZhIVbx#+0V%roP5d2SDbv!$v2#Q z%gJ|~e9y@NP7ZSNS5AK5?O*w7GX>(3naN3g7R-Crx zv<;_iIc>*jdrmuWdK#x4IrVYciPO_L?aXNxPP=k?2B&9o+Ktn6PP=p3gVPL7dvcn| zX)jK*IL+oXhtph6dvlt{X&+AWIql17KTi8|I)KxGoDSl2FsDN}E#S0})1jOW<8(Nu zBRCz&=~8zTFI%!=^Re0IGxLBkkfgb&gV45X*H)|P9vPwaJqog zD5o(_A-oG$0|Tu#s9lyS;AJ)hGHIK7b56`Wqg>BXF0 z!s$v*FXi+yPFHbyIj5^RUBl@WoUY~cN>0~tdKIVZIlY?GYdF1@)9X0Bp3@sRIWrA! zZi=M!_rqWJz+ZE{ucYC{X}CigKEEl#7yku*90h-!okrThzn8#Y-P3Ry{JRPM%1*i(cy;)@YmzsR`5@88XV>xgO4lH@S-%_2R=UL?VE-*^ zxE#L!zox!3s;Mk$n_z+T+%ytM2qXbQLV!@EB(zY1G$YbN8r%@LBqn3;6}w^=dqeNV z+?xb@8G9Ss*v2+G>ZXT_Zc8+$*7u^Zq5Wrsq_$vWiG~mznDUSFi z3VkpTz}bCvkPr3&I4R)I1aL5b%kk;h0In6lxdGe=z(3d*2=~eM()a)_&gXe)9{_(o zfSc?ir9O!D!5RSP1#r^=e*tZ=kIw}B>AuxO0JjCei2>X&0A~bn0lpZG?$?K61^mN& z!h=3&0&ofd*9qWU0B#O|Gte#qxHbSc8^HZIB0FePY3V-QE+1%oIRGCpd=Nyd2mC3% ziB8%gpMibR9|uQ9TLIvbe82n`8pk)a8^FnZ76Wijz+dchApkdlw$SHk0bD5H&jNf8 ztSt8B2nBEy0JnhF<0FTBl2w2|l{O8)*?c4c@FxNOTv|WCp9A1heW5M@XYz@;0IuD~ z18BbvR`_@q=2@7O96KRo(A*;0)f21*uc!d z;y^I4HE?9$?7$U)TLQNS?h8B@_$csc;ETXlfo}sp1bzzq9Qa@0cf23IA3gw2z?1Pb zJOj_hbMZoaEIuBefX~3^;|Jr1;0<^yei(i%eja`qejOghqxb{(U-38a_wf(#5AiSY z9|$-?0D(qWN7z8vMCc@JB_M=t1eD+=cnRAHI|;i9dkOmqKNAiSjuK7~P7}@&E)Xse zt`e>jZV~Pf?h@`39ugiCo)KOW-VojsJ`z3?z7l$g{=|O7Kq8SyAp%4uF^CvUPHG7;YqFX zW5_CUA-RNXB-_YC$xiYx@(gl2c`124`4{pP@@?`Tuu4;Kue;f(K2XCS{5ybmPZ>z8%7&J8%vu+n?jpLYopDi&8DrUt)-o! z{X)AyyF&YocAa*Uc8hkK_6O}xpg#}@kO4Zt1lRxv2nKjSC=donfi$2PC;`fV3P20! zfO^0HIDu8b8ek)^6+nP(019A$2j~X216P4-!0*6a;2!V*cnCZKp3tdufSyjzr038J z=tcBmdI`OhUQQoG*V0GRC(<4GK0!sGPsNo2A?5dgfm2p2u1=!$Ivqx7*<9Lqm^N23}rYO!x+OE%NQ#d zYZx0Dn;BaeFr$m%V(ew?XPjodX1ry5WcYlf#T)MlqwAGG-Dp zjhVqzGP9V?Oo-`Vj$n>rj$w{tj%Q9}PG(MFZen&ayO?gKm${v}lewF@mwA@?j`@N4 znfaaN$MR?OW%XwTvIr~^D}*IwrLxjk87w8MfTdv#WR=P9uyZ8A2cXva8ONVGMCC_am8E(H<6pnP32~D^SJrkLT)n`;ySn^xTCmZxZ}7JxRbcExy!h# zxGpZn^>DknJGjTVSGm`?H@LUBw}TbI1A|S$_TYuVYlA((2ZC<|_k`d=h#}07xRCUa z!jQos#*m>Q(?aHlw1;$rtPEKlvNmLW$i|RuA!x|1kUb$kha3+1CFE?#`H){jE`?kP z`7PvH$TwafkIf6?NqGspOkNf*hnL68=N0layb@j+ZxFANXXK6Hwee>1X7lFq=JOWv z7V{494)Kogj`2?LPVvt0&hdWbUFO~9{mpy9_u~if8T=@ICSS$R=I8SB`Gx!`{5kv% zzKg$yf1H1bf0ciof0O?^{}29M{yqK!{y+RD{O9~v{I{WfLqkHvq4Lm-P)(>dv^G>1 zst+}WnnT+|*M+)5cZVJdJr{aC^j_#|0Z!0I&`&@S1PM5TU;$4MA&3%41X4kvV6Z?h zXcmkROchKQ%n-~H%n{5JEE04Gx&&UqKEW};3Bf7B8NqeIUBTaiXM#_H-Y`-aCoDKj z6ebCa56cfL4XX{ahP8yXhS|d$VLye937Z?%5w<#PZP?bZ?y!?#H^Tl7dlvRRTokSd zFAUd&4-792FApCSJ~(_xcwM+Y+!j7Dd}jFU@VVg&!dHi{3*QjFD|}D*zVHL#2g5Ig z-wMAU{wlmD{JXG^5D=<_*+Pv_D;z8wBCHmggbl(*p+z`N*e0AQoGqLyoG)A~TqQg# zJSsdcJSjXaJR>|OydbxKvAivTvRFg zNiB} z;6wyR@FGGZ!Xrcx5fPCQ84;?8?1;RGf(T7SL&Ta0cf|3C>k)rPyo>aUq(@33rI9g_ zv61nS36V*WDUkyr(<8GYb0P~Oiy|jS&W~)5Tokz^a!urx$nMA;k-H)fMV^j4A9+9W zS>*dDzbJAPGm0N2iBd#mMO8#;qbj4SqH3b7QDdUUMNNpB6g4GkUDSrCO;Mdua8y^6 zD+-M|8g(M-RMeTM^HCS09!pXrgCz#ZaLEkGQpr{cBH1QEC2omF(k5^hqt8eG8ht7HO7w5h*QNf_zEZrDBBe>`Ql^wG z1gR#>3Hcx>163t>2&D~=`862=_ct#>1FA4>22vB(!0`o z(g)Iq(nr!K(r425vH%%P#+NB%*|JhurA#k_WMgELWD8}BWlLqtWgRkDwpX@a_OtAe z?1=2F?6&L=*&;{2X&A=19!3m=iH)V$Q`}in$W=G^R)1UmhqY$VqaFTqc*xA z<-`WZ@?!r*QimQpM zi>r?t8#g{~V%+4oX>o0FGvj8(ZH()TgX6ZvVR7EL9dYO4`^5K)4~WOd6XVJ8)OaAC z5zmPaju*s-#}~)zc&vD) zc%gWuc%yiy=uv!9d{ul;=#$VdAvd8s!IaRL(3H@e042;yn3FIsp*>-7!qS8l2^|UD z2~QKAC%j5{lkhI#L&C>|&k6q}`X%}&1|;GW3li%S?TOCB;fW&?M<*^zT#>jkaZTd- z#EpraiCYp6CiWzLO8k=eHSv3rUy^@PzodX9QW7PJk;F<$OwuIPCFzq)NexM0QfJcM zq{~USlO86$OZH19Ckv8elJk?b$@R(2$&-?&CbuQeN}ij%AbC;p(&QD%tCH6zZ%W>h zj3ggVzLk70`Dya27b!qDI)YYjQ2HYFaGvL#JF9W^~_?|{gW2Onx zWNAfd#c3sJwkfSM4NmJybEoY{Uz*;Xz9W5C`rh;d z>4(yfrXNeco!*;)%jlcYKLejZ%%Eh@GFTbG8GmJb&G??_m)R$?e`a7NF_V-Tk!i>@ zWj1D7GOd{{nXQ>aGo6_uGe>7m$efgUC-Xz*H)UTXUm2-XD3g?_%5XgmO zVal<}3ChXJY04SOS<1P}rOM^X4&?@Am(s2LS$S6ZK>3gIiSoJfmGX`9z4EK_yUI_6 zR|Tv1sxXyM6`_)-q^cNIoJyf8Q&p(6sv)WxRh>$&GN?wWysGW0U8+5*eX0YhgQ_E{ zW2)1tGpb)zmsB6K7+I{Wpse65epXnPC`+7`nPtvu%xcPN&T7rFXF0QmWsT07ki9S) z%l2e)Btjzh?L5;Bxxr^v}WP5OZibtQiO!0>Lu#s>JIg4^&0gq^-J|@^*i+k^+)x;>M!bV z>fZdm`Tg^W`Q-e}{M!8bd}Dq?z9qjozct^MKO-N`@5)E>-TB@5JM(wvAILvafEAoA zxKMDZ;A+A3f|~`m3+@!WFN`USEmRaH7A6;_7N!+u7OD#K3iAt#3rh-T6mBluTG&;H z7J3T13wIXoD!fqCuPC61P(&)C6w!+4MXaKrB3@Bwk*Fx5=uFW+MNf*J7riQaTlBu@ zW6>uKRa2xX)|6_>HG?#RHA6HtnmUb9W7afjnl-yLS2Wi&H#N64e`@~HJkb2D`C6P@ zoLZb-oLQ_Y&MwX^&Mz)3E-5Z69$Y-6xV;!H_7ra~-c`J}_(1WY;={!^i~lYDQv9vB zccA~keggvrk_G|;9}Mg*@h|CD5?Dekp_Bk6^b%>wz>?CEiV|(fkdm5`x)NgvSXy4% zTspF}y>xNuveJ&y)un4oH(#xg4m0mA>SNfs!W9jG8 zucf_Z{$+j2cxB46tg_rPby;Cqaal>(pt7oRUHO>uape=rCznqvpHV)$d`|i1@)PB! z%FmRaEC03pa{1Nro8^C0WL4Bx7%EH^jTKE5Efuy3d&P_jxT329t#DU#SM03VU2&k| z$e>4qdbNRCzBWuN(ne|}TA4OUo2AXss-U14V9ZKw^nvlZmT?2`KaR+!>S;BlnpVxIW>s^lgRA+~f@*PfbTw9e zs`^s(t?K*L&#QZC{AxHgqMGcQ;+nxVH8rg@qibf@%&TdySyZ#6W_!)?no~7rYR=VM zsJT`1wB|+4>zcPU?`!+jvTM1uyxP#(u-dHJirT@oRkby>b+w~wXV=cFZLeKayQJ1# zd${&k?aA8HwP$L7t9@Aexb|7?i`rMUpX&&9q&jLHP{*i?sZ-Wv*X7ma*A>RRer>+E$?>K4~6ty@vIvTk+Vwz>m#2kVa19j`lCccbpFx<_^2b!1(rE=(uVMd~EF z3|)z?OgBhZsjJeB(#_J%(aqN_)GgMn(|L5=x}CZ`x_!FCx=Xq%x@)?dy5DsVbv?RI zx-YtKy54$DeRRF7KDJ&_pIBc~Ut3>aZ>%@hTkFTvkE@?pKc#+J{i6C!^_}%_{kD3v zeqa6B`t$V{>#x*btAAVnq5f0-m-=t@y?TFrA3aAOqUY+z%s-c zK!eo)8El532B%@TVWeS_VTxgfVU}UOVYy+wVS{0lVUOV#!&$=x!zIHN!$U)l;gjKu z;hWLV$Tx-=MaD>Dv{7b^HO3h=#!1Gh#x~CfeRA8R6Gb=>741B=^xW$(=*dc(`&Pz+27pH9B3w( zgUk}M)GRm0n-k3W<|=cIS!XtwP3DQ_cJm_hQu7M)O0(O1*nHG{!hG6%#{9eaj`^us?_gNgxHJfpm}s27z2K1muGPPzZ{_C@>m~0pq{~FbPZr(?KPe4d#LQ zU?ErxmV)KrAaF2P1=fN(&;XjjMz9HN1|iT6I>F)KNN_Yb4x9*10jGg&;7o8fI2W7` zE(8~YOTiW3DsU~h0o)930TIvzVxR}y4(9>cmg~Ho&nE+7r=|)74RB( z1NwS-vs z7J)@*iLgXjq!zg)-jZlZwhXXjSX7p5ORgo~QfSdw23krj6_$~f$(E^>>6RIm*_L^h zc1wq4wPlCph~R=!nWO|@oQHP%Y& zNb6|pSnGJ}B-eYJ!@fR%j^X zgoZ<-pfS*RXc9C9ng+E&v!J=qe5f5-1TBS@Lmkj6XbrRu+5l~awn7NB4MHIg)D7)~ zc0+ri{m{?QA?OHn96Aa80-c4l=iTZ^sL zX16(Q!)zmLqikbr<86~{Q*6_0Gi;k*cF1AP7qwO+#tX*MG zvZvb9?V0v0dyYNNUSKb>544xr2iXVPtL(LQo!wwJ+d+Giz1iMsA8L2nhuKHk$Joc& zC)y|5r`c!NXW8f2=i3+Bm)MutSJ+qC*VxzFH`+Jbx7rcA%Z}N-_U-mv_C5A}_5=2V z_9OOV_7nC~_A~Y?L%%z4j=qin2f;yh&>Rd0+rf4490G^X5#f+HWR6&e!ja@ib)-9# zj%-JsqrjnYlsL*ATE`GajYH=!ILr>vVRb+byTj=i?il45>zLq}?3m`5;h621=V*5< zb}VyrI955yVJGoAtQ{WUjBb*Ya%o*!c zIFp>I&UB~JneEJT7C1G|5@)$n>m1^&aq64~r`ZWQtxm{kcRHQJouiy%ofDjsozt8% zoU@(tobArV&SlOH=W6FV=SF9z6LxNMVotAfhjX`cpYvzu;h*~b6#7%zPxpR$JS=!v z)Ub`it`F-O9xz-wJY{&+@W$cJ5u-=iMvfV|X;k;9o-qf;^o|vdtsc8$?3uCG#w{F& zjXN>!-|?a2W#jY4*N(T3@0buXp>4v_3D|^v6M=~ZlcFY-OtMaipOQIc@zeuTzfWUK z3!bi-zNih?*1v5?o2#v7=75=wne%6EnYnM4eb%(ukLUE8n?3jKe93%ud%t#SyQDp_ zy{!G^Lg~VSMb<^j7X7~X?vlaFXv^}K)hy3hUa`D&dE0Vi`5!ApD~_(X-La|z?%3aP zs^j6RoK>}}eptH=>f*WBA+zhwELt!U893BOag(tw1;HhvMJPV!!&xaSnOW@`3N_Y*t4&DH7hPT39 zFbaF%Zg>a08{P;13?GJ%!6)Hg;B)Y=@Fn;vd=0(<{|^5F--YkP58=n~Gx!Dk3Vs8> zhd;vq!e8L8a4+JI^hE*?0zyWp2pwS}Y=n#OkWeHX5hGDZG$KRfNIa5=BqIZmbVP|{ zA-PCCQiv2IrAP&$MJkbMq!!U32E>FkA{L|>fe<_5K!zbBkB#4d6dwTs@x z>f&^TbcJ?>bqTw~T~S@qE_qjcS3*~ES87*US4NkrE4wSNtDvjg)!&78kz7<4-NkZo zTp_MdSGY^;igHO^a#y@7(Usy#b7i`+T)D1%SCMO=tIRdXRq3jB)w%R8ldI9y#kd_JFdH~`>uzs$F66tm##Oi_pXnw&#teoUeq7$hX$fV zl!5{%6AeOxQ9c@miqJ?j8jV5Y&;&FY9e`$_Dl`XGqlIWOT8dVngV8Fq7Oh8(Xaj0N zo6%NuDEbpR0v(NxLnoqB(CO$*bPhTnU5GA0m!m7uHRyVD6S@UOP#5Y(yV0HK9&|r? z5Iuq(M^B+=(DUd;^a^?ny@}pN|3vShf1{7kr|1jxHTn+iLH|YnL%(AVX0U;ro^(bJgflIU?o^Nrp1O}HJA=FU}g-&tQdsZ zF()=08-1KK|6q@?XV?quHTD7fgnhxjVZCmgyRRGXCb_9@x;x0tb@SYz?kIPRTj5T0 z4{$5pxo)*v<1TTRyDQz*?mD;8ZFYlhs~d7V+#}qh-Q(Po-EHnU?soT5_X_tK_eOW8 z8+M~^k9)g&mwT`KfcuF1r2DM(0=6V)*7I~I>R(RHUHhMZeT^_fm+q2WN$Ftva&~w;x%yZK7 zi|2ypqUW;by63j%FV92IQ_pkHE6;mRkLQc0*W1_I-;4KByfiP%%klEPVP26};+1*j z-UM&5cYrs;tMcY~3%nZdKyQV2h_}XD=hb@~ycTb>7xLP@PVY$X81F>y6z>f0Ebm~+W#Bf!v6tnA!4Nf diff --git a/hw/xquartz/bundle/Resources/da.lproj/locversion.plist b/hw/xquartz/bundle/Resources/da.lproj/locversion.plist index 799458752..ee9467302 100644 --- a/hw/xquartz/bundle/Resources/da.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/da.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib index 53166fe2c..e0c838bcc 100644 --- a/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib @@ -626,7 +626,7 @@ ZXJzaWd0Lg 256 - {{74, 202}, {128, 26}} + {{70, 202}, {128, 26}} YES diff --git a/hw/xquartz/bundle/Resources/da.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/da.lproj/main.nib/keyedobjects.nib index 3b79218e1e3cf73403ad9dab8574d00715a4c181..e1c0a2eb1eb2cc4d0ea9c4acf9a01d9aca85baad 100644 GIT binary patch literal 49339 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 literal 49367 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 diff --git a/hw/xquartz/bundle/Resources/fi.lproj/locversion.plist b/hw/xquartz/bundle/Resources/fi.lproj/locversion.plist index 3c0e25c28..ec5c798d9 100644 --- a/hw/xquartz/bundle/Resources/fi.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/fi.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib index 215618845..dbdfc1e8e 100644 --- a/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib @@ -1,11 +1,15 @@ - + 1050 - 9C31 - 677 - 949.26 - 352.00 + 10A222 + 708 + 994.5 + 404.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 708 + YES @@ -393,7 +397,7 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -428,7 +432,7 @@ RW11bG9pIGtvbG1lbsOkcHDDpGltaXN0w6QgaGlpcnTDpA LucidaGrande - 1.300000e+01 + 13 1044 @@ -461,7 +465,7 @@ w6Rpcml0w6QgWDExLW9oamVsbWlhLCBqb3RrYSBrw6R5dHTDpHbDpHQgTWV0YS1tdXVudG9uw6RwcMOk aW50w6QuA LucidaGrande - 1.100000e+01 + 11 3100 @@ -470,9 +474,9 @@ aW50w6QuA 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NwA @@ -639,7 +643,7 @@ ZXR1c3BhbmVlbGlzc2EuA 1 LucidaGrande - 1.300000e+01 + 13 16 @@ -706,6 +710,7 @@ ZXR1c3BhbmVlbGlzc2EuA + 3 YES @@ -898,8 +903,8 @@ dXR0dXUuA 67239424 0 - UMOkaXZpdMOkIFgxMTpuIGVuc2lzaWphaW5lbiB2YWxpbnRhIChrZXNraW9zb2l0dXMpLCAKa3VuIE1h -YyBPUyBYOm4gbGVpa2Vww7Z5dMOkIG11dXR0dXUuA + UMOkaXZpdMOkIFgxMTpuIGVuc2lzaWphaW5lbiB2YWxpbnRhIChrZXNraW9zb2l0dXMpLCBrdW4gTWFj +IE9TIFg6biBsZWlrZXDDtnl0w6QgbXV1dHR1dS4 1211912703 @@ -1265,7 +1270,7 @@ ZXJyYW4uA {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1278,7 +1283,7 @@ ZXJyYW4uA View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1363,9 +1368,9 @@ ZXJyYW4uA YES - 1.217310e+02 - 6.273100e+01 - 1.000000e+03 + 121.73099999999999 + 62.731000000000002 + 1000 75628032 0 @@ -1401,9 +1406,9 @@ ZXJyYW4uA - 9.900000e+01 - 4.000000e+01 - 1.000000e+03 + 99 + 40 + 1000 75628032 0 @@ -1428,9 +1433,9 @@ ZXJyYW4uA - 7.100000e+01 - 1.000000e+01 - 1.000000e+03 + 71 + 10 + 1000 67239424 0 @@ -1450,7 +1455,7 @@ ZXJyYW4uA Text Cell LucidaGrande - 1.200000e+01 + 12 16 @@ -1460,7 +1465,7 @@ ZXJyYW4uA 6 System controlBackgroundColor - + @@ -1470,8 +1475,8 @@ ZXJyYW4uA - 3.000000e+00 - 2.000000e+00 + 3 + 2 6 @@ -1482,8 +1487,10 @@ ZXJyYW4uA MC41AA - 1.700000e+01 + 17 1379958784 + + 1 -1 0 @@ -1492,6 +1499,7 @@ ZXJyYW4uA {{1, 17}, {301, 198}} + 4 @@ -1503,7 +1511,7 @@ ZXJyYW4uA _doScroller: - 9.949238e-01 + 0.99492380000000002 @@ -1513,7 +1521,7 @@ ZXJyYW4uA 1 _doScroller: - 6.885246e-01 + 0.68852460000000004 @@ -1524,6 +1532,7 @@ ZXJyYW4uA {{1, 0}, {301, 17}} + 4 @@ -1532,6 +1541,7 @@ ZXJyYW4uA {{20, 20}, {318, 231}} + 50 @@ -1568,7 +1578,7 @@ ZXJyYW4uA {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps @@ -3316,11 +3326,8 @@ ZXJyYW4uA YES - + YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3380,7 +3387,6 @@ ZXJyYW4uA 169.editorWindowContentRectSynchronizationRect 19.IBPluginDependency 19.ImportedFromIB2 - 196.IBPluginDependency 196.ImportedFromIB2 200295.IBPluginDependency 200295.IBPropertyAccessControl @@ -3399,6 +3405,7 @@ ZXJyYW4uA 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 244.IBEditorWindowLastContentRect + 244.IBPluginDependency 244.IBPropertyAccessControl 244.IBViewEditorWindowController.showingLayoutRectangles 244.IBWindowTemplateEditedContentRect @@ -3420,6 +3427,7 @@ ZXJyYW4uA 272.IBPluginDependency 272.ImportedFromIB2 285.IBEditorWindowLastContentRect + 285.IBPluginDependency 285.IBPropertyAccessControl 285.IBViewEditorWindowController.showingBoundsRectangles 285.IBViewEditorWindowController.showingLayoutRectangles @@ -3693,21 +3701,18 @@ ZXJyYW4uA YES + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3722,349 +3727,350 @@ ZXJyYW4uA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{168, 821}, {113, 23}} com.apple.InterfaceBuilder.CocoaPlugin - + {{202, 626}, {154, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - + + {{349, 858}, {315, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + {{271, 666}, {301, 153}} {{706, 450}, {525, 323}} - + com.apple.InterfaceBuilder.CocoaPlugin + {{706, 450}, {525, 323}} - + {{184, 290}, {481, 345}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + {{58, 803}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{100, 746}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{68, 585}, {469, 271}} - - - + com.apple.InterfaceBuilder.CocoaPlugin + + + {{68, 585}, {469, 271}} - + {{433, 406}, {486, 327}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - - + + {{145, 836}, {357, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + {{67, 819}, {336, 20}} com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{84, 709}, {131, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{20, 641}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + {{79, 616}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + diff --git a/hw/xquartz/bundle/Resources/fi.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/fi.lproj/main.nib/keyedobjects.nib index 677f9796b35d0ad39b04d564fd24f96781173963..dfb04f15fdf9a7bc1be8bcd0bc2fd94a78a58c27 100644 GIT binary patch literal 53312 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 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib index 9917b6326..32291ca88 100644 --- a/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib @@ -1,5 +1,5 @@ - + 1050 10A222 @@ -12,7 +12,6 @@ YES - YES @@ -398,10 +397,10 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} - + 256 YES @@ -475,9 +474,9 @@ mCDsnojsirXri4jri6QuA 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NwA @@ -1026,7 +1025,7 @@ teuLiOuLpC4gA 67239424 0 - 67mE7Zmc7ISxIOyciOuPhOyasCDtgbTrpq0g66y07IucA + 67mE7Zmc7ISxIOyciOuPhOyasCDtgbTrpq0 1211912703 @@ -1049,8 +1048,8 @@ teuLiOuLpC4gA 67239424 4194304 7Zmc7ISx7ZmU65CY7JeI7J2EIOuVjCDruYTtmZzshLEg7JyI64+E7Jqw66W8IO2BtOumre2VmOuptCDr -p4jsmrDsiqQg7YG066at7J20IOu5hO2ZnOyEsSDsnIjrj4TsmrDrpbwg7Ya16rO87ZWY7JesIO2ZnOyE -se2ZlOuQnCDsnIjrj4TsmrDrpbwg7YG066at7ZWp64uI64ukLg +p4jsmrDsiqQg7YG066at7J20IOu5hO2ZnOyEsSDsnIjrj4TsmrDroZwg7Ya16rO865CgIOu/kOunjCDs +lYTri4jrnbwg67mE7Zmc7ISxIOyciOuPhOyasOqwgCAg7Zmc7ISx7ZmU65Cp64uI64ukLg @@ -1128,8 +1127,8 @@ soPsnYAg7J2867aAIOyXreq4sOuKpeydhCDqsIDsp4Dqs6Ag7J6I7Iq164uI64ukLg 67239424 4194304 7Zmc7ISx7ZmU65CY7JeI7J2EIOuVjCDsg4jroZzsmrQgWDExIOyciOuPhOyasOulvCDsg53shLHtlZjr -qbQoRmluZGVyLmFwcCDrsI8gVGVybWluYWwuYXBwIOuTsSDrjIDsi6ApIFgxMS5hcHDqsIAg66eoIOyV -nuycvOuhnCDsnbTrj5nrkKnri4jri6QuA +qbQgKEZpbmRlci5hcHAg67CPIO2EsOuvuOuEkC5hcHAg65OxIOuMgOyLoCkgWDExLmFwcOydtCDrp6gg +7JWe7Jy866GcIOydtOuPmeuQqeuLiOuLpC4 @@ -1222,8 +1221,8 @@ nbQg7Jyg7Zqo7ZWY7KeAIOyViuqyjCDrkJjslrQgWDExIOydkeyaqSDtlITroZzqt7jrnqjsnbQg7Iuk 67239424 4194304 - 7Zmc7ISx7ZmU65CY66m0LCDsi5zsiqTthZwg67O07JWI7J2EIO2ZleyduO2VmOq4sCDsnITtlbQg7J24 -7KadIOyXsOqysOuPhCDtmZzshLHtmZTrkJjslrTslbwg7ZWp64uI64ukLiDruYTtmZzshLHtmZTrkJjr + 7Zmc7ISx7ZmU65CY66m0LCDsi5zsiqTthZwg67O07JWI7J2EIO2ZleyduO2VmOq4sCDsnITtlbQg7Jew +6rKwIOyduOymneuPhCDtmZzshLHtmZTrkJjslrTslbwg7ZWp64uI64ukLiDruYTtmZzshLHtmZTrkJjr qbQsIOybkOqyqSDsnZHsmqkg7ZSE66Gc6re4656oIOyXsOqysOydtCDtl4jsmqnrkJjsp4Ag7JWK7Iq1 64uI64ukLg @@ -1271,11 +1270,10 @@ i6QuA {484, 308} - {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1288,7 +1286,7 @@ i6QuA View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1470,7 +1468,7 @@ i6QuA 6 System controlBackgroundColor - + @@ -1583,7 +1581,7 @@ i6QuA {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps diff --git a/hw/xquartz/bundle/Resources/ko.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/ko.lproj/main.nib/keyedobjects.nib index 310a9f403c3c8cf017df1f8ba37ee73a4da44614..1a91df72081739dbe4e0516cfc7ba1d4c35cc959 100644 GIT binary patch literal 46678 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 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist b/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist index d24c81354..233544b10 100644 --- a/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib index 1d3d386cb..9e99f1cd2 100644 --- a/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib @@ -1,11 +1,15 @@ - + 1050 - 9C31 - 677 - 949.26 - 352.00 + 10A222 + 708 + 994.5 + 404.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 708 + YES @@ -393,7 +397,7 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -428,7 +432,7 @@ Emuluj mysz z trzema przyciskami LucidaGrande - 1.300000e+01 + 13 1044 @@ -460,7 +464,7 @@ b2xpZG93YcSHIHogcHJvZ3JhbWFtaSBYMTEgdcW8eXdhasSFY3ltaSBtb2R5ZmlrYXRvcmEgTWV0YS4 LucidaGrande - 1.100000e+01 + 11 3100 @@ -469,9 +473,9 @@ b2xpZG93YcSHIHogcHJvZ3JhbWFtaSBYMTEgdcW8eXdhasSFY3ltaSBtb2R5ZmlrYXRvcmEgTWV0YS4< 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NwA @@ -638,7 +642,7 @@ eSBkxbp3acSZa293ZS4 1 LucidaGrande - 1.300000e+01 + 13 16 @@ -705,6 +709,7 @@ eSBkxbp3acSZa293ZS4 +

3 YES @@ -1209,10 +1214,10 @@ Lg 67239424 4194304 - R2R5IHfFgsSFY3pvbmUsIHcgY2VsdSB6YXBld25pZW5pYSBiZXpwaWVjemXFhHN0d2Egd8WCxIVjem9u -YSBtdXNpIGJ5xIcgdGFrxbxlIG9wY2phIFV3aWVyenl0ZWxuaWFqIHBvxYLEhWN6ZW5pYS4gR2R5IHd5 -xYLEhWN6b25lLCBwb8WCxIVjemVuaWEgemUgemRhbG55Y2ggcHJvZ3JhbcOzdyBuaWUgc8SFIGRvendv -bG9uZS4 + R2R5IHBvbGUgamVzdCB6YXpuYWN6b25lLCBkbGEgYmV6cGllY3plxYRzdHdhIHfFgsSFY3pvbmEgbXVz +aSBiecSHIHRha8W8ZSBvcGNqYSBVd2llcnp5dGVsbmlhaiBwb8WCxIVjemVuaWEuIEdkeSBwb2xlIG5p +ZSBqZXN0IHphem5hY3pvbmUsIHBvxYLEhWN6ZW5pYSB6ZSB6ZGFsbnljaCBwcm9ncmFtw7N3IG5pZSBz +xIUgZG96d29sb25lLg @@ -1260,7 +1265,7 @@ bG9uZS4 {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs
@@ -1273,7 +1278,7 @@ bG9uZS4 View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1358,9 +1363,9 @@ bG9uZS4 YES - 1.227310e+02 - 6.273100e+01 - 1.000000e+03 + 122.73099999999999 + 62.731000000000002 + 1000 75628032 0 @@ -1397,9 +1402,9 @@ bG9uZS4 - 1.000000e+02 - 4.000000e+01 - 1.000000e+03 + 100 + 40 + 1000 75628032 0 @@ -1425,9 +1430,9 @@ bG9uZS4 - 6.900000e+01 - 1.000000e+01 - 1.000000e+03 + 69 + 10 + 1000 67239424 0 @@ -1447,7 +1452,7 @@ bG9uZS4 S29tw7Nya2EgdGVrc3Rvd2E LucidaGrande - 1.200000e+01 + 12 16 @@ -1457,7 +1462,7 @@ bG9uZS4 6 System controlBackgroundColor - + @@ -1468,8 +1473,8 @@ bG9uZS4 - 3.000000e+00 - 2.000000e+00 + 3 + 2 6 @@ -1480,8 +1485,10 @@ bG9uZS4 MC41AA - 1.700000e+01 + 17 1379958784 + + 1 -1 0 @@ -1502,7 +1509,7 @@ bG9uZS4 _doScroller: - 9.949238e-01 + 0.99492380000000002 @@ -1512,7 +1519,7 @@ bG9uZS4 1 _doScroller: - 6.885246e-01 + 0.68852460000000004 @@ -1569,7 +1576,7 @@ bG9uZS4 {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps @@ -3317,11 +3324,8 @@ bG9uZS4 YES - + YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3378,7 +3382,6 @@ bG9uZS4 169.editorWindowContentRectSynchronizationRect 19.IBPluginDependency 19.ImportedFromIB2 - 196.IBPluginDependency 196.ImportedFromIB2 200295.IBPluginDependency 200295.IBShouldRemoveOnLegacySave @@ -3393,6 +3396,7 @@ bG9uZS4 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 244.IBEditorWindowLastContentRect + 244.IBPluginDependency 244.IBPropertyAccessControl 244.IBViewEditorWindowController.showingLayoutRectangles 244.IBWindowTemplateEditedContentRect @@ -3414,6 +3418,7 @@ bG9uZS4 272.IBPluginDependency 272.ImportedFromIB2 285.IBEditorWindowLastContentRect + 285.IBPluginDependency 285.IBViewEditorWindowController.showingBoundsRectangles 285.IBViewEditorWindowController.showingLayoutRectangles 285.IBWindowTemplateEditedContentRect @@ -3665,14 +3670,11 @@ bG9uZS4 YES + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3691,323 +3693,324 @@ bG9uZS4 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{168, 821}, {113, 23}} com.apple.InterfaceBuilder.CocoaPlugin - + {{202, 626}, {154, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - + {{349, 858}, {315, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + {{271, 666}, {301, 153}} {{437, 548}, {584, 308}} - + com.apple.InterfaceBuilder.CocoaPlugin + {{437, 548}, {584, 308}} - + {{184, 290}, {481, 345}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + {{58, 803}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{100, 746}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{68, 585}, {454, 271}} - - + com.apple.InterfaceBuilder.CocoaPlugin + + {{68, 585}, {454, 271}} - + {{433, 406}, {486, 327}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - + {{145, 836}, {333, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + {{67, 819}, {336, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + {{523, 716}, {155, 83}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{20, 641}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + {{79, 616}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + diff --git a/hw/xquartz/bundle/Resources/pl.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/pl.lproj/main.nib/keyedobjects.nib index 2aecc443f7562ff2fd2e520a10bd9cc5ddb8289f..363a2acc7a33f7458962bd1eec5bb7f1721b86a2 100644 GIT binary patch literal 52417 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 GLH-BL^ri#= literal 49985 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 diff --git a/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist b/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist index 1972524b8..d14c37b4e 100644 --- a/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib index 64cf2bd04..42b40e4a8 100644 --- a/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib @@ -450,7 +450,7 @@ 256 - {{36, 67}, {559, 28}} + {{36, 60}, {548, 31}} YES @@ -487,7 +487,7 @@ 256 - {{36, 170}, {559, 37}} + {{36, 162}, {548, 42}} YES @@ -506,7 +506,7 @@ ZS4KA 256 - {{18, 98}, {402, 18}} + {{18, 97}, {402, 18}} YES @@ -528,7 +528,7 @@ ZS4KA 256 - {{36, 118}, {525, 25}} + {{36, 126}, {548, 14}} YES @@ -585,7 +585,7 @@ IG1hcGEgZG8gdGVjbGFkbyBhdHVhbCBkbyBYMTEuA 256 - {{18, 78}, {402, 18}} + {{18, 70}, {402, 18}} YES @@ -607,7 +607,7 @@ IG1hcGEgZG8gdGVjbGFkbyBhdHVhbCBkbyBYMTEuA 256 - {{36, 44}, {539, 28}} + {{36, 36}, {548, 28}} YES @@ -715,7 +715,7 @@ cm9zLg 256 - {{17, 205}, {50, 20}} + {{17, 191}, {45, 34}} YES @@ -772,7 +772,7 @@ YW1lbnRlLg 256 - {{37, 98}, {409, 23}} + {{37, 97}, {409, 23}} YES @@ -794,7 +794,7 @@ YW1lbnRlLg 256 - {{36, 120}, {539, 23}} + {{36, 126}, {548, 17}} YES @@ -850,7 +850,7 @@ YXJhIGRpZ2l0YXIgZSBzYWlyIGRvIG1vZG8gdGVsYSBjaGVpYS4 256 - {{36, 188}, {536, 32}} + {{36, 188}, {536, 28}} YES @@ -868,7 +868,7 @@ b3MgYnVmZmVycyBQUklOQ0lQQUlTIGRvIFgxMS4 256 - {{34, 107}, {511, 23}} + {{37, 96}, {511, 23}} YES @@ -891,7 +891,7 @@ bSBmb3IgYWx0ZXJhZGEuA 256 - {{34, 87}, {501, 18}} + {{37, 71}, {501, 23}} YES @@ -914,7 +914,7 @@ ZW0gZm9yIGFsdGVyYWRhLg 256 - {{34, 62}, {553, 23}} + {{37, 46}, {553, 23}} YES @@ -937,7 +937,7 @@ eHRvIGZvciBzZWxlY2lvbmFkby4 256 - {{34, 165}, {511, 23}} + {{37, 159}, {511, 23}} YES @@ -960,7 +960,7 @@ QSBmb3IgYWx0ZXJhZGEuA 256 - {{48, 134}, {524, 28}} + {{55, 125}, {529, 28}} YES @@ -978,7 +978,7 @@ YSBkbyBYMTEuA 256 - {{48, 28}, {536, 28}} + {{55, 14}, {526, 28}} YES @@ -1011,7 +1011,7 @@ o28gbmVtIHNlbXByZSBmdW5jaW9uZSBlbSBhbGd1bnMgYXBsaWNhdGl2b3MuA 256 - {{15, 212}, {402, 18}} + {{18, 212}, {402, 18}} YES @@ -1033,7 +1033,7 @@ o28gbmVtIHNlbXByZSBmdW5jaW9uZSBlbSBhbGd1bnMgYXBsaWNhdGl2b3MuA 256 - {{31, 175}, {542, 31}} + {{36, 175}, {542, 31}} YES @@ -1051,7 +1051,7 @@ ZG8gcGFyYSBlc3NhIGphbmVsYSwgYSBxdWFsIHRhbWLDqW0gw6kgYXRpdmFkYS4 256 - {{15, 151}, {402, 18}} + {{18, 151}, {402, 18}} YES @@ -1073,7 +1073,7 @@ ZG8gcGFyYSBlc3NhIGphbmVsYSwgYSBxdWFsIHRhbWLDqW0gw6kgYXRpdmFkYS4 256 - {{31, 126}, {441, 21}} + {{36, 128}, {441, 17}} YES @@ -1090,7 +1090,7 @@ dW5zIGluY29udmVuaWVudGVzLg 256 - {{15, 107}, {402, 18}} + {{18, 107}, {402, 18}} YES @@ -1112,7 +1112,7 @@ dW5zIGluY29udmVuaWVudGVzLg 256 - {{31, 59}, {542, 42}} + {{36, 73}, {542, 28}} YES diff --git a/hw/xquartz/bundle/Resources/pt.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/pt.lproj/main.nib/keyedobjects.nib index 7129958e4609addb2efec12bd7f773ebb79a3f5b..ed121ede67352b58c7663450b683062b3d84c00b 100644 GIT binary patch literal 50446 zcmeFa2YeLO_Bejal-*2bG8Y-|zSTzTe+__;EKobLZZ3&pG$B zd(W9!)fN6wI4kRQgb_g$Nk~Qta-xLEUFKWCkUvmW+$9{Sp3=n^EGhTTw}O+q1ZK^# zO2VOJgqPp?DpHYS#>l}v?Te+pu#aJ{nN;K%Wi7Hw2Spyb%SCTN8cIajs5k0|2BHEq z1dTwW(OPsPx&_^e?nRHF-RKFl7d?sgq36*H=wj3$L-0+~o=keQ^0EFw$DDsnlwf?P?iChN!sas}B)c91K`UF0Eh z1$mh4CXbUR$@Am|@)~)ayi49ApO8<`VDXVIZ_7%iklbON17XV96njF!^?t)`3UV#?_KCYEG>~Pk}j4mlU7S>rE8@drJJNp z_?Wa=+9KT{ZI$jsze(Gq?b6-SJ<|Qs9_dNxDd}nHS?ML|W$88Pb?Kn=H|Z1UQ|UA5 zOX(}=AJVtdPttGFF`39tIYHKBQ*I@Z-tt-UKzWcnST2x9 z$Rp(hXP5E8DT;|fw_B~j58LusM3 zRN5+TrIXTGNmIHjy_75^Tgg%KmA=Z^%1~vPGF%y<6e`8a1Z9RYQ#nuZDYKQiN>B+Y zVWmb{tSnKO!jh})nNOZJP_BmQR+BrHnIy$;LvK?nS`YZb!LmVR=5%ki+|5yz8`ryTnn&p2Lm zyy`gMc+2s&<9)|Rj>C?xoEJGSbzbef&UwAF&bh(4(YeWayYp`6JyxXzUX|(`7%fVo3otzov%7yOPHe(txmf^yHUGIyIH$MyH&eQTd!@y{NsUy{x^W?blw_4rs4wuWN5;Z)$I8Z)*p&ceHo4 z_q6x5541zt-?R_4kF<}qPqa_9&$PqZ=h_kN3++qoEA6QEckOHK8|@$3x7v5w_u3EI zkJ?Y#KeeB=U$kGf-?U@e@7nQ1l!y~aB2APMO>`tW6B81(#Kc5B(MU{6G!tEk z$%!ozTPC(jY@OI9F(t8WVrpW$#P*4&C3Z;cnCMRIl-M~jEwM{t*TmBkyCrr{Oiw%` zF(WZEu~%Y_o}_=JAJzY^f31I`|3m*)|4#p2|3Uvz|4IL+{5UbiBW1;#%!a^C^!7Z9AmCgVN@DbM!={x<{3dFWQ2_x zW4^J#SZFLV78^^9^Npp(1;&L2Gq|zLxX8HJxWrg)tT0v@tBgyH%Z$~=<;E4pmBv-Z z8slo?8e=Va(74vP&bZ#FHP#t*#tp`e#!be}#x2IJ#%;!WV}r5L*ko)rwive?cNklZ zJB@9|c4LQemvOgokFnF(W!!7rXWVZ*U_59%WISvf8IK!J7<-K;ji-#K zjc1J)jF%^Lsj8`{IAkUx9T_MInaG8bQ47=(wL+~?8xS9Ch+hPtD4bOy>mnWzWqiF%=|iAA3Afk1d-my!x!C^VzUGsafyqpU?Cp}-5^ zx)qw}tEjO;UbAhHXHZFr6$<%h`78Y4MPvM>k$W?WJOzQODyt;y4^)Mw6?uw$m6qsd zT9Id1&{t_K2n6RsE4xP+VQP^FI)FcCL>@TNK#{%!L1;NFP!%rpRr$)Spw~2uJQMvP z|EvmYlE11nu)u~pGLL9?ZJL1_hMiL6DY6!Z$M{R9+pyRVFv980oH#kz!|6@T$w_yn zaPlZ8k8zUD=?x4qm6L9q-k6M}Yaiw0@dL;}IVcz9O^Zws=FenC;YJ^nkNQq2^7IUa zgZ`>ACe0}F463fK@R#@iT?f#as6RRjojuv6gB6-;|54?uv^Jo#(K%>n-_Pc8C9 zY_|||+-i3-5}msNor^}H0n>|O16$zw9`d1Cs05WF3(ZDls2usx95feIph{GQ0;n3zLqQZmVN`?W zqXlRoT7(v(CFp##6kUKWL=17X3|)jSMwg)FXa!n{R-sGLWoR|J99@B~L|36T=xTHg zOJHr;uN-5JDaSI$2^=SKY;c^!v5VtY9Jl5;h2!=dci`B~@#!3Q=QxAo9vt`LIG5wz z9QWb)9FB)^Jc{Gd92ary;dnB~(>b2WaS6xe9M9o6!0~*J7jS$&#}{zSI9|r_MI2wu z@hXllEH*$P4$Io*79LL{r`~$~7ar`qUh!e~S>Zt z=ta!P6ZVBIyPFr$OY6}~Xu#BZK)t59K*%R=D2h6}?SAy?2J|XA0E4zH@)Y@Jjj0J& zSmBt&n<*~Fe#W!K8>kMw#Zp)*)7USE%p`OW8R#AKE_x5Wk3K+$(BII9=p*zo`UHK7 zK0}Am=jaIf0)2_TLPycx(bwo3^bhnc`VM`Mewbe5u?6TvzqP0Z(&FE7)bo7H#e(tv5Au_!3S zmW6`o3si+lkRSO_2)WT@l#Q|{6?w+`s;r8rr2myk#WoUCm*n=$%gX7SV`b#_&2-28 zSUPn{ZcbLFJ0~w|=^N-cGBCmz6O@4^EMo<$V!oi8##^E4Kvk&)E6r0gYrfxF5Sm=% znJ;h})vbUyhS)^b*@Y4NJ|doR0xP}^Yb@*Qop zqO<7?vq@uJ-xRY+67xvL8kTT3+#M@0Q8tlHV5hUR=p&h|cr)&Sd*WU=3uogT){XUM zL)Zv5nvH!c(oG)5xHnG5X*eJE#r*&YIBjB)r@*SHm{Q~!S|#Ke>&o(2cb4vCUA<=O zB}=mVX1a5-vw&IhvT`!r*?pHT{Q#eX3_Ji2#Dnl)T!4q*p?DY`jz{2;_*^^+k4AUm zB0L6ti^rln@pznyd*BH;1y2N!)7ojk0WM?yIn>!c&FS2J0JW?5U}) z4g|xtDF-UU=HjIKv4&U`zD3jHpv{@lVANy@|BhHLOJY6Ewk(S!u`^f(>t;TiJmRcz z#{*_NG!#{$8dQOND2Uvs5(Q8V3Ly)*g=yeMVX?+wZOuXf6h=QF3x!@s2A+cM!&C7z zJRQ%#Gba{#faNC_d1i~*vL0yz&p_fI%XCRCr;n~F@t69B2YpqgwoJx8Y_7*98W1PP zu_feqFHofm{Na-F1IWPT*pKH-i|7fVIdWLG5Y@N>SFXpEAgEhJXD#q*>tVZ109S9s z)p#Dx6NZyb5g_h#FhRlEgCBO=5Dss`VO)df;{|BItamaR zh!9I+1H9%^kLC7-{qudLzEGyy7jlO!@HN~PSQLT>t&qFa=bq&Y27T^Q%Ux+z)r8#D zfl{l|?FZJLZ3X>7cS)eq9SFI75u17CyJ;%o7B_<7JNPW4&OGZ z$TO+jAGX*zqq2JTvH$f$HaBd**R03apaBg*+KkuXE%*j@4jaS~ z*g1otDo zM)OdO&>A)mfKCD0RH4I>E8tWDwt&=dFu zcmtk?{_1%x%1hv|#?x0=gs5jzMCIcz@Ru<}<*{*Wd=ybY+3Y-lsK01S{D4z&P7~64 zSOy#GHBa|gWi|ewJK(Oc{Jxs71!7i+;nDyI(U2d6md}<#zu;dt;9v1?B7P8wHw+2} zeTya)dBnGE{bXgjb8`h{`+*^p*JtTc`}yN|{svp0*$s0u-L{p~M_5e#a-boE9SR9$ z#hY+PA`^wE#KESp8SFZ?o4xZUGDrfRPc(cDx}GEw9j9RpUqW2qV3t}{VgGEu6$G2q zHc{DhHkEZ{Y3xik4f^hb@<~f3jmw@iv??6*mD)2SZAi*`l7a@zh&>3lZR5e(k@jM+ zj%+%c$-JW1Yoon(X41GE+gumsCz$KxbkYqg!uVdx&Wq0N3|4$Q$sn1e2kA+Akt~u; za+r@<%+DCRn5|^1*;S2rgtW)`qz}ml9wF_Sm*ufpti;K@UQp$Lz5M@zxk(1$RFctz zMM_x)^Lfoq6GA><5No#O4+nrheDnRGc|!#4jEn(Wz-F_uD6pUpa_bjfVAenIsznt}Bmc8&7p)nCt(2uIc5{)iIdzra~@d&15RN#XEpO5@vVMp77;(*AK zC6+TN6i^}dGnvSZN`zXOjRGhr1cogvW+OkULjK4?x5WuO30JL%KnIaxtEbt`IES`~ zXgvB*(H2xkK+Me}Mu)NCcVodp+LOs-3Yi+i^Mz~WUc$qPkIW(^;Etd>@VTTEZ6~wQour)j$!s!*%*Cms zlJr2|q3vipnMZ;oM8aM(wLXXezNl3a9#r8ktE#lB!osW=6buFyj17eRVBCr;V}sUg zD;Ts&hnALEUhq{Wgsc#(wqe0QB?L?${s}HlNCZt<96x^i_{D>MALukOOEO2X3s?oK zWErfA`JGM|zRD#b7D!f>4Llxi&`rlP$U@eGWtwJWfucv4^d31s66M+$jc}2r9vnM z6I)dUjI(7?>6M+I>CWz#EiA3xneN<^nJwgHoJt~IlQ3p4Vi}Bq^qM3ve`aGFkF>{& z$y?;@xS=m$%cBcg7}9-(V$JObQH7I^eF(20@rLvY){k9mOU{94sE~PJxQ``13mcdqf&E&!WSUOJm1H;3y;rgfw%TjB^O#MbIV&p~>1mgjV*|u~bX2m!3(R##raXrwWh{}e3 zK{fkPS;X^#o*?$2m+EA6Ca%73PZBGk%kPjUN7od^#M^B?2!1|+| z*mQP1s}QKnMsXoKiZ9UkJx?>vvm}Ix} zZDw294z`os-$)?Q4mh9Y)4o7D+JV)wJaz-S(aCD-V~sgN&FB3!1{{o2X=W1!yoqJ7 zx`5d-j-Y^2uvj3-4HgMlK#P&jmLE-lUQ9>Qb7Mdkuv^%zQJ`&6)>rrl@HZHNZ#N1) zMM6(>99}_t;8oZbp|`Pq>}H4tTonhH%`;#&ff;9;Xz~7CXJN)w3knBO=Llzj(FjJJ z{hZCMC!AiKe+XO!-1da<2yMQDYrv<#Ph~ME;HfdlgC<8tw4WM}h6=tNf`%eDDn{ec zAXJ1rXc!ub#-ry^5h_3~Q4j=zfgr_fqdYtNFUVM0ic@LNCQP)6Ww7-DbA+Ik?F-v11FZCCu>oFv zz3Mp?3fN{lj8q|b1Ed7__RZpEF0F_$YaZLeZjZ-JzR>u+v;Gop=Hpb_s|jxIU>R(4 zz#P>qZW_~fG;*Wvk+@Vey3sI(lpcwD{10MiDZL;LLwB-m@ffm06uo=r{uS<7iBoA) z4ZWRZu&n`eOtTm|75e*y%LZBjB6kqEiJBmGjHn)0H9~IKri!h9EVNL#VPFP<0|ufG z^aaEd>tl_9=6UH#dQ}{z?qYYx1Rt1>y@fIJ7Z+L`PNhxFg?m^A+i~)R2HTW?G&|VU zSXec;xK3SAMNxDL3vDsIjjoR&r-1EZ_ePP^yLYBLJEynM3OQg)okT0#fmhI+m{z!t z^rJ z_%?eiY6-r=iZ|2!^i_I*zD8fCZ?MPNQ|wvxBHPbiZ>+ob;(U6LicmV;%l5E5_5|DO zWP9o@!0d z>6i2?!Eyj*0ehP5i-IX^zI=Oi=jGTNjwiDDzQZf%t1+H?hV^4l0ngov#x<}3n&%Mv z>W3$g*gnB&z^xI(HMa5^?)unV26_S7HuPe^1dd7=xH}v91jhnr1J}X&w{15FAOgol zuh<-4zt3ayG4u}bM0c0$R^X1?ehtjXcFW`8fE5GJMWv0sek#!{bVNV_4tac^&DcG_ zSHIHVVg$=$&#~vD1QU*TZ#&fSm-tFja4J2}gs)y;8SGiF*>a3~SfC`}h7AbI9dH*0 zYC={s93|BLy-K+^ML2(lpo$w31Gf zI>bM9fjTo`sV*S|bK&-3(|O!-VsQl&EQp_q2KOu!MkS~xN}m)F(r{8BwoN7t0DUD5X4BcbLR)>?C|Ds4 zlZHoB)IZpJ5fvq!%ZfKiqomPNp;RP|VehjK*{AFXJKBiu(g2(&_XAF+>} z?A@5+%+3=U=`RYn08W)gHv#z*mcc#@m|dIMnQjDbBi&QK`lFHv?8H*kSS(5d@M3Ac zv>-OE0`?g@9G#XBi+yY#Be!3sJGb{qf_c&fc!g9L7tH&d^<$sf!MweZAVf5#TfbuJ z%}!8o_Ie5mm1}RgLqHAo+CXtd4O@Hawh;_&RP?$}II^JN>|T9>&gDX<F}@5UU>X zM06`3%w=c|2(#CTg$|1=_G%u9#)|&!^%uXx2kR)RP64)tkb-#{6sxNe^$;u9Emqrn z^r2AWpdLb^59m3n)T>2E5oQGDFSr8sArMNzS=p^bg0BZ{+z`>CLgZN34n z00XMtz>3oGM6&@JoQy`WFhL7McWSF5yUd};cYJUWTqGE$ao9=FvQ}CbN6WvnucONt zP5}4FjvV~R`-ANs=~lc#8WTs%Z&*Ke)Fvjx8Ep?3CS-5;M18aREg#!kYV1kbCoydc z6NmteSkJ%|vz5i!6oJF^yy5HIqV%s!F`ozEIej74QX1V^c)6bU&(-4zLvVIJA{! zlvMaj=6b{B!9Yz}d90nZ6V*v?NpAxxG>#RHoo_cr2HGmU8;6QRtTo3D8xtI>u|03; zBk5y6!a$Bc@R~_utzaln<*V>7_62+P?CCX4Uv+iJE7Fy`q4L0jGaCSbbEGc>5Ns^R z+Dw~lCFQ=VGOM({C8{MEs80HZr7$1Bt52&5S>Dj1&@9WUZqOg;5$(^Y$tSJP8ApoTMNV4u||Lt8Ob<;lw^)uHiHydsz(ai1xRTTVGqM=wkZz!7F$8V z0d7c)aSsbxRbfb4m<0)6-f+M>I~b@6*Ut?`#WAS6HG(=D)yXYc3flotxAB_o1>7YS z{%S#Z=&u?4wHB%!{&aSDb2#Hje<``2R zh3e!&fHxiBJ>wKJt6({?BuI0z;Z|pgWfDsXia~~IaSv1{PiHBt8w`*+eYS6|<((xC z_{Sp-1L9_}6gC!`^_(UcWv;cT(pSGiP^~;0)yd@mZWc7lIYn^gc@4o8izbqhC5O?S z@_az`l`M(ltGs5b(m=`F2(L6dB?4@HK1*S%0f;=W*}5sNfk-hd0Db8G=+b^Xevt@X zUoNkR@OnPSXE$;T>MIJml*|lE)Y_8>h-Q$T#9tc{!dS-y+{? zpK*$2M`Un(7RUYJJ3rac7a?(b`Lcn>XAUa$m-qu!zMvb<4n-o4aInd1CdJ9rDyzYI zl((Qd`3@lP0Ko0g*m{sYlD9|X^q^^j>QB!{{6F~~R=i%`DevNVFvkU_$`@N2^2LDW zmg{5nVg}lC3}?K>Y8_A+aht#&u>IV~mZAIfnSzPLL>se0NBKGVd7wApcsR%BHaF-? z^2_oowv3Q=!=NLQQ3^sFj}*tZj?ElXQd1H31>Iw6!ofgjT)Ee54eDAP$ZDXl8!(|X zI?99}#xo(RB_QMuu@trv&|c^@T}@cJK}Yf@@~07&9mDbX=BDtud_?{tnurNg7@Lfe zA(3^Qn1bOoyNtDhC4pej3Pz(ea6ZHXCu2(k?vYhcvn4R@0Ig>-D1Con4rk;BQ^*GZP*zr9#c7jzIDrPr=}NcAxTPGI zH8<`VXq%D|PXmkN*)|O(4zo(ieZg@HW|UL}LQQdxYU%5!PU*u^*nYr-KZc1w6-bZ> zu^M8czj9UtqPZMbH3!iEWuP)B9-@k5WMT)$l~E3LHQ~^4=S{D&7KWQ+k2+CmnW9X^smdr@N{hUR435Jbhv2(< z@{k%KGlLBTajQ5%TxvH6TMY?IvZE4Xb-cs?XGHNUb6~oJCLy=IE-It2ZdzThIS zzp~OQ_4~qB#iAJPQLREzopK@QkSXxgg)_nN^1%XYXf>f)nv3d`OIQlK9~$y{t2!sv zolxC9qc~XK2nTgEGkUA8@hxSoa&3egF5!4(bLgo>+mv#f z6m6BaNFT+i-g(N?BDHfCs8diU12`TS)x_BxUp+Hq--{emo(u{Y293>8@azl9ixHl^ zmgDQ2b)l74(6)Nz3obOr*TppNw5aBtoSi)ZRBrux5wosS-mzz`alCGdumTzz0Cm!+ zDAwMO$C}`^UeQ~dIo81Zxei?~?UZwrBOD`+J8^u|1aJf5hgFWEI^}B^_7)iSnL}m^ zbX@rdRK8KZ#a#JL`Cj=!`BC`^aiy%9?tju3kW+#b4lKQYfuqaS9I#A++q|gzTuhc#ZE>6me zWa&`xqH4>|juttH!K!GBHbowh?^|M3R6tsyzp8AKzcgGfO0yIMDrzdLAQwMqh5U*RQI+CYb$XPGw8{ze?%=H&QE(Rypzz-;^SK|2jwO@w@IRaXt1tR|_Z>Qa-{ z7HUi7sM=ahno{H`u@lgz6nTaOO5o`Hlp@dI;UdM7<1L&Roam;+NutY%IKGABCpg|R zbxCe6WFYnHyVTAa2RbIJscJj5Jyz7y)ON~I$a;hnZ|IZb4IFRcc%%5^mJ`92rY5Uh z)RxL|fGs+DYff5;>BGQNA_M2!X;JDKYQ{!2BbpfHiVRs#`{-T`7PIfE_QHzYGroi4 z+d1CyK02=EAOk0*Y-6V{CoMQh;iQe3 z!|`Uo64Az(<{&ph;{RHN;C~l{QTlR{#PO|Ov*nT{xw(1KARpw4=10=S)Zyxgjp_&+ zFEhN5VjJc4h|E(*vEmKtXthu+;`mOE@8|g8chs@SP{*m`RgYS%PEaSRlhjnSU7ey% zRi~-b(Rb<$btc-b9GwXjNyfukuzKCCcC&%}3ye)0udDoYohk(U*rVSi3V-5VBHtu@>bl* z*OB-lb(UJ9mZ}zBfm777WQqTdIKGGD9UO0G{W!j>xF}EwB}byE!|Gg-GMo$la{Bc{ zO_GGwfSn}F@!gOmoK!BvN-RlOgdf$A8s4Oa>yv^T@*$w0ne=dVKE7B*>LQ$~93??W z4^M8H{rf;RnB#jn-UVjTEf9sC0)x4slX$o}J7;jVosq0wq+YyUy*QeI7ZoKZrshg@ zm3k@qPQA>grj6_e(gsdrLUeHaP};yDwiG!rj@Q^Yj-vNLf!;|4fl6OhY2cKm+hnFE zhWJ+XHg!GvPTdd>@gr#ii)~Ke__4HsT}}uw9;KG3x2t!=LHsDky9LA(2ZenV<$(rt zR}o&P-VJmYq}apyPqWD`q~beqEH@mF#4gD77sPC>E>a&5#M}<#g!w(e@h*-Z=lB*U z&@wK~O5J0pS)~o^ZUfFT8vp@G^Xij=`OfBeFEC&0NQ!!+3IYutQ=i4_)aPv2pXT@} z)_+P_R1?MX&&%wbAz3|pM>uG|nz~6%jpnOQtvAEtjg>ljAZiOd8*e6{TJ<36sJ;vO z{&_I2zJ;eE;Vkt7^^p2Eh?Km*@jp0zadM&0UlnJ3sh_aoP3ouWXX;_~bM*+vFLC@H z$A>unnBy-_V2eq+rN`@SG4-JOEo;q=ar|=B0DGR}S3Hxmv!l}PM^?N|p~_nIXZ08L zSEY@5OnE_mPP*5D6+Z{(`4Wy_<@f-{Z*%Ze4|1@_hO^%|euv|Qrx?EhFS|Yr$&Q@> zdWYdis)t_M?Pv)m-5VUg7WL0Le!X1m_yol^U6f5I7ja@#h>TGyN2a3VSMXENT43$7Xt?Ri>gG)f{~s%N!RqK;}w7 z=24EnjGOpZ69&zxDfPu7sg8>rmjf$*$?@N#$he9X-{x4u@z>3GsgAYvLpYYf0N+G= zKRQKp4X)5MFO;~lB~5VyhX>V4qfnjWR+hrv2k+$jX_3&PuO{4ZOV6>!u{q)~f6eia zV#BoDs;G{4b)?a#&asW9un(cHe@>0`6)vgYCIC0eagSqXq^n;zKHf|y#&N&nfd-+N zUpfA*Q7Fbf{r+b|F^ZzfjkhWT^R0%FnB;mD;DtS?_%MiY z3uAuv)`qHp_C$4#{Vav8XBsCYy2aMe+mCIy#ncO`B|T7`<4u;r{P3VOq138wL=KV> zRX@J?F$FlUM{n(Kaw`@v+R^xyyeqb4TfnhXFrVY7#FF z47r|WISlo%WGSOa58RVx)2k$dgy>Y|xYCA9l~0ZY&+Dq|E z0~}?f7k$++$8nGPxpF$~L4K9Lm)@c|IEQ4*yXd)Sm%5&eR1ZqK<^Iwbh2k{zSK5Kp zk}Rda@`8FyDt0_TUzbPGH)vm}gFIV)4rdWX8jX8MS?bTyA(BJhmPW}rQW32{>(F6o z0m+0Q5?xO(z#WN7j;Kedu8yXA<(+Dhyahjt-%%csSF69^Y_)*ySJtZ2S-MczZ8?6J zea-RLY#CbsT=53ShuFs)S2I8B&33T6*~=`zHVRkH%jUwyk(Ui)FR~%*e&K&4a~$L( zmF2S;VET?{&vMe9m9V`Wzr+|2{UMI?*_Rx`EAOx>_9+Xq=Q(M?*0WTW#_<@ok3GoV z0i}Hu!W9eIyBr^87qh2?(ELT16s7EDc7>3s3fsxXLKv}t-3rqAF;)f!%rTBTv!f8K z>&o%ltd=c?9n87HAUMblar_%FSvq^2-N+7zh|zF1f?dZxWZl@C!irGYRctwgQaZ6C z>~^NJPV6wVn8xbZy=)ts!gjMuIsSrO&GDUVkJusF0vk-{vLcSxaC|1m2iRy%l3;7@ z5{`F9#G>;OR=iOe<+w*pl9zLc>HY#vGR}|QU(Jd)DZi-&YCpA|N+2LWlEAYB?|XB! z(OOn~n{t%nTkQH5!fVWQ*E{sKXYH(YuG{Eb7dco0wO4JI_HA?=vgdIU#$+i@cHW>S zsY%Y8ows1cd8?Y_Tt7urH7l{I!UDD}oFsE%a^m86OWJ_1-<$(JoH#=$eAjGo@HQLL zSNio`x^%j?G!S)??Xw-u&CV^GoLgeHsVI~vs%{>Pf}-X&0%jYT9RcUAI3QX^f%wc( z`nUiB>VH7FIdP8Bj%f6b)lqTo0z@6>c)izbAsULqGw>m9;(_1?s6P;z7Y|g zJ=B9}mvU4Z<5)&|k`V2n{-Pd~Mhh{SMmx}K`Wl%^d#Xv&ZqmcqipaPZ-3xb=qiB~h z3U$Oiv8E>B9J&{EBpGzSdXTgy?bSkgl~jZ}O1nu&8bCtyfSN?1B=cdki@r*8u_o<$3aQ=toVWd!^m#XgHzrJP4m#K;#@{ zj0IS&@I#)5Em07WU0E&L!Cqu@A=LPqXtM>!g_-c+``7PJ&Z6P z2#@EPmwAP7?aPiZ!j7>3dzS^kf7`-p8DX86!JcCGvosKUU$9zsjJ?AQ=4E@J)4l>Y zR?AkyFO}7@uF%~8cC!$r4>Jqgy_Z1HzsruXDeM@#js=*P8SEH41`_ZWkZ&s6!|Fh2 zX0v0WpwPRlD|;PAe2;nA#UQ0Svv=8MX0TNDDf2SIYS~V_ra5A=3tgb5QW1QTA{RD+|Apu?3>l0|wb<7hVSNw1<)B?EN0yh<%3 z?SU;phvNriL_*Fati?p7GyhEZ+17^$X>S9xL}d{nOCsq5OzNs2EIvv zlT;ws43=-}@bL|_c)n2N*`UbZVV|<+p)5-SE&d?e$KHX}@Y^40afRbzwi7h?YBn}r zivvd;YoNtfvc*D$&*gtYi@(o~h%Ju6Y`IY5bwZ6FX4}~9pvFby^b2+=yPEA`_X<_> zM_Sx*RFiD()MQQ3RL!9|wFFJm5;a{jv?R^cTw1c$LTjnD(pqb6v=ptama4VW+H0q2 z9kh;`TkE8C*3z^tT379Kt((?eOV`fOGPF#sht^Z;rDbW^T8@^h&p zsrA>+($3b-(FSM(wL#iotw0;14b_He!?h9GNbOv0lr~x`)QYq*+E{IzHeT~+#o7dI zqBcpJtWD9Tsvl_6wHew>&8wZK`LtPDiB_sv+H9>%E7$zm9Br;vp;c;CT0pDT=4nAK zq=mH_ZN9cZTc|D47Hdni^R=bg1=@ug(>S_WyGXlOyF^>At8trQB8f~q1t#+Muy;iHOBq^Lob>19EKbhmWq2?&stIP9Egs zAx<9V|{UzgD*vrF+db!dii|T<-3121~lvY!`Q@ z(Xq>Puh~j$O1bUrHg|VB{F@#yCyE>)NL+V|EFu80vU{IeVD((>K1a3Sx{vK;dnx!$Z3Hj^6rger+~5KxY^s`ymYVGdTdRo z+-=vua(9m&N=XlxxhLV-rd2clVr~+E)p~58x~94w1iR1~+=xI0J3kFTEBv|z@pL}JX zuvP_1518Il5TO5SGlqd#UAAVh4-dG(Rri`5tM-kI!MheM`<~_2#X6uIPC9)qX zq^w6|bU_|fNhBlH);8V$ccZ2K*g&;=LQFzM#8E^{1BRrmT*rRme+4#<1W&b9;r`Qz>m$5k@j5h;@C zj#;a%P_cOPlN(JGr4JS$HyRl$l>qinq!J$pwkw<1g#TJi>^0#acgbA$;J`w6_vUI@ zq)!J6ZEP@57W7qyyk=elTj+ z8dy8^c6X1s*`5jz?Hd@S4HH+=z2<36$SE#>U{3FmJ$XpvoN2&(^b{7Uo#gvx(tDdP zCh(tRWl-#qWMz~-E%qX>9ytMX|4GyWl;LbX&ple6>OXY?Ag>)tkNywU2>=<{xxvD3 zRwjAP7I8~HY5_HL#bc$Rq4kJB(7!lP74}uQqkCF`zu>+7i!A!7P;NXVa)1KnU{oy9 z-=UHUym2sI??4a-65Js(9Tou8iKy2<@ayE|KB2|Aq8@==RMxJQ0D`GOzB^DUD~<2*)+Z~3eWJ6unOf4|5fZH~+ z5*k`yP55`ZZTX3CUAosyiDTyYS_kO?bJCv(@%+o{ox;M5pG$lqRr*A*V|!%B>BBw& z6H4|1lAH5|qXjpjd$P}CROu!;3QR$m=RyW=F_{b%L;7gtUkC**t0Rt-$u$Vs$D z!CL#AWTT6AhGu%ey!j-=iZ7@RrC0t_=DIy>L*qQn{|YU0;`%v7Z#!VFKLx|%KP%EM zQGbHM^C*3WZ6m~FUb~Yx`>=Zc*tq?-d(~46iIH8tsWwU>MiVgMW$J%qdi;xPeZfMG z-`$R@)eteKa^sX}u5DrEc+C!Ri?->TS<;~pWb-1W!P|oxj~4JT%!*0Qtm(|8quN!(ds|eTdd_tgrM4 z(Te|PYNLWm>U>gyMhgT&VZsx?3nblZc4r1d)gM%H;nC-tz>k)bRwo+5F}}u0rR1g;O9Sk68{4Q zR6+8_AAz!K_{A&9eqbH_u|4@O575LJKYgdipT7v0@FppEA6aup+3MdueG=^yFjt&} zG5-xs>45qADe%O9HnINY#jZi9&iDfZ?SJuU&VV`PPXhnHBJSOs8yFTof&%w!V`wV~`H;C>xgS#0(v&7j|s8tW1I2^Tum)6-O z*WpD(u!9t>bq|pTc)1YlSHr#lc=WbxjJAlrmjq7K$AvuN6Ab`W?Hi)1L5bOPcmrtj z0T(cE<0^ZA=q@{n+3|l8ZLWz{FzhdhJNw`@PmlA}Pja>@V75B};!awD5Qufsvr##b z{J_MXoSc4Z^hb95k35l^^$wZB=04r8PDc|VGm<=mD$y!(J@U{j)KNVQRSlGJc1;7sqO}Z^qv$ds z(*q=5{S=ju40(CO$_1#5?!=m%>xeFr2A~T1Dq8HgM>$=33l-BGv{K%Me30dc=D^FI zAjc71L9);?6h_mO{%97Of~wGJc{Vyvehyut{)__BA!!tO8*&=y1@caG0XmE(iMj;q ziAr_#h&me0L+3*+0`(Wfp%Q_z7G21pmM>Hx;P?hnhyaoo39?HN>|l2{C_Df;u|(!L zSri=LIE9UetlGVdaeOn!xg0+P`HAOqj74>UeWLP86344VW+KNwh{^&Sf6jj8_+z`K zzyeWLU^FKVyRJY7PE?K`&BcH(@FdpB2Rfa8le zQP_d_G6T;-PV5Duy1-$m_1TN#nQRKw6&MC7x6DpPw95%VCh$&<6Gf#4wv1yB$KSC9 z98)H8JP$#I2FUJ=6ll1jzAVEn9RI{-uxD9`$n)(1RT%P{6ky=E4||ZMMe;Q{u7i}` zA}G7COw=eS74JllAye}?4z)JA+qs&fI4yy`7*c&}ISz2#TGU&};Mm3SWR8Cp zRTfSc)v0e36&9vLQt|t2xk%4s+e8V4%UCCl4UwREFWU{p6}}MpnI#-wY?oFz!0}p9 zS3y)&xI7{NbeFy6^<=$;-coO+x7OR}DSBHyRd1)a*H6m&4$`nmcjeY9Sv7wKd4vHCcDyzbG9^$Ge!eUd&|pQ2CIr|Hx68Tw4! ztDmR)^jUg|UaDLAY`sh`*Zuk&eXd@iSL#)IK(E&4=|MfDhxHnLzP>r3?W z^`-g+`h_~vxxP%lNWWOWL|?A2&{yiK^h@>2^ws+1`W5<>`c?WG{c8OheXV}2ew}{3 zUaPOu>+~D+8}*y?oAq1tTlL%Y_4)>VqrOSstZ&h8*YD7`>UZkf^zHf%{Vx4({T_X% zzDvJXzfZqke?Wgwe@K5=e?;G{KdSH1AJZS#pV0T}PwG$UPwV^iXY^e*tNH=`HT`w{4gF31E&Xl%p#F~juKu3>zW#xJNdKGuq5hHnvHpqvss5RM zSpQra`GG}&vWtuCogjH5+^Tn@(L&WIeC?n z1Dw3Z$?KfF!O5GPyv51eoE+rj9ZufmWI? z4s-H3Cr3E>f|D;f`HGXHocx`WuQ~aKlYemXEhpb`@;xU%aPlK3KXLL;PJZU(7fycV zGS$2mouVonLClv9aQnNx*Rl~V_&PEHdz)i_P$ROi&-G>KD_Qx~VnoVMV! zC8w=8ZOv&LPE$B-%V{d7?Ko}E>1mvH;It#BZcaOK+L_ZdPP=g0mDAHX?Z#<$PSZI( zgVPL7GdbU&ZaGK9)UrzgRdM2m+IX#QhvpGG7(*c|g za{Z<+Os+ zN=~ad4RBh`={!z@oQ60Jb6Ugcd`=f|x{%XFoG#{c38&|Cx|GukIK7Zl#wq7?8K)O< zdNHS$aJrn+6`Zc*bQPzUa(Wr3t2w=#(EOa0TzIAn zr@QdwrYzoCaQyi3V{k9gd>OuyUHCM3WP}TI7w!RnKI|grz^%6M<8Ju45k77)zlX1p zE|Lo0_ru3sF6?vRjV`>|obJNQTqMPX?=oA!trhU`5PW2rZCs?Yi?nv(ApCyNg;&A% zP8S*ABFQjROBdem!k3t*nRmdQ3>UuCJky1}=2h@>xeH$n-#57MQuuxZJ}h&&i*$mA zTPGvD;%T@x)`d;@9uFV2@No}(l)=Y17p{iyOI&z?3(ti=J@7HxMLN3hAoz15e4GJY zrodk-U8IGJbaCMsaOqJOR^e(6d_3U7-CQKeMGP4GO}I4NMb38N<%uF{S6uiW7w+XEi7t|6t}*X3uY}uv7dBjYK7ifXg%_DO!NsjE(#l1; znm@Sk6)qe$1r~0HJK50iF&Ez8!e^K-xv=0w6E3>Ui(Ghz3(o_zJ!5hgUM*BDDm0#9 z#ZkN4cs|bVHeRxSoQe7yuNeE+8~f1!C^9>E%&a+9Nf-*rA_r=VI-_nV8=Z*;pdkoi z)w9*x)g9{34&+cBtsLDP1&(o!84kZ=fn%BDD#td*!;Y66ha5jUsnc{OJ6kzZob8+) zoNi~Dv#YbaGsD@_neEJV_ICDl_ID0+7C1*cCp)J)r#mfYz&X!(p>w5kjq^t52Iqaw zJJ;6w5lh7d{BOyEC%!IQNo=bQk;iZIE5)LH1k??lHy9pm8 ze3Kh|J6%iHGPPb> zj@Dc2tM%8;(FSQlwBg#hTA?;p^Jo*bDcW?+tIg6Ztz4U{RcZ6Iu(m*3tS!};c9FJR zTcxemuGFs9uGKbc_iB%7PixO;&uRZ(P51rR#NjY-+&Zg<5E8;jfFwZJ5M~e|dk+HH z11{htXU>hHC{o2$1OXKl7v^H_lEYQCZfo6jTlcokTKC@D=ZEj>`TX+!Gd?E<{yp&0 zz$*i<4SYxlBSaH23B?3C!AKZF7(tjsXe3N0%p^1uS_rL#HbMtsA)%A7gs_URfv}6P zo3M{?kZ_oAgm8iIFX2DJ1HvQ1tB_tHgpjb1#E_hjypV#B!Vq6ninoF8bT0mMvT1;9>T1M(3tso(! zZqjPfI?{U55z;Zz3DV!B)1aVuqbI14n;=MQLGd< zWh`Yfa+Y$Q@+6!To)|tjTpq3rSBGoEb>ZdV=5TAc zJ^X6;8Chs+_8%mQgFI!>D7awbVvxGqs(HQUg?+ zx{A7nx|@2OdXjpYdWCw2`iA;7qF)3hB0C~CB0qu~F({%aqBz17Q6JF|F(slgVtT~P zh+iXSM^1|Dj9e1AEV3)o8;L}&jNB3VD)LR_yT}ibpCZ3RevAAO^;1-8lsrlqrH;}@ z>7vS_^ijj3=0$ZxEsW}nS`xJ^sw>JHZHOKdJvO>FdP4NX=tj6M~8Ci-0T zh3HGsSE8>)|3m9TBhsj}L|O(-M$^&Ew9&MQw0hbsS`)3AHiy|gd5VI&|acpbss@OHL>tff(ZjAjsc602> zIC|WmICWfQ+}OCrxaPQ)xYoG#xOs6MaSP)*v5AaCR$@XTJ25#i zH8DN$dEzHFnH|oKU`MfO>=$&3?;%&;H2%%>J5`oFq+>Cn=NEN!p~+q_QM9 zsU@j3sXb|4Qb*Flq|W3W$rqC^Ctppzo_r(uX7cUik107Rc_{@cg(*cT#VNcLL5e8l zLdvU@H!1H@KBRm~`JD1KH9WO6wJcSiYD_h!T2t+*6{$e#`!q@#H7znNI*pzdlNOi8 zO&gOoHmx>oLfXW%`m~0$DQS)A%yeG5AYGI$NtdO|)0OE%(wC>NNJr9FrlaYBbUb}k z`kD-0h9jdg!y&RN0P%6ZOt$$8Cr%X!cF$ob6q%K4s6&mNRLIJ+d9 zpDoN5WlORvv!`S?W>3$anf+__?Ch4DlR1xap5#2sd6Dxf=XK88+>l&(t}<7htIgHr zmggFBO}UobQMq$++j8gT&d*(tyD+yicYW^Z+_Smob1&vz&b^v@J#SK8XWo*$WqDnB z-aI64W!}!b*LiRA-sgSH`<(YR?|Xia{GR#r{6YDH^Govi`NDirz9hdQ|Cju!`P1@e z`gE)-lUcvA4J;6=f!f;RfBSMsprammw?=R69J z%8TSh^XR--9)ri?EjcA;xRy090Q8Zc9B3dq5 zAwoneMVM%#Xus&7=#c1$=(y;T=z-{w=&9(r=#`izjuFR+8Df?=UYsaS5~qp>i%Y}; zu}CZxSBgi8$B4&@YsGcqdE%8~OdJ$MoVfW<0KO#lO&TRQzSDat&-&uOcIoAmmHNGm;5a`EjcH- zCAlNHCwU-wBl#-%F6|}lEA21MmF7#i(n4vGbg;BU%9o0ypwun(NQX&BNJmL)q^;8B z(zVj{(v8y1(rwbq(yP*cq<5tEr1zx{rH`ebq+ev=GPW#5mL|)Pab!Z7SSFRpWhxmU z8!a0vtCiKs>SfDiD`Y-dK-Mi=En6%5O?E+cN%lzgS@uo#L*7%~N1h~4k*CYEm3PP&$~)ytS{HphSYWHdUb<(ih7#5L%m47SiMZWLcLqPSA9TzNPR?oOnpNARQ+82 zSu;=*q6yW6X~H!*8nH&IQD{^etp?K6Y3el%nkkxTnhwoE&0@_`O_ye+X0>LmW}{}a zW}D`g=8@)!=DFsT=8fi^=7Z+5=9`wFrD~J3soHdHmNrLg(b}{XTBo*J3u@ik8f~3+ zwzfsvrk$(p&~|CpX*Xzp*KXEs(;m?t*Phg#(w^1c)ZWqF(>~BX(|#}QQQE7tPwCI4 z*3$aYrqZs`Riy_?Z7;rm|#pYrWn(WnMRJ$X0#hCja5e2IKnvIIKeo{*lAp9>@p(8l}60C z#<5qVc<_hpCsTuc^O@UM(k9D|pq;<5l##(Ewvo>0%Tbryc);8-_>vroO*4@^< z*8SFl*2C6g)-%?t*6Y@r);qQVHiC_43$sydR9mEtW{b5Y+A?h%o7g6^DQy~?&Zf7S zY*w4YR%!dyHrv)>n`3LUwcF;|I&2GVf781<0~dsG*`4%v{%flSWtmg;1#PX)>f>q*k18R<$skA zDj!!qt9)7cy7FD+hssZtUn;)?KLNdfzQE7G0Du4x0TMt4!huMD2E+gifCVG~Y#C`)o&Pr#M6LdmO*g4i&>zwMG?wsYE?VRImcP@4=b#^%s=QihF=TYZ* z=UeCZs-LQQSM{qJP!&=|s*0}4trAoztBh67s+m)Xfv#Li`*Hn+Io=`ohx}kb%^|b1l)lJnc)veWYt2?UK zRUfN9SAC)SM)m#bC)IDOKY;OIBA5)Of*D{Im;>g41z;gK803KhPz*{zIj98Hpcd4D z<)9HXgI3T1R)S8j8U#T%=mCd;Bf-&N4LA;*08Rw!!3J;&*a*%5XMs&%3)lwE1?Phc zz(wF;_kZYr)^Zjo>D53%Cv30saC03GM;+gMWdC!K2`D@FaK| zJPV!&FM?OVYv2v=Hh34j2R;BFgHOTd;7jl|_!fK*egr>*U%~IL9uXq3M-s0Zo-s#@u-tFG& z-tYd)eZ+m-ebRl(eb#;6ebIf{ebs&4ebar%eb4>C{mA{q{mlKs{mT8u{oei2{l)zq z>H+nHdPDu7{?I@u1R_CXC>)A}XizM~fa0M{;ghQ*Kwa|KKBeV(H0&RnKK)awl&_3t@^cQplIu4zLPC;j& zbI=9o5_AQ+2K@uwgl7ys^gtfiGr}|4GuAWSGto2IGsQE_Gt<-LY4Nmq=6M!) zIz3B0T^_{a_XIrMo;9A|JR3cmJ=;7xJ%4)kdJcFFd5(HccuslFdM=zzjGZX2U6PI-CXP!1-_? zJQ(J|LRbRJVHK=}%U}a+hHY>K?1YEFZrB44heyFRa4lR1*TcWSjqnWkSGXB&h3CQ@ z@FI8#yd3tzD`5=A;nnaucmuo%-U{!4cfot$eegl}FnkO?37>|~!585x@OAhmdFx+xPsPwHF0y8cxCz51_{$&+_aKH5;$FyoinDc7ckPK}vb zIQ3y;uf_q55sh1?hfiltA2hvmIyl2Wdx;c}=3Gs@aofH_h&7 z9@K1Twl_n~Bb(csw>6(>e%buBMbu(%nc6aE&fl%!t;MafR*cnRw)XZb?f2S0 z&Al=&dj8z`*!&G0mJYCEOvk1L2N#X*Oz*tCxYy#?#d(Vri-#}KFR?AHU+P`DW$EK( z2bbMi_I-Kk^3PqwuEMUGuK8Wdx>j^~yYQ~nU2D2FcWv{I^4553y>;GtZ-aNLce;0$ zx5?Y$ZS}T$=X)1=JH1Q2%e`LjN-yTcy{o)yy}x-kdN+Buc(;51@b32R^&apZ@*eRX z^PcdY@}Bix@Luv>_5S0%<-Oy*=e_TJkGbAp4Mm$YJCtavV8{oJP(e7m&-yHRJ|z3%P^*i~NT? zM4lkekQc}+YzeGVVstMU!;xqL%?uy2HKw6Dfj>zm-4=&ScN z_@?-#`DXf>d@a6KU%PLQNJFMI9)BR--O-C^`%siH)J&m42 zFQQk_>*!7N4tfuLfIdc_p)b)l=zH`N`W5|w^~CyMKVt(iA{K^)W04pQi^Z5&0+xiO zVi_0*%f$+?L0B=y$3&PEQ($VW6f4J!m<6+Al~@%9Vh{#nBe2ofSZq8t5u1!n!KPs| zu_mkqYs2PY3$RXXDb|G{m>&yZ-PjuJH*6!e8QX^K#QwzgVh6B8*iq~Rb_zR-UBE75 z*RUJdZR}s{KK2NEioL*IV{fq!*w?^Mf!=|>fq?;1fD(ub#0KI6>_A!|Gmss~3vdI2 z0-}ICpbV4-$^+(rEl?4t4!8nvU{qjSU}B&?Ff}ke&=hD5%nft|76ldumIYP>d;xy| z53CJr3~UN)4eSW)3hWCU3>*!d2%HL>4_pdd4O|c02;2?)7kChO9C#Xd6?hx?6!;qa zDcCpob8ujg6r=`e!PsDYFgchJ%n5RXML~X06qE*4L0wQEGzINJXV4XdgCl~YgJXkr z!TR9T;LKoCuqD_Q>fqYo`rz-uZNXi^eZd34L&2lLzk}z37lYS= zH-dMA4}y<_FM_Xw?}8tL-|(JzZ@eEq01v@QI2otnQ8*oE;%qzx&&0FwT)Yr3!b@-g zF2)tO7B9o~xCyu7mG}_cjeGEs_!xXVJ`u0Sf5E5Yv+&vY9DE+W0PnHZ%5N- literal 50446 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 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib index fdf839e0a..1bab3a8f8 100644 --- a/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib @@ -1,17 +1,26 @@ - + 1050 - 9C31 - 629 - 949.26 - 352.00 + 9G55 + 677.1 + 949.43 + 353.00 YES YES - com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + YES + YES @@ -21,41 +30,41 @@ - FirstResponder + FirstResponder NSApplication - MainMenu + MainMenu YES - X11 - + X11 + 1048576 2147483647 - NSImage + NSImage NSMenuCheckmark - - + + NSImage NSMenuMixedState submenuAction: - + X11 YES Acerca do X11 - + 2147483647 - + @@ -64,30 +73,30 @@ 1048576 2147483647 - + YES YES - - + + 1048576 2147483647 - + - U2VydmnDp29zA - + U2VydmnDp29zA + 1048576 2147483647 - + submenuAction: - + U2VydmnDp29zA YES @@ -98,12 +107,12 @@ YES YES - - + + 1048576 2147483647 - + @@ -112,58 +121,58 @@ 1572864 2147483647 - + YES YES - - + + 1048576 2147483647 - + Ocultar o X11 - h + h 1048576 2147483647 - + 42 T2N1bHRhciBvdXRyYXMgYXBsaWNhw6fDtWVzA - + h 1572864 2147483647 - + Mostrar tudo - + 1048576 2147483647 - + 42 YES YES - - + + 1048576 2147483647 - + @@ -172,7 +181,7 @@ 1048576 2147483647 - + _NSAppleMenu @@ -180,51 +189,51 @@ - QXBsaWNhw6fDtWVzA - + QXBsaWNhw6fDtWVzA + 1048576 2147483647 - + submenuAction: - + QXBsaWNhw6fDtWVzA YES YES YES - - + + 1048576 2147483647 - + Personalizar... - + 1048576 2147483647 - + - RWRpw6fDo28 - + RWRpw6fDo28 + 1048576 2147483647 - + submenuAction: - + RWRpw6fDo28 YES @@ -234,22 +243,22 @@ 1048576 2147483647 - + - Janela - + Janela + 1048576 2147483647 - + submenuAction: - + Janela YES @@ -259,7 +268,7 @@ 1048576 2147483647 - + @@ -268,27 +277,27 @@ 1048576 2147483647 - + Zoom - + 1048576 2147483647 - + YES YES - - + + 1048576 2147483647 - + @@ -297,7 +306,7 @@ 1048840 2147483647 - + @@ -306,38 +315,38 @@ 1179914 2147483647 - + YES YES - - + + 1048576 2147483647 - + Passar tudo para a frente - + 1048576 2147483647 - + YES YES - - + + 1048576 2147483647 - + _NSWindowsMenu @@ -345,25 +354,25 @@ - Ajuda - + Ajuda + 1048576 2147483647 - + submenuAction: - + Ajuda YES Ajuda do X11 - + 1048576 2147483647 - + @@ -372,7 +381,7 @@ _NSMainMenu - X11Controller + X11Controller 3 @@ -380,10 +389,11 @@ {{319, 328}, {633, 308}} 1350041600 UHJlZmVyw6puY2lhcyBkbyBYMTE - NSPanel + NSPanel View + {3.40282e+38, 3.40282e+38} {320, 240} @@ -393,168 +403,6 @@ 256 - - YES - - - 256 - - YES - - - 256 - {{18, 210}, {402, 18}} - - YES - - 67239424 - 0 - U2ltdWxhciByYXRvIGRlIHRyw6pzIGJvdMO1ZXM - - LucidaGrande - 1.300000e+01 - 1044 - - - 1211912703 - 2 - - - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 256 - {{36, 57}, {510, 28}} - - YES - - 67239424 - 4194304 - U2UgZXN0aXZlcmVtIGFjdGl2YXMsIGFzIHRlY2xhcyBlcXVpdmFsZW50ZXMgZGEgYmFycmEgZGUgbWVu -dXMgcG9kZW0gaW50ZXJmZXJpciBuYXMgYXBsaWNhw6fDtWVzIFgxMSBxdWUgdXRpbGl6YW0gbyBtb2Rp -ZmljYWRvciBNZXRhLg - - - 1.100000e+01 - 3100 - - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2OQA - - - - 6 - - controlTextColor - - 3 - MAA - - - - - - - 256 - {{36, 165}, {510, 39}} - - YES - - 67239424 - 4194304 - QW8gY2xpY2FyLCBtYW50ZW5oYSBwcmVtaWRhcyBhcyB0ZWNsYXMgT3DDp8OjbyBvdSBDb21hbmRvIHBh -cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo - - - - - - - - - - 256 - {{18, 91}, {402, 18}} - - YES - - 67239424 - 0 - QWN0aXZhciBhcyBlcXVpdmFsw6puY2lhcyBkZSB0ZWNsYWRvIHBhcmEgWDExA - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 256 - {{36, 121}, {510, 19}} - - YES - - 67239424 - 4194304 - UGVybWl0ZSBxdWUgYWx0ZXJhw6fDtWVzIGRvIG1lbnUgZGUgZW50cmFkYSBzZSBzb2JyZXBvbmhhbSBh -byBhY3R1YWwgbWFwYSBkZSB0ZWNsYXMgZG8gWDExLg - - - - - - - - - - 256 - {{18, 146}, {402, 18}} - - YES - - 67239424 - 0 - U2VndWlyIGEgZGlzcG9zacOnw6NvIGRvIHRlY2xhZG8gZG8gc2lzdGVtYQ - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {587, 246}} - - - {{13, 10}, {607, 292}} @@ -563,7 +411,165 @@ byBhY3R1YWwgbWFwYSBkZSB0ZWNsYXMgZG8gWDExLg 1 - + + + 256 + + YES + + + 256 + {{18, 210}, {402, 18}} + + YES + + 67239424 + 0 + U2ltdWxhciByYXRvIGRlIHRyw6pzIGJvdMO1ZXM + + LucidaGrande + 1.300000e+01 + 1044 + + + 1211912703 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + + + + 256 + {{36, 57}, {510, 28}} + + YES + + 67239424 + 4194304 + U2UgZXN0aXZlcmVtIGFjdGl2YXMsIGFzIHRlY2xhcyBlcXVpdmFsZW50ZXMgZGEgYmFycmEgZGUgbWVu +dXMgcG9kZW0gaW50ZXJmZXJpciBuYXMgYXBsaWNhw6fDtWVzIFgxMSBxdWUgdXRpbGl6YW0gbyBtb2Rp +ZmljYWRvciBNZXRhLg + + LucidaGrande + 1.100000e+01 + 3100 + + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2OQA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 256 + {{36, 162}, {510, 42}} + + YES + + 67239424 + 4194304 + QW8gY2xpY2FyLCBtYW50ZW5oYSBwcmVtaWRhcyBhcyB0ZWNsYXMgT3DDp8OjbyBvdSBDb21hbmRvIHBh +cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo + + + + + + + + + + 256 + {{18, 91}, {402, 18}} + + YES + + 67239424 + 0 + QWN0aXZhciBhcyBlcXVpdmFsw6puY2lhcyBkZSB0ZWNsYWRvIHBhcmEgWDExA + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 256 + {{36, 121}, {510, 19}} + + YES + + 67239424 + 4194304 + UGVybWl0ZSBxdWUgYWx0ZXJhw6fDtWVzIGRvIG1lbnUgZGUgZW50cmFkYSBzZSBzb2JyZXBvbmhhbSBh +byBhY3R1YWwgbWFwYSBkZSB0ZWNsYXMgZG8gWDExLg + + + + + + + + + + 256 + {{18, 146}, {402, 18}} + + YES + + 67239424 + 0 + U2VndWlyIGEgZGlzcG9zacOnw6NvIGRvIHRlY2xhZG8gZG8gc2lzdGVtYQ + + + 1211912703 + 2 + + + + + 200 + 25 + + + + {{10, 33}, {587, 246}} + + Entrada @@ -591,10 +597,10 @@ byBhY3R1YWwgbWFwYSBkZSB0ZWNsYXMgZG8gWDExLg 1211912703 2 - + - - + + 200 25 @@ -612,7 +618,7 @@ byBhY3R1YWwgbWFwYSBkZSB0ZWNsYXMgZG8gWDExLg dGVtYSwgdGFsIGNvbW8gZXN0aXZlciBkZWZpbmlkbyBlbSBFZmVpdG9zIHNvbm9yb3MsIG5hcyBwcmVm ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA - + @@ -621,7 +627,7 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA 256 - {{64, 201}, {131, 26}} + {{68, 201}, {131, 26}} YES @@ -632,11 +638,11 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA 109199615 1 - + LucidaGrande 1.300000e+01 16 - + @@ -645,12 +651,12 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA Do monitor - + 1048576 2147483647 1 - + _popUpItemAction: -1 @@ -666,11 +672,11 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA 256 cores - + 1048576 2147483647 - + _popUpItemAction: 8 @@ -678,11 +684,11 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA Milhares - + 1048576 2147483647 - + _popUpItemAction: 15 @@ -690,11 +696,11 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA TWlsaMO1ZXM - + 1048576 2147483647 - + _popUpItemAction: 24 @@ -718,7 +724,7 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA 4194304 Q29yZXM6Cg - + @@ -736,7 +742,7 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA RXN0YSBvcMOnw6NvIGVudHJhcsOhIGVtIHZpZ29yIGRhIHByw7N4aW1hIHZleiBxdWUgbyBYMTEgZm9y IGV4ZWN1dGFkby4 - + @@ -756,10 +762,10 @@ IGV4ZWN1dGFkby4 1211912703 2 - + - - + + 200 25 @@ -779,10 +785,10 @@ bXBsZXRvA 1211912703 2 - + - - + + 200 25 @@ -800,7 +806,7 @@ bXBsZXRvA cyBDb21hbmRvLU9ww6fDo28tQSBwYXJhIGVudHJhciBlIHNhaXIgZG8gbW9kbyBkZSBlY3LDoyBjb21w bGV0by4 - + @@ -836,10 +842,10 @@ bGV0by4 1211912703 2 - + - - + + 200 25 @@ -876,10 +882,10 @@ TUFSWSBkbyBYMTEuA 1211912703 2 - + - - + + 200 25 @@ -899,10 +905,10 @@ cmVhIGRlIGNvbGFnZW0gbXVkYXIuA 1211912703 2 - + - - + + 200 25 @@ -922,10 +928,10 @@ Y2lvbmFkbyB0ZXh0byBub3ZvLg 1211912703 2 - + - - + + 200 25 @@ -944,10 +950,10 @@ Y2lvbmFkbyB0ZXh0byBub3ZvLg 1211912703 2 - + - - + + 200 25 @@ -1016,10 +1022,10 @@ cHJlIGZ1bmNpb25hcsOhIGVtIGFsZ3VtYXMgYXBsaWNhw6fDtWVzLg 1211912703 2 - + - - + + 200 25 @@ -1056,10 +1062,10 @@ b21wbGV0YW1lbnRlLiA 1211912703 2 - + - - + + 200 25 @@ -1094,10 +1100,10 @@ b21wbGV0YW1lbnRlLiA 1211912703 2 - + - - + + 200 25 @@ -1147,10 +1153,10 @@ Yy4pLg 1211912703 2 - + - - + + 200 25 @@ -1169,10 +1175,10 @@ Yy4pLg 1211912703 2 - + - - + + 200 25 @@ -1191,7 +1197,7 @@ U2UgbyBlbmRlcmXDp28gSVAgZG8gc2lzdGVtYSBmb3IgYWx0ZXJhZG8sIGVzdGFzIGNoYXZlcyBwZXJk ZW0gYSB2YWxpZGFkZSwgcG9kZW5kbywgYXNzaW0sICBpbXBvc3NpYmlsaXRhciBhIGV4ZWN1w6fDo28g ZGFzIGFwbGljYcOnw7VlcyBYMTEuA - + @@ -1211,7 +1217,7 @@ p8OjbyDigJxBdXRlbnRpY2FyIGxpZ2HDp8O1ZXPigJ0gcGFyYSBnYXJhbnRpciBhIHNlZ3VyYW7Dp2Eg ZG8gc2lzdGVtYS4gU2UgbsOjbyBhY3RpdmFyIGVzdGEgb3DDp8OjbywgbsOjbyBzw6NvIHBlcm1pdGlk YXMgbGlnYcOnw7VlcyBhIHBhcnRpciBkZSBhcGxpY2HDp8O1ZXMgcmVtb3Rhcy4 - + @@ -1229,7 +1235,7 @@ YXMgbGlnYcOnw7VlcyBhIHBhcnRpciBkZSBhcGxpY2HDp8O1ZXMgcmVtb3Rhcy4 RXN0YXMgb3DDp8O1ZXMgZW50cmFyw6NvIGVtIHZpZ29yIGRhIHByw7N4aW1hIHZleiBxdWUgbyBYMTEg Zm9yIGV4ZWN1dGFkby4 - + @@ -1248,12 +1254,17 @@ Zm9yIGV4ZWN1dGFkby4 0 YES YES + + YES + + {633, 308} {{0, 0}, {1440, 878}} {320, 262} + {3.40282e+38, 3.40282e+38} x11_prefs @@ -1262,10 +1273,11 @@ Zm9yIGV4ZWN1dGFkby4 {{360, 400}, {477, 271}} 1350041600 TWVudSBBcGxpY2HDp8OjbyBkbyBYMTE - + NSPanel View + {3.40282e+38, 3.40282e+38} {320, 240} @@ -1275,7 +1287,7 @@ Zm9yIGV4ZWN1dGFkby4 265 - {{340, 191}, {123, 32}} + {{318, 191}, {155, 32}} YES @@ -1287,7 +1299,7 @@ Zm9yIGV4ZWN1dGFkby4 -2038284033 1 - + @@ -1298,7 +1310,7 @@ Zm9yIGV4ZWN1dGFkby4 265 - {{340, 159}, {123, 32}} + {{318, 159}, {155, 32}} YES @@ -1310,7 +1322,7 @@ Zm9yIGV4ZWN1dGFkby4 -2038284033 1 - + @@ -1331,26 +1343,26 @@ Zm9yIGV4ZWN1dGFkby4 256 - {301, 198} + {279, 198} YES 256 - {301, 17} + {279, 17} 256 - {{302, 0}, {16, 17}} + {{280, 0}, {16, 17}} YES - 1.227310e+02 + 9.973100e+01 6.273100e+01 1.000000e+03 @@ -1364,7 +1376,7 @@ Zm9yIGV4ZWN1dGFkby4 6 - + System headerTextColor @@ -1372,9 +1384,9 @@ Zm9yIGV4ZWN1dGFkby4 338820672 1024 - Q8OpbHVsYSBkZSB0ZXh0bw + Q8OpbHVsYSBkZSB0ZXh0bw - + 3 @@ -1388,7 +1400,7 @@ Zm9yIGV4ZWN1dGFkby4 - 1.000000e+02 + 1.010000e+02 4.000000e+01 1.000000e+03 @@ -1402,9 +1414,9 @@ Zm9yIGV4ZWN1dGFkby4 338820672 1024 - + Q8OpbHVsYSBkZSB0ZXh0bw - + @@ -1425,7 +1437,7 @@ Zm9yIGV4ZWN1dGFkby4 6 - + System headerColor @@ -1434,18 +1446,18 @@ Zm9yIGV4ZWN1dGFkby4 338820672 1024 - + Q8OpbHVsYSBkZSB0ZXh0bw - + LucidaGrande 1.200000e+01 16 - + YES 6 - + System controlBackgroundColor @@ -1462,7 +1474,7 @@ Zm9yIGV4ZWN1dGFkby4 6 - + System gridColor 3 @@ -1477,9 +1489,8 @@ Zm9yIGV4ZWN1dGFkby4 YES - {{1, 17}, {301, 198}} + {{1, 17}, {279, 198}} - 4 @@ -1487,20 +1498,20 @@ Zm9yIGV4ZWN1dGFkby4 256 - {{302, 17}, {15, 198}} + {{280, 17}, {15, 198}} - _doScroller: + _doScroller: 9.949238e-01 256 - {{1, 215}, {301, 15}} + {{1, 215}, {279, 15}} 1 - + _doScroller: 6.885246e-01 @@ -1510,18 +1521,16 @@ Zm9yIGV4ZWN1dGFkby4 YES - {{1, 0}, {301, 17}} + {{1, 0}, {279, 17}} - 4 - {{20, 20}, {318, 231}} + {{20, 20}, {296, 231}} - 50 @@ -1533,7 +1542,7 @@ Zm9yIGV4ZWN1dGFkby4 265 - {{340, 223}, {123, 32}} + {{318, 223}, {155, 32}} YES @@ -1545,7 +1554,7 @@ Zm9yIGV4ZWN1dGFkby4 -2038284033 1 - + @@ -1558,6 +1567,7 @@ Zm9yIGV4ZWN1dGFkby4 {{0, 0}, {1440, 878}} {320, 262} + {3.40282e+38, 3.40282e+38} x11_apps @@ -1568,51 +1578,51 @@ Zm9yIGV4ZWN1dGFkby4 YES YES - - + + 1048576 2147483647 - + - - + QXBsaWNhw6fDtWVzA + 1048576 2147483647 - + submenuAction: - + QXBsaWNhw6fDtWVzA YES YES YES - - + + 1048576 2147483647 - + UGVyc29uYWxpemFy4oCmA - + 1048576 2147483647 - + - + @@ -1700,7 +1710,7 @@ Zm9yIGV4ZWN1dGFkby4 - apps_table_show: + apps_table_show: @@ -1788,7 +1798,7 @@ Zm9yIGV4ZWN1dGFkby4 - prefs_changed: + prefs_changed: @@ -1796,7 +1806,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1804,7 +1814,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1812,7 +1822,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1820,7 +1830,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1828,7 +1838,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1836,7 +1846,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1924,7 +1934,7 @@ Zm9yIGV4ZWN1dGFkby4 - + apps_table_show: @@ -2004,7 +2014,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2012,7 +2022,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2020,7 +2030,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2100,7 +2110,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2108,7 +2118,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2116,7 +2126,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2124,7 +2134,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2132,7 +2142,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2164,7 +2174,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2212,7 +2222,7 @@ Zm9yIGV4ZWN1dGFkby4 - + MainMenu 19 @@ -2457,7 +2467,7 @@ Zm9yIGV4ZWN1dGFkby4 196 - + X11Controller 244 @@ -3307,6 +3317,9 @@ Zm9yIGV4ZWN1dGFkby4 YES YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3363,6 +3376,7 @@ Zm9yIGV4ZWN1dGFkby4 169.editorWindowContentRectSynchronizationRect 19.IBPluginDependency 19.ImportedFromIB2 + 196.IBPluginDependency 196.ImportedFromIB2 200295.IBPluginDependency 200295.IBShouldRemoveOnLegacySave @@ -3377,7 +3391,6 @@ Zm9yIGV4ZWN1dGFkby4 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 244.IBEditorWindowLastContentRect - 244.IBPluginDependency 244.IBPropertyAccessControl 244.IBViewEditorWindowController.showingLayoutRectangles 244.IBWindowTemplateEditedContentRect @@ -3399,7 +3412,6 @@ Zm9yIGV4ZWN1dGFkby4 272.IBPluginDependency 272.ImportedFromIB2 285.IBEditorWindowLastContentRect - 285.IBPluginDependency 285.IBViewEditorWindowController.showingBoundsRectangles 285.IBViewEditorWindowController.showingLayoutRectangles 285.IBWindowTemplateEditedContentRect @@ -3650,345 +3662,347 @@ Zm9yIGV4ZWN1dGFkby4 YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - - - - - - - - - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin {{168, 821}, {113, 23}} - + com.apple.InterfaceBuilder.CocoaPlugin {{202, 626}, {154, 153}} - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin {{349, 858}, {315, 153}} - + com.apple.InterfaceBuilder.CocoaPlugin {{271, 666}, {301, 153}} - {{437, 749}, {484, 308}} - + {{437, 548}, {633, 308}} - {{184, 290}, {633, 308}} + {{437, 548}, {633, 308}} - + {{184, 290}, {633, 308}} + - - {inf, inf} - {320, 240} - + {3.40282e+38, 3.40282e+38} + {320, 240} + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin {{58, 803}, {155, 33}} - + com.apple.InterfaceBuilder.CocoaPlugin {{100, 746}, {155, 33}} - + com.apple.InterfaceBuilder.CocoaPlugin - {{68, 585}, {454, 271}} - + {{68, 585}, {477, 271}} - - + + {{68, 585}, {477, 271}} {{433, 406}, {486, 327}} + - - - - + {3.40282e+38, 3.40282e+38} + {320, 240} + com.apple.InterfaceBuilder.CocoaPlugin {{145, 1011}, {336, 20}} - + com.apple.InterfaceBuilder.CocoaPlugin {{67, 819}, {336, 20}} - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin {{20, 641}, {218, 203}} - + com.apple.InterfaceBuilder.CocoaPlugin {{79, 616}, {218, 203}} - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin @@ -4018,33 +4032,27 @@ Zm9yIGV4ZWN1dGFkby4 YES - - NSObject - - + FirstResponder + NSObject - IBUserSource - - - - - - - - - - - + IBUserSource + NSFormatter - - - + NSObject - - + IBUserSource + + + + + X11Controller + NSObject + + IBUserSource + @@ -4052,863 +4060,5 @@ Zm9yIGV4ZWN1dGFkby4 0 ../X11.xcodeproj 1 - - YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA -AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEDmwALAAwAMQA1ADkAQABD -AEQASABMAJQAnACsALMAtAC1ALoAuwC8AL8AwwDEAMcAygDLAMwA0ADVAOMA6QDqAQYBBwEOAQ8BEgEW -ARcBFgEbAR4BHwEjASkBKgEtATIBNwE4AT0BSQFUAVUBVgFaAV8BaAFvAXABdAF2AXcBfAGDAYgBiQGS -AZMBlAGZAaEBpwGoAbMBtAG2AbcBvAHDAcQBxQHKAdEB0gHbAdwB4QHoAe0B7gIFAgkCCwIYAhwCHQIe -AiECKAIyAh0CMwI9Ah0CPgJIAh0CSQJNAlACVQJdAmICYwJkAmUCagJxAnICcwJ4AnkCfgKFAoYCjwKQ -ApUCnAKdAqYCpwKoAq0CsgK5AroCwwLEAsUCygLTAtcC2ALdAuQC5QLmAucC7ALzAvkC+gMDAwQDBQMK -AwsDEAMXAxwDHQMmAycDLAMzAzQDNQM2AzsDRANFA0oDSwNQA1EDVgNdA14DZwNoA20DdAN1A3oDgQOC -A4sDjAORA5kDmgObA6ADoQOmA60DrgO3A7gDuQO+A78DxAPLA88D0APRA9YD3QPeA+gD6QPuA/gD+QP6 -A/4EAAQFBAYECQQMBA8EEAQVBBwEHQQmBCcEKQQqBC8ENgQ3BDgEPQRCBEkESgRRBFIEUwRYBFkEXQRk -BGgEaQRqBGsEcAR1BHoEgQSCBIMEhASJBJAEkQSSBJcEngSfBKgEqQSuBK8EtAS7BLwExQTGBMsE0gTT -BNwE3QTeBOME6gTrBOwE7QTyBPcE/gT/BQgFCQUKBQ8FKwU6BTsFQgVLBUwFTwVUBWkFagVtBXMFhQWM -BY0FkAWVBZYFmQWjBaQFpwWqBbMFuQW6BcIFywXRBdIF1wXYBeIF5gXrBewF8QXyBfUF9wX4Bf0F/gYD -AxwGCgYTBhQGGQYaBh8GIAYlBiYGKwYsBjEGMgY3Bj4GPwZHBkgGSgZLBlAGUQZWBlcGXAZdBmIGYwZo -BoAGgQaCBoMGhgaHBowGkAaeBqIGqwayBrMGuwa8BsMGxAbMBs0G1AbVBt0G3gbfBuEG4gbqBvMG9gb3 -BvoHAQcEBw8HFgcXBx8HIAcnBygHMAcxBzgHOQdBB0IHSQdKB1IG3gdTB1QHWwddB2gHbwdwB3cG3gd4 -B3kHgAeCB4sHkgeTB5oHmweiB6MHqgerB7IHswe6Bt4Huwe8B8IHygfRB9IH2gfbB+IH4wfrB+wH8wf0 -B/wG3gf9B/4IAAgBCAIIAwgECAcICAgNCBIIGQgaCBsIHAghCCYIJwgvCDgBVQg5CEgIUQhaAVUIWwhg -CGMIZAhtCHYIfwiAAVUIiQiOCJcBVQiYCJwIpQFVCKYIsgi7CMMIxAjFCM4IzwjYAVUI2QjdCN4I3wjk -COUI6gjrCYIJiwmMCY0JkAmYCZwJnQmgCagJqQmtCa4JrwmyCbkJugnGCccJyAaGCAEIAgnKCcsAOAnO -CdAKZwr/C5cLmAuZC5oLmwucC50LngufC6ALoQuiC6MLpAulC6YLpwuoC6kLqgurC6wLrQuuC68LsAux -C7ILswu0C7ULtgu3C7gLuQu6C7sLvAu9C74LvwvAC8ELwgvDC8QLxQvGC8cLyAvJC8oLywvMC80LzgvP -C9AL0QvSC9ML1AvVC9YL1wvYC9kL2gvbC9wL3QveC98L4AvhC+IL4wvkC+UL5gvnC+gL6QvqC+sL7Avt -C+4L7wvwC/EL8gvzC/QL9Qv2C/cL+Av5C/oL+wv8C/0GhQv+C/8MAAwBDAIMAwwEDAUMBgwHDAgMCQwK -DAsMDAwNDA4MDwwQDBEMEgwTDBQMFQwWDBcMGAwZDBoMGwwcDB0MHgwfDCAMIQwiDCMMJAwlDCYMJwwo -DCkMLAwvDQwN6Q3qDesN7A3tDe4N7w3wDfEN8g3zDfQN9Q32DfcN+A35DfoN+w38Df0N/g3/DgAOAQ4C -DgMOBA4FDgYOBw4IDgkOCg4LDgwODQ4ODg8OEA4RDhIOEw4UDhUOFg4XDhgOGQ4aDhsOHA4dDh4OHw4g -DiEOIg4jDiQOJQ4mDicOKA4pDioOKw4sDi0OLg4vDjAOMQ4yDjMONA41DjYONw44DjkOOg47DjwOPQ4+ -Dj8OQA5BDkIOQw5EDkUORg5HDkgOSQ5KDksOTA5NDk4OTw5QDlEOUg5TDlQOVQ5WDlcOWA5ZDloOWw5c -Dl0OXg5fDmAOYQ5iDmMOZA5lDmYOZw5oDmkOag5rDmwObQ5uDm8OcA5xDnIOcw50DnUOdg53DngOeQ56 -DnsOfA59Dn4Ofw6ADoEOgg6DDoQOhQ6GDocOiA6JDooOiw6MAkcOjQ6ODo8OkA6RDpIOkw6UDpUOlg6X -DpgOmQ6aDpsOnA6dDp4Onw6gDqEOog6jDqQOpQ6mDqcOqA6pDqoOqw6sDq0Org6vDrAOsQ6yDrMOtA61 -DrYOtw64DrkOug67DrwOvQ6+Dr8OwA7BDsIOxQ7IDstVJG51bGzfEBIADQAOAA8AEAARABIAEwAUABUA -FgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADBWTlNSb290 -ViRjbGFzc11OU09iamVjdHNLZXlzXxAPTlNDbGFzc2VzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5T2lk -c1ZhbHVlc11OU0Nvbm5lY3Rpb25zW05TTmFtZXNLZXlzW05TRnJhbWV3b3JrXU5TQ2xhc3Nlc0tleXNa -TlNPaWRzS2V5c11OU05hbWVzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5Q29ubmVjdG9yc11OU0ZvbnRN -YW5hZ2VyXxAQTlNWaXNpYmxlV2luZG93c18QD05TT2JqZWN0c1ZhbHVlc18QF05TQWNjZXNzaWJpbGl0 -eU9pZHNLZXlzWU5TTmV4dE9pZFxOU09pZHNWYWx1ZXOAAoEDmoECB4ECuoEDmYAJgQIkgAaBArmBAruB -AiWBA5eAAIAHgQIjgQOYEgAElb2BArzSAA4AMgAzADRbTlNDbGFzc05hbWWABYAD0gAOADYANwA4WU5T -LnN0cmluZ4AEXU5TQXBwbGljYXRpb27SADoAOwA8AD1YJGNsYXNzZXNaJGNsYXNzbmFtZaMAPQA+AD9f -EA9OU011dGFibGVTdHJpbmdYTlNTdHJpbmdYTlNPYmplY3TSADoAOwBBAEKiAEIAP15OU0N1c3RvbU9i -amVjdF8QEElCQ29jb2FGcmFtZXdvcmvSAA4ARQBGAEdaTlMub2JqZWN0c4AIoNIAOgA7AEkASqMASgBL -AD9cTlNNdXRhYmxlU2V0VU5TU2V00gAOAEUATQBOgDqvEEUATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoA -WwBcAF0AXgBfAGAAYQBiAGMAZABlAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAHIAcwB0AHUAdgB3AHgA -eQB6AHsAfAB9AH4AfwCAAIEAggCDAIQAhQCGAIcAiACJAIoAiwCMAI0AjgCPAJAAkQCSAJOACoAagC2A -PYBEgEyAUIBVgG2Ac4B3gHmAfoCEgIWAi4CPgJSAm4CdgKOAqICrgK2Ar4C0gLeAvIDAgMKAyIDKgM+A -4IDngOuA7IDygPSA+oD7gPyBAQGBAQWBAQqBAQyBARGBAReBARyBAR2BASOBAU2BAU+BAVSBAVaBAViB -AVqBAVyBAV6BAWWBAWeBAWmBAWuBAW2BAdOBAdSBAdmBAgOBAgXUAA4AlQCWAJcAmACZAJoAm11OU0Rl -c3RpbmF0aW9uWE5TU291cmNlV05TTGFiZWyAGYAWgAuAGNgADgCdAJ4AnwCgAKEAogCjAKQApQCmAKcA -qACpAKoAq1dOU1RpdGxlXxARTlNLZXlFcXVpdk1vZE1hc2taTlNLZXlFcXVpdl1OU01uZW1vbmljTG9j -WU5TT25JbWFnZVxOU01peGVkSW1hZ2VWTlNNZW51gBWADRIAEgEKgA4Sf////4APgBOADNQADgCdAK0A -rgCvALAAsQCyVk5TTmFtZVtOU01lbnVJdGVtc4A7gQH0gQH8gQH2XxAkUGVyY29ycmVyIGphbmVsYXMg -bm8gc2VudGlkbyBpbnZlcnNvUX7TAA4AMgC2ALcAuAC5Xk5TUmVzb3VyY2VOYW1lgBKAEIARV05TSW1h -Z2VfEA9OU01lbnVDaGVja21hcmvSADoAOwC9AL6iAL4AP18QEE5TQ3VzdG9tUmVzb3VyY2XTAA4AMgC2 -ALcAuADCgBKAEIAUXxAQTlNNZW51TWl4ZWRTdGF0ZdIAOgA7AMUAxqIAxgA/Wk5TTWVudUl0ZW3SAA4A -MgAzAMmABYAXXVgxMUNvbnRyb2xsZXJfEBBwcmV2aW91c193aW5kb3c60gA6ADsAzQDOowDOAM8AP18Q -FU5TTmliQ29udHJvbENvbm5lY3Rvcl5OU05pYkNvbm5lY3RvctQADgCVAJYAlwDRANIAmQDUgCyAG4AW -gCvXANYADgDXANgA2QDaANsA3ADdAN4A3wDgAOEA3F8QD05TTmV4dFJlc3BvbmRlcldOU0ZyYW1lVk5T -Q2VsbFhOU3ZGbGFnc1lOU0VuYWJsZWRbTlNTdXBlcnZpZXeAHIAqgB2AHhEBAAmAHNUA1gAOANcA5ADZ -ACsA5gDnAOgA4FpOU1N1YnZpZXdzgACBAYaBAamBAaRfEBV7ezM0LCA5Nn0sIHs0MDksIDIzfX3eAOsA -DgDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoBAAEBANIBAwEEAQVbTlNDZWxs -RmxhZ3NfEBNOU0FsdGVybmF0ZUNvbnRlbnRzXU5TTm9ybWFsSW1hZ2VfEBJOU1BlcmlvZGljSW50ZXJ2 -YWxeTlNCdXR0b25GbGFnczJfEBBOU0FsdGVybmF0ZUltYWdlXxAPTlNLZXlFcXVpdmFsZW50Wk5TQ29u -dGVudHNZTlNTdXBwb3J0XU5TQ29udHJvbFZpZXdfEA9OU1BlcmlvZGljRGVsYXlcTlNDZWxsRmxhZ3My -XU5TQnV0dG9uRmxhZ3MSBAH+AIApgCiAIxAZEAKAJYAogB+AIIAbEMgQABJIPFH/bxA0AEEAYwB0AHUA -YQBsAGkAegBhAHIAIABDAEwASQBQAEIATwBBAFIARAAgAHEAdQBhAG4AZABvACAAYQAgAOEAcgBlAGEA -IABkAGUAIABjAG8AbABhAGcAZQBtACAAbQB1AGQAYQByAC7UAA4BCACtAQkBCgELAQwBDVZOU1NpemVY -TlNmRmxhZ3OAIiNAKgAAAAAAAIAhEQQUXEx1Y2lkYUdyYW5kZdIAOgA7ARABEaIBEQA/Vk5TRm9udNMA -DgAyALYAtwC4ARWAEoAQgCRYTlNTd2l0Y2jSAA4BGAEZARpbTlNJbWFnZU5hbWWAJ4Am0gA6ADsBHAEd -ogEdAD9fEBNOU0J1dHRvbkltYWdlU291cmNlUNIAOgA7ASABIaQBIQEiANgAP1xOU0J1dHRvbkNlbGxc -TlNBY3Rpb25DZWxs0gA6ADsBJAElpQElASYBJwEoAD9YTlNCdXR0b25ZTlNDb250cm9sVk5TVmlld1tO -U1Jlc3BvbmRlcl8QHHN5bmNfcGFzdGVib2FyZF90b19jbGlwYm9hcmTSADoAOwErASyjASwAzwA/XxAU -TlNOaWJPdXRsZXRDb25uZWN0b3LUAA4AlQCWAJcA0QEvAB8BMYAsgC6AAoA81AAOAJ0ArQCuAK8BNAD6 -ATaAO4AvgCiAMFRNZW510gAOAEUATQE6gDqiATsBPIAxgDLaAA4AnQCeAT4AnwE/AKAAoQCiAKMApAD6 -AUIA4QD6AOEAqACpAKoBL11OU0lzU2VwYXJhdG9yXE5TSXNEaXNhYmxlZIAVgCgSABAAAAmAKAmAD4AT -gC7aAA4BSgCdAJ4AnwCgAKEAogCjAUsApAFNAU4BQgD6AKgAqQCqAS8BU1lOU1N1Ym1lbnVYTlNBY3Rp -b26AFYA1gDOAKIAPgBOALoA0agBBAHAAbABpAGMAYQDnAPUAZQBzXnN1Ym1lbnVBY3Rpb2460wAOAJ0A -rgCvAU4BWYA7gDOANtIADgBFAE0BXIA6ogFdAV6AN4A42gAOAJ0AngE+AJ8BPwCgAKEAogCjAKQA+gFC -AOEA+gDhAKgAqQCqAU2AFYAoCYAoCYAPgBOANdgADgCdAJ4AnwCgAKEAogCjAKQBagFCAPoAqACpAKoB -TYAVgDmAKIAPgBOANW0AUABlAHIAcwBvAG4AYQBsAGkAegBhAHIgJtIAOgA7AXEBcqMBcgFzAD9eTlNN -dXRhYmxlQXJyYXlXTlNBcnJhedIAOgA7AXUAo6IAowA/WGRvY2tNZW511AAOAJUAlgCXAJgAmQF6AXuA -GYAWgD6AQ9cA1gAOANcA2ADZANoA2wF9AN0BfwGAAOAA4QF9gD+AKoBAgEEJgD/VANYADgDXAOQA2QAr -AOYBhgGHAOCAAIEBhoEBuoEBrV8QFnt7MTUsIDIxMn0sIHs0MDIsIDE4fX3eAOsADgDsAO0A7gDvAPAA -8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoBjwEBAXoBAwEEAQWAKYAogCOAJYAogEKAIIA+XxAi -Q2xpcXVlIGF0cmF2ZXNzYSBqYW5lbGFzIGluYWN0aXZhc15wcmVmc19jaGFuZ2VkOtQADgCVAJYAlwCY -AJkBlwGYgBmAFoBFgEvXANYADgDXANgA2QDaANsBmgDdAZwBnQGeAOEBmoBGgCqAR4BIEQEJCYBG1QDW -AA4A5ADZAaIAKwDmAaUA4AGmW05TRnJhbWVTaXplgACBAYaBAhaBAhdfEBd7ezM0MCwgMTU5fSwgezEy -MywgMzJ9fd0A6wAOAOwA7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD8AasBAQGtAa4BAQGXAQMBsQGy -gCmAKBABgCCASoBJgCCARRIIOAAAE/////+GgkD/V1JlbW92ZXLSAA4ANgA3AR6ABF8QEmFwcHNfdGFi -bGVfZGVsZXRlOtQADgCVAJYAlwCYAJkBugG7gBmAFoBNgE/YAA4AnQCeAJ8AoAChAKIAowCkAb4BQgD6 -AKgAqQCqAKuAFYBOgCiAD4ATgAxfEBlQYXNzYXIgdHVkbyBwYXJhIGEgZnJlbnRlXxAPYnJpbmdfdG9f -ZnJvbnQ61AAOAJUAlgCXAJgAmQHIAXuAGYAWgFGAQ9cA1gAOANcA2ADZANoA2wDcAN0BzQHOAOAA4QDc -gByAKoBSgFMJgBxfEBV7ezM0LCA3MX0sIHs1NTAsIDIzfX3eAOsADgDsAO0A7gDvAPAA8QDyAPMA9AD1 -APYA9wD4APkA+gD7APwA/QD+APoB2AEBAcgBAwEEAQWAKYAogCOAJYAogFSAIIBRbxBPAEEAYwB0AHUA -YQBsAGkAegBhAHIAIABQAFIASQBNAEEAUgBZACAAKABjAGwAaQBxAHUAZQAgAGMAbwBtACAAbwAgAGIA -bwB0AOMAbwAgAGMAZQBuAHQAcgBhAGwAKQAgAHEAdQBhAG4AZABvACAAYQAgAOEAcgBlAGEAIABkAGUA -IABjAG8AbABhAGcAZQBtACAAbQB1AGQAYQByAC7UAA4AlQCWAJcAmACZAd8Be4AZgBaAVoBD1wDWAA4A -1wDYANkA2gDbAeIB4wHkAeUA4ADhAeKAV4BsgFiAWQmAV9UA1gAOANcA5ADZACsA5gHrAewA4IAAgQGG -gQGggQGPXxAWe3s2NCwgMjAxfSwgezEzMSwgMjZ9fd8QEwDrAe8B8ADsAO4ADgDvAPAA8QDzAMYA9AHx -AfIB8wD1APYAowD3AfQA4QGrAPoB9wH4AasB+QH6AQEB/AHfAf4A4QDhAgECAgIDAgRfEBpOU01lbnVJ -dGVtUmVzcGVjdEFsaWdubWVudF8QD05TQXJyb3dQb3NpdGlvbl8QD05TUHJlZmVycmVkRWRnZV8QEk5T -VXNlc0l0ZW1Gcm9tTWVudV1OU0FsdGVyc1N0YXRlE/////+EQf5ACYAoEEuAa4BagFuAIIBcgFYQAwkJ -EQGQEQQAgF0SBoJA/9QADgEIAK0BCQEKAQsBDAIIgCKAIRAQ0gAOADYANwEegATcAgwADgCdAJ4AnwCg -AKEAogCjAUsCDQIOAeUApAIRAUIA+gCoAKkAqgIDAhYCFwGrWE5TVGFyZ2V0VU5TVGFnV05TU3RhdGWA -WYAVgF6AKIAPgBOAXYBfE///////////0wAOAJ0ArgCvAhoCG4A7gGCAYVpEbyBtb25pdG9yXxARX3Bv -cFVwSXRlbUFjdGlvbjrSAA4ANgA3AiCABFpPdGhlclZpZXdz0gAOAEUATQIjgDqkAfwCJQImAieAXIBi -gGWAaNsCDAAOAJ0AngCfAKAAoQCiAKMBSwINAeUApAIrAUIA+gCoAKkAqgIDAjACMYBZgBWAY4AogA+A -E4BdgGQQCFkyNTYgY29yZXPbAgwADgCdAJ4AnwCgAKEAogCjAUsCDQHlAKQCNgFCAPoAqACpAKoCAwI7 -AjyAWYAVgGaAKIAPgBOAXYBnEA9YTWlsaGFyZXPbAgwADgCdAJ4AnwCgAKEAogCjAUsCDQHlAKQCQQFC -APoAqACpAKoCAwJGAkeAWYAVgGmAKIAPgBOAXYBqEBhnAE0AaQBsAGgA9QBlAHPSADoAOwJKAkumAksC -TAEhASIA2AA/XxARTlNQb3BVcEJ1dHRvbkNlbGxeTlNNZW51SXRlbUNlbGzSADoAOwJOAk+mAk8BJQEm -AScBKAA/XU5TUG9wVXBCdXR0b27UAA4AlQCWAJcAmACZAlMCVIAZgBaAboBy2AAOAJ0AngCfAKAAoQCi -AKMApAJXAlgCWQCoAKkAqgJcgBWAcBIAGAAAgHGAD4ATgG/UAA4AnQCtAK4ArwJfAmACYYA7gQHegQHr -gQHgbxAWAEEAbAB0AGUAcgBuAGEAcgAgAGUAYwByAOMAIABjAG8AbQBwAGwAZQB0AG9RYV8QEnRvZ2ds -ZV9mdWxsc2NyZWVuOtQADgCVAJYAlwCYAB8CaAJpgBmAAoB0gHbXAA4AnQCfAKAAoQCiAKMApAJsAPoA -qACpAKoCXIAVgHWAKIAPgBOAb11BY2VyY2EgZG8gWDExXxAdb3JkZXJGcm9udFN0YW5kYXJkQWJvdXRQ -YW5lbDrUAA4AlQCWAJcA0QJTAJkCd4AsgG6AFoB4XxAWdG9nZ2xlX2Z1bGxzY3JlZW5faXRlbdQADgCV -AJYAlwCYAJkCfAF7gBmAFoB6gEPXANYADgDXANgA2QDaANsA3ADdAoECggDgAOEA3IAcgCqAe4B8CYAc -XxAWe3szNCwgMTU5fSwgezQwOSwgMjN9fd4A6wAOAOwA7QDuAO8A8ADxAPIA8wD0APUA9gD3APgA+QD6 -APsA/AD9AP4A+gKMAQECfAEDAQQBBYApgCiAI4AlgCiAfYAggHpvEDYAQQBjAHQAdQBhAGwAaQB6AGEA -cgAgAGEAIADhAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQAgAHEAdQBhAG4AZABvACAAbwAgAEMA -TABJAFAAQgBPAEEAUgBEACAAbQB1AGQAYQByAC7UAA4AlQCWAJcA0QKSAJkClIAsgH+AFoCD1wDWAA4A -1wDYANkA2gDbAX0A3QKYApkA4ADhAX2AP4AqgICAgQmAP18QFnt7MTUsIDEwN30sIHs0MDIsIDE4fX3e -AOsADgDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoCowEBApIBAwEEAQWAKYAo -gCOAJYAogIKAIIB/XxAVRm9jbyBlbSBqYW5lbGFzIG5vdmFzXxATZm9jdXNfb25fbmV3X3dpbmRvd9QA -DgCVAJYAlwCYAJkCkgF7gBmAFoB/gEPUAA4AlQCWAJcA0QKvAJkCsYAsgIaAFoCK1wDWAA4A1wDYANkA -2gDbAeIA3QK1ArYA4ADhAeKAV4AqgIeAiAmAV18QFnt7MTgsIDE0OX0sIHs0MDksIDIzfX3eAOsADgDs -AO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoCwAEBAq8BAwEEAQWAKYAogCOAJYAo -gImAIICGbxASAE0AbwBkAG8AIABlAGMAcgDjACAAYwBvAG0AcABsAGUAdABvXxARZW5hYmxlX2Z1bGxz -Y3JlZW7UAA4AlQCWAJcA0QLHAJkCyYAsgIyAFoCO2gAOAJ0AngE+AJ8BPwCgAKEAogCjAKQA+gFCAOEA -+gDhAKgAqQCqAtKAFYAoCYAoCYAPgBOAjdMADgCdAK4ArwFOAtaAO4AzgQHuXmFwcHNfc2VwYXJhdG9y -1AAOAJUAlgCXAJgAmQLbAtyAGYAWgJCAk9gADgCdAJ4AnwCgAKEAogCjAKQC3wFCAuAAqACpAKoAq4AV -gJGAkoAPgBOADFlNaW5pbWl6YXJRbV8QEG1pbmltaXplX3dpbmRvdzrUAA4AlQCWAJcA0QLpAJkC64As -gJWAFoCa1wDWAA4A1wDYANkA2gDbAu0A3QLvAvAA4ADhAu2AloAqgJeAmAmAltYA1gAOANcA5ADZANsC -9ADmAvYC9wDgAvSBAXaBAYaBAYWBAXiBAXZfEBV7ezE4LCA5MX0sIHs0MDIsIDE4fX3eAOsADgDsAO0A -7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoDAAEBAukBAwEEAQWAKYAogCOAJYAogJmA -IICVbxAsAEEAYwB0AGkAdgBhAHIAIABhAHMAIABlAHEAdQBpAHYAYQBsAOoAbgBjAGkAYQBzACAAZABl -ACAAdABlAGMAbABhAGQAbwAgAHAAYQByAGEAIABYADEAMV8QEGVuYWJsZV9rZXllcXVpdnPUAA4AlQCW -AJcAmACZAV4DCYAZgBaAOICcXxAQYXBwc190YWJsZV9zaG93OtQADgCVAJYAlwCYAJkDDgF7gBmAFoCe -gEPXANYADgDXANgA2QDaANsDEQDdAxMDFADgAOEDEYCfgCqAoIChCYCf1QDWAA4A1wDkANkAKwDmAxoD -GwDggACBAYaBAcqBAb1fEBZ7ezE4LCAyMTB9LCB7NDAyLCAxOH193gDrAA4A7ADtAO4A7wDwAPEA8gDz -APQA9QD2APcA+AD5APoA+wD8AP0A/gD6AyMBAQMOAQMBBAEFgCmAKIAjgCWAKICigCCAnm8QEwBBAHUA -dABlAG4AdABpAGMAYQByACAAbABpAGcAYQDnAPUAZQBz1AAOAJUAlgCXAJgAHwMqAyuAGYACgKSAp9gA -DgCdAJ4AnwCgAKEAogCjAKQDLgJYAy8AqACpAKoCXIAVgKWApoAPgBOAb28QGQBPAGMAdQBsAHQAYQBy -ACAAbwB1AHQAcgBhAHMAIABhAHAAbABpAGMAYQDnAPUAZQBzUWhfEBZoaWRlT3RoZXJBcHBsaWNhdGlv -bnM61AAOAJUAlgCXANEDOACZAzqALICpgBaAqtoADgCdAJ4BPgCfAT8AoAChAKIAowCkAPoBQgDhAPoA -4QCoAKkAqgCrgBWAKAmAKAmAD4ATgAxfEBB3aW5kb3dfc2VwYXJhdG9y1AAOAJUAlgCXANEByACZA0mA -LIBRgBaArF8QGnN5bmNfcGFzdGVib2FyZF90b19wcmltYXJ51AAOAJUAlgCXAJgAmQKvA0+AGYAWgIaA -rl8QGmVuYWJsZV9mdWxsc2NyZWVuX2NoYW5nZWQ61AAOAJUAlgCXAJgAmQNUAXuAGYAWgLCAQ9cA1gAO -ANcA2ADZANoA2wDcAN0DWQNaAOAA4QDcgByAKoCxgLIJgBxfEBV7ezM0LCA0Nn0sIHs1NDQsIDIzfX3e -AOsADgDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoDZAEBA1QBAwEEAQWAKYAo -gCOAJYAogLOAIICwbxBOAEEAYwB0AHUAYQBsAGkAegBhAHIAIABhACAA4QByAGUAYQAgAGQAZQAgAGMA -bwBsAGEAZwBlAG0AIABpAG0AZQBkAGkAYQB0AGEAbQBlAG4AdABlACAAcQB1AGEAbgBkAG8AIABmAG8A -cgAgAHMAZQBsAGUAYwBjAGkAbwBuAGEAZABvACAAdABlAHgAdABvACAAbgBvAHYAbwAu1AAOAJUAlgCX -AJgAmQNrAwmAGYAWgLWAnNgADgCdAJ4AnwCgAKEAogCjAKQDbwFCAPoAqACpAKoC0oAVgLaAKIAPgBOA -jV8QD1BlcnNvbmFsaXphci4uLtQADgCVAJYAlwCYAJkDeAF7gBmAFoC4gEPXANYADgDXANgA2QDaANsB -4gDdA30DfgDgAOEB4oBXgCqAuYC6CYBXXxAVe3sxOCwgNjN9LCB7NDAyLCAxOH193gDrAA4A7ADtAO4A -7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD6A4gBAQN4AQMBBAEFgCmAKIAjgCWAKIC7gCCA -uF8QJlV0aWxpemFyIG8gZWZlaXRvIGRlIGFsZXJ0YSBkbyBzaXN0ZW1h1AAOAJUAlgCXAJgAHwOPA5CA -GYACgL2Av9kADgCdAJ4AnwCgAKEAogCjAg0ApAOTAUIA+gCoAKkAqgJcA5iAFYC+gCiAD4ATgG8QKlxN -b3N0cmFyIHR1ZG9fEBZ1bmhpZGVBbGxBcHBsaWNhdGlvbnM61AAOAJUAlgCXANEDVACZA5+ALICwgBaA -wV8QGHN5bmNfcHJpbWFyeV9pbW1lZGlhdGVsedQADgCVAJYAlwDRA6MAmQOlgCyAw4AWgMfXANYADgDX -ANgA2QDaANsBfQDdA6kDqgDgAOEBfYA/gCqAxIDFCYA/XxAWe3sxNSwgMTUxfSwgezQwMiwgMTh9fd4A -6wAOAOwA7QDuAO8A8ADxAPIA8wD0APUA9gD3APgA+QD6APsA/AD9AP4A+gO0AQEDowEDAQQBBYApgCiA -I4AlgCiAxoAggMNfEBFGb2NvIHNlZ3VlIG8gcmF0b18QE2ZvY3VzX2ZvbGxvd3NfbW91c2XUAA4AlQCW -AJcA0QJ8AJkDvYAsgHqAFoDJXxAcc3luY19jbGlwYm9hcmRfdG9fcGFzdGVib2FyZNQADgCVAJYAlwCY -AJkDwgPDgBmAFoDLgM7YAA4AnQCeAJ8AoAChAKIAowCkA8YBQgD6AKgAqQCqA8qAFYDNgCiAD4ATgMzT -AA4AnQCuAK8DzQPOgDuBAf6BAgBcQWp1ZGEgZG8gWDExWXgxMV9oZWxwOtQADgCVAJYAlwDRA9MAmQPV -gCyA0IAWgN/XANYADgDXANgA2QDaANsA3APYA9kD2gDgAOEA3IAcgN6A0YDSCYAcXxAWe3s0OCwgMTI1 -fSwgezUwOSwgMjh9fdgA6wAOA98A8gDzAPQA9gPgAPgD4QPiA+MD5APTA+YD518QEU5TQmFja2dyb3Vu -ZENvbG9yW05TVGV4dENvbG9ygN2A1YDTgNSA0BIAQAAAgNpvEG0ARABlAHMAYQBjAHQAaQB2AGUAIABl -AHMAdABhACAAbwBwAOcA4wBvACAAcwBlACAAcAByAGUAdABlAG4AZABlAHIAIAB1AHQAaQBsAGkAegBh -AHIAIABvACAAeABjAGwAaQBwAGIAbwBhAHIAZAAsACAAbwAgAGsAbABpAHAAcABlAHIAIABvAHUAIABx -AHUAYQBsAHEAdQBlAHIAIABvAHUAdAByAG8AIABnAGUAcwB0AG8AcgAgAGQAZQAgAGMAbABpAHAAYgBv -AGEAcgBkACAAWAAxADEALtQADgEIAK0BCQEKA+sBDAPtgCIjQCYAAAAAAACAIREMHNUADgPvA/AD8QPy -A/MD9AP1A/YD91dOU0NvbG9yXE5TQ29sb3JTcGFjZVtOU0NvbG9yTmFtZV1OU0NhdGFsb2dOYW1lgNmA -2BAGgNeA1lZTeXN0ZW1cY29udHJvbENvbG9y0wAOA/AD+wPzAf4D/VdOU1doaXRlgNlLMC42NjY2NjY2 -OQDSADoAOwP/A++iA+8AP9UADgPvA/AD8QPyA/MEAgP1BAMD94DZgNyA24DWXxAQY29udHJvbFRleHRD -b2xvctMADgPwA/sD8wH+BAiA2UIwANIAOgA7BAoEC6QECwEiANgAP18QD05TVGV4dEZpZWxkQ2VsbNIA -OgA7BA0EDqUEDgEmAScBKAA/W05TVGV4dEZpZWxkWnN5bmNfdGV4dDHUAA4AlQCWAJcAmACZBBMEFIAZ -gBaA4YDm1wDWAA4A1wDYANkA2gDbAZoA3QQYBBkBngDhAZqARoAqgOKA4wmARl8QF3t7MzQwLCAyMjN9 -LCB7MTIzLCAzMn193QDrAA4A7ADuAO8A8ADxAPIA8wD0APUA9gD3BB4A+QD6APwBqwEBBCIEIwEBBBMB -AwGxAbIT/////4QB/gCAKYAogCCA5YDkgCCA4V8QEkFkaWNpb25hciBlbGVtZW50b9IADgA2ADcBHoAE -XxAPYXBwc190YWJsZV9uZXc61AAOAJUAlgCXAJgAmQQtBC6AGYAWgOiA6tgADgCdAJ4AnwCgAKEAogCj -AKQEMQFCAPoAqACpAKoAq4AVgOmAKIAPgBOADFRab29tXHpvb21fd2luZG93OtQADgCVAJYAlwCYAJkC -6QF7gBmAFoCVgEPUAA4AlQCWAJcA0QQ/AJkEQYAsgO2AFoDx1wDWAA4A1wDYANkA2gDbANwD2ARFBEYA -4ADhANyAHIDegO6A7wmAHF8QFXt7NDgsIDE0fSwgezUzNCwgMjh9fdgA6wAOA98A8gDzAPQA9gPgAPgD -4QPiBE0D5AQ/A+YD54DdgNWA8IDUgO2A2m8QXQBEAGUAdgBpAGQAbwAgAGEAIABsAGkAbQBpAHQAYQDn -APUAZQBzACAAZABvACAAcAByAG8AdABvAGMAbwBsAG8AIABYADEAMQAsACAAZQBzAHQAYQAgAG8AcADn -AOMAbwAgAG4AZQBtACAAcwBlAG0AcAByAGUAIABmAHUAbgBjAGkAbwBuAGEAcgDhACAAZQBtACAAYQBs -AGcAdQBtAGEAcwAgAGEAcABsAGkAYwBhAOcA9QBlAHMALlpzeW5jX3RleHQy1AAOAJUAlgCXANEBOwCZ -BFeALIAxgBaA818QFWRvY2tfd2luZG93X3NlcGFyYXRvctMADgCWAJcAmARbBFyAGYD1gPnYAA4AnQCe -AJ8AoAChAKIAowCkBF8BQgRgAKgAqQCqBGOAFYD3gPiAD4ATgPbTAA4AnQCuAK8EZgRngDuBAfCBAfJW -Q29waWFyUWNVY29weTrUAA4AlQCWAJcAmACZA6MBe4AZgBaAw4BD1AAOAJUAlgCXAJgAmQDSAXuAGYAW -gBuAQ9QADgCVAJYAlwCYAB8EeAR5gBmAAoD9gQEA2AAOAJ0AngCfAKAAoQCiAKMApAR8AUIEfQCoAKkA -qgJcgBWA/oD/gA+AE4BvW1NhaXIgZG8gWDExUXFadGVybWluYXRlOtQADgCVAJYAlwCYAB8EhwSIgBmA -AoEBAoEBBNkADgCdAJ4AnwCgAKEAogCjAg0ApASLAUIDLwCoAKkAqgJcA5iAFYEBA4CmgA+AE4BvXU9j -dWx0YXIgbyBYMTFVaGlkZTrUAA4AlQCWAJcAmACZBJUBe4AZgBaBAQaAQ9cA1gAOANcA2ADZANoA2wDc -AN0EmgSbAOAA4QDcgByAKoEBB4EBCAmAHF8QFnt7MTgsIDIyMn0sIHs0MDksIDIzfX3eAOsADgDsAO0A -7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoEpQEBBJUBAwEEAQWAKYAogCOAJYAogQEJ -gCCBAQZvEBUAQQBjAHQAaQB2AGEAcgAgAHMAaQBuAGMAcgBvAG4AaQB6AGEA5wDjAG/UAA4AlQCWAJcA -0QFNAJkErYAsgDWAFoEBC15kb2NrX2FwcHNfbWVuddQADgCVAJYAlwCYAJkEsgF7gBmAFoEBDYBD1wDW -AA4A1wDYANkA2gDbAeIA3QS3BLgA4ADhAeKAV4AqgQEOgQEPCYBXXxAVe3szNywgODh9LCB7NDc2LCAx -OH193gDrAA4A7ADtAO4A7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD6BMIBAQSyAQMBBAEF -gCmAKIAjgCWAKIEBEIAggQENbxBBAE0AbwBzAHQAcgBhAHIAIABhAHUAdABvAG0AYQB0AGkAYwBhAG0A -ZQBuAHQAZQAgAGEAIABiAGEAcgByAGEAIABkAGUAIABtAGUAbgB1AHMAIABlAG0AIABtAG8AZABvACAA -ZABlACAAZQBjAHIA4wAgAGMAbwBtAHAAbABlAHQAb9QADgCVAJYAlwDRBMgAmQTKgCyBARKAFoEBFtcA -1gAOANcA2ADZANoA2wMRAN0EzgTPAOAA4QMRgJ+AKoEBE4EBFAmAn18QFnt7MTgsIDEzM30sIHs0MDIs -IDE4fX3eAOsADgDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoE2QEBBMgBAwEE -AQWAKYAogCOAJYAogQEVgCCBARJvECUAUABlAHIAbQBpAHQAaQByACAAbABpAGcAYQDnAPUAZQBzACAA -ZABlACAAYwBsAGkAZQBuAHQAZQBzACAAZABhACAAcgBlAGQAZVplbmFibGVfdGNw1AAOAJUAlgCXAJgA -mQThBOKAGYAWgQEYgQEb2AAOAJ0AngCfAKAAoQCiAKMApATlAUIE5gCoAKkAqgJcgBWBARmBARqAD4AT -gG9vEA8AUAByAGUAZgBlAHIA6gBuAGMAaQBhAHMALgAuAC5RLFtwcmVmc19zaG93OtQADgCVAJYAlwCY -AJkEyAF7gBmAFoEBEoBD1AAOAJUAlgCXANEE9ACZBPaALIEBHoAWgQEi1wDWAA4A1wDYANkA2gDbAu0A -3QT6BPsA4ADhAu2AloAqgQEfgQEgCYCWXxAWe3sxOCwgMTQ2fSwgezQwMiwgMTh9fd4A6wAOAOwA7QDu -AO8A8ADxAPIA8wD0APUA9gD3APgA+QD6APsA/AD9AP4A+gUFAQEE9AEDAQQBBYApgCiAI4AlgCiBASGA -IIEBHm8QKQBTAGUAZwB1AGkAcgAgAGEAIABkAGkAcwBwAG8AcwBpAOcA4wBvACAAZABvACAAdABlAGMA -bABhAGQAbwAgAGQAbwAgAHMAaQBzAHQAZQBtAGFbc3luY19rZXltYXDUAA4AlQCWAJcA0QUMAJkFDoAs -gQEkgBaBAUzfEBMA1gUQAA4FEQUSA98FEwUUBRUFFgUXANkBogDaBRgFGQDbBRoFGwUcAQQFHQUeBR8F -IADhBSIFIwGrBSQA4AUlAOEFJwIXBRwFKQUqXxAfTlNEcmFnZ2luZ1NvdXJjZU1hc2tGb3JOb25Mb2Nh -bFlOU1R2RmxhZ3NcTlNIZWFkZXJWaWV3XxASTlNBbGxvd3NUeXBlU2VsZWN0XE5TQ29ybmVyVmlld18Q -F05TSW50ZXJjZWxsU3BhY2luZ1dpZHRoXxAZTlNDb2x1bW5BdXRvcmVzaXppbmdTdHlsZV8QGE5TSW50 -ZXJjZWxsU3BhY2luZ0hlaWdodFtOU0dyaWRDb2xvcl8QHE5TRHJhZ2dpbmdTb3VyY2VNYXNrRm9yTG9j -YWxeTlNUYWJsZUNvbHVtbnNbTlNSb3dIZWlnaHSBASWBAUsSUkCAAIEBJ4EBOQmBASsjQAgAAAAAAAAj -QAAAAAAAAACBASYJgQFIgQElgQEvI0AxAAAAAAAA2gDWAA4A1wUsAOQA2QUtBS4A2wUvBTAFMQUyBTMF -NAU1BQwFNwUwBQxZTlNjdkZsYWdzWU5TRG9jVmlld1lOU0JHQ29sb3JdTlNOZXh0S2V5Vmlld4EBLIEC -D4ECDhAEgQINEQkAgQEkgQFGgQEsgQEkWnszMDEsIDE5OH3WANYADgDZAaIA2wU8BT0FPgDgBT8FPQUM -W05TVGFibGVWaWV3gQEogQEqgQEpgQEogQEk2gDWAA4A1wUsAOQA2QUtBS4A2wUvBTAFMQVFBTMFRgU1 -BR8FNwUwBR+BASyBAg+BAhOBAhKBASeBAUaBASyBASdZezMwMSwgMTd90gA6ADsFTQVOpAVOAScBKAA/ -XxARTlNUYWJsZUhlYWRlclZpZXfVANYADgDXANkA2wUwBVEFUgDgBTCBASyBAS6BAS2BASzeANYFVQAO -ANcFVgUUBVcA5AVYANkA2wVZBS8FWgGaBVwFXQVeBV8FIgU9BWIFYwVkAZoFZgUcBRxbTlNIU2Nyb2xs -ZXJYTlNzRmxhZ3NfEBBOU0hlYWRlckNsaXBWaWV3XE5TU2Nyb2xsQW10c1tOU1ZTY3JvbGxlcl1OU0Nv -bnRlbnRWaWV3gEaBAgiBAhWBAhQQMoEBK4EBKIECDE8QEEEgAABBIAAAQZgAAEGYAAARARKARoECEIEB -JYEBJV8QFHt7MzAyLCAwfSwgezE2LCAxN3190gA6ADsFawVspAVsAScBKAA/XV9OU0Nvcm5lclZpZXfS -AA4ARQBNBW+AOqMFcAVxBXKBATCBATuBAT/aBXQADgV1BXYFdwV4BXkFegV7BTwA4QV9BX4FfwWAAf4F -gQWCAOEFDF5OU0lzUmVzaXplYWJsZVxOU0hlYWRlckNlbGxXTlNXaWR0aFpOU0RhdGFDZWxsXk5TUmVz -aXppbmdNYXNrWk5TTWluV2lkdGhaTlNNYXhXaWR0aFxOU0lzRWRpdGFibGUJgQE6gQExI0BersjAAAAA -gQE3I0BPXZFgAAAAI0CPQAAAAAAACYEBJNcA6wAOA98A8gDzAPYD4AWGBYcFiAWJA+QBBAWLEgSB/gCB -ATaBATOBATKA1IEBNFROb21l0wAOA/AD+wPzAf4Fj4DZSzAuMzMzMzMyOTkA1QAOA+8D8APxA/ID8wQC -A/UFkwP3gNmA3IEBNYDWXxAPaGVhZGVyVGV4dENvbG9y0gA6ADsFlwWYpQWYBAsBIgDYAD9fEBFOU1Rh -YmxlSGVhZGVyQ2VsbNkA6wAOA98A8gDzAPQA9gWaA+AFmwPhBSAFngEBBQwCAgD6A+dfEBNOU1BsYWNl -aG9sZGVyU3RyaW5nEhQx/kCA3YEBOYEBOIAggQEkgCiA2m8QDwBDAOkAbAB1AGwAYQAgAGQAZQAgAHQA -ZQB4AHQAb9MADgPwA/sD8wH+BaaA2UIxANIAOgA7BagFqaIFqQA/XU5TVGFibGVDb2x1bW7aBXQADgV1 -BXYFdwV4BXkFegV7BTwA4QV9Ba0FrgWvAf4FsAWCAOEFDAmBATqBATwjQFkAAAAAAACBAT4jQEQAAAAA -AAAJgQEk1wDrAA4D3wDyAPMA9gPgBYYFhwWIBbYD5AEEBYuBATaBATOBAT2A1IEBNFdDb21hbmRv2QDr -AA4D3wDyAPMA9AD2BZoD4AWbA+EFIAWeAQEFDAICAPoD54DdgQE5gQE4gCCBASSAKIDa2gV0AA4FdQV2 -BXcFeAV5BXoFewU8AOEFfQXFBcYFxwH+BcgFggDhBQwJgQE6gQFAI0BRQAAAAAAAgQFEI0AkAAAAAAAA -CYEBJNcA6wAOA98A8gDzAPYD4AD4BYcFzQXOA+QBBAWLgQE2gQFCgQFBgNSBATRWQXRhbGhv1QAOA+8D -8APxA/ID8wUgA/UF1QP3gNmBATmBAUOA1ltoZWFkZXJDb2xvctoA6wAOA98A8gDzAPQA9gXZBZoD4AWb -A+EFNwWeBd0FDAICAOEA+gPnXxARTlNEcmF3c0JhY2tncm91bmSA3YEBRoEBOIEBRYEBJAmAKIDa1AAO -AQgArQEJAQoF5AEMAgiAIiNAKAAAAAAAAIAh1QAOA+8D8APxA/ID8wP0A/UF6QP3gNmA2IEBR4DWXxAW -Y29udHJvbEJhY2tncm91bmRDb2xvctUADgPvA/AD8QPyA/MF7gP1Be8D94DZgQFKgQFJgNZZZ3JpZENv -bG9y0wAOA/AD+wPzAf4F9IDZRDAuNQDSADoAOwX2BTylBTwBJgEnASgAP1phcHBzX3RhYmxl1AAOAJUA -lgCXANEB3wCZBfyALIBWgBaBAU5VZGVwdGjUAA4AlQCWAJcAmACZBgEBe4AZgBaBAVCAQ9cA1gAOANcA -2ADZANoA2wLtAN0GBgYHAOAA4QLtgJaAKoEBUYEBUgmAlt4A6wAOAOwA7QDuAO8A8ADxAPIA8wD0APUA -9gD3APgA+QD6APsA/AD9AP4A+gYQAQEGAQEDAQQBBYApgCiAI4AlgCiBAVOAIIEBUG8QGwBTAGkAbQB1 -AGwAYQByACAAcgBhAHQAbwAgAGQAZQAgAHQAcgDqAHMAIABiAG8AdAD1AGUAc9QADgCVAJYAlwDRAS8A -mQYYgCyALoAWgQFVWWRvY2tfbWVuddQADgCVAJYAlwDRBJUAmQYegCyBAQaAFoEBV18QD3N5bmNfcGFz -dGVib2FyZNQADgCVAJYAlwDRAmgAmQYkgCyAdIAWgQFZXngxMV9hYm91dF9pdGVt1AAOAJUAlgCXANEA -mQAfBiqALIAWgAKBAVtYZGVsZWdhdGXUAA4AlQCWAJcA0QN4AJkGMIAsgLiAFoEBXVt1c2Vfc3lzYmVl -cNQADgCVAJYAlwCYAJkGNQY2gBmAFoEBX4EBZNcA1gAOANcA2ADZANoA2wGaAN0GOgY7AZ4A4QGagEaA -KoEBYIEBYQmARl8QF3t7MzQwLCAxOTF9LCB7MTIzLCAzMn193QDrAA4A7ADuAO8A8ADxAPIA8wD0APUA -9gD3APgA+QD6APwBqwEBBkMGRAEBBjUBAwGxAbKAKYAogCCBAWOBAWKAIIEBX1hEdXBsaWNhctIADgA2 -ADcBHoAEXxAVYXBwc190YWJsZV9kdXBsaWNhdGU61AAOAJUAlgCXANEEsgCZBk+ALIEBDYAWgQFmXxAW -ZW5hYmxlX2Z1bGxzY3JlZW5fbWVuddQADgCVAJYAlwDRAw4AmQZVgCyAnoAWgQFoW2VuYWJsZV9hdXRo -1AAOAJUAlgCXANEGAQCZBluALIEBUIAWgQFqXGZha2VfYnV0dG9uc9QADgCVAJYAlwDRAXoAmQZhgCyA -PoAWgQFsXWNsaWNrX3Rocm91Z2jUAA4AlQCWAJcA0QZlAJkGZ4AsgQFugBaBAdLdBmkADgZqBmsGbAZt -Bm4GbwZwBnEGcgZzBnQGdQZ2BncGeAZ5BnoGewZ8Bn0A/QH+Bn4Gf1xOU1dpbmRvd1ZpZXdcTlNTY3Jl -ZW5SZWN0XxATTlNGcmFtZUF1dG9zYXZlTmFtZV1OU1dpbmRvd1RpdGxlWU5TV1RGbGFnc11OU1dpbmRv -d0NsYXNzXxAWTlNXaW5kb3dDb250ZW50TWluU2l6ZVxOU1dpbmRvd1JlY3RfEA9OU1dpbmRvd0JhY2tp -bmdfEBFOU1dpbmRvd1N0eWxlTWFza1lOU01pblNpemVbTlNWaWV3Q2xhc3OBAXSBAdGBAc6BAdCBAXAS -UHgAAIEBcYEBc4EBb4EBz4EBcl8QGHt7MzE5LCAzMjh9LCB7NjMzLCAzMDh9fW8QEwBQAHIAZQBmAGUA -cgDqAG4AYwBpAGEAcwAgAGQAbwAgAFgAMQAxV05TUGFuZWzSAA4ANgA3BoWABFRWaWV3WnszMjAsIDI0 -MH3VANYADgDkANkBogArAOYGigDgBouAAIEBhoEBdYEBzdIADgBFAE0GjoA6oQL0gQF23ADWAA4GkQUR -ANcBEQDkANkF2QDbBpIGkwZ1BpUGlgEEBpcBAQaZAOAA4QZ1AOEGnV5OU1RhYlZpZXdJdGVtc18QFk5T -QWxsb3dUcnVuY2F0ZWRMYWJlbHNfEBVOU1NlbGVjdGVkVGFiVmlld0l0ZW2BAXSBAcyBAYiBAYeAIIEB -dwmBAXQJgQGJ0gAOAEUATQaggDqhAu2AltIADgBFAE0GpIA6pgYBBqYGpwLpBqkE9IEBUIEBeYEBfYCV -gQGBgQEe1wDWAA4A1wDYANkA2gDbAu0D2AauBq8A4ADhAu2AloDegQF6gQF7CYCWXxAVe3szNiwgNTd9 -LCB7NTEwLCAyOH192QDrAA4D3wDyAPMA9AD2BZoD4AD4A+ED4ga2A+QGpgPmAPoD54DdgNWBAXyA1IEB -eYAogNpvEIMAUwBlACAAZQBzAHQAaQB2AGUAcgBlAG0AIABhAGMAdABpAHYAYQBzACwAIABhAHMAIAB0 -AGUAYwBsAGEAcwAgAGUAcQB1AGkAdgBhAGwAZQBuAHQAZQBzACAAZABhACAAYgBhAHIAcgBhACAAZABl -ACAAbQBlAG4AdQBzACAAcABvAGQAZQBtACAAaQBuAHQAZQByAGYAZQByAGkAcgAgAG4AYQBzACAAYQBw -AGwAaQBjAGEA5wD1AGUAcwAgAFgAMQAxACAAcQB1AGUAIAB1AHQAaQBsAGkAegBhAG0AIABvACAAbQBv -AGQAaQBmAGkAYwBhAGQAbwByACAATQBlAHQAYQAu1wDWAA4A1wDYANkA2gDbAu0D2Aa/BsAA4ADhAu2A -loDegQF+gQF/CYCWXxAWe3szNiwgMTY1fSwgezUxMCwgMzl9fdkA6wAOA98A8gDzAPQA9gWaA+AA+APh -A+IGxwPkBqcD5gD6A+eA3YDVgQGAgNSBAX2AKIDabxBrAEEAbwAgAGMAbABpAGMAYQByACwAIABtAGEA -bgB0AGUAbgBoAGEAIABwAHIAZQBtAGkAZABhAHMAIABhAHMAIAB0AGUAYwBsAGEAcwAgAE8AcADnAOMA -bwAgAG8AdQAgAEMAbwBtAGEAbgBkAG8AIABwAGEAcgBhACAAYQBjAHQAaQB2AGEAcgAgAG8AcwAgAGIA -bwB0APUAZQBzACAAYwBlAG4AdAByAGEAbAAgAG8AdQAgAGQAaQByAGUAaQB0AG8AIABkAG8AIAByAGEA -dABvAC4ACtcA1gAOANcA2ADZANoA2wLtA9gG0AbRAOAA4QLtgJaA3oEBgoEBgwmAll8QFnt7MzYsIDEy -MX0sIHs1MTAsIDE5fX3ZAOsADgPfAPIA8wD0APYFmgPgAPgD4QPiBtgD5AapA+YA+gPngN2A1YEBhIDU -gQGBgCiA2m8QWQBQAGUAcgBtAGkAdABlACAAcQB1AGUAIABhAGwAdABlAHIAYQDnAPUAZQBzACAAZABv -ACAAbQBlAG4AdQAgAGQAZQAgAGUAbgB0AHIAYQBkAGEAIABzAGUAIABzAG8AYgByAGUAcABvAG4AaABh -AG0AIABhAG8AIABhAGMAdAB1AGEAbAAgAG0AYQBwAGEAIABkAGUAIAB0AGUAYwBsAGEAcwAgAGQAbwAg -AFgAMQAxAC5fEBZ7ezEwLCAzM30sIHs1ODcsIDI0Nn190gA6ADsG4AEnowEnASgAP18QFnt7MTMsIDEw -fSwgezYwNywgMjkyfX3SAA4ARQBNBuSAOqUGnQbmBucG6AbpgQGJgQGNgQGigQGrgQG81gAOBusBJwbs -A+8AlwbtBu4C7QL0A+IG8lxOU0lkZW50aWZpZXJZTlNUYWJWaWV3gQGMgQGKgJaBAXaA1YEBi9IADgA2 -ADcG9YAEUTFXRW50cmFkYdIAOgA7BvgG+aIG+QA/XU5TVGFiVmlld0l0ZW3WAA4G6wEnBuwD7wCXBu0G -/AHiAvQD4gcAgQGMgQGOgFeBAXaA1YEBodIADgA2ADcHA4AEUTLSAA4ARQBNBwaAOqgDeAcIAd8HCgcL -Aq8EsgcOgLiBAZCAVoEBlIEBmICGgQENgQGc1wDWAA4A1wDYANkA2gDbAeID2AcSBxMA4ADhAeKAV4De -gQGRgQGSCYBXXxAVe3szNiwgMTV9LCB7NTIxLCA0Mn192QDrAA4D3wDyAPMA9AD2BZoD4AD4A+ED4gca -A+QHCAPmAPoD54DdgNWBAZOA1IEBkIAogNpvEIoATwBzACAAcwBpAG4AYQBpAHMAIABzAG8AbgBvAHIA -bwBzACAAZABvACAAWAAxADEAIAB1AHQAaQBsAGkAegBhAHIA4wBvACAAbwAgAGEAbABlAHIAdABhACAA -cABhAGQAcgDjAG8AIABkAG8AIABzAGkAcwB0AGUAbQBhACwAIAB0AGEAbAAgAGMAbwBtAG8AIABlAHMA -dABpAHYAZQByACAAZABlAGYAaQBuAGkAZABvACAAZQBtACAARQBmAGUAaQB0AG8AcwAgAHMAbwBuAG8A -cgBvAHMALAAgAG4AYQBzACAAcAByAGUAZgBlAHIA6gBuAGMAaQBhAHMAIABkAG8AIABzAGkAcwB0AGUA -bQBhAC7XANYADgDXANgA2QDaANsB4gPYByMHJADgAOEB4oBXgN6BAZWBAZYJgFdfEBV7ezE3LCAyMDV9 -LCB7NTUsIDIwfX3ZAOsADgPfAPIA8wD0APYFmgPgAPgD4QPiBysBAQcKA+YA+gPngN2A1YEBl4AggQGU -gCiA2ldDb3JlczoK1wDWAA4A1wDYANkA2gDbAeID2Ac0BzUA4ADhAeKAV4DegQGZgQGaCYBXXxAWe3sz -NiwgMTgzfSwgezM5MiwgMTR9fdkA6wAOA98A8gDzAPQA9gWaA+AA+APhA+IHPAPkBwsD5gD6A+eA3YDV -gQGbgNSBAZiAKIDabxBDAEUAcwB0AGEAIABvAHAA5wDjAG8AIABlAG4AdAByAGEAcgDhACAAZQBtACAA -dgBpAGcAbwByACAAZABhACAAcAByAPMAeABpAG0AYQAgAHYAZQB6ACAAcQB1AGUAIABvACAAWAAxADEA -IABmAG8AcgAgAGUAeABlAGMAdQB0AGEAZABvAC7XANYADgDXANgA2QDaANsB4gPYB0UHRgDgAOEB4oBX -gN6BAZ2BAZ4JgFdfEBZ7ezM2LCAxMTV9LCB7NTIxLCAyOH192QDrAA4D3wDyAPMA9AD2BZoD4AD4A+ED -4gdNA+QHDgPmAPoD54DdgNWBAZ+A1IEBnIAogNpvEHgAQQBjAHQAaQB2AGEAIABhACAAagBhAG4AZQBs -AGEAIAByAGEAaQB6ACAAZABvACAAWAAxADEALgAgAFUAdABpAGwAaQB6AGUAIABhACAAYwBvAG0AYgBp -AG4AYQDnAOMAbwAgAGQAZQAgAHQAZQBjAGwAYQBzACAAQwBvAG0AYQBuAGQAbwAtAE8AcADnAOMAbwAt -AEEAIABwAGEAcgBhACAAZQBuAHQAcgBhAHIAIABlACAAcwBhAGkAcgAgAGQAbwAgAG0AbwBkAG8AIABk -AGUAIABlAGMAcgDjACAAYwBvAG0AcABsAGUAdABvAC5lAFMAYQDtAGQAYdYADgbrAScG7APvAJcG7QdW -ANwC9APiB1qBAYyBAaOAHIEBdoDVgQGq0gAOADYANwcDgATSAA4ARQBNB1+AOqgElQdhANIByANUAnwD -0wQ/gQEGgQGlgBuAUYCwgHqA0IDt1wDWAA4A1wDYANkA2gDbANwD2AdrB2wA4ADhANyAHIDegQGmgQGn -CYAcXxAWe3szNiwgMTg4fSwgezU0MCwgMjh9fdgA6wAOA98A8gDzAPQA9gPgAPgD4QPiB3MD5AdhA+YD -54DdgNWBAaiA1IEBpYDabxCBAEEAYwB0AGkAdgBhACAAbwAgAGkAdABlAG0AIABkAGUAIABtAGUAbgB1 -ACAAIgBjAG8AcABpAGEAcgAiACAAZQAgAHAAZQByAG0AaQB0AGUAIABhACAAcwBpAG4AYwByAG8AbgBp -AHoAYQDnAOMAbwAgAGUAbgB0AHIAZQAgAGEAIADhAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQAg -AGQAbwAgAE8AUwAgAFgAIABlACAAbwBzACAAYgB1AGYAZgBlAHIAcwAgAEMATABJAFAAQgBPAEEAUgBE -ACAAZQAgAFAAUgBJAE0AQQBSAFkAIABkAG8AIABYADEAMQAubxAPAMEAcgBlAGEAIABkAGUAIABjAG8A -bABhAGcAZQBt1gAOBusBJwbsA+8AlwbtB3sBfQL0A+IHf4EBjIEBrIA/gQF2gNWBAbvSAA4ANgA3BwOA -BNIADgBFAE0HhIA6pgF6B4YDoweIApIHioA+gQGugMOBAbKAf4EBttcA1gAOANcA2ADZANoA2wF9A9gH -jgePAOAA4QF9gD+A3oEBr4EBsAmAP18QFnt7MjMsIDE3NX0sIHs1MTksIDMxfX3YAOsADgPfAPIA8wD0 -APYD4AD4A+ED4geWA+QHhgPmA+eA3YDVgQGxgNSBAa6A2m8QggBTAGUAIABhAHMAcwBpAG4AYQBsAGEA -cgAgAGUAcwB0AGEAIABvAHAA5wDjAG8ALAAgAGEAbwAgAGMAbABpAGMAYQByACAAbgB1AG0AYQAgAGoA -YQBuAGUAbABhACAAaQBuAGEAYwB0AGkAdgBhACwAIABvACAAYwBsAGkAcQB1AGUAIABuAOMAbwAgAHMA -8wAgAGEAIAB0AHIAYQB6ACAAcABhAHIAYQAgAGEAIABmAHIAZQBuAHQAZQAgAGMAbwBtAG8AIABhAGMA -dABpAHYAYQAgAGEAIABqAGEAbgBlAGwAYQAgAGMAbwBtAHAAbABlAHQAYQBtAGUAbgB0AGUALgAg1wDW -AA4A1wDYANkA2gDbAX0D2AeeB58A4ADhAX2AP4DegQGzgQG0CYA/XxAWe3syMywgMTI1fSwgezQ5MCwg -MjB9fdgA6wAOA98A8gDzAPQA9gPgAPgD4QPiB6YD5AeIA+YD54DdgNWBAbWA1IEBsoDaXxBJTyBmb2Nv -IGRhIGphbmVsYSBkbyBYMTEgc2VndWUgbyBjdXJzb3IuIElzdG8gdGVtIGFsZ3VucyBlZmVpdG9zIGFk -dmVyc29zLtcA1gAOANcA2ADZANoA2wF9A9gHrgevAOAA4QF9gD+A3oEBt4EBuAmAP18QFXt7MjMsIDcz -fSwgezUwOSwgMjh9fdgA6wAOA98A8gDzAPQA9gPgAPgD4QPiB7YD5AeKA+YD54DdgNWBAbmA1IEBtoDa -bxB6AEEAIABjAHIAaQBhAOcA4wBvACAAZABlACAAdQBtAGEAIABuAG8AdgBhACAAagBhAG4AZQBsAGEA -IABYADEAMQAgAGYAYQB6ACAAYwBvAG0AIABxAHUAZQAgAFgAMQAxAC4AYQBwAHAAIAB2AGUAbgBoAGEA -IABwAGEAcgBhACAAcAByAGkAbQBlAGkAcgBvACAAcABsAGEAbgBvACAAKABlAG0AIAB2AGUAegAgAGQA -ZQAgAEYAaQBuAGQAZQByAC4AYQBwAHAALAAgAFQAZQByAG0AaQBuAGEAbAAuAGEAcABwACwAIABlAHQA -YwAuACkALldKYW5lbGFz1QAOAScG7APvAJcG7QMRAvQD4gfBgQGMgJ+BAXaA1YEBy9IADgBFAE0HxIA6 -pQMOBMgHxwfIB8mAnoEBEoEBvoEBwoEBxtcA1gAOANcA2ADZANoA2wMRA9gHzQfOAOAA4QMRgJ+A3oEB -v4EBwAmAn18QFnt7MzYsIDE2Mn0sIHs0OTYsIDQyfX3ZAOsADgPfAPIA8wD0APYFmgPgAPgD4QPiB9UD -5AfHA+YA+gPngN2A1YEBwYDUgQG+gCiA2m8QwwBMAGEAbgDnAGEAcgAgAG8AIABYADEAMQAgAGMAcgBp -AGEAIABjAGgAYQB2AGUAcwAgAFgAYQB1AHQAaABvAHIAaQB0AHkAIABkAGUAIABjAG8AbgB0AHIAbwBs -AG8AIABkAGUAIABhAGMAZQBzAHMAbwAuACAAUwBlACAAbwAgAGUAbgBkAGUAcgBlAOcAbwAgAEkAUAAg -AGQAbwAgAHMAaQBzAHQAZQBtAGEAIABmAG8AcgAgAGEAbAB0AGUAcgBhAGQAbwAsACAAZQBzAHQAYQBz -ACAAYwBoAGEAdgBlAHMAIABwAGUAcgBkAGUAbQAgAGEAIAB2AGEAbABpAGQAYQBkAGUALAAgAHAAbwBk -AGUAbgBkAG8ALAAgAGEAcwBzAGkAbQAsACAAIABpAG0AcABvAHMAcwBpAGIAaQBsAGkAdABhAHIAIABh -ACAAZQB4AGUAYwB1AOcA4wBvACAAZABhAHMAIABhAHAAbABpAGMAYQDnAPUAZQBzACAAWAAxADEALtcA -1gAOANcA2ADZANoA2wMRA9gH3gffAOAA4QMRgJ+A3oEBw4EBxAmAn18QFXt7MzYsIDcxfSwgezQ5Niwg -NTZ9fdkA6wAOA98A8gDzAPQA9gWaA+AA+APhA+IH5gPkB8gD5gD6A+eA3YDVgQHFgNSBAcKAKIDabxDP -AFMAZQAgAGEAYwB0AGkAdgBhAHIAIABlAHMAdABhACAAbwBwAOcA4wBvACwAIABwAHIAZQBjAGkAcwBh -ACAAaQBnAHUAYQBsAG0AZQBuAHQAZQAgAGQAZQAgAGEAYwB0AGkAdgBhAHIAIABhACAAbwBwAOcA4wBv -ACAgHABBAHUAdABlAG4AdABpAGMAYQByACAAbABpAGcAYQDnAPUAZQBzIB0AIABwAGEAcgBhACAAZwBh -AHIAYQBuAHQAaQByACAAYQAgAHMAZQBnAHUAcgBhAG4A5wBhACAAZABvACAAcwBpAHMAdABlAG0AYQAu -ACAAUwBlACAAbgDjAG8AIABhAGMAdABpAHYAYQByACAAZQBzAHQAYQAgAG8AcADnAOMAbwAsACAAbgDj -AG8AIABzAOMAbwAgAHAAZQByAG0AaQB0AGkAZABhAHMAIABsAGkAZwBhAOcA9QBlAHMAIABhACAAcABh -AHIAdABpAHIAIABkAGUAIABhAHAAbABpAGMAYQDnAPUAZQBzACAAcgBlAG0AbwB0AGEAcwAu1wDWAA4A -1wDYANkA2gDbAxED2AfvB/AA4ADhAxGAn4DegQHHgQHICYCfXxAWe3syMCwgLTE2fSwgezQwNCwgMTR9 -fdkA6wAOA98A8gDzAPQA9gWaA+AA+APhA+IH9wPkB8kD5gD6A+eA3YDVgQHJgNSBAcaAKIDabxBGAEUA -cwB0AGEAcwAgAG8AcADnAPUAZQBzACAAZQBuAHQAcgBhAHIA4wBvACAAZQBtACAAdgBpAGcAbwByACAA -ZABhACAAcAByAPMAeABpAG0AYQAgAHYAZQB6ACAAcQB1AGUAIABvACAAWAAxADEAIABmAG8AcgAgAGUA -eABlAGMAdQB0AGEAZABvAC5pAFMAZQBnAHUAcgBhAG4A5wBh0gA6ADsH/wbspAbsAScBKAA/Wns2MzMs -IDMwOH1fEBV7ezAsIDB9LCB7MTQ0MCwgODc4fX1aezMyMCwgMjYyfVl4MTFfcHJlZnPSADoAOwgFCAai -CAYAP18QEE5TV2luZG93VGVtcGxhdGVbcHJlZnNfcGFuZWzUAA4AlQCWAJcAmACZBPQBe4AZgBaBAR6A -Q9QADgCVAJYAlwCYAJkIEAgRgBmAFoEB1YEB2NgADgCdAJ4AnwCgAKEAogCjAKQIFAFCCBUAqACpAKoA -q4AVgQHWgQHXgA+AE4AMVkZlY2hhclF3XWNsb3NlX3dpbmRvdzrUAA4AlQCWAJcA0QgeAB8IIIAsgQHa -gAKBAgLUAA4AnQCtAK4ArwgjCCQIJYA7gQHbgQIBgQHcWE1haW5NZW510gAOAEUATQgpgDqlCCoIKwgs -CC0ILoEB3YEB7IEB74EB84EB/doADgFKAJ0AngCfAKAAoQCiAKMBSwCkAlwCXwFCAPoAqACpAKoIHgg3 -gBWAb4EB3oAogA+AE4EB2oEB31NYMTHSAA4ARQBNCDuAOqwCaAThCD4IPwhAAlMIQgSHAyoDjwhGBHiA -dIEBGIEB4YEB4oEB6IBugQHpgQECgKSAvYEB6oD92gAOAJ0AngE+AJ8BPwCgAKEAogCjAKQA+gFCAOEA -+gDhAKgAqQCqAlyAFYAoCYAoCYAPgBOAb9oADgFKAJ0AngCfAKAAoQCiAKMBSwCkCFMIVAFCAPoAqACp -AKoCXAhZgBWBAeWBAeOAKIAPgBOAb4EB5GgAUwBlAHIAdgBpAOcAbwBz1AAOAJ0ArQCuAK8IVAheCF+A -O4EB44EB54EB5tIADgBFAE0IYoA6oF8QD19OU1NlcnZpY2VzTWVuddoADgCdAJ4BPgCfAT8AoAChAKIA -owCkAPoBQgDhAPoA4QCoAKkAqgJcgBWAKAmAKAmAD4ATgG/aAA4AnQCeAT4AnwE/AKAAoQCiAKMApAD6 -AUIA4QD6AOEAqACpAKoCXIAVgCgJgCgJgA+AE4Bv2gAOAJ0AngE+AJ8BPwCgAKEAogCjAKQA+gFCAOEA -+gDhAKgAqQCqAlyAFYAoCYAoCYAPgBOAb1xfTlNBcHBsZU1lbnXaAA4BSgCdAJ4AnwCgAKEAogCjAUsA -pALSAU4BQgD6AKgAqQCqCB4IiIAVgI2AM4AogA+AE4EB2oEB7dIADgBFAE0Ii4A6ogLHA2uAjIC12gAO -AUoAnQCeAJ8AoAChAKIAowFLAKQEYwRmAUIA+gCoAKkAqggeCJaAFYD2gQHwgCiAD4ATgQHagQHxZgBF -AGQAaQDnAOMAb9IADgBFAE0ImoA6oQRbgPXaAA4BSgCdAJ4AnwCgAKEAogCjAUsApACrALABQgD6AKgA -qQCqCB4IpIAVgAyBAfSAKIAPgBOBAdqBAfVWSmFuZWxh0gAOAEUATQiogDqpCBAC2wQtCKwIrQCaCK8B -ugM4gQHVgJCA6IEB94EB+IALgQH7gE2AqdoADgCdAJ4BPgCfAT8AoAChAKIAowCkAPoBQgDhAPoA4QCo -AKkAqgCrgBWAKAmAKAmAD4ATgAzYAA4AnQCeAJ8AoAChAKIAowCkCL0Ivgi/AKgAqQCqAKuAFYEB+RIA -EAEIgQH6gA+AE4AMXxARUGVyY29ycmVyIGphbmVsYXNRYNoADgCdAJ4BPgCfAT8AoAChAKIAowCkAPoB -QgDhAPoA4QCoAKkAqgCrgBWAKAmAKAmAD4ATgAxeX05TV2luZG93c01lbnXaAA4BSgCdAJ4AnwCgAKEA -ogCjAUsApAPKA80BQgD6AKgAqQCqCB4I14AVgMyBAf6AKIAPgBOBAdqBAf9VQWp1ZGHSAA4ARQBNCNuA -OqEDwoDLW19OU01haW5NZW51VG1lbnXUAA4AlQCWAJcA0QRbAJkI44AsgPWAFoECBF5jb3B5X21lbnVf -aXRlbdQADgCVAJYAlwCYAJkIrQjpgBmAFoEB+IECBlxuZXh0X3dpbmRvdzrSAA4ARQjsCO2BAiKvEJQH -3wIDCEYHJAKSA3gIrAcKAV4GZQVcAq8EzwY7A34EYwivAscGqQT0BD8GAQdGBR8C7QF9A6MCfAInBw4I -KgdsBqYFMAitAJoBlwbpBLIGrwLwBwgG5wFdB68DVAhCAxQIEAEvCD4GBwPTA1oILATIB4YHiAefA8IB -5QGaAU0B/AkuAboEEwcTBnUDjwE7AmgFcQS4B8cCmQfJBYAIHgCZAzgC0gCrA2sCgghTCC0E+wbmAw4G -6AVmAlMHCwdhBXIBegQtA6oCJQGAAyoFDAVwAiYDEQbRBBkGwAK2B/AEWwg/AlwEhwY1CCsJYwadA9oI -LgWvB8gC2whAAcgERgGdBHgB4gSbB48C9ASVB84HigHOBccHNQLpA8oB3wDcANIGpwDfATwE4YEBxIBd -gQHqgQGWgH+AuIEB94EBlIA4gQFugQIIgIaBARSBAWGAuoD2gQH7gIyBAYGBAR6A7YEBUIEBnoEBJ4CW -gD+Aw4B6gGiBAZyBAd2BAaeBAXmBASyBAfiAC4BFgQG8gQENgQF7gJiBAZCBAaKAN4EBuICwgQHpgKGB -AdWALoEB4YEBUoDQgLKBAe+BARKBAa6BAbKBAbSAy4BZgEaANYBcgQIYgE2A4YEBkoEBdIC9gDGAdIEB -O4EBD4EBvoCBgQHGgQE3gQHagBaAqYCNgAyAtYB8gQHlgQHzgQEggQGNgJ6BAauBAhCAboEBmIEBpYEB -P4A+gOiAxYBigEGApIEBJIEBMIBlgJ+BAYOA44EBf4CIgQHIgPWBAeKAb4EBAoEBX4EB7IECIIEBiYDS -gQH9gQE+gQHCgJCBAeiAUYDvgEiA/YBXgQEIgQGwgQF2gQEGgQHAgQG2gFOBAUSBAZqAlYDMgFaAHIAb -gQF9gB6AMoEBGNkA1gIMAA4A1wVWANkBSwDbCYMFMAUwCYYJhwGrAOAJiAUwCYpZTlNQZXJjZW50gQEs -gQEsgQILgQIJgQIKgQEsIz/mCGTAAAAAXxAVe3sxLCAyMTV9LCB7MzAxLCAxNX19XF9kb1Njcm9sbGVy -OtIAOgA7CY4Jj6UJjwEmAScBKAA/Wk5TU2Nyb2xsZXLSAA4ARQBNCZKAOqUFHAVmBVwFPQUigQElgQIQ -gQIIgQEogQEr0gAOAEUATQmagDqhBQyBASRfEBV7ezEsIDE3fSwgezMwMSwgMTk4fX3SADoAOwmeCZ+k -CZ8BJwEoAD9aTlNDbGlwVmlld9gA1gIMAA4A1wDZAUsA2wmDBTAFMAmGCaQA4AmIBTAJp4EBLIEBLIEC -C4ECEYECCoEBLCM/79ZqYAAAAF8QFnt7MzAyLCAxN30sIHsxNSwgMTk4fX3SAA4ARQBNCauAOqEFH4EB -J18QE3t7MSwgMH0sIHszMDEsIDE3fX1fEBZ7ezIwLCAyMH0sIHszMTgsIDIzMX190gA6ADsJsAmxpAmx -AScBKAA/XE5TU2Nyb2xsVmlld9IADgBFAE0JtIA6pAY1AZcFMAQTgQFfgEWBASyA4Vp7NDc3LCAyNzF9 -3QZpAA4GagZrBmwGbQZuBm8GcAZxBnIGcwZ0AZoGdgm9Cb4JvwZ6BnsJwQnCAP0JwwnECcWARoEB0YEC -HYECH4ECGoEBcYECHIECGRALgQIegQIbXxAYe3szNjAsIDQwMH0sIHs0NzcsIDI3MX19bxAVAE0AZQBu -AHUAIABBAHAAbABpAGMAYQDnAOMAbwAgAGQAbwAgAFgAMQAx0gAOADYANwaFgARYeDExX2FwcHPSAA4A -MgAzCc2ABYECIdIAOgA7Cc8Bc6IBcwA/0gAOAEUI7AnSgQIirxCUB8gB5QJcBwoBfQHiAKsB4gFNAB8F -MAHiBMgGNQN4CCwAqwLSAu0C7QDcAu0HDgUwBp0G6AF9ANwCAwHiCB4HYQLtAZoAqwCrAZoC9AHiBqYC -6QHiAvQBTQeKANwCXAMOAKsAHwJcBgEA3ANUCB4DEQF9AX0HiAPKAd8JLgE8AgMAHwCrAZoHCAZlAlwB -LwJcBQwEsgMRApIDEQVwAB8AHwCrCCsILQLSAnwIPwgeBPQC9AMRAvQFMAJcAeIA3AUMAX0AqwOjAgMB -egJcBTAFDAIDBukGqQQTBqcCrwfJBGMCXAgqAlwBmggeAB8C9APTCB4FcQMRAKsCXADcBD8BlwJcBuYE -lQeGBnUA3AfHAX0ByAVyBwsC7QguAeIG5wDcAu0A0gEvAlyBAcKAWYBvgQGUgD+AV4AMgFeANYACgQEs -gFeBARKBAV+AuIEB74AMgI2AloCWgByAloEBnIEBLIEBiYEBq4A/gByAXYBXgQHagQGlgJaARoAMgAyA -RoEBdoBXgQF5gJWAV4EBdoA1gQG2gByAb4CegAyAAoBvgQFQgByAsIEB2oCfgD+AP4EBsoDMgFaBAhiA -MoBdgAKADIBGgQGQgQFugG+ALoBvgQEkgQENgJ+Af4CfgQEwgAKAAoAMgQHsgQHzgI2AeoEB4oEB2oEB -HoEBdoCfgQF2gQEsgG+AV4AcgQEkgD+ADIDDgF2APoBvgQEsgQEkgF2BAbyBAYGA4YEBfYCGgQHGgPaA -b4EB3YBvgEaBAdqAAoEBdoDQgQHagQE7gJ+ADIBvgByA7YBFgG+BAY2BAQaBAa6BAXSAHIEBvoA/gFGB -AT+BAZiAloEB/YBXgQGigByAloAbgC6Ab9IADgBFCOwKaYECIq8QlQffAgMIRgckApIBXgisA3gHCgZl -BVwCrwTPBjsDfgRjCK8CxwQ/BqkE9AUfBgEHRgLtAX0DowJ8Bw4CJwgqAZcFMAamCK0AmgdsBukEsgav -AvAHCAbnAV0DVAevCEIBLwgQAxQIPgYHA9MDWggsBMgHhgeIB58DwgHlAZoBTQH8CS4BugQTBxMGdQOP -ATsCaAVxBLgHxwKZB8kFgAgeAJkDOALSAKsDawKCCFMILQT7BuYG6AMOAB8CUwVmBXIHYQcLBC0BegOq -AiUBgAMqBQwFcAMRAiYG0QQZArYGwAfwBFsGNQJcCD8EhwgrCWMGnQPaCC4FrwfIAtsIQAGdAcgERgR4 -AeIFxwSVAvQEmweKB84BzgePANIBPAPKANwB3wLpBqcA3wc1BOGBAcSAXYEB6oEBloB/gDiBAfeAuIEB -lIEBboECCICGgQEUgQFhgLqA9oEB+4CMgO2BAYGBAR6BASeBAVCBAZ6AloA/gMOAeoEBnIBogQHdgEWB -ASyBAXmBAfiAC4EBp4EBvIEBDYEBe4CYgQGQgQGigDeAsIEBuIEB6YAugQHVgKGBAeGBAVKA0ICygQHv -gQESgQGugQGygQG0gMuAWYBGgDWAXIECGIBNgOGBAZKBAXSAvYAxgHSBATuBAQ+BAb6AgYEBxoEBN4EB -2oAWgKmAjYAMgLWAfIEB5YEB84EBIIEBjYEBq4CegAKAboECEIEBP4EBpYEBmIDogD6AxYBigEGApIEB -JIEBMICfgGWBAYOA44CIgQF/gQHIgPWBAV+Ab4EB4oEBAoEB7IECIIEBiYDSgQH9gQE+gQHCgJCBAeiA -SIBRgO+A/YBXgQFEgQEGgQF2gQEIgQG2gQHAgFOBAbCAG4AygMyAHIBWgJWBAX2AHoEBmoEBGNIADgBF -COwLAYECIq8QlQsCCwMLBAsFCwYLBwsICwkLCgsLCwwLDQsOCw8LEAsRCxILEwsUCxULFgsXCxgLGQsa -CxsLHAsdCx4LHwsgCyELIgsjCyQLJQsmCycLKAspCyoLKwssCy0LLgsvCzALMQsyCzMLNAs1CzYLNws4 -CzkLOgs7CzwLPQs+Cz8LQAtBC0ILQwtEC0ULRgtHC0gLSQtKC0sLTAtNC04LTwgjAMkLUgtTC1QLVQtW -C1cLWAtZC1oLWwtcC10LXgtfC2ALYQtiC2MLZAtlC2YLZwtoC2kLagtrC2wLbQtuC28LcAtxC3ILcwt0 -C3ULdgt3C3gLeQt6C3sLfAt9C34LfwuAC4ELgguDC4QLhQuGC4cLiAuJC4oLiwuMC40LjguPC5ALkQuS -C5MLlAuVC5aBAiaBAieBAiiBAimBAiqBAiuBAiyBAi2BAi6BAi+BAjCBAjGBAjKBAjOBAjSBAjWBAjaB -AjeBAjiBAjmBAjqBAjuBAjyBAj2BAj6BAj+BAkCBAkGBAkKBAkOBAkSBAkWBAkaBAkeBAkiBAkmBAkqB -AkuBAkyBAk2BAk6BAk+BAlCBAlGBAlKBAlOBAlSBAlWBAlaBAleBAliBAlmBAlqBAluBAlyBAl2BAl6B -Al+BAmCBAmGBAmKBAmOBAmSBAmWBAmaBAmeBAmiBAmmBAmqBAmuBAmyBAm2BAm6BAm+BAnCBAnGBAnKB -AnOBAduAF4ECdIECdYECdoECd4ECeIECeYECeoECe4ECfIECfYECfoECf4ECgIECgYECgoECg4EChIEC -hYEChoECh4ECiIECiYECioECi4ECjIECjYECjoECj4ECkIECkYECkoECk4EClIEClYECloECl4ECmIEC -mYECmoECm4ECnIECnYECnoECn4ECoIECoYECooECo4ECpIECpYECpoECp4ECqIECqYECqoECq4ECrIEC -rYECroECr4ECsIECsYECsoECs4ECtIECtYECtoECt4ECuG8Q4QBUAGUAeAB0ACAARgBpAGUAbABkACAA -QwBlAGwAbAAgACgAUwBlACAAYQBjAHQAaQB2AGEAcgAgAGUAcwB0AGEAIABvAHAA5wDjAG8ALAAgAHAA -cgBlAGMAaQBzAGEAIABpAGcAdQBhAGwAbQBlAG4AdABlACAAZABlACAAYQBjAHQAaQB2AGEAcgAgAGEA -IABvAHAA5wDjAG8AICAcAEEAdQB0AGUAbgB0AGkAYwBhAHIAIABsAGkAZwBhAOcA9QBlAHMgHQAgAHAA -YQByAGEAIABnAGEAcgBhAG4AdABpAHIAIABhACAAcwBlAGcAdQByAGEAbgDnAGEAIABkAG8AIABzAGkA -cwB0AGUAbQBhAC4AIABTAGUAIABuAOMAbwAgAGEAYwB0AGkAdgBhAHIAIABlAHMAdABhACAAbwBwAOcA -4wBvACwAIABuAOMAbwAgAHMA4wBvACAAcABlAHIAbQBpAHQAaQBkAGEAcwAgAGwAaQBnAGEA5wD1AGUA -cwAgAGEAIABwAGEAcgB0AGkAcgAgAGQAZQAgAGEAcABsAGkAYwBhAOcA9QBlAHMAIAByAGUAbQBvAHQA -YQBzAC4AKV8QEU1lbnUgKE90aGVyVmlld3MpW1NlcGFyYXRvci0xXxAZVGV4dCBGaWVsZCBDZWxsIChD -b3JlczoKKV8QIUNoZWNrIEJveCAoRm9jbyBlbSBqYW5lbGFzIG5vdmFzKW8QGQBNAGUAbgB1ACAASQB0 -AGUAbQAgACgAUABlAHIAcwBvAG4AYQBsAGkAegBhAHIgJgApW1NlcGFyYXRvci01XxAyQ2hlY2sgQm94 -IChVdGlsaXphciBvIGVmZWl0byBkZSBhbGVydGEgZG8gc2lzdGVtYSlfEBVTdGF0aWMgVGV4dCAoQ29y -ZXM6CilaUHJlZnNQYW5lbF8QE0hvcml6b250YWwgU2Nyb2xsZXJvEB4AQwBoAGUAYwBrACAAQgBvAHgA -IAAoAE0AbwBkAG8AIABlAGMAcgDjACAAYwBvAG0AcABsAGUAdABvAClvEDMAQgB1AHQAdABvAG4AIABD -AGUAbABsACAAKABQAGUAcgBtAGkAdABpAHIAIABsAGkAZwBhAOcA9QBlAHMAIABkAGUAIABjAGwAaQBl -AG4AdABlAHMAIABkAGEAIAByAGUAZABlAClfEBZCdXR0b24gQ2VsbCAoRHVwbGljYXIpXxA0QnV0dG9u -IENlbGwgKFV0aWxpemFyIG8gZWZlaXRvIGRlIGFsZXJ0YSBkbyBzaXN0ZW1hKW0ATQBlAG4AdQAgACgA -RQBkAGkA5wDjAG8AKVtTZXBhcmF0b3ItNltTZXBhcmF0b3ItOG8QawBTAHQAYQB0AGkAYwAgAFQAZQB4 -AHQAIAAoAEQAZQB2AGkAZABvACAAYQAgAGwAaQBtAGkAdABhAOcA9QBlAHMAIABkAG8AIABwAHIAbwB0 -AG8AYwBvAGwAbwAgAFgAMQAxACwAIABlAHMAdABhACAAbwBwAOcA4wBvACAAbgBlAG0AIABzAGUAbQBw -AHIAZQAgAGYAdQBuAGMAaQBvAG4AYQByAOEAIABlAG0AIABhAGwAZwB1AG0AYQBzACAAYQBwAGwAaQBj -AGEA5wD1AGUAcwAuAClvEGcAUwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABQAGUAcgBtAGkAdABlACAA -cQB1AGUAIABhAGwAdABlAHIAYQDnAPUAZQBzACAAZABvACAAbQBlAG4AdQAgAGQAZQAgAGUAbgB0AHIA -YQBkAGEAIABzAGUAIABzAG8AYgByAGUAcABvAG4AaABhAG0AIABhAG8AIABhAGMAdAB1AGEAbAAgAG0A -YQBwAGEAIABkAGUAIAB0AGUAYwBsAGEAcwAgAGQAbwAgAFgAMQAxAC4AKW8QNQBDAGgAZQBjAGsAIABC -AG8AeAAgACgAUwBlAGcAdQBpAHIAIABhACAAZABpAHMAcABvAHMAaQDnAOMAbwAgAGQAbwAgAHQAZQBj -AGwAYQBkAG8AIABkAG8AIABzAGkAcwB0AGUAbQBhAClfEBFUYWJsZSBIZWFkZXIgVmlld28QJwBDAGgA -ZQBjAGsAIABCAG8AeAAgACgAUwBpAG0AdQBsAGEAcgAgAHIAYQB0AG8AIABkAGUAIAB0AHIA6gBzACAA -YgBvAHQA9QBlAHMAKW8QigBUAGUAeAB0ACAARgBpAGUAbABkACAAQwBlAGwAbAAgACgAQQBjAHQAaQB2 -AGEAIABhACAAagBhAG4AZQBsAGEAIAByAGEAaQB6ACAAZABvACAAWAAxADEALgAgAFUAdABpAGwAaQB6 -AGUAIABhACAAYwBvAG0AYgBpAG4AYQDnAOMAbwAgAGQAZQAgAHQAZQBjAGwAYQBzACAAQwBvAG0AYQBu -AGQAbwAtAE8AcADnAOMAbwAtAEEAIABwAGEAcgBhACAAZQBuAHQAcgBhAHIAIABlACAAcwBhAGkAcgAg -AGQAbwAgAG0AbwBkAG8AIABkAGUAIABlAGMAcgDjACAAYwBvAG0AcABsAGUAdABvAC4AKVZWaWV3LTRW -Vmlldy0zXxAdQ2hlY2sgQm94IChGb2NvIHNlZ3VlIG8gcmF0bylvEEIAQwBoAGUAYwBrACAAQgBvAHgA -IAAoAEEAYwB0AHUAYQBsAGkAegBhAHIAIABhACAA4QByAGUAYQAgAGQAZQAgAGMAbwBsAGEAZwBlAG0A -IABxAHUAYQBuAGQAbwAgAG8AIABDAEwASQBQAEIATwBBAFIARAAgAG0AdQBkAGEAcgAuAClvEIYAUwB0 -AGEAdABpAGMAIABUAGUAeAB0ACAAKABBAGMAdABpAHYAYQAgAGEAIABqAGEAbgBlAGwAYQAgAHIAYQBp -AHoAIABkAG8AIABYADEAMQAuACAAVQB0AGkAbABpAHoAZQAgAGEAIABjAG8AbQBiAGkAbgBhAOcA4wBv -ACAAZABlACAAdABlAGMAbABhAHMAIABDAG8AbQBhAG4AZABvAC0ATwBwAOcA4wBvAC0AQQAgAHAAYQBy -AGEAIABlAG4AdAByAGEAcgAgAGUAIABzAGEAaQByACAAZABvACAAbQBvAGQAbwAgAGQAZQAgAGUAYwBy -AOMAIABjAG8AbQBwAGwAZQB0AG8ALgApbxATAE0AZQBuAHUAIABJAHQAZQBtACAAKABNAGkAbABoAPUA -ZQBzAClfEA9NZW51IEl0ZW0gKFgxMSlfEBVQdXNoIEJ1dHRvbiAoUmVtb3ZlcilbU2Nyb2xsIFZpZXdv -EJEAUwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABTAGUAIABlAHMAdABpAHYAZQByAGUAbQAgAGEAYwB0 -AGkAdgBhAHMALAAgAGEAcwAgAHQAZQBjAGwAYQBzACAAZQBxAHUAaQB2AGEAbABlAG4AdABlAHMAIABk -AGEAIABiAGEAcgByAGEAIABkAGUAIABtAGUAbgB1AHMAIABwAG8AZABlAG0AIABpAG4AdABlAHIAZgBl -AHIAaQByACAAbgBhAHMAIABhAHAAbABpAGMAYQDnAPUAZQBzACAAWAAxADEAIABxAHUAZQAgAHUAdABp -AGwAaQB6AGEAbQAgAG8AIABtAG8AZABpAGYAaQBjAGEAZABvAHIAIABNAGUAdABhAC4AKV8QHU1lbnUg -SXRlbSAoUGVyY29ycmVyIGphbmVsYXMpXxAwTWVudSBJdGVtIChQZXJjb3JyZXIgamFuZWxhcyBubyBz -ZW50aWRvIGludmVyc28pbxCTAFQAZQB4AHQAIABGAGkAZQBsAGQAIABDAGUAbABsACAAKABBAGMAdABp -AHYAYQAgAG8AIABpAHQAZQBtACAAZABlACAAbQBlAG4AdQAgACIAYwBvAHAAaQBhAHIAIgAgAGUAIABw -AGUAcgBtAGkAdABlACAAYQAgAHMAaQBuAGMAcgBvAG4AaQB6AGEA5wDjAG8AIABlAG4AdAByAGUAIABh -ACAA4QByAGUAYQAgAGQAZQAgAGMAbwBsAGEAZwBlAG0AIABkAG8AIABPAFMAIABYACAAZQAgAG8AcwAg -AGIAdQBmAGYAZQByAHMAIABDAEwASQBQAEIATwBBAFIARAAgAGUAIABQAFIASQBNAEEAUgBZACAAZABv -ACAAWAAxADEALgApbxAZAFQAYQBiACAAVgBpAGUAdwAgAEkAdABlAG0AIAAoAFMAZQBnAHUAcgBhAG4A -5wBhAClvEE0AQwBoAGUAYwBrACAAQgBvAHgAIAAoAE0AbwBzAHQAcgBhAHIAIABhAHUAdABvAG0AYQB0 -AGkAYwBhAG0AZQBuAHQAZQAgAGEAIABiAGEAcgByAGEAIABkAGUAIABtAGUAbgB1AHMAIABlAG0AIABt -AG8AZABvACAAZABlACAAZQBjAHIA4wAgAGMAbwBtAHAAbABlAHQAbwApbxCVAFQAZQB4AHQAIABGAGkA -ZQBsAGQAIABDAGUAbABsACAAKABTAGUAIABlAHMAdABpAHYAZQByAGUAbQAgAGEAYwB0AGkAdgBhAHMA -LAAgAGEAcwAgAHQAZQBjAGwAYQBzACAAZQBxAHUAaQB2AGEAbABlAG4AdABlAHMAIABkAGEAIABiAGEA -cgByAGEAIABkAGUAIABtAGUAbgB1AHMAIABwAG8AZABlAG0AIABpAG4AdABlAHIAZgBlAHIAaQByACAA -bgBhAHMAIABhAHAAbABpAGMAYQDnAPUAZQBzACAAWAAxADEAIABxAHUAZQAgAHUAdABpAGwAaQB6AGEA -bQAgAG8AIABtAG8AZABpAGYAaQBjAGEAZABvAHIAIABNAGUAdABhAC4AKW8QOgBCAHUAdAB0AG8AbgAg -AEMAZQBsAGwAIAAoAEEAYwB0AGkAdgBhAHIAIABhAHMAIABlAHEAdQBpAHYAYQBsAOoAbgBjAGkAYQBz -ACAAZABlACAAdABlAGMAbABhAGQAbwAgAHAAYQByAGEAIABYADEAMQApbxCYAFMAdABhAHQAaQBjACAA -VABlAHgAdAAgACgATwBzACAAcwBpAG4AYQBpAHMAIABzAG8AbgBvAHIAbwBzACAAZABvACAAWAAxADEA -IAB1AHQAaQBsAGkAegBhAHIA4wBvACAAbwAgAGEAbABlAHIAdABhACAAcABhAGQAcgDjAG8AIABkAG8A -IABzAGkAcwB0AGUAbQBhACwAIAB0AGEAbAAgAGMAbwBtAG8AIABlAHMAdABpAHYAZQByACAAZABlAGYA -aQBuAGkAZABvACAAZQBtACAARQBmAGUAaQB0AG8AcwAgAHMAbwBuAG8AcgBvAHMALAAgAG4AYQBzACAA -cAByAGUAZgBlAHIA6gBuAGMAaQBhAHMAIABkAG8AIABzAGkAcwB0AGUAbQBhAC4AKW8QHwBUAGEAYgAg -AFYAaQBlAHcAIABJAHQAZQBtACAAKADBAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQApW1NlcGFy -YXRvci05bxBaAEMAaABlAGMAawAgAEIAbwB4ACAAKABBAGMAdAB1AGEAbABpAHoAYQByACAAYQAgAOEA -cgBlAGEAIABkAGUAIABjAG8AbABhAGcAZQBtACAAaQBtAGUAZABpAGEAdABhAG0AZQBuAHQAZQAgAHEA -dQBhAG4AZABvACAAZgBvAHIAIABzAGUAbABlAGMAYwBpAG8AbgBhAGQAbwAgAHQAZQB4AHQAbwAgAG4A -bwB2AG8ALgApbxCMAFQAZQB4AHQAIABGAGkAZQBsAGQAIABDAGUAbABsACAAKABBACAAYwByAGkAYQDn -AOMAbwAgAGQAZQAgAHUAbQBhACAAbgBvAHYAYQAgAGoAYQBuAGUAbABhACAAWAAxADEAIABmAGEAegAg -AGMAbwBtACAAcQB1AGUAIABYADEAMQAuAGEAcABwACAAdgBlAG4AaABhACAAcABhAHIAYQAgAHAAcgBp -AG0AZQBpAHIAbwAgAHAAbABhAG4AbwAgACgAZQBtACAAdgBlAHoAIABkAGUAIABGAGkAbgBkAGUAcgAu -AGEAcABwACwAIABUAGUAcgBtAGkAbgBhAGwALgBhAHAAcAAsACAAZQB0AGMALgApAC4AKVtTZXBhcmF0 -b3ItMlhEb2NrTWVudV8QEk1lbnUgSXRlbSAoRmVjaGFyKW8QIQBCAHUAdAB0AG8AbgAgAEMAZQBsAGwA -IAAoAEEAdQB0AGUAbgB0AGkAYwBhAHIAIABsAGkAZwBhAOcA9QBlAHMAKVtTZXBhcmF0b3ItM28QKQBC -AHUAdAB0AG8AbgAgAEMAZQBsAGwAIAAoAFMAaQBtAHUAbABhAHIAIAByAGEAdABvACAAZABlACAAdABy -AOoAcwAgAGIAbwB0APUAZQBzAClvEHsAUwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABEAGUAcwBhAGMA -dABpAHYAZQAgAGUAcwB0AGEAIABvAHAA5wDjAG8AIABzAGUAIABwAHIAZQB0AGUAbgBkAGUAcgAgAHUA -dABpAGwAaQB6AGEAcgAgAG8AIAB4AGMAbABpAHAAYgBvAGEAcgBkACwAIABvACAAawBsAGkAcABwAGUA -cgAgAG8AdQAgAHEAdQBhAGwAcQB1AGUAcgAgAG8AdQB0AHIAbwAgAGcAZQBzAHQAbwByACAAZABlACAA -YwBsAGkAcABiAG8AYQByAGQAIABYADEAMQAuAClvEFwAQgB1AHQAdABvAG4AIABDAGUAbABsACAAKABB -AGMAdAB1AGEAbABpAHoAYQByACAAYQAgAOEAcgBlAGEAIABkAGUAIABjAG8AbABhAGcAZQBtACAAaQBt -AGUAZABpAGEAdABhAG0AZQBuAHQAZQAgAHEAdQBhAG4AZABvACAAZgBvAHIAIABzAGUAbABlAGMAYwBp -AG8AbgBhAGQAbwAgAHQAZQB4AHQAbwAgAG4AbwB2AG8ALgApbxASAE0AZQBuAHUAIABJAHQAZQBtACAA -KABFAGQAaQDnAOMAbwApbxAxAEMAaABlAGMAawAgAEIAbwB4ACAAKABQAGUAcgBtAGkAdABpAHIAIABs -AGkAZwBhAOcA9QBlAHMAIABkAGUAIABjAGwAaQBlAG4AdABlAHMAIABkAGEAIAByAGUAZABlAClvEJAA -UwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABTAGUAIABhAHMAcwBpAG4AYQBsAGEAcgAgAGUAcwB0AGEA -IABvAHAA5wDjAG8ALAAgAGEAbwAgAGMAbABpAGMAYQByACAAbgB1AG0AYQAgAGoAYQBuAGUAbABhACAA -aQBuAGEAYwB0AGkAdgBhACwAIABvACAAYwBsAGkAcQB1AGUAIABuAOMAbwAgAHMA8wAgAGEAIAB0AHIA -YQB6ACAAcABhAHIAYQAgAGEAIABmAHIAZQBuAHQAZQAgAGMAbwBtAG8AIABhAGMAdABpAHYAYQAgAGEA -IABqAGEAbgBlAGwAYQAgAGMAbwBtAHAAbABlAHQAYQBtAGUAbgB0AGUALgAgAClfEFdTdGF0aWMgVGV4 -dCAoTyBmb2NvIGRhIGphbmVsYSBkbyBYMTEgc2VndWUgbyBjdXJzb3IuIElzdG8gdGVtIGFsZ3VucyBl -ZmVpdG9zIGFkdmVyc29zLilfEFtUZXh0IEZpZWxkIENlbGwgKE8gZm9jbyBkYSBqYW5lbGEgZG8gWDEx -IHNlZ3VlIG8gY3Vyc29yLiBJc3RvIHRlbSBhbGd1bnMgZWZlaXRvcyBhZHZlcnNvcy4pXxAYTWVudSBJ -dGVtIChBanVkYSBkbyBYMTEpXxAfUG9wIFVwIEJ1dHRvbiBDZWxsIChEbyBtb25pdG9yKV5Db250ZW50 -IFZpZXctMW8QEwBNAGUAbgB1ACAAKABBAHAAbABpAGMAYQDnAPUAZQBzACkALQAxXxAWTWVudSBJdGVt -IChEbyBtb25pdG9yKVxFZGl0UHJvZ3JhbXNfECVNZW51IEl0ZW0gKFBhc3NhciB0dWRvIHBhcmEgYSBm -cmVudGUpXxAgUHVzaCBCdXR0b24gKEFkaWNpb25hciBlbGVtZW50bylvEJwAVABlAHgAdAAgAEYAaQBl -AGwAZAAgAEMAZQBsAGwAIAAoAE8AcwAgAHMAaQBuAGEAaQBzACAAcwBvAG4AbwByAG8AcwAgAGQAbwAg -AFgAMQAxACAAdQB0AGkAbABpAHoAYQByAOMAbwAgAG8AIABhAGwAZQByAHQAYQAgAHAAYQBkAHIA4wBv -ACAAZABvACAAcwBpAHMAdABlAG0AYQAsACAAdABhAGwAIABjAG8AbQBvACAAZQBzAHQAaQB2AGUAcgAg -AGQAZQBmAGkAbgBpAGQAbwAgAGUAbQAgAEUAZgBlAGkAdABvAHMAIABzAG8AbgBvAHIAbwBzACwAIABu -AGEAcwAgAHAAcgBlAGYAZQByAOoAbgBjAGkAYQBzACAAZABvACAAcwBpAHMAdABlAG0AYQAuAClcQ29u -dGVudCBWaWV3XxAYTWVudSBJdGVtIChNb3N0cmFyIHR1ZG8pWVNlcGFyYXRvcl8QGU1lbnUgSXRlbSAo -QWNlcmNhIGRvIFgxMSlfEBZUYWJsZSBDb2x1bW4gKENvbWFuZG8pbxBPAEIAdQB0AHQAbwBuACAAQwBl -AGwAbAAgACgATQBvAHMAdAByAGEAcgAgAGEAdQB0AG8AbQBhAHQAaQBjAGEAbQBlAG4AdABlACAAYQAg -AGIAYQByAHIAYQAgAGQAZQAgAG0AZQBuAHUAcwAgAGUAbQAgAG0AbwBkAG8AIABkAGUAIABlAGMAcgDj -ACAAYwBvAG0AcABsAGUAdABvAClvENEAUwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABMAGEAbgDnAGEA -cgAgAG8AIABYADEAMQAgAGMAcgBpAGEAIABjAGgAYQB2AGUAcwAgAFgAYQB1AHQAaABvAHIAaQB0AHkA -IABkAGUAIABjAG8AbgB0AHIAbwBsAG8AIABkAGUAIABhAGMAZQBzAHMAbwAuACAAUwBlACAAbwAgAGUA -bgBkAGUAcgBlAOcAbwAgAEkAUAAgAGQAbwAgAHMAaQBzAHQAZQBtAGEAIABmAG8AcgAgAGEAbAB0AGUA -cgBhAGQAbwAsACAAZQBzAHQAYQBzACAAYwBoAGEAdgBlAHMAIABwAGUAcgBkAGUAbQAgAGEAIAB2AGEA -bABpAGQAYQBkAGUALAAgAHAAbwBkAGUAbgBkAG8ALAAgAGEAcwBzAGkAbQAsACAAIABpAG0AcABvAHMA -cwBpAGIAaQBsAGkAdABhAHIAIABhACAAZQB4AGUAYwB1AOcA4wBvACAAZABhAHMAIABhAHAAbABpAGMA -YQDnAPUAZQBzACAAWAAxADEALgApXxAjQnV0dG9uIENlbGwgKEZvY28gZW0gamFuZWxhcyBub3Zhcylv -EFQAUwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABFAHMAdABhAHMAIABvAHAA5wD1AGUAcwAgAGUAbgB0 -AHIAYQByAOMAbwAgAGUAbQAgAHYAaQBnAG8AcgAgAGQAYQAgAHAAcgDzAHgAaQBtAGEAIAB2AGUAegAg -AHEAdQBlACAAbwAgAFgAMQAxACAAZgBvAHIAIABlAHgAZQBjAHUAdABhAGQAbwAuAClvECMAVABlAHgA -dAAgAEYAaQBlAGwAZAAgAEMAZQBsAGwAIAAoAEMA6QBsAHUAbABhACAAZABlACAAdABlAHgAdABvACkA -LQAyW1NlcGFyYXRvci03bxARAE0AZQBuAHUAIAAoAEEAcABsAGkAYwBhAOcA9QBlAHMAKV1NZW51IChK -YW5lbGEpXxAbTWVudSBJdGVtIChQZXJzb25hbGl6YXIuLi4pbxBEAEIAdQB0AHQAbwBuACAAQwBlAGwA -bAAgACgAQQBjAHQAdQBhAGwAaQB6AGEAcgAgAGEAIADhAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUA -bQAgAHEAdQBhAG4AZABvACAAbwAgAEMATABJAFAAQgBPAEEAUgBEACAAbQB1AGQAYQByAC4AKW8QDwBN -AGUAbgB1ACAAKABTAGUAcgB2AGkA5wBvAHMAKV8QEk1lbnUgSXRlbSAoSmFuZWxhKW8QNwBCAHUAdAB0 -AG8AbgAgAEMAZQBsAGwAIAAoAFMAZQBnAHUAaQByACAAYQAgAGQAaQBzAHAAbwBzAGkA5wDjAG8AIABk -AG8AIAB0AGUAYwBsAGEAZABvACAAZABvACAAcwBpAHMAdABlAG0AYQApbxAVAFQAYQBiACAAVgBpAGUA -dwAgAEkAdABlAG0AIAAoAFMAYQDtAGQAYQApXxAXVGFiIFZpZXcgSXRlbSAoSmFuZWxhcylvEB8AQwBo -AGUAYwBrACAAQgBvAHgAIAAoAEEAdQB0AGUAbgB0AGkAYwBhAHIAIABsAGkAZwBhAOcA9QBlAHMAKVxG -aWxlJ3MgT3duZXJvECIATQBlAG4AdQAgAEkAdABlAG0AIAAoAEEAbAB0AGUAcgBuAGEAcgAgAGUAYwBy -AOMAIABjAG8AbQBwAGwAZQB0AG8AKV8QEVZlcnRpY2FsIFNjcm9sbGVyXxAVVGFibGUgQ29sdW1uIChB -dGFsaG8pbxCPAFMAdABhAHQAaQBjACAAVABlAHgAdAAgACgAQQBjAHQAaQB2AGEAIABvACAAaQB0AGUA -bQAgAGQAZQAgAG0AZQBuAHUAIAAiAGMAbwBwAGkAYQByACIAIABlACAAcABlAHIAbQBpAHQAZQAgAGEA -IABzAGkAbgBjAHIAbwBuAGkAegBhAOcA4wBvACAAZQBuAHQAcgBlACAAYQAgAOEAcgBlAGEAIABkAGUA -IABjAG8AbABhAGcAZQBtACAAZABvACAATwBTACAAWAAgAGUAIABvAHMAIABiAHUAZgBmAGUAcgBzACAA -QwBMAEkAUABCAE8AQQBSAEQAIABlACAAUABSAEkATQBBAFIAWQAgAGQAbwAgAFgAMQAxAC4AKW8QUQBT -AHQAYQB0AGkAYwAgAFQAZQB4AHQAIAAoAEUAcwB0AGEAIABvAHAA5wDjAG8AIABlAG4AdAByAGEAcgDh -ACAAZQBtACAAdgBpAGcAbwByACAAZABhACAAcAByAPMAeABpAG0AYQAgAHYAZQB6ACAAcQB1AGUAIABv -ACAAWAAxADEAIABmAG8AcgAgAGUAeABlAGMAdQB0AGEAZABvAC4AKV8QEE1lbnUgSXRlbSAoWm9vbSlf -EC5DaGVjayBCb3ggKENsaXF1ZSBhdHJhdmVzc2EgamFuZWxhcyBpbmFjdGl2YXMpXxAfQnV0dG9uIENl -bGwgKEZvY28gc2VndWUgbyByYXRvKV8QFU1lbnUgSXRlbSAoMjU2IGNvcmVzKV8QMEJ1dHRvbiBDZWxs -IChDbGlxdWUgYXRyYXZlc3NhIGphbmVsYXMgaW5hY3RpdmFzKW8QJQBNAGUAbgB1ACAASQB0AGUAbQAg -ACgATwBjAHUAbAB0AGEAcgAgAG8AdQB0AHIAYQBzACAAYQBwAGwAaQBjAGEA5wD1AGUAcwApXxAiVGFi -bGUgVmlldyAoTm9tZSwgQ29tYW5kbywgQXRhbGhvKV8QE1RhYmxlIENvbHVtbiAoTm9tZSlfEBRNZW51 -IEl0ZW0gKE1pbGhhcmVzKW8QawBUAGUAeAB0ACAARgBpAGUAbABkACAAQwBlAGwAbAAgACgAUABlAHIA -bQBpAHQAZQAgAHEAdQBlACAAYQBsAHQAZQByAGEA5wD1AGUAcwAgAGQAbwAgAG0AZQBuAHUAIABkAGUA -IABlAG4AdAByAGEAZABhACAAcwBlACAAcwBvAGIAcgBlAHAAbwBuAGgAYQBtACAAYQBvACAAYQBjAHQA -dQBhAGwAIABtAGEAcABhACAAZABlACAAdABlAGMAbABhAHMAIABkAG8AIABYADEAMQAuAClfECBCdXR0 -b24gQ2VsbCAoQWRpY2lvbmFyIGVsZW1lbnRvKW8QIABCAHUAdAB0AG8AbgAgAEMAZQBsAGwAIAAoAE0A -bwBkAG8AIABlAGMAcgDjACAAYwBvAG0AcABsAGUAdABvAClvEH0AVABlAHgAdAAgAEYAaQBlAGwAZAAg -AEMAZQBsAGwAIAAoAEEAbwAgAGMAbABpAGMAYQByACwAIABtAGEAbgB0AGUAbgBoAGEAIABwAHIAZQBt -AGkAZABhAHMAIABhAHMAIAB0AGUAYwBsAGEAcwAgAE8AcADnAOMAbwAgAG8AdQAgAEMAbwBtAGEAbgBk -AG8AIABwAGEAcgBhACAAYQBjAHQAaQB2AGEAcgAgAG8AcwAgAGIAbwB0APUAZQBzACAAYwBlAG4AdABy -AGEAbAAgAG8AdQAgAGQAaQByAGUAaQB0AG8AIABkAG8AIAByAGEAdABvAC4ACgApbxBYAFQAZQB4AHQA -IABGAGkAZQBsAGQAIABDAGUAbABsACAAKABFAHMAdABhAHMAIABvAHAA5wD1AGUAcwAgAGUAbgB0AHIA -YQByAOMAbwAgAGUAbQAgAHYAaQBnAG8AcgAgAGQAYQAgAHAAcgDzAHgAaQBtAGEAIAB2AGUAegAgAHEA -dQBlACAAbwAgAFgAMQAxACAAZgBvAHIAIABlAHgAZQBjAHUAdABhAGQAbwAuAClfEBJNZW51IEl0ZW0g -KENvcGlhcilfEBZQdXNoIEJ1dHRvbiAoRHVwbGljYXIpWk1lbnUgKFgxMSlvEBQATQBlAG4AdQAgAEkA -dABlAG0AIAAoAFMAZQByAHYAaQDnAG8AcwApXxAZTWVudSBJdGVtIChPY3VsdGFyIG8gWDExKW8QFgBN -AGUAbgB1ACAASQB0AGUAbQAgACgAQQBwAGwAaQBjAGEA5wD1AGUAcwApW0FwcGxpY2F0aW9uXxAXVGFi -IFZpZXcgSXRlbSAoRW50cmFkYSlvEH8AVABlAHgAdAAgAEYAaQBlAGwAZAAgAEMAZQBsAGwAIAAoAEQA -ZQBzAGEAYwB0AGkAdgBlACAAZQBzAHQAYQAgAG8AcADnAOMAbwAgAHMAZQAgAHAAcgBlAHQAZQBuAGQA -ZQByACAAdQB0AGkAbABpAHoAYQByACAAbwAgAHgAYwBsAGkAcABiAG8AYQByAGQALAAgAG8AIABrAGwA -aQBwAHAAZQByACAAbwB1ACAAcQB1AGEAbABxAHUAZQByACAAbwB1AHQAcgBvACAAZwBlAHMAdABvAHIA -IABkAGUAIABjAGwAaQBwAGIAbwBhAHIAZAAgAFgAMQAxAC4AKV8QEU1lbnUgSXRlbSAoQWp1ZGEpbxAh -AFQAZQB4AHQAIABGAGkAZQBsAGQAIABDAGUAbABsACAAKABDAOkAbAB1AGwAYQAgAGQAZQAgAHQAZQB4 -AHQAbwApbxDdAFMAdABhAHQAaQBjACAAVABlAHgAdAAgACgAUwBlACAAYQBjAHQAaQB2AGEAcgAgAGUA -cwB0AGEAIABvAHAA5wDjAG8ALAAgAHAAcgBlAGMAaQBzAGEAIABpAGcAdQBhAGwAbQBlAG4AdABlACAA -ZABlACAAYQBjAHQAaQB2AGEAcgAgAGEAIABvAHAA5wDjAG8AICAcAEEAdQB0AGUAbgB0AGkAYwBhAHIA -IABsAGkAZwBhAOcA9QBlAHMgHQAgAHAAYQByAGEAIABnAGEAcgBhAG4AdABpAHIAIABhACAAcwBlAGcA -dQByAGEAbgDnAGEAIABkAG8AIABzAGkAcwB0AGUAbQBhAC4AIABTAGUAIABuAOMAbwAgAGEAYwB0AGkA -dgBhAHIAIABlAHMAdABhACAAbwBwAOcA4wBvACwAIABuAOMAbwAgAHMA4wBvACAAcABlAHIAbQBpAHQA -aQBkAGEAcwAgAGwAaQBnAGEA5wD1AGUAcwAgAGEAIABwAGEAcgB0AGkAcgAgAGQAZQAgAGEAcABsAGkA -YwBhAOcA9QBlAHMAIAByAGUAbQBvAHQAYQBzAC4AKV8QFU1lbnUgSXRlbSAoTWluaW1pemFyKVtTZXBh -cmF0b3ItNF8QFUJ1dHRvbiBDZWxsIChSZW1vdmVyKW8QWwBDAGgAZQBjAGsAIABCAG8AeAAgACgAQQBj -AHQAdQBhAGwAaQB6AGEAcgAgAFAAUgBJAE0AQQBSAFkAIAAoAGMAbABpAHEAdQBlACAAYwBvAG0AIABv -ACAAYgBvAHQA4wBvACAAYwBlAG4AdAByAGEAbAApACAAcQB1AGEAbgBkAG8AIABhACAA4QByAGUAYQAg -AGQAZQAgAGMAbwBsAGEAZwBlAG0AIABtAHUAZABhAHIALgApbxBvAFQAZQB4AHQAIABGAGkAZQBsAGQA -IABDAGUAbABsACAAKABEAGUAdgBpAGQAbwAgAGEAIABsAGkAbQBpAHQAYQDnAPUAZQBzACAAZABvACAA -cAByAG8AdABvAGMAbwBsAG8AIABYADEAMQAsACAAZQBzAHQAYQAgAG8AcADnAOMAbwAgAG4AZQBtACAA -cwBlAG0AcAByAGUAIABmAHUAbgBjAGkAbwBuAGEAcgDhACAAZQBtACAAYQBsAGcAdQBtAGEAcwAgAGEA -cABsAGkAYwBhAOcA9QBlAHMALgApXxAXTWVudSBJdGVtIChTYWlyIGRvIFgxMSlWVmlldy0ybxAjAFQA -ZQB4AHQAIABGAGkAZQBsAGQAIABDAGUAbABsACAAKABDAOkAbAB1AGwAYQAgAGQAZQAgAHQAZQB4AHQA -bwApAC0AMW8QIQBDAGgAZQBjAGsAIABCAG8AeAAgACgAQQBjAHQAaQB2AGEAcgAgAHMAaQBuAGMAcgBv -AG4AaQB6AGEA5wDjAG8AKW8QQgBUAG8AcAAgAFQAYQBiACAAVgBpAGUAdwAgACgARQBuAHQAcgBhAGQA -YQAsACAAUwBhAO0AZABhACwAIADBAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQAsACAASgBhAG4A -ZQBsAGEAcwAsACAAUwBlAGcAdQByAGEAbgDnAGEAKW8QIwBCAHUAdAB0AG8AbgAgAEMAZQBsAGwAIAAo -AEEAYwB0AGkAdgBhAHIAIABzAGkAbgBjAHIAbwBuAGkAegBhAOcA4wBvAClvEIgAUwB0AGEAdABpAGMA -IABUAGUAeAB0ACAAKABBACAAYwByAGkAYQDnAOMAbwAgAGQAZQAgAHUAbQBhACAAbgBvAHYAYQAgAGoA -YQBuAGUAbABhACAAWAAxADEAIABmAGEAegAgAGMAbwBtACAAcQB1AGUAIABYADEAMQAuAGEAcABwACAA -dgBlAG4AaABhACAAcABhAHIAYQAgAHAAcgBpAG0AZQBpAHIAbwAgAHAAbABhAG4AbwAgACgAZQBtACAA -dgBlAHoAIABkAGUAIABGAGkAbgBkAGUAcgAuAGEAcABwACwAIABUAGUAcgBtAGkAbgBhAGwALgBhAHAA -cAAsACAAZQB0AGMALgApAC4AKW8Q1QBUAGUAeAB0ACAARgBpAGUAbABkACAAQwBlAGwAbAAgACgATABh -AG4A5wBhAHIAIABvACAAWAAxADEAIABjAHIAaQBhACAAYwBoAGEAdgBlAHMAIABYAGEAdQB0AGgAbwBy -AGkAdAB5ACAAZABlACAAYwBvAG4AdAByAG8AbABvACAAZABlACAAYQBjAGUAcwBzAG8ALgAgAFMAZQAg -AG8AIABlAG4AZABlAHIAZQDnAG8AIABJAFAAIABkAG8AIABzAGkAcwB0AGUAbQBhACAAZgBvAHIAIABh -AGwAdABlAHIAYQBkAG8ALAAgAGUAcwB0AGEAcwAgAGMAaABhAHYAZQBzACAAcABlAHIAZABlAG0AIABh -ACAAdgBhAGwAaQBkAGEAZABlACwAIABwAG8AZABlAG4AZABvACwAIABhAHMAcwBpAG0ALAAgACAAaQBt -AHAAbwBzAHMAaQBiAGkAbABpAHQAYQByACAAYQAgAGUAeABlAGMAdQDnAOMAbwAgAGQAYQBzACAAYQBw -AGwAaQBjAGEA5wD1AGUAcwAgAFgAMQAxAC4AKW8QXQBCAHUAdAB0AG8AbgAgAEMAZQBsAGwAIAAoAEEA -YwB0AHUAYQBsAGkAegBhAHIAIABQAFIASQBNAEEAUgBZACAAKABjAGwAaQBxAHUAZQAgAGMAbwBtACAA -bwAgAGIAbwB0AOMAbwAgAGMAZQBuAHQAcgBhAGwAKQAgAHEAdQBhAG4AZABvACAAYQAgAOEAcgBlAGEA -IABkAGUAIABjAG8AbABhAGcAZQBtACAAbQB1AGQAYQByAC4AKW8QlABUAGUAeAB0ACAARgBpAGUAbABk -ACAAQwBlAGwAbAAgACgAUwBlACAAYQBzAHMAaQBuAGEAbABhAHIAIABlAHMAdABhACAAbwBwAOcA4wBv -ACwAIABhAG8AIABjAGwAaQBjAGEAcgAgAG4AdQBtAGEAIABqAGEAbgBlAGwAYQAgAGkAbgBhAGMAdABp -AHYAYQAsACAAbwAgAGMAbABpAHEAdQBlACAAbgDjAG8AIABzAPMAIABhACAAdAByAGEAegAgAHAAYQBy -AGEAIABhACAAZgByAGUAbgB0AGUAIABjAG8AbQBvACAAYQBjAHQAaQB2AGEAIABhACAAagBhAG4AZQBs -AGEAIABjAG8AbQBwAGwAZQB0AGEAbQBlAG4AdABlAC4AIAApbxBAAEMAaABlAGMAawAgAEIAbwB4ACAA -KABBAGMAdAB1AGEAbABpAHoAYQByACAAQwBMAEkAUABCAE8AQQBSAEQAIABxAHUAYQBuAGQAbwAgAGEA -IADhAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQAgAG0AdQBkAGEAcgAuAClvEBgATQBlAG4AdQAg -AEkAdABlAG0AIAAoAEEAcABsAGkAYwBhAOcA9QBlAHMAKQAtADFcTWVudSAoQWp1ZGEpVlZpZXctMV8Q -GVBvcHVwIEJ1dHRvbiAoRG8gbW9uaXRvcilvEDgAQwBoAGUAYwBrACAAQgBvAHgAIAAoAEEAYwB0AGkA -dgBhAHIAIABhAHMAIABlAHEAdQBpAHYAYQBsAOoAbgBjAGkAYQBzACAAZABlACAAdABlAGMAbABhAGQA -bwAgAHAAYQByAGEAIABYADEAMQApbxB5AFMAdABhAHQAaQBjACAAVABlAHgAdAAgACgAQQBvACAAYwBs -AGkAYwBhAHIALAAgAG0AYQBuAHQAZQBuAGgAYQAgAHAAcgBlAG0AaQBkAGEAcwAgAGEAcwAgAHQAZQBj -AGwAYQBzACAATwBwAOcA4wBvACAAbwB1ACAAQwBvAG0AYQBuAGQAbwAgAHAAYQByAGEAIABhAGMAdABp -AHYAYQByACAAbwBzACAAYgBvAHQA9QBlAHMAIABjAGUAbgB0AHIAYQBsACAAbwB1ACAAZABpAHIAZQBp -AHQAbwAgAGQAbwAgAHIAYQB0AG8ALgAKAClvEEIAQgB1AHQAdABvAG4AIABDAGUAbABsACAAKABBAGMA -dAB1AGEAbABpAHoAYQByACAAQwBMAEkAUABCAE8AQQBSAEQAIABxAHUAYQBuAGQAbwAgAGEAIADhAHIA -ZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQAgAG0AdQBkAGEAcgAuAClvEFUAVABlAHgAdAAgAEYAaQBl -AGwAZAAgAEMAZQBsAGwAIAAoAEUAcwB0AGEAIABvAHAA5wDjAG8AIABlAG4AdAByAGEAcgDhACAAZQBt -ACAAdgBpAGcAbwByACAAZABhACAAcAByAPMAeABpAG0AYQAgAHYAZQB6ACAAcQB1AGUAIABvACAAWAAx -ADEAIABmAG8AcgAgAGUAeABlAGMAdQB0AGEAZABvAC4AKW8QGwBNAGUAbgB1ACAASQB0AGUAbQAgACgA -UAByAGUAZgBlAHIA6gBuAGMAaQBhAHMALgAuAC4AKdIADgBFCOwMK4ECIqDSAA4ARQjsDC6BAiKg0gAO -AEUI7AwxgQIirxDaAJAH3wIDCEYBXgcKAJEFXAKvBM8AUABVAscEPwT0AGcFHwLtA6MHDgBzB2wFMAGX -CK0AmgCOBukEsgavBwgAZQNUCEIBLwgQCD4GBwPTB4YEyAHlAGMJLgQTAH8HEwBSAI0DjwCKAIYFcQB0 -BLgHxwgeAJkAbwCLAoIILQBgBPsAcgJTB2EFcgCIA6oCJQGAAyoFDAbRAHgEGQBiAI8H8ASHAF4AewfI -AtsIQABsAcgAaACMBHgB4gXHBJUC9AfOAHAAeQLpA8oB3wDcAN8AaQBuByQCkgN4CKwAXABtBmUAYQCA -AGsGOwN+BGMIrwapAIQGAQdGAIIBfQJ8AicIKgamAHwC8AbnAV0AWwevAGQDFABRAHUAkwNaCCwHiACJ -B58DwgBPAZoBTQH8AboAfgZ1ATsCaAKZB8kAgQWAAIMAVAM4AtIAVgCrA2sIUwbmAw4G6AAfBWYHCwF6 -BC0AkgBaBXACJgMRAHoAdgbAArYAUwRbCD8CXAY1AF0IKwljAHEGnQPaAGYAfQCHCC4AWQWvAZ0ERgB3 -AFgEmwePB4oBzgBXAF8HNQDSATwAhQanBOEAaoEB1IEBxIBdgQHqgDiBAZSBAdmBAgiAhoEBFIAagFCA -jIDtgQEegK+BASeAloDDgQGcgOyBAaeBASyARYEB+IALgQFtgQG8gQENgQF7gQGQgKuAsIEB6YAugQHV -gQHhgQFSgNCBAa6BARKAWYCjgQIYgOGBARyBAZKAPYEBa4C9gQFlgQFYgQE7gPKBAQ+BAb6BAdqAFoDP -gQFngHyBAfOAlIEBIIDrgG6BAaWBAT+BAVyAxYBigEGApIEBJIEBg4D8gOOAnYEB04EByIEBAoCLgQEK -gQHCgJCBAeiAwoBRgLSBAWmA/YBXgQFEgQEGgQF2gQHAgOCBAQGAlYDMgFaAHIAegLeAyoEBloB/gLiB -AfeAhIDIgQFugJuBAR2AwIEBYYC6gPaBAfuBAYGBAVSBAVCBAZ6BAU2AP4B6gGiBAd2BAXmBAQyAmIEB -ooA3gH6BAbiAqIChgC2A9IECBYCygQHvgQGygQFegQG0gMuACoBGgDWAXIBNgQEXgQF0gDGAdICBgQHG -gQEjgQE3gQFPgEyAqYCNgFWADIC1gQHlgQGNgJ6BAauAAoECEIEBmIA+gOiBAgOAeYEBMIBlgJ+BAQWA -+oEBf4CIgESA9YEB4oBvgQFfgIWBAeyBAiCA54EBiYDSgK2BARGBAVqBAf2Ad4EBPoBIgO+A+4BzgQEI -gQGwgQG2gFOAbYCPgQGagBuAMoEBVoEBfYEBGIC80gAOAEUI7A0OgQIirxDaDQ8NEA0RDRINEw0UDRUN -Fg0XDRgNGQ0aDRsNHA0dDR4NHw0gDSENIg0jDSQNJQ0mDScNKA0pDSoNKw0sDS0NLg0vDTANMQ0yDTMN -NA01DTYNNw04DTkNOg07DTwNPQ0+DT8NQA1BDUINQw1EDUUNRg1HDUgNSQ1KDUsNTA1NDU4NTw1QDVEN -Ug1TDVQNVQ1WDVcNWA1ZDVoNWw1cDV0NXg1fDWANYQ1iDWMNZA1lDWYNZw1oDWkNag1rDWwNbQ1uDW8N -cA1xDXINcw10DXUNdg13DXgNeQ16DXsNfA19DX4Nfw2ADYENgg2DDYQNhQ2GDYcNiA2JDYoNiw2MDY0N -jg2PDZANkQ2SDZMNlA2VDZYNlw2YDZkNmg2bDZwNnQ2eDZ8NoA2hDaINow2kDaUNpg2nDagNqQ2qDasN -rA2tDa4Nrw2wDbENsg2zDbQNtQ22DbcNuA25DboNuw28Db0Nvg2/DcANwQ3CDcMNxA3FDcYNxw3IDckN -yg3LDcwNzQ3ODc8N0A3RDdIN0w3UDdUN1g3XDdgN2Q3aDdsN3A3dDd4N3w3gDeEN4g3jDeQN5Q3mDecN -6IECvYECvoECv4ECwIECwYECwoECw4ECxIECxYECxoECx4ECyIECyYECyoECy4ECzIECzYECzoECz4EC -0IEC0YEC0oEC04EC1IEC1YEC1oEC14EC2IEC2YEC2oEC24EC3IEC3YEC3oEC34EC4IEC4YEC4oEC44EC -5IEC5YEC5oEC54EC6IEC6YEC6oEC64EC7IEC7YEC7oEC74EC8IEC8YEC8oEC84EC9IEC9YEC9oEC94EC -+IEC+YEC+oEC+4EC/IEC/YEC/oEC/4EDAIEDAYEDAoEDA4EDBIEDBYEDBoEDB4EDCIEDCYEDCoEDC4ED -DIEDDYEDDoEDD4EDEIEDEYEDEoEDE4EDFIEDFYEDFoEDF4EDGIEDGYEDGoEDG4EDHIEDHYEDHoEDH4ED -IIEDIYEDIoEDI4EDJIEDJYEDJoEDJ4EDKIEDKYEDKoEDK4EDLIEDLYEDLoEDL4EDMIEDMYEDMoEDM4ED -NIEDNYEDNoEDN4EDOIEDOYEDOoEDO4EDPIEDPYEDPoEDP4EDQIEDQYEDQoEDQ4EDRIEDRYEDRoEDR4ED -SIEDSYEDSoEDS4EDTIEDTYEDToEDT4EDUIEDUYEDUoEDU4EDVIEDVYEDVoEDV4EDWIEDWYEDWoEDW4ED -XIEDXYEDXoEDX4EDYIEDYYEDYoEDY4EDZIEDZYEDZoEDZ4EDaIEDaYEDaoEDa4EDbIEDbYEDboEDb4ED -cIEDcYEDcoEDc4EDdIEDdYEDdoEDd4EDeIEDeYEDeoEDe4EDfIEDfYEDfoEDf4EDgIEDgYEDgoEDg4ED -hIEDhYEDhoEDh4EDiIEDiYEDioEDi4EDjIEDjYEDjoEDj4EDkIEDkYEDkoEDk4EDlIEDlYEDlhDNEgAB -iBkRAXwQlRECFBEBgRIABJUuEgADDmcRAh0SAAGIFxIABJWuEgAElbQRARASAASVqxEBchIABJW1EgAE -lQcRAV8SAASVShECHxIABJW3EgAElZkRAScRASURAhkRAhoRAZIRAWESAASVuBIAAYgMEQF0EgAEla8S -AASVqRECIREBpxDLEI8SAAGICxIABJWnEgAElUYRAXcSAAGIHhEBBxEBHREBNhEBkRIAAYgUEgAElWUS -AASVaBCWEgAElboRAUERASkRAhMSAASVuREBeBAdEMQSAASVthEBgxIABJWmEBMRAYkSAAGIEhEBjBEC -IBIABJWHEQIXEQGGEgAElUsRAbMSAASVSBCREQEoEgABiBESAASVMBIAAYfWEQGPEQGLEgABiBsQhhEB -ERECEhEBeRAXEJASAASVaRIABJWjEQE0EQGHEIgRAV4RAj8SAASViBEBXBIAAYgYEQE3EQGuEQFwEQGk -EQF+EgAElYYSAASVohEBjREBphIAAYghEgAElVARAXMQXBIABJVnEgAEla0Q9BECFhEBiBIABJWwEgAB -h8QSAAGIExCpEQIYEQFxEQGsEQFrEgABiL8RAYUSAASVMhIABJWlEQF9EDgRAWwSAASVuxIAAYgQEgAE -lYURAhUSAASVahIABJVTEgAElSsSAAGIFhEBqhC1EQIbEgAElaoQoxIABJVMEQEwEgAElU0RAaURAhwR -AR4RAg8RAYAQBREBPhD1EQIMEDoSAASVUREBexEBLRECPREBihDPEgAElSoRAQ4RAY4RATEQghEBYBEB -dhIABJUxEgAElbwSAAGHxxEBghIABJVHEMwSAASVmxIABJWyEQEqEQF/EQFiEgAElbESAASVZhIAAYgN -EgABiL0RAS8QnRCDEDkRASQRAiIRAQ0T//////////0QzhEBXRIABJWoEQIjEQGEEQGtEQGjEQIlEQI+ -EgABh8USAASVrBIABJWzEQGxEgAElZgSAASVSRIABJVSEgAElaQRAiQQyhIAAYgiEgAElZ8RAg4SAASV -nBEBbRCBEQGv0gAOAEUATQ7EgDqg0gAOAEUI7A7HgQIioNIADgBFCOwOyoECIqDSADoAOw7MDs2iDs0A -P15OU0lCT2JqZWN0RGF0YQAIABkAIgAnADEAOgA/AEQAUgBUAGYHoAemB/EH+Af/CA0IHwg7CEkIVQhh -CG8IegiICKQIsgjFCNcI8Qj7CQgJCgkNCRAJEwkWCRgJGwkdCSAJIwkmCSkJKwktCTAJMwk4CTsJRAlQ -CVIJVAldCWcJaQl3CYAJiQmUCZsJrQm2Cb8JyAnNCdwJ7wn4CgMKBQoGCg8KFgojCikKMgo0CsEKwwrF -CscKyQrLCs0KzwrRCtMK1QrXCtkK2wrdCt8K4QrjCuUK5wrpCusK7QrvCvEK8wr1CvcK+Qr7Cv0K/wsB -CwMLBQsHCwkLCwsNCw8LEQsTCxULGAsbCx4LIQskCycLKgstCzALMws2CzkLPAs/C0ILRQtIC0sLTgtR -C1QLVwtaC10LYAtjC2YLdwuFC44LlguYC5oLnAueC78LxwvbC+YL9Av+DAsMEgwUDBYMGwwdDCIMJAwm -DCgMOQxADEwMTgxRDFQMVwx+DIAMjQycDJ4MoAyiDKoMvAzFDMoM3QzqDOwM7gzwDQMNDA0RDRwNJQ0n -DSkNNw1KDVMNWg1yDYENkg2UDZYNmA2aDbcNyQ3RDdgN4Q3rDfcN+Q37Df0N/w4CDgMOBQ4aDiUOJw4q -Di0OMA5IDoEOjQ6jDrEOxg7VDugO+g8FDw8PHQ8vDzwPSg9PD1EPUw9VD1cPWQ9bD10PXw9hD2MPZQ9n -D2wP1w/oD+8P+A/6EAMQBRAIEBUQHhAjECoQNxA5EDsQPRBGEE8QWxBdEF8QaBBtEIMQhBCNEJYQoxCw -ELkQxBDNENcQ3hDqEQkREhEZETARQRFDEUURRxFJEVoRXBFeEWARYhFnEXARchF3EXkRexGkEbIRvxHB -EcMRyBHJEcsRzBHOEdAR0hH7EgUSDhIQEhISFBIWEhgSGhIcEh4SMxJCEk8SURJTElUSXhJgEmUSZxJp -EpISlBKWEpcSmRKaEpwSnhKgEsESwxLFEscSyRLLEs0S6BLxEvgTBxMPExgTHRMmEzcTORM7Ez0TPxNc -E14TYBNiE2QTZRNnE3wTfhOBE4QThxOgE9kT2xPdE98T4RPjE+UT5xPpFA4UHRQuFDAUMhQ0FDYUUxRV -FFcUWRRbFF4UXxRhFHYUghSEFIcUihSNFKcU3BTeFOAU4hTkFOYU6BTqFOwU8RT6FQIVCxUNFSIVMxU1 -FTcVORU7FVwVXhVgFWIVZBVmFWgVhBWWFacVqRWrFa0VrxXMFc4V0BXSFdQV1RXXFe8WKBYqFiwWLhYw -FjIWNBY2FjgW2RbqFuwW7hbwFvIXDxcRFxMXFRcXFxgXGhcvFzEXNBc3FzoXUxeiF78X0RfjF/gYBhgP -GBAYEhgUGBYYGBgaGBwYHhggGCIYIxgkGCcYKhgsGDEYQhhEGEYYSBhRGFMYhBiNGJMYmxidGJ8YoRij -GKUYpxipGKsYtBjBGMMYxRjHGNIY5hjvGPEY/BkFGQcZEBkSGRQZFhkYGUUZRxlJGUsZTRlPGVEZUxlV -GVcZYRmOGZAZkhmUGZYZmBmaGZwZnhmgGakZ1hnYGdoZ3BneGeAZ4hnkGeYZ6Bn3GgAaDRohGjAaORpG -GlQaZRpnGmkaaxptGo4akBqSGpcamRqbGp0anxqwGrIatRq4Grsa6hrsGwEbEhsUGxYbGBsaGzcbORs7 -Gz0bPxtBG0MbURtxG4IbhBuGG4gbihujG7Qbthu4G7obvBvZG9sb3RvfG+Eb4hvkG/0cNhw4HDocPBw+ -HEAcQhxEHEYctRzGHMgcyhzMHM4c6xztHO8c8RzzHPQc9h0PHUgdSh1MHU4dUB1SHVQdVh1YHXAdhh2X -HZkdmx2dHZ8dsB2yHbQdth24HdUd1x3ZHdsd3R3eHeAd+R4yHjQeNh44HjoePB4+HkAeQh5pHn0ejh6Q -HpIelB6WHr8ewR7DHsQexh7HHskeyx7NHtoe3B7eHuEe8B8BHwMfBR8HHwkfKh8sHy4fMB8yHzQfNh9A -H0IfVR9mH2gfah9sH24fix+NH48fkR+TH5Qflh+vH7IftR+4H7sfvh/WIA8gESATIBUgFyAZIBsgHSAf -IHogjSCeIKAgoiCkIKYguSDKIMwgziDQINIg7yDxIPMg9SD3IPgg+iEPIREhFCEXIRohMyFsIW4hcCFy -IXQhdiF4IXohfCGlIbYhuCG6IbwhviHfIeEh4yHlIech6SHrIiAiIiI7IkwiTiJQIlIiVCJ9In8igSKC -IoQihSKHIokiiyKeIq8isSKzIrUityLUIuUi5yLpIusi7SMKIxsjHSMfIyEjIyNAI0IjRCNGI0gjSSNL -I2MjnCOeI6AjoiOkI6YjqCOqI6wkSyRcJF4kYCRiJGQkhSSHJIkkiySNJI8kkSSjJLQktiS4JLokvCTZ -JNsk3STfJOEk4iTkJPwlNSU3JTklOyU9JT8lQSVDJUUlbiV/JYElgyWFJYclrCWuJbAlsiW0JbYluCW6 -Jccl4CXxJfMl9SX3JfkmFCYlJicmKSYrJi0mSiZMJk4mUCZSJlMmVSZuJqcmqSarJq0mryaxJrMmtSa3 -Jssm4SbyJvQm9ib4JvonGScqJywnLicwJzInUydVJ1cnWSdbJ10nXydsJ24ncSd0J4EniyecJ54noCei -J6QnwSfDJ8UnxyfJJ8onzCflKAYoGigmKCgoKigsKC4oMCg1KDcpFCklKScpMCkyKTUpSilSKV8payl5 -KXspfSl/KYEpgymKKZcppCmsKa4puinDKcgp3SnfKeEp4ynlKfgqBSoHKgoqEyocKi4qNypCKk4qWSpq -KmwqbipwKnIqjyqRKpMqlSqXKpgqmiq0Kukq8ir0KvYq+Cr6Kvwq/isAKxUrHisgKzIrQytFK0crSStL -K2wrbitwK3IrdCt2K3grfSuKK5srnSufK6Eroyu0K7YruCu6K7wr2SvbK90r3yvhK+Ir5Cv8LB0sHywh -LCMsJSwnLCks5izxLQItBC0GLQgtCi0iLS8tMS0zLTUtVi1YLVotXC1eLWAtYi1vLXEtdC13LX4tgC2G -LZctmS2bLZ0tny2wLbIttC22LbgtyS3LLc0tzy3SLfMt9S33Lfkt+y39Lf8uCy4NLhguKS4rLi0uMC4z -LlguWi5dLl8uYS5jLmUucy55LooujC6OLpEuky6wLrIutC63Lrouuy69LtYvDy8RLxMvFS8XLxkvHC8e -LyEvTi9fL2EvYy9lL2gvdy+IL4ovjC+PL5Evri+wL7IvtS+4L7kvuy/TMAwwDjAQMBIwFDAWMBkwGzAe -MKMwtDC2MLkwuzC+MNsw3TDfMOIw5TDmMOgxATE6MTwxPjFAMUIxRDFHMUkxTDGZMaQxtTG3MbkxvDG/ -MeAx4jHlMegx6jHsMe4yDzIRMh0yLjIwMjIyNTI3MkgySjJNMk8yUjJvMnEyczJ2MnkyejJ8MpUyzjLQ -MtIy1DLWMtgy2zLdMuAzNTNBM1IzVDNXM1kzXDOrM80z1zPkM/k0BjQgNDw0VzRjNII0kTSdNKA0ozSo -NKs0rjSvNLI0uzTENMc0yDTLNM400TTaNQM1DTUXNSE1LzUyNTU1ODU6NT01QDVDNUY1STVMNVc1cDV8 -NX81gjWFNYg1izW0Nbc1ujW9NcA1wzXGNck1zDXWNd816DX8NhE2FDYXNho2HTZWNmI2azZ+Nos2lzal -Nqc2qjatNrA2sja1Nrg2uzbONtE20zbWNtk23DbzNvw3BTcTNxw3HjclNyg3KzcuN1c3ZjdzN3s3hjeV -N6A3qze4N7k3vDe/N8g3yzfUN9033jfhN/44AzgGOAk4DDgOOBE4FjgjOCU4MThGOEg4SjhNOE84YThq -OHU4iTiuOMQ4yTjLOM440TjTONY42DjaOPs5CDkKOQ05FjkbOSk5UjlTOVY5WTliOWU5bjlvOXI5jzmS -OZU5mDmaOZ05pTnKOcw5zznSOdQ51znZOds6BDoFOgg6CzoUOhc6IDohOiQ6QTpEOkc6SjpMOk86Vjpr -Om06cDpzOnU6gTqqOr46wDrDOsY6yTrMOs06zzrROuI65DrtOu87BDsGOwg7CzsNOyY7Ozs9O0A7QztF -O087XDteO2M7bDt3O4I7kzuVO5c7mTucO6I7szu1O7c7uju8O9k72zvdO+A74zvkO+Y8HzwhPCM8JTwn -PCk8LDwuPDE8ajx7PH08fzyBPIQ8jjyfPKE8pDymPKk8uzzMPM480DzSPNU85Dz1PPc8+Tz7PP49Bz0Y -PRo9HD0ePSE9LT0+PUA9Qj1FPUg9ZT1nPWk9bD1vPXA9cj2MPcE9wz3FPcc9yj3NPc890j3bPeQ95j3+ -Pg8+ET4UPhY+GT4yPkM+RT5HPkk+TD5YPmk+az5uPnA+cz6APpE+kz6VPpc+mj6oPrk+uz6+PsA+wz74 -PwU/Ej8oPzY/QD9OP2c/dD+GP5o/pD+wP7M/tj+5P7w/vz/EP8c/yj/NP9A/0z/uQBdAH0AoQCpAL0A6 -QE9AUUBUQFdAWkBjQGVAaEBrQJxAq0DEQNxA30DiQOVA6EDqQO1A7kDxQPJA9UD+QQBBA0EFQQ5BEEEd -QSBBI0EmQShBK0EuQUtBTUFPQVJBVUFWQVhBcEGVQZdBmUGcQZ5BoUGjQaVCrkLLQs1Cz0LSQtVC1kLY -QvFDFkMYQxpDHUMfQyJDJEMmQ/9EHEQeRCBEI0QmRCdEKURCRGdEaURrRG5EcERzRHVEd0UsRUVFTkVV -RW5Fd0V5RYRFh0WKRY1FkEWTRaxFuUXDRcZFyUXLRc5F0EXTRdxF3kXgRehF8UX2RgRGHUYgRiNGJUYo -RipGLUY2RjhGOkZDRkVGVkZYRltGXUZgRmNGZUZoRmtGiEaKRoxGj0aSRpNGlUatRtJG1EbWRtlG20be -RuBG4kf5SBZIGEgaSB1IIEghSCNIO0hgSGJIZEhnSGlIbEhuSHBIeEiVSJdImUicSJ9IoEiiSLtI4Eji -SORI50jpSOxI7kjwSXlJlkmYSZpJnUmgSaFJo0m8SeFJ40nlSehJ6kntSe9J8UrkSu9LCEsLSw5LEEsT -SxVLGEshSyNLLEsuSz9LQktFS0dLSUtLS01LT0tRS25LcEtyS3VLeEt5S3tLlEu1S7dLuUu8S75LwUvD -TMhM6U0CTQVNCE0KTQ1ND00STRtNHU0mTShNNU03TTpNPE0/TUFNRE1hTWNNZU1oTWtNbE1uTYdNqE2q -TaxNr02xTbRNtk69TtpO3E7eTuFO5E7lTudPAE8hTyNPJU8oTypPLU8vT3tPmE+aT5xPn0+iT6NPpU+9 -T95P4E/iT+VP50/qT+xQ41DrUQBRA1EFUQhRClENURZRGFEjUSVRKFErUS5RMVFOUVBRUlFVUVhRWVFb -UXRRmVGbUZ1RoFGiUaVRp1GpUzJTT1NRU1NTVlNZU1pTXFN0U5lTm1OdU6BTolOlU6dTqVVKVWdVaVVr -VW5VcVVyVXRVjVWyVbRVtlW5VbtVvlXAVcJWUVZkVm1WdlaBVplWpFauVrdWvFbPVttW7FbuVvBW81b1 -VwZXCFcKVw1XEFcxVzNXNlc5VztXPVc/V0ZXSFdWV2dXaVdsV25XcVeCV4RXh1eKV41XllefV6FXrFev -V7JXtVe4V7tX5FfmV+hX61ftV+9X8Vf0V/dX+1gEWAZYH1ghWCRYJ1gqWC1YL1gyWDVYN1g5WDxYPlhn -WGlYa1hsWG5Yb1hxWHNYdVieWKBYo1imWKhYqlisWK5YsVjCWNNY1VjYWNtY3ljnWOlY6lj8WSVZJ1kp -WSpZLFktWS9ZMVkzWVxZXllgWWFZY1lkWWZZaFlqWZNZlVmXWZhZmlmbWZ1Zn1mhWa5Z11nZWdtZ3Vnf -WeFZ41nmWelZ8ln0WflZ+1n9WiZaKFoqWi1aL1oxWjNaNlo5WkZaT1pRWlRaVlp/WoFag1qGWohailqM -Wo9aklqZWqJapFq3WrpavFq+WsFaxFrGWslay1rNWvZa+Fr6Wvta/Vr+WwBbAlsEWyVbJ1sqWy9bMls0 -WzZbOFtMW05bd1t5W3tbfFt+W39bgVuDW4VblFu9W79bwVvEW8ZbyFvKW81b0FvWW99b4VvkW+Zb8lv3 -XAhcClwMXA5cEVwgXDFcM1w1XDhcO1xIXFFcVF1/XYJdhF2HXYpdjF2OXZFdlF2WXZldnF2eXaFdpF2m -Xahdq12tXbBds121Xbhdu12+XcBdwl3EXcZdyF3LXc5d0V3UXddd2l3cXd5d4V3kXedd6V3sXe9d8V30 -XfZd+V37Xf5eAF4DXgZeCF4KXg1eEF4TXhZeGV4bXh1eH14hXiNeJl4oXipeLV4wXjJeNF42XjlePF4/ -XkFeRF5HXkpeTF5OXlBeUl5UXlZeWV5cXl9eYl5kXmdeal5sXm9ecl51XndeeV57Xn1ef16BXoReh16J -Xotejl6QXpNelV6YXppenV6fXqJepV6oXqterl6wXrNetl65Xrtevl7AXsJexF7GXshey17OXtFe1F7X -Xtpe3F7fXuJe5F7mXuhe6l7sXu9e8V7zXvZfG18lXyhfK18uXzFfNF83X0BfWF9lX25feV+EX41fj1+a -X51foF+jX6ZfqV+yX7Rft1+6X9Jf21/kX+9gEGATYBZgGWAcYB9gImArYERgTWBPYFJgVWBrYIRgjWCW -YKNgrGCuYLdgumC8YL9gwWDMYQFhA2EGYQlhDGEPYRJhFWEYYRphHWEgYTthaGFxYXNhfGGFYYdhimGT -YZhhoWGkYs9i0mLUYtZi2WLbYt1i32LhYuNi5WLoYupi7WLwYvJi9WL3Yvli+2L9Yv9jAWMEYwdjCmMN -Yw9jEWMTYxVjGGMbYx1jH2MhYyNjJWMoYypjLWMvYzFjNGM2YzljO2M9Yz9jQWNDY0VjSGNKY0xjT2NR -Y1NjVWNYY1pjXGNfY2FjY2NlY2djaWNsY29jcWNzY3VjeGN7Y31jf2OBY4RjhmOIY4pjjWOQY5JjlGOX -Y5pjnWOgY6JjpWOoY6pjrGOuY7Fjs2O1Y7djuWO7Y71jwGPDY8VjyGPLY81j0GPSY9Vj12PZY9xj3mPg -Y+Nj5WPoY+pj7WPwY/Jj9GP2Y/hj+mP8Y/5kAWQEZAdkCmQMZA9kEWQTZBZkGWQbZB5kIGQjZCVkJ2Qp -ZCtkLWQ2ZDllZmVpZWtlbmVxZXNldWV4ZXplfWWAZYNlhWWIZYtljWWPZZJllGWWZZllnGWfZaJlpWWn -Zallq2WtZbBlsmW1ZbdlumW9ZcBlwmXFZchly2XOZdBl02XWZdhl2mXdZeBl4mXlZedl6mXtZe9l8WX0 -Zfdl+mX9ZgBmAmYEZgZmCGYKZg1mD2YRZhRmF2YZZhtmHWYgZiNmJmYoZitmLmYxZjNmNWY3ZjlmO2Y9 -ZkBmQ2ZGZklmTGZOZlBmUmZVZlhmW2ZeZmBmYmZkZmZmaGZqZm1mcGZyZnRmd2Z5ZntmfmaBZoNmhmaI -ZotmjmaRZpRml2aZZpxmn2aiZqRmp2apZqtmrWavZrFmtGa3ZrpmvWbAZsNmxWbIZspmzGbOZtBm0mbU -Ztdm2WbcZt9m6GbraBhoG2geaCFoJGgnaCpoLWgwaDNoNmg5aDxoP2hCaEVoSGhLaE5oUWhUaFdoWmhd -aGBoY2hmaGlobGhvaHJodWh4aHtofmiBaIRoh2iKaI1okGiTaJZomWicaJ9oomilaKhoq2iuaLFotGi3 -aLpovWjAaMNoxmjJaMxoz2jSaNVo2GjbaN5o4WjkaOdo6mjtaPBo82j2aPlo/Gj/aQJpBWkHaQppDWkQ -aRNpFmkZaRxpH2kiaSVpKGkraS5pMWk0aTdpOmk9aUBpQ2lGaUlpTGlPaVJpVWlYaVtpXmlhaWRpZ2lq -aW1pcGlzaXZpeWl8aX9pgmmFaYhpi2mOaZFplGmXaZppnWmgaaNppmmpaaxpr2myabVpuGm7ab5pwWnE -acdpymnNadBp02nWa5trr2u7a9dr+2wwbDxscWyJbJRsqmzpbVJta22ibb1tyW3Vbq5vf2/scABwUXFo -cW9xdnGWch1zLHNVc2dzf3OLdLB00HUDdix2YXb+eCt4onnVehZ6InrZe/R8AHwJfB58Y3xvfMR9vX54 -fp9/BIAngIGA34D6gRyBK4FUgW2BeoGigcWDAIMNgyiDMoNOg2eECIWthdOGfobHhtOG+IcGhySHr4fQ -h+WIVoiDiJ2I3ojriTKJRolein+LJIs3i2iLiouii9WMIoxHjF2MdI1NjXCNs46wj2OPeI+Rj5yPx4/j -kBKQHpA4kTmRTZGSk0+TZ5Nzk4uURJUllT+VRpWPldSWW5akl7eZZJohm0ybz5wCnA+cFpwynKWdmp4h -ns6fB58QnxOfFJ8dnyCfIZ8qny2g5KDnoOqg7KDvoPGg9KD3oPqg/KD/oQGhA6EFoQehCqEMoQ+hEaET -oRahGKEboR6hIKEjoSWhKKEroS6hMaE0oTahOKE7oT2hQKFDoUahSKFLoU6hUKFSoVWhV6FaoV2hX6Fi -oWShZ6FqoW2hb6FyoXWheKF6oXyhf6GBoYShhqGJoYuhjaGQoZOhlqGYoZqhnKGeoaGhpKGmoaihqqGt -obChs6G1obihu6G9ocChwqHEocahyaHLoc2h0KHTodah2aHbod6h4KHioeSh5qHooeqh7KHvofGh86H2 -ofih+qH9of+iAqIEogeiCaILog6iEaIUoheiGqIdoh+iIaIjoiaiKaIsoi6iMaIzojWiOKI6ojyiPqJA -okOiRaJIokuiTqJRolOiVaJXolmiW6JdomCiY6JlomeiaaJsom+icqJ1oneieaJ7on2if6KBooSih6KJ -ooyijqKRopSilqKYopuinaKgoqKipKKnoqmirKKuorCisqK1oreiuqK8or+iwqLEoseiyaLLos6i0aLU -otai2aLbot2i36LhouSi56Lqouyi7qLwovOi9aL3ovqi/aMAowKjC6MOpMWkyKTLpM6k0aTUpNek2qTd -pOCk46TmpOmk7KTvpPKk9aT4pPuk/qUBpQSlB6UKpQ2lEKUTpRalGaUcpR+lIqUlpSilK6UupTGlNKU3 -pTqlPaVApUOlRqVJpUylT6VSpVWlWKVbpV6lYaVkpWelaqVtpXClc6V2pXmlfKV/pYKlhaWIpYuljqWR -pZSll6WapZ2loKWjpaalqaWspa+lsqW1pbilu6W+pcGlxKXHpcqlzaXQpdOl1qXZpdyl36XipeWl6KXr -pe6l8aX0pfel+qX9pgCmA6YGpgmmDKYPphKmFaYYphumHqYhpiSmJ6Yqpi2mMKYzpjamOaY8pj+mQqZF -pkimS6ZOplGmVKZXplqmXaZgpmOmZqZppmymb6ZypnWmeKZ7pn6mgaaEpoemiqaNppCmk6aWppmmnKaf -pqKmpaaopqumrqaxprSmt6a6pr2mwKbDpsamyabMps+m0qbVptim26bepuGm5Kbnpuqm7abwpvOm9qb5 -pvym/6cCpwWnCKcLpw6nEacUpxenGqcdpyCnI6cmpymnLKcvpzKnNac4pzunPqdBp0SnR6dKp02nUKdT -p1WnWqddp1+nYqdlp2qnb6dyp3enfKeBp4SniaeMp5GnlqeZp56noaemp6unrqexp7Snt6e6p72nwqfH -p8qnz6fUp9en2qfcp96n46fop+2n8Kf1p/in+6f+qAGoBqgLqBCoEqgXqBqoHaggqCWoKKgqqCyoMag0 -qDmoO6g+qEOoRqhJqE6oUahUqFmoXKhhqGOoZqhrqHCodah4qHuogKiCqIWoiKiLqI2oj6iUqJmonKif -qKGopKinqKyor6i0qLeouqi9qMCow6jIqM2o0KjTqNio3ajgqOKo56jsqO6o8aj0qPmo/qkDqQWpCKkL -qQ6pEakWqRmpHqkjqSapKKkrqTCpNak6qT2pQqlHqUypUalUqVapWaleqWCpZaloqW2pcKlzqXapeal8 -qX6pgamDqYapiKmNqZCpk6mWqZmpm6mgqaOppqmpqauprqmxqbapu6nAqcOpyKnKqc+p1KnXqdqp3ani -qeep7KnxqfSp9qn4qfqp/aoAqgOqDKoOqhGqFqoZqhyqH6oiqiWqKKotqjKqN6o6qj+qRKpJqk6qUapT -qliqXapgqmWqaKpqqm2qdqp4qnmqgqqFqoaqj6qSqpOqnKqhAAAAAAAAAgIAAAAAAAAOzgAAAAAAAAAA -AAAAAAAAqrA - diff --git a/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/keyedobjects.nib index 9aabfb63d1415e3bc07e2837890e8803b06bd68b..74a1efe39798b0da4c697972f6d7b1e8aef41f17 100644 GIT binary patch literal 51384 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 To&KjTUH(_v`TzC*3cde-7T5Ln literal 51308 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 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist b/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist index 5c8d62349..0fbea3558 100644 --- a/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib index 759ead2c9..808d57c7e 100644 --- a/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib @@ -1,11 +1,15 @@ - + 1050 - 9C31 - 677 - 949.26 - 352.00 + 10A314 + 718 + 1013 + 415.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 718 + YES @@ -15,7 +19,7 @@ YES - + YES @@ -68,7 +72,7 @@ - SW5zdMOkbGxuaW5nYXIuLi4 + Inställningar... , 1048576 2147483647 @@ -88,7 +92,7 @@ - VGrDpG5zdGVyA + Tjänster 1048576 2147483647 @@ -96,7 +100,7 @@ submenuAction: - VGrDpG5zdGVyA + Tjänster YES @@ -116,7 +120,7 @@ - VsOkeGxhIGhlbHNrw6RybXNsw6RnZQ + Växla helskärmsläge a 1572864 2147483647 @@ -136,7 +140,7 @@ - R8O2bSBYMTE + Göm X11 h 1048576 2147483647 @@ -146,7 +150,7 @@ - R8O2bSDDtnZyaWdhA + Göm övriga h 1572864 2147483647 @@ -250,7 +254,7 @@ - RsO2bnN0ZXI + Fönster 1048576 2147483647 @@ -258,12 +262,12 @@ submenuAction: - RsO2bnN0ZXI + Fönster YES - U3TDpG5nA + Stäng w 1048576 2147483647 @@ -301,7 +305,7 @@ - QmzDpGRkcmEgZ2Vub20gZsO2bnN0ZXI + Bläddra genom fönster ` 1048840 2147483647 @@ -310,7 +314,7 @@ - QmzDpGRkcmEgZ2Vub20gZsO2bnN0ZXIgYmFrbMOkbmdlcw + Bläddra genom fönster baklänges ~ 1179914 2147483647 @@ -330,7 +334,7 @@ - TMOkZ2cgYWxsYSDDtnZlcnN0A + Lägg alla överst 1048576 2147483647 @@ -354,7 +358,7 @@ - SGrDpGxwA + Hjälp 1048576 2147483647 @@ -362,12 +366,12 @@ submenuAction: - SGrDpGxwA + Hjälp YES - WDExIEhqw6RscA + X11 Hjälp 1048576 2147483647 @@ -388,12 +392,12 @@ 2 {{288, 302}, {484, 308}} 1350041600 - WDExLWluc3TDpGxsbmluZ2FyA + X11-inställningar NSPanel View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -428,7 +432,7 @@ Emulera treknappsmus LucidaGrande - 1.300000e+01 + 13 1044 @@ -456,12 +460,10 @@ 67239424 4194304 - T20gZGUgw6RyIGFrdGl2ZXJhZGUga2FuIHRhbmdlbnRlciBzb20gbW90c3ZhcmFyIG1lbnlyYWRlbiBo -YW1uYSBpIGtvbmZsaWt0IG1lZCBYMTEtcHJvZ3JhbSBzb20gYW52w6RuZGVyIG1ldGFtb2RpZmllcmFy -ZW4uA + Om de är aktiverade kan tangenter som motsvarar menyraden hamna i konflikt med X11-program som använder metamodifieraren. LucidaGrande - 1.100000e+01 + 11 3100 @@ -470,9 +472,9 @@ ZW4uA 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NjY3AA @@ -535,8 +537,7 @@ ciBzw6UgYWt0aXZlcmFzIG11c2VucyBtaXR0LSByZXNwZWt0aXZlIGjDtmdlcmtuYXBwLgo 67239424 4194304 - VGlsbMOldGVyIGF0dCDDpG5kcmluZ2FyIGkgaW5kYXRhbWVueW4gc2tyaXZlciDDtnZlciBkZSBiZWZp -bnRsaWdhIFgxMS10YW5nZW50a29wcGxpbmdhcm5hLg + Tillåter att ändringar i indatamenyn skriver över de befintliga X11-tangentkopplingarna. @@ -553,7 +554,7 @@ bnRsaWdhIFgxMS10YW5nZW50a29wcGxpbmdhcm5hLg 67239424 0 - RsO2bGogZGF0b3JucyB0YW5nZW50Ym9yZHNsYXlvdXQ + Följ datorns tangentbordslayout 1211912703 @@ -592,7 +593,7 @@ bnRsaWdhIFgxMS10YW5nZW50a29wcGxpbmdhcm5hLg 67239424 0 - QW52w6RuZCBzeXN0ZW1ldHMgdmFybmluZ3NlZmZla3Q + Använd systemets varningseffekt 1211912703 @@ -614,9 +615,7 @@ bnRsaWdhIFgxMS10YW5nZW50a29wcGxpbmdhcm5hLg 67239424 4194304 - WDExLWxqdWRldCBibGlyIGRldCB2YW5saWdhIHN5c3RlbXZhcm5pbmdzbGp1ZGV0IHNvbSB2YWx0cyBw -w6UgaW5zdMOkbGxuaW5nc3BhbmVsZW4gTGp1ZGVmZmVrdGVyIGkgU3lzdGVtaW5zdMOkbGxuaW5nYXIu -A + X11-ljudet blir det vanliga systemvarningsljudet som valts på inställningspanelen Ljudeffekter i Systeminställningar. @@ -639,7 +638,7 @@ A 1 LucidaGrande - 1.300000e+01 + 13 16 @@ -650,7 +649,7 @@ A 75 - RnLDpW4gYmlsZHNrw6RybQ + Från bildskärm 1048576 2147483647 @@ -671,7 +670,7 @@ A - MjU2IGbDpHJnZXI + 256 färger 1048576 2147483647 @@ -706,6 +705,7 @@ A + 3 YES @@ -739,7 +739,7 @@ A 67239424 4194304 - QWx0ZXJuYXRpdmV0IGLDtnJqYXIgZ8OkbGxhIG7DpHN0YSBnw6VuZyBYMTEgw7ZwcG5hcy4 + Alternativet börjar gälla nästa gång X11 öppnas. @@ -756,7 +756,7 @@ A 67239424 0 - SGVsc2vDpHJtc2zDpGdlA + Helskärmsläge 1211912703 @@ -778,7 +778,7 @@ A 67239424 0 - VmlzYSBtZW55ZsOkbHRldCBhdXRvbWF0aXNrdCBpIGhlbHNrw6RybXNsw6RnZQ + Visa menyfältet automatiskt i helskärmsläge 1211912703 @@ -800,8 +800,7 @@ A 67239424 4194304 - QWt0aXZlcmFyIFgxMTpzIHJvdGbDtm5zdGVyLiBUcnljayBuZWQga29tbWFuZG8tYWx0LUEgZsO2ciBh -dHQgdsOkeGxhIHRpbGwgb2NoIGZyw6VuIGhlbHNrw6RybXNsw6RnZS4 + Aktiverar X11:s rotfönster. Tryck ned kommando-alt-A för att växla till och från helskärmsläge. @@ -856,9 +855,7 @@ dHQgdsOkeGxhIHRpbGwgb2NoIGZyw6VuIGhlbHNrw6RybXNsw6RnZS4 67239424 4194304 - QWt0aXZlcmFyIG1lbnlhbHRlcm5hdGl2ZXQg4oCdS29waWVyYeKAnSBvY2ggZ8O2ciBkZXQgbcO2amxp -Z3QgYXR0IHN5bmtyb25pc2VyYSBtZWxsYW4gdXJrbGlwcCBpIE9TWCBvY2ggQ0xJUEJPQVJELSBvY2gg -UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 + Aktiverar menyalternativet ”Kopiera” och gör det möjligt att synkronisera mellan urklipp i OSX och CLIPBOARD- och PRIMARY-buffertarna i X11. @@ -874,7 +871,7 @@ UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 67239424 0 - VXBwZGF0ZXJhIENMSVBCT0FSRCBuw6RyIHVya2xpcHAgw6RuZHJhcy4 + Uppdatera CLIPBOARD när urklipp ändras. 1211912703 @@ -896,7 +893,7 @@ UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 67239424 0 - VXBwZGF0ZXJhIFBSSU1BUlkgKG1lbGxhbmtsaWNrKSBuw6RyIHVya2xpcHAgw6RuZHJhcy4 + Uppdatera PRIMARY (mellanklick) när urklipp ändras. 1211912703 @@ -918,7 +915,7 @@ UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 67239424 0 - VXBwZGF0ZXJhIHVya2xpcHAgZGlyZWt0IG7DpHIgbnkgdGV4dCBtYXJrZXJhcy4 + Uppdatera urklipp direkt när ny text markeras. 1211912703 @@ -940,7 +937,7 @@ UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 67239424 0 - VXBwZGF0ZXJhIHVya2xpcHAgbsOkciBDTElQQk9BUkQgw6RuZHJhcy4 + Uppdatera urklipp när CLIPBOARD ändras. 1211912703 @@ -962,8 +959,7 @@ UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 67239424 4194304 - QXZha3RpdmVyYSBkZXQgaMOkciBhbHRlcm5hdGl2ZXQgb20gZHUgdmlsbCBhbnbDpG5kYSB4Y2xpcGJv -YXJkLCBrbGlwcGVyLCBlbGxlciBuw6Vnb24gYW5uYW4gdXJrbGlwcHNoYW50ZXJhcmUgaSBYMTEuA + Avaktivera det här alternativet om du vill använda xclipboard, klipper, eller någon annan urklippshanterare i X11. @@ -979,8 +975,7 @@ YXJkLCBrbGlwcGVyLCBlbGxlciBuw6Vnb24gYW5uYW4gdXJrbGlwcHNoYW50ZXJhcmUgaSBYMTEuA 67239424 4194304 - UMOlIGdydW5kIGF2IGJlZ3LDpG5zbmluZ2FyIGkgWDExLXByb3Rva29sbGV0IGthbnNrZSBkZXQgaMOk -ciBhbHRlcm5hdGl2ZXQgaW50ZSBmdW5nZXJhciBpIHZpc3NhIHByb2dyYW0uA + På grund av begränsningar i X11-protokollet kanske det här alternativet inte fungerar i vissa program. @@ -1012,7 +1007,7 @@ ciBhbHRlcm5hdGl2ZXQgaW50ZSBmdW5nZXJhciBpIHZpc3NhIHByb2dyYW0uA 67239424 0 - S2xpY2thIGlnZW5vbSBpbmFrdGl2YSBmw7Zuc3Rlcg + Klicka igenom inaktiva fönster 1211912703 @@ -1028,7 +1023,7 @@ ciBhbHRlcm5hdGl2ZXQgaW50ZSBmdW5nZXJhciBpIHZpc3NhIHByb2dyYW0uA 256 - {{23, 175}, {385, 31}} + {{32, 175}, {385, 31}} YES @@ -1053,7 +1048,7 @@ cmthIGlubmVow6VsbGV0Lgo 67239424 0 - Rm9rdXMgZsO2bGplciBtdXM + Fokus följer mus 1211912703 @@ -1069,14 +1064,13 @@ cmthIGlubmVow6VsbGV0Lgo 256 - {{23, 128}, {385, 17}} + {{32, 128}, {385, 17}} YES 67239424 4194304 - RsO2bnN0ZXJmb2t1cyBpIFgxMSBmw7ZsamVyIHBla2FyZW4uIERldCBow6RyIGhhciBuw6VncmEgYmll -ZmZla3Rlci4 + Fönsterfokus i X11 följer pekaren. Det här har några bieffekter. @@ -1093,7 +1087,7 @@ ZmZla3Rlci4 67239424 0 - Rm9rdXMgcMOlIG55YSBmw7Zuc3Rlcg + Fokus på nya fönster 1211912703 @@ -1109,15 +1103,13 @@ ZmZla3Rlci4 256 - {{23, 73}, {385, 28}} + {{32, 73}, {385, 28}} YES 67239424 4194304 - TWVkIGRldCBow6RyIGFsdGVybmF0aXZldCBrb21tZXIgc2thcGFuZGV0IGF2IGV0dCBueXR0IFgxMS1m -w7Zuc3RlciBhdHQgbMOkZ2dhIFgxMSDDtnZlcnN0IChpc3TDpGxsZXQgZsO2ciBGaW5kZXIsIFRlcm1p -bmFsLCBldGMuKQ + Med det här alternativet kommer skapandet av ett nytt X11-fönster att lägga X11 överst (istället för Finder, Terminal, etc.) @@ -1128,7 +1120,7 @@ bmFsLCBldGMuKQ {{10, 33}, {438, 246}} - RsO2bnN0ZXI + Fönster @@ -1169,7 +1161,7 @@ bmFsLCBldGMuKQ 67239424 0 - VGlsbMOldCBhbnNsdXRuaW5nYXIgZnLDpW4gbsOkdHZlcmtza2xpZW50ZXI + Tillåt anslutningar från nätverksklienter 1211912703 @@ -1191,9 +1183,7 @@ bmFsLCBldGMuKQ 67239424 4194304 - TsOkciBkdSDDtnBwbmFyIFgxMSBza2FwYXMgWGF1dGhvcml0eS1ueWNrbGFyIHNvbSBrb250cm9sbGVy -YXIgw6V0a29tc3QuIE9tIGRhdG9ybnMgSVAtYWRyZXNzIMOkbmRyYXMgYmxpciBueWNrbGFybmEgb2dp -bHRpZ2Egdmlsa2V0IGthbiBmw7ZyaGluZHJhIGF0dCBYMTEtcHJvZ3JhbSDDtnBwbmFzLg + När du öppnar X11 skapas Xauthority-nycklar som kontrollerar åtkomst. Om datorns IP-adress ändras blir nycklarna ogiltiga vilket kan förhindra att X11-program öppnas. @@ -1210,10 +1200,7 @@ bHRpZ2Egdmlsa2V0IGthbiBmw7ZyaGluZHJhIGF0dCBYMTEtcHJvZ3JhbSDDtnBwbmFzLg 67239424 4194304 - T20gZGV0IMOkciBha3RpdmVyYXQgbcOlc3RlIEF1dGVudGlzZXJhIGFuc2x1dG5pbmdhciBvY2tzw6Ug -dmFyYSBha3RpdmVyYXQgZsO2ciBhdHQgc8Oka2Vyc3TDpGxsYSBzw6RrZXJoZXRlbiBpIHN5c3RlbWV0 -LiBPbSBkZXQgw6RyIGF2YWt0aXZlcmF0IHRpbGzDpXRzIGludGUgYW5zbHV0bmluZ2FyIGZyw6VuIGZq -w6RycnByb2dyYW0uA + Om det är aktiverat måste Autentisera anslutningar också vara aktiverat för att säkerställa säkerheten i systemet. Om det är avaktiverat tillåts inte anslutningar från fjärrprogram. @@ -1230,7 +1217,7 @@ w6RycnByb2dyYW0uA 67239424 4194304 - QWx0ZXJuYXRpdmVuIGLDtnJqYXIgZ8OkbGxhIG7DpHN0YSBnw6VuZyBYMTEgw7ZwcG5hcy4 + Alternativen börjar gälla nästa gång X11 öppnas. @@ -1241,7 +1228,7 @@ w6RycnByb2dyYW0uA {{10, 33}, {438, 246}} - U8Oka2VyaGV0A + Säkerhet @@ -1261,7 +1248,7 @@ w6RycnByb2dyYW0uA {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1274,7 +1261,7 @@ w6RycnByb2dyYW0uA View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1359,12 +1346,12 @@ w6RycnByb2dyYW0uA YES - 1.227310e+02 - 6.273100e+01 - 1.000000e+03 + 122.73099999999999 + 62.731000000000002 + 1000 - 75628032 - 0 + 75628096 + 2048 Namn @@ -1398,12 +1385,12 @@ w6RycnByb2dyYW0uA - 1.000000e+02 - 4.000000e+01 - 1.000000e+03 + 100 + 40 + 1000 - 75628032 - 0 + 75628096 + 2048 Kommando @@ -1426,12 +1413,12 @@ w6RycnByb2dyYW0uA - 6.900000e+01 - 1.000000e+01 - 1.000000e+03 + 69 + 10 + 1000 - 67239424 - 0 + 75628096 + 2048 Kortkom. @@ -1448,7 +1435,7 @@ w6RycnByb2dyYW0uA Text Cell LucidaGrande - 1.200000e+01 + 12 16 @@ -1458,7 +1445,7 @@ w6RycnByb2dyYW0uA 6 System controlBackgroundColor - + @@ -1469,8 +1456,8 @@ w6RycnByb2dyYW0uA - 3.000000e+00 - 2.000000e+00 + 3 + 2 6 @@ -1481,16 +1468,20 @@ w6RycnByb2dyYW0uA MC41AA - 1.700000e+01 + 17 1379958784 + + 1 -1 0 YES + 0 {{1, 17}, {301, 198}} + 4 @@ -1502,7 +1493,7 @@ w6RycnByb2dyYW0uA _doScroller: - 9.949238e-01 + 0.99492380000000002 @@ -1512,7 +1503,7 @@ w6RycnByb2dyYW0uA 1 _doScroller: - 6.885246e-01 + 0.68852460000000004 @@ -1523,6 +1514,7 @@ w6RycnByb2dyYW0uA {{1, 0}, {301, 17}} + 4 @@ -1531,6 +1523,7 @@ w6RycnByb2dyYW0uA {{20, 20}, {318, 231}} + 50 @@ -1548,7 +1541,7 @@ w6RycnByb2dyYW0uA -2080244224 137887744 - TMOkZ2cgdGlsbCBvYmpla3Q + Lägg till objekt -2038284033 @@ -1567,7 +1560,7 @@ w6RycnByb2dyYW0uA {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps @@ -1611,7 +1604,7 @@ w6RycnByb2dyYW0uA - QW5wYXNzYeKApg + Anpassa… 1048576 2147483647 @@ -2186,28 +2179,26 @@ w6RycnByb2dyYW0uA YES 0 - - YES - + -2 - - RmlsZSdzIE93bmVyA + + File's Owner -1 - + First Responder -3 - + Application @@ -2221,7 +2212,7 @@ w6RycnByb2dyYW0uA - + MainMenu @@ -2466,7 +2457,7 @@ w6RycnByb2dyYW0uA 196 - + X11Controller @@ -2476,7 +2467,7 @@ w6RycnByb2dyYW0uA YES - + PrefsPanel @@ -2740,7 +2731,7 @@ w6RycnByb2dyYW0uA YES - + EditPrograms @@ -2763,7 +2754,7 @@ w6RycnByb2dyYW0uA - + DockMenu @@ -3315,10 +3306,8 @@ w6RycnByb2dyYW0uA YES - + YES - -1.IBPluginDependency - -2.IBPluginDependency -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency @@ -3376,7 +3365,6 @@ w6RycnByb2dyYW0uA 169.editorWindowContentRectSynchronizationRect 19.IBPluginDependency 19.ImportedFromIB2 - 196.IBPluginDependency 196.ImportedFromIB2 200295.IBPluginDependency 200295.IBShouldRemoveOnLegacySave @@ -3391,6 +3379,7 @@ w6RycnByb2dyYW0uA 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 244.IBEditorWindowLastContentRect + 244.IBPluginDependency 244.IBPropertyAccessControl 244.IBViewEditorWindowController.showingLayoutRectangles 244.IBWindowTemplateEditedContentRect @@ -3412,6 +3401,7 @@ w6RycnByb2dyYW0uA 272.IBPluginDependency 272.ImportedFromIB2 285.IBEditorWindowLastContentRect + 285.IBPluginDependency 285.IBViewEditorWindowController.showingBoundsRectangles 285.IBViewEditorWindowController.showingLayoutRectangles 285.IBWindowTemplateEditedContentRect @@ -3586,6 +3576,7 @@ w6RycnByb2dyYW0uA 379.IBPluginDependency 379.IBPropertyAccessControl 379.ImportedFromIB2 + 380.IBEditorWindowLastContentRect 380.IBPluginDependency 380.ImportedFromIB2 381.IBPluginDependency @@ -3664,13 +3655,11 @@ w6RycnByb2dyYW0uA YES com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3689,330 +3678,330 @@ w6RycnByb2dyYW0uA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{168, 821}, {113, 23}} com.apple.InterfaceBuilder.CocoaPlugin - + {{202, 626}, {154, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - + {{349, 858}, {315, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + {{271, 666}, {301, 153}} {{444, 200}, {484, 308}} - + com.apple.InterfaceBuilder.CocoaPlugin + {{444, 200}, {484, 308}} - + {{184, 290}, {481, 345}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + {{58, 803}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{100, 746}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{68, 585}, {496, 271}} - - + com.apple.InterfaceBuilder.CocoaPlugin + + {{68, 585}, {496, 271}} - + {{433, 406}, {486, 327}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - + {{145, 836}, {347, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + {{67, 819}, {336, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + + {{530, 368}, {171, 83}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{84, 676}, {127, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{20, 641}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + {{79, 616}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + YES - - YES - + YES @@ -4020,9 +4009,7 @@ w6RycnByb2dyYW0uA YES - - YES - + YES @@ -4060,6 +4047,15 @@ w6RycnByb2dyYW0uA 0 + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES ../X11.xcodeproj 1 diff --git a/hw/xquartz/bundle/Resources/sv.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/sv.lproj/main.nib/keyedobjects.nib index 11f4bc9352d3b6378a85a767ea51b1544a0c6001..ae0faf9bc6c4343371cc792e9b9a698f6e07fe01 100644 GIT binary patch literal 52576 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 literal 50165 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 z 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 See2fkfA;J6pZ{Nr;{O2s*y3aW diff --git a/hw/xquartz/bundle/Resources/zh_CN.lproj/locversion.plist b/hw/xquartz/bundle/Resources/zh_CN.lproj/locversion.plist index 8b8767f06..1cbc91af8 100644 --- a/hw/xquartz/bundle/Resources/zh_CN.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/zh_CN.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 75.1 + 83 diff --git a/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist b/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist index 15f4f1b9e..866f0f1ef 100644 --- a/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib index 96b6f1fa3..14a5fd064 100644 --- a/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib @@ -396,7 +396,7 @@ {3.40282e+38, 3.40282e+38} {320, 240} - + 256 YES @@ -405,6 +405,7 @@ 256 {{13, 10}, {458, 292}} + YES @@ -421,6 +422,7 @@ 256 {{18, 210}, {402, 18}} + YES 67239424 @@ -452,6 +454,7 @@ 256 {{36, 92}, {399, 14}} + YES 67239424 @@ -469,7 +472,7 @@ 6 System controlColor - + 3 MC42NjY2NjY2OQA @@ -488,8 +491,9 @@ 256 - {{36, 162}, {385, 42}} + {{36, 176}, {385, 28}} + YES 67239424 @@ -508,6 +512,7 @@ vKDnmoTkuK3plpPmiJblj7PpgormjInpiJXjgIIKA 256 {{18, 112}, {402, 18}} + YES 67239424 @@ -530,6 +535,7 @@ vKDnmoTkuK3plpPmiJblj7PpgormjInpiJXjgIIKA 256 {{36, 141}, {385, 14}} + YES 67239424 @@ -548,6 +554,7 @@ h4njgII 256 {{18, 161}, {402, 18}} + YES 67239424 @@ -568,6 +575,7 @@ h4njgII {{10, 33}, {438, 246}} + 6Ly45YWlA @@ -1113,7 +1121,7 @@ uOWPjeeahOaViOaenOOAgg 67239424 4194304 55W25ZWT55So5pmC77yM5paw5bu655qEIFgxMSDoppbnqpflsIfmnIPkvb8gWDExLmFwcO+8iOiAjOS4 -jeaYryBGaW5kZXIuYXBw44CBVGVybWluYWwuYXBwIOetie+8ieenu+iHs+acgOWJjeOAgg +jeaYryBGaW5kZXIuYXBw44CB57WC56uv5qmfLmFwcCDnrYnvvInnp7voh7PmnIDliY3jgII @@ -1252,6 +1260,8 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9 {484, 308} + + {{0, 0}, {1440, 878}} {320, 262} @@ -1450,7 +1460,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9 6 System controlBackgroundColor - + diff --git a/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/keyedobjects.nib index 4c99736818c82e681197832fade0bbc79cb85915..3f516a318ba58ab18905864a8a445ffee71acb4f 100644 GIT binary patch literal 42003 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 Date: Wed, 27 May 2009 15:51:19 -0400 Subject: [PATCH 88/89] Fix alpha map computation in miComputeCompositeRegion() According to the RENDER spec, the origin of the alpha map is interpreted relative to the origin of the drawable of the image, not the origin of the drawable of the alpha map. This commit fixes that and adds an alpha-test.c test program. The only use of alpha maps I have been able to find is in Qt and they don't use a non-zero alpha origin. --- render/mipict.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/render/mipict.c b/render/mipict.c index c653ec4f5..e0d40ae34 100644 --- a/render/mipict.c +++ b/render/mipict.c @@ -459,8 +459,8 @@ miComputeCompositeRegion (RegionPtr pRegion, if (pSrc->alphaMap) { if (!miClipPictureSrc (pRegion, pSrc->alphaMap, - xDst - (xSrc + pSrc->alphaOrigin.x), - yDst - (ySrc + pSrc->alphaOrigin.y))) + xDst - (xSrc - pSrc->alphaOrigin.x), + yDst - (ySrc - pSrc->alphaOrigin.y))) { pixman_region_fini (pRegion); return FALSE; @@ -477,8 +477,8 @@ miComputeCompositeRegion (RegionPtr pRegion, if (pMask->alphaMap) { if (!miClipPictureSrc (pRegion, pMask->alphaMap, - xDst - (xMask + pMask->alphaOrigin.x), - yDst - (yMask + pMask->alphaOrigin.y))) + xDst - (xMask - pMask->alphaOrigin.x), + yDst - (yMask - pMask->alphaOrigin.y))) { pixman_region_fini (pRegion); return FALSE; From e08c6a0752772745f35f7afcf6c2b1c927b91cc0 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Mon, 4 May 2009 19:24:47 -0500 Subject: [PATCH 89/89] randr: bug #21554 - re-probe outputs when coming back from laptop unsuspend Make xf86 RANDR wrap the EnterVT call chain, so it can re-probe the outputs when a laptop comes back from suspend/unsuspend (actually, any time that we enter our VT again). The X server should then send RR* events to clients, so they can cope with a monitor that was unplugged while the laptop was suspended. Signed-off-by: Federico Mena Quintero --- hw/xfree86/modes/xf86RandR12.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c index 1e3b70c09..0de21e253 100644 --- a/hw/xfree86/modes/xf86RandR12.c +++ b/hw/xfree86/modes/xf86RandR12.c @@ -55,6 +55,13 @@ typedef struct _xf86RandR12Info { int pointerY; Rotation rotation; /* current mode */ Rotation supported_rotations; /* driver supported */ + + /* Used to wrap EnterVT so we can re-probe the outputs when a laptop unsuspends + * (actually, any time that we switch back into our VT). + * + * See https://bugs.freedesktop.org/show_bug.cgi?id=21554 + */ + xf86EnterVTProc *orig_EnterVT; } XF86RandRInfoRec, *XF86RandRInfoPtr; #ifdef RANDR_12_INTERFACE @@ -1745,11 +1752,26 @@ xf86RandR12ChangeGamma(int scrnIndex, Gamma gamma) return Success; } +static Bool +xf86RandR12EnterVT (int screen_index, int flags) +{ + ScreenPtr pScreen = screenInfo.screens[screen_index]; + XF86RandRInfoPtr randrp = XF86RANDRINFO(pScreen); + + if (randrp->orig_EnterVT) { + if (!randrp->orig_EnterVT (screen_index, flags)) + return FALSE; + } + + return RRGetInfo (pScreen, TRUE); /* force a re-probe of outputs and notify clients about changes */ +} + static Bool xf86RandR12Init12 (ScreenPtr pScreen) { ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; rrScrPrivPtr rp = rrGetScrPriv(pScreen); + XF86RandRInfoPtr randrp = XF86RANDRINFO(pScreen); rp->rrGetInfo = xf86RandR12GetInfo12; rp->rrScreenSetSize = xf86RandR12ScreenSetSize; @@ -1767,6 +1789,10 @@ xf86RandR12Init12 (ScreenPtr pScreen) rp->rrSetConfig = NULL; pScrn->PointerMoved = xf86RandR12PointerMoved; pScrn->ChangeGamma = xf86RandR12ChangeGamma; + + randrp->orig_EnterVT = pScrn->EnterVT; + pScrn->EnterVT = xf86RandR12EnterVT; + if (!xf86RandR12CreateObjects12 (pScreen)) return FALSE;