* [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
@ 2015-10-03 16:37 Khem Raj
2015-10-03 16:37 ` [meta-raspberrypi][PATCH V4 2/5] userland: Add wayland support Khem Raj
` (5 more replies)
0 siblings, 6 replies; 26+ messages in thread
From: Khem Raj @ 2015-10-03 16:37 UTC (permalink / raw)
To: yocto
several userspace libraries like libepoxy poke for pkgconfigs ( .pc )
files to detect egl support, and comes out to fail in configure stage,
one of the patches now adds support to generate .pc files for some known
cases. it could be further extended if needed for other libraries too
Secondly, the default CMAKE_INSTALL_PREFIX is /opt/vc but in OE we use
proper /usr so lets make this change as well, it simplifies do_install()
.so are not versioned so we need to grapple with OE's defaults of
expecting versioned .so files.
Adjust packages for -dev package such that it can automatically package
pkgconfig files and inherit pkgconfig because in cmake code we are not
looking for pkgconfig so we need the dependency also put in place for
consistent builds
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
.../0002-set-VMCS_INSTALL_PREFIX-to-usr.patch | 29 ++++++
...make-generate-and-install-pkgconfig-files.patch | 114 +++++++++++++++++++++
recipes-graphics/userland/userland_git.bb | 21 ++--
3 files changed, 152 insertions(+), 12 deletions(-)
create mode 100644 recipes-graphics/userland/userland/0002-set-VMCS_INSTALL_PREFIX-to-usr.patch
create mode 100644 recipes-graphics/userland/userland/0003-cmake-generate-and-install-pkgconfig-files.patch
diff --git a/recipes-graphics/userland/userland/0002-set-VMCS_INSTALL_PREFIX-to-usr.patch b/recipes-graphics/userland/userland/0002-set-VMCS_INSTALL_PREFIX-to-usr.patch
new file mode 100644
index 0000000..1c981af
--- /dev/null
+++ b/recipes-graphics/userland/userland/0002-set-VMCS_INSTALL_PREFIX-to-usr.patch
@@ -0,0 +1,29 @@
+From 05554d8486050546efc3c0605015786c8b267d19 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 9 Aug 2015 23:58:17 -0700
+Subject: [PATCH 1/2] set VMCS_INSTALL_PREFIX to /usr
+
+in OE we dont use /opt/vc but standard prefix
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted
+ makefiles/cmake/vmcs.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/makefiles/cmake/vmcs.cmake b/makefiles/cmake/vmcs.cmake
+index 0f8641b..e9d576d 100644
+--- a/makefiles/cmake/vmcs.cmake
++++ b/makefiles/cmake/vmcs.cmake
+@@ -10,7 +10,7 @@ INCLUDE(CPack)
+ if (ANDROID)
+ SET(VMCS_INSTALL_PREFIX "/vendor/brcm/islands" CACHE PATH "Prefix prepended to install directories" FORCE)
+ else()
+- SET(VMCS_INSTALL_PREFIX "/opt/vc" CACHE PATH "Prefix prepended to install directories" FORCE)
++ SET(VMCS_INSTALL_PREFIX "/usr" CACHE PATH "Prefix prepended to install directories" FORCE)
+ endif()
+
+ SET(CMAKE_INSTALL_PREFIX "${VMCS_INSTALL_PREFIX}" CACHE INTERNAL "Prefix
+--
+2.1.4
+
diff --git a/recipes-graphics/userland/userland/0003-cmake-generate-and-install-pkgconfig-files.patch b/recipes-graphics/userland/userland/0003-cmake-generate-and-install-pkgconfig-files.patch
new file mode 100644
index 0000000..c644d52
--- /dev/null
+++ b/recipes-graphics/userland/userland/0003-cmake-generate-and-install-pkgconfig-files.patch
@@ -0,0 +1,114 @@
+From ef43e09c2d13b88c2e92cffc94b68003afcb1f13 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 9 Aug 2015 23:59:32 -0700
+Subject: [PATCH 2/2] cmake: generate and install pkgconfig files
+
+many packages expect packageconfig support especially for detecting EGL
+libraries. This patch helps in compiling those packages on RPi
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted
+ CMakeLists.txt | 10 +++++++++-
+ pkgconfig/bcm_host.pc.in | 10 ++++++++++
+ pkgconfig/egl.pc.in | 12 ++++++++++++
+ pkgconfig/glesv2.pc.in | 12 ++++++++++++
+ pkgconfig/vg.pc.in | 11 +++++++++++
+ 5 files changed, 54 insertions(+), 1 deletion(-)
+ create mode 100644 pkgconfig/bcm_host.pc.in
+ create mode 100644 pkgconfig/egl.pc.in
+ create mode 100644 pkgconfig/glesv2.pc.in
+ create mode 100644 pkgconfig/vg.pc.in
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index d8f776c..f15dc2b 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -105,6 +105,14 @@ set(vmcs_host_apps_VERSION_MAJOR 1)
+ set(vmcs_host_apps_VERSION_MINOR 0)
+
+ include_directories("${PROJECT_BINARY_DIR}")
+-
++include(FindPkgConfig QUIET)
++if(PKG_CONFIG_FOUND)
++ # Produce a pkg-config file
++ foreach(PCFILE bcm_host.pc egl.pc glesv2.pc vg.pc)
++ configure_file("pkgconfig/${PCFILE}.in" "${PCFILE}" @ONLY)
++ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PCFILE}"
++ DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig")
++ endforeach()
++endif()
+ # Remove cache entry, if one added by command line
+ unset(KHRONOS_EGL_PLATFORM CACHE)
+diff --git a/pkgconfig/bcm_host.pc.in b/pkgconfig/bcm_host.pc.in
+new file mode 100644
+index 0000000..c7237c5
+--- /dev/null
++++ b/pkgconfig/bcm_host.pc.in
+@@ -0,0 +1,10 @@
++prefix=@CMAKE_INSTALL_PREFIX@
++exec_prefix=${prefix}
++libdir=${exec_prefix}/lib
++includedir=${prefix}/include
++
++Name: bcm_host
++Description: Broadcom VideoCore host API library
++Version: 1
++Libs: -L${libdir} -lbcm_host -lvcos -lvchiq_arm -pthread
++Cflags: -I${includedir} -I${includedir}/interface/vmcs_host/linux -I${includedir}/interface/vcos/pthreads -DUSE_VCHIQ_ARM
+diff --git a/pkgconfig/egl.pc.in b/pkgconfig/egl.pc.in
+new file mode 100644
+index 0000000..4e3d6ac
+--- /dev/null
++++ b/pkgconfig/egl.pc.in
+@@ -0,0 +1,12 @@
++prefix=@CMAKE_INSTALL_PREFIX@
++exec_prefix=${prefix}
++libdir=${exec_prefix}/lib
++includedir=${prefix}/include
++
++Name: EGL
++Description: Fake EGL package for RPi
++Version: 10
++Requires: bcm_host
++Libs: -L${libdir} -lEGL
++Cflags: -I${includedir}
++
+diff --git a/pkgconfig/glesv2.pc.in b/pkgconfig/glesv2.pc.in
+new file mode 100644
+index 0000000..5900225
+--- /dev/null
++++ b/pkgconfig/glesv2.pc.in
+@@ -0,0 +1,12 @@
++prefix=@CMAKE_INSTALL_PREFIX@
++exec_prefix=${prefix}
++libdir=${exec_prefix}/lib
++includedir=${prefix}/include
++
++Name: GLESv2
++Description: Fake GL ES 2 package for RPi
++Version: 10
++Requires: bcm_host
++Libs: -L${libdir} -lGLESv2
++Cflags: -I${includedir}
++
+diff --git a/pkgconfig/vg.pc.in b/pkgconfig/vg.pc.in
+new file mode 100644
+index 0000000..8c39c98
+--- /dev/null
++++ b/pkgconfig/vg.pc.in
+@@ -0,0 +1,11 @@
++prefix=@CMAKE_INSTALL_PREFIX@
++exec_prefix=${prefix}
++libdir=${exec_prefix}/lib
++includedir=${prefix}/include
++
++Name: OpenVG
++Description: Fake OpenVG package for RPi
++Version: 10
++Requires: bcm_host
++Libs: -L${libdir} -lOpenVG
++Cflags: -I${includedir}
+--
+2.1.4
+
diff --git a/recipes-graphics/userland/userland_git.bb b/recipes-graphics/userland/userland_git.bb
index e431077..65ff128 100644
--- a/recipes-graphics/userland/userland_git.bb
+++ b/recipes-graphics/userland/userland_git.bb
@@ -21,31 +21,28 @@ SRC_URI = "\
file://0001-fix-gcc-5.x-inlines.patch \
file://0002-fix-musl-build.patch \
file://0003-fix-alloc-size-uninitialized.patch \
+ file://0002-set-VMCS_INSTALL_PREFIX-to-usr.patch \
+ file://0003-cmake-generate-and-install-pkgconfig-files.patch \
"
S = "${WORKDIR}/git"
-inherit cmake
+inherit cmake pkgconfig
EXTRA_OECMAKE = "-DCMAKE_BUILD_TYPE=Release -DCMAKE_EXE_LINKER_FLAGS='-Wl,--no-as-needed'"
CFLAGS_append = " -fPIC"
-# The compiled binaries don't provide sonames.
-SOLIBS = "${SOLIBSDEV}"
-
-do_install_append() {
- mkdir -p ${D}/${prefix}
- mv ${D}/opt/vc/* ${D}/${prefix}
- rm -rf ${D}/opt
-}
+# Shared libs from userland package build aren't versioned, so we need
+# to force the .so files into the runtime package (and keep them
+# out of -dev package).
+FILES_SOLIBSDEV = ""
FILES_${PN} += " \
- ${libdir}/*${SOLIBS} \
+ ${libdir}/*.so \
${libdir}/plugins"
-FILES_${PN}-dev = "${includedir} \
+FILES_${PN}-dev += "${includedir} \
${prefix}/src"
FILES_${PN}-doc += "${datadir}/install"
FILES_${PN}-dbg += "${libdir}/plugins/.debug"
PACKAGE_ARCH = "${MACHINE_ARCH}"
-
--
2.6.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [meta-raspberrypi][PATCH V4 2/5] userland: Add wayland support
2015-10-03 16:37 [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs Khem Raj
@ 2015-10-03 16:37 ` Khem Raj
2015-10-03 16:37 ` [meta-raspberrypi][PATCH V4 3/5] userland: Adjust include location for pthreads-headers Khem Raj
` (4 subsequent siblings)
5 siblings, 0 replies; 26+ messages in thread
From: Khem Raj @ 2015-10-03 16:37 UTC (permalink / raw)
To: yocto
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=UTF-8, Size: 167070 bytes --]
backport and fix needed patches for supporting wayland-egl
use PACKAGECONFIG for wayland so we can add proper DEPENDS on wayland
Fix QA warnings about dev-so
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
...-applications-to-set-next-resource-handle.patch | 210 +++
...ayland-Add-support-for-the-Wayland-winsys.patch | 1847 ++++++++++++++++++++
.../0006-wayland-Add-Wayland-example.patch | 864 +++++++++
...-wayland-egl-Add-bcm_host-to-dependencies.patch | 30 +
recipes-graphics/userland/userland_git.bb | 14 +-
5 files changed, 2963 insertions(+), 2 deletions(-)
create mode 100644 recipes-graphics/userland/userland/0004-Allow-applications-to-set-next-resource-handle.patch
create mode 100644 recipes-graphics/userland/userland/0005-wayland-Add-support-for-the-Wayland-winsys.patch
create mode 100644 recipes-graphics/userland/userland/0006-wayland-Add-Wayland-example.patch
create mode 100644 recipes-graphics/userland/userland/0007-wayland-egl-Add-bcm_host-to-dependencies.patch
diff --git a/recipes-graphics/userland/userland/0004-Allow-applications-to-set-next-resource-handle.patch b/recipes-graphics/userland/userland/0004-Allow-applications-to-set-next-resource-handle.patch
new file mode 100644
index 0000000..d5b43ca
--- /dev/null
+++ b/recipes-graphics/userland/userland/0004-Allow-applications-to-set-next-resource-handle.patch
@@ -0,0 +1,210 @@
+From 825c3236e5908ff003644abd870bfe98e82722b2 Mon Sep 17 00:00:00 2001
+From: Dom Cobley <dc4@broadcom.com>
+Date: Tue, 9 Jul 2013 09:26:26 -0400
+Subject: [PATCH 1/3] Allow applications to set next resource handle
+
+This patch adds provisions in userland to
+let apps callers set the next rendereing dispmanx resource.
+It's useful for implementing, say, a buffer carousel.
+---
+Upstream-Status: Submitted
+
+ interface/khronos/common/khrn_client_rpc.h | 2 ++
+ interface/khronos/common/khrn_int_ids.h | 2 ++
+ interface/khronos/egl/egl_client.c | 30 +++++++++++++++++++++++++++---
+ interface/khronos/egl/egl_client_surface.c | 24 +++++++++++++++++++++++-
+ interface/khronos/egl/egl_client_surface.h | 3 ++-
+ interface/khronos/egl/egl_int_impl.h | 5 +++--
+ 6 files changed, 59 insertions(+), 7 deletions(-)
+
+diff --git a/interface/khronos/common/khrn_client_rpc.h b/interface/khronos/common/khrn_client_rpc.h
+index 418aa67..a7557a8 100644
+--- a/interface/khronos/common/khrn_client_rpc.h
++++ b/interface/khronos/common/khrn_client_rpc.h
+@@ -683,6 +683,7 @@ static INLINE void rpc_call12_out_ctrl(CLIENT_THREAD_STATE_T *thread,uint32_t id
+ static INLINE void rpc_call13_out_ctrl(CLIENT_THREAD_STATE_T *thread,uint32_t id, uint32_t p0, uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4, uint32_t p5, uint32_t p6, uint32_t p7, uint32_t p8, uint32_t p9, uint32_t p10, uint32_t p11, void *out) { rpc_begin(thread); RPC_CALL(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); rpc_recv(thread, out, NULL, (RPC_RECV_FLAG_T)(RPC_RECV_FLAG_CTRL | RPC_RECV_FLAG_LEN)); rpc_end(thread); }
+ static INLINE void rpc_call14_out_ctrl(CLIENT_THREAD_STATE_T *thread,uint32_t id, uint32_t p0, uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4, uint32_t p5, uint32_t p6, uint32_t p7, uint32_t p8, uint32_t p9, uint32_t p10, uint32_t p11, uint32_t p12, void *out) { rpc_begin(thread); RPC_CALL(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); rpc_recv(thread, out, NULL, (RPC_RECV_FLAG_T)(RPC_RECV_FLAG_CTRL | RPC_RECV_FLAG_LEN)); rpc_end(thread); }
+ static INLINE void rpc_call15_out_ctrl(CLIENT_THREAD_STATE_T *thread,uint32_t id, uint32_t p0, uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4, uint32_t p5, uint32_t p6, uint32_t p7, uint32_t p8, uint32_t p9, uint32_t p10, uint32_t p11, uint32_t p12, uint32_t p13, void *out) { rpc_begin(thread); RPC_CALL(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13); rpc_recv(thread, out, NULL, (RPC_RECV_FLAG_T)(RPC_RECV_FLAG_CTRL | RPC_RECV_FLAG_LEN)); rpc_end(thread); }
++static INLINE void rpc_call16_out_ctrl(CLIENT_THREAD_STATE_T *thread,uint32_t id, uint32_t p0, uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4, uint32_t p5, uint32_t p6, uint32_t p7, uint32_t p8, uint32_t p9, uint32_t p10, uint32_t p11, uint32_t p12, uint32_t p13, uint32_t p14, void *out) { rpc_begin(thread); RPC_CALL(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14); rpc_recv(thread, out, NULL, (RPC_RECV_FLAG_T)(RPC_RECV_FLAG_CTRL | RPC_RECV_FLAG_LEN)); rpc_end(thread); }
+ #endif
+
+ #define RPC_CALL1_OUT_CTRL(fn, thread, id, out) rpc_call1_out_ctrl(thread, id, out)
+@@ -700,6 +701,7 @@ static INLINE void rpc_call15_out_ctrl(CLIENT_THREAD_STATE_T *thread,uint32_t id
+ #define RPC_CALL13_OUT_CTRL(fn, thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, out) rpc_call13_out_ctrl(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, out)
+ #define RPC_CALL14_OUT_CTRL(fn, thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, out) rpc_call14_out_ctrl(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, out)
+ #define RPC_CALL15_OUT_CTRL(fn, thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, out) rpc_call15_out_ctrl(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, out)
++#define RPC_CALL16_OUT_CTRL(fn, thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, out) rpc_call16_out_ctrl(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, out)
+
+ # if !defined(__SYMBIAN32__) //use functions defined in khrpc.cpp
+ static INLINE uint32_t rpc_call1_out_ctrl_res(CLIENT_THREAD_STATE_T *thread,uint32_t id, void *out) { uint32_t res; rpc_begin(thread); RPC_CALL(thread, id); res = rpc_recv(thread, out, NULL, (RPC_RECV_FLAG_T)(RPC_RECV_FLAG_RES | RPC_RECV_FLAG_CTRL | RPC_RECV_FLAG_LEN)); rpc_end(thread); return res; }
+diff --git a/interface/khronos/common/khrn_int_ids.h b/interface/khronos/common/khrn_int_ids.h
+index 8378f4a..ec961e0 100644
+--- a/interface/khronos/common/khrn_int_ids.h
++++ b/interface/khronos/common/khrn_int_ids.h
+@@ -367,6 +367,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ #define EGLINTCREATESURFACE_ID 0x4000
++#define EGLINTCREATESURFACE_ID_V2 0x4100
+ #define EGLINTCREATEGLES11_ID 0x4001
+ #define EGLINTCREATEGLES20_ID 0x4002
+ #define EGLINTCREATEVG_ID 0x4003
+@@ -377,6 +378,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #define EGLINTMAKECURRENT_ID 0x4008
+ #define EGLINTFLUSHANDWAIT_ID 0x4009
+ #define EGLINTSWAPBUFFERS_ID 0x400a
++#define EGLINTSWAPBUFFERS_ID_V2 0x410a
+ #define EGLINTSELECTMIPMAP_ID 0x400b
+ #define EGLINTFLUSH_ID 0x400c
+ #define EGLINTGETCOLORDATA_ID 0x400d
+diff --git a/interface/khronos/egl/egl_client.c b/interface/khronos/egl/egl_client.c
+index fd07eb6..e902d19 100644
+--- a/interface/khronos/egl/egl_client.c
++++ b/interface/khronos/egl/egl_client.c
+@@ -162,6 +162,17 @@ static void egl_current_release(CLIENT_PROCESS_STATE_T *process, EGL_CURRENT_T *
+ void egl_gl_flush_callback(bool wait);
+ void egl_vg_flush_callback(bool wait);
+
++#include "interface/vmcs_host/vc_dispmanx_types.h"
++/**HACKHACK - give us the ability to inject a DispmanX
++ * resource handle into the CreateWindowSurface and
++ * SwapBuffers calls */
++static DISPMANX_RESOURCE_HANDLE_T next_resource_handle;
++
++EGLAPI EGLBoolean EGLAPIENTRY eglSetNextResourceHandle(DISPMANX_RESOURCE_HANDLE_T handle)
++{
++ next_resource_handle = handle;
++}
++
+ /*
+ TODO: do an RPC call to make sure the Khronos vll is loaded (and that it stays loaded until eglTerminate)
+ Also affects global image (and possibly others?)
+@@ -643,7 +654,8 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig c
+ false,
+ EGL_NO_TEXTURE,
+ EGL_NO_TEXTURE,
+- 0, 0);
++ 0, 0,
++ next_resource_handle);
+
+ if (surface) {
+ if (khrn_pointer_map_insert(&process->surfaces, process->next_surface, surface)) {
+@@ -888,7 +900,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig
+ mipmap_texture,
+ texture_format,
+ texture_target,
+- 0, 0);
++ 0, 0, 0);
+
+ if (surface) {
+ if (khrn_pointer_map_insert(&process->surfaces, process->next_surface, surface)) {
+@@ -1030,7 +1042,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig c
+ false,
+ EGL_NO_TEXTURE,
+ EGL_NO_TEXTURE,
+- pixmap, ((server_handle[0] == 0) && (server_handle[1] == (uint32_t)(-1))) ? NULL : server_handle);
++ pixmap, ((server_handle[0] == 0) && (server_handle[1] == (uint32_t)(-1))) ? NULL : server_handle, 0);
+
+ if (surface) {
+ if (khrn_pointer_map_insert(&process->surfaces, process->next_surface, surface)) {
+@@ -2302,6 +2314,18 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surf)
+
+ vcos_log_trace("eglSwapBuffers server call");
+
++ if (next_resource_handle)
++ RPC_CALL7(eglIntSwapBuffers_impl,
++ thread,
++ EGLINTSWAPBUFFERS_ID_V2,
++ RPC_UINT(surface->serverbuffer),
++ RPC_UINT(surface->width),
++ RPC_UINT(surface->height),
++ RPC_UINT(surface->internal_handle),
++ RPC_UINT(surface->swap_behavior == EGL_BUFFER_PRESERVED ? 1 : 0),
++ RPC_UINT(khrn_platform_get_window_position(surface->win)),
++ RPC_INT(next_resource_handle));
++ else
+ RPC_CALL6(eglIntSwapBuffers_impl,
+ thread,
+ EGLINTSWAPBUFFERS_ID,
+diff --git a/interface/khronos/egl/egl_client_surface.c b/interface/khronos/egl/egl_client_surface.c
+index cda5943..0be56c5 100644
+--- a/interface/khronos/egl/egl_client_surface.c
++++ b/interface/khronos/egl/egl_client_surface.c
+@@ -314,7 +314,8 @@ EGL_SURFACE_T *egl_surface_create(
+ EGLenum texture_format,
+ EGLenum texture_target,
+ EGLNativePixmapType pixmap,
+- const uint32_t *pixmap_server_handle)
++ const uint32_t *pixmap_server_handle,
++ DISPMANX_RESOURCE_HANDLE_T next_resource_handle)
+ {
+ KHRN_IMAGE_FORMAT_T color;
+ KHRN_IMAGE_FORMAT_T depth;
+@@ -473,6 +474,27 @@ EGL_SURFACE_T *egl_surface_create(
+ #endif
+ uint32_t results[3];
+
++ if (next_resource_handle)
++ RPC_CALL16_OUT_CTRL(eglIntCreateSurface_impl,
++ thread,
++ EGLINTCREATESURFACE_ID_V2,
++ RPC_UINT(serverwin),
++ RPC_UINT(buffers),
++ RPC_UINT(width),
++ RPC_UINT(height),
++ RPC_UINT(color),
++ RPC_UINT(depth),
++ RPC_UINT(mask),
++ RPC_UINT(multi),
++ RPC_UINT(largest_pbuffer),
++ RPC_UINT(mipmap_texture),
++ RPC_UINT(config_depth_bits),
++ RPC_UINT(config_stencil_bits),
++ RPC_UINT(sem_name),
++ RPC_UINT(type),
++ RPC_INT(next_resource_handle),
++ results);
++ else
+ RPC_CALL15_OUT_CTRL(eglIntCreateSurface_impl,
+ thread,
+ EGLINTCREATESURFACE_ID,
+diff --git a/interface/khronos/egl/egl_client_surface.h b/interface/khronos/egl/egl_client_surface.h
+index c99d44c..b5bf70a 100644
+--- a/interface/khronos/egl/egl_client_surface.h
++++ b/interface/khronos/egl/egl_client_surface.h
+@@ -322,7 +322,8 @@ extern EGL_SURFACE_T *egl_surface_create(
+ EGLenum texture_format,
+ EGLenum texture_target,
+ EGLNativePixmapType pixmap,
+- const uint32_t *pixmap_server_handle);
++ const uint32_t *pixmap_server_handle,
++ DISPMANX_RESOURCE_HANDLE_T next_resource_handle);
+ extern EGL_SURFACE_T *egl_surface_from_vg_image(
+ VGImage vg_handle,
+ EGLSurface name,
+diff --git a/interface/khronos/egl/egl_int_impl.h b/interface/khronos/egl/egl_int_impl.h
+index 8a5734c..51b3580 100644
+--- a/interface/khronos/egl/egl_int_impl.h
++++ b/interface/khronos/egl/egl_int_impl.h
+@@ -56,7 +56,8 @@ FN(int, eglIntCreateSurface_impl, (
+ uint32_t config_stencil_bits,
+ uint32_t sem,
+ uint32_t type,
+- uint32_t *results))
++ uint32_t *results,
++ DISPMANX_RESOURCE_HANDLE_T next_resource_handle))
+
+ FN(int, eglIntCreatePbufferFromVGImage_impl, (
+ VGImage vg_handle,
+@@ -110,7 +111,7 @@ FN(void, eglIntMakeCurrent_impl, (uint32_t pid_0, uint32_t pid_1, uint32_t glver
+ FN(int, eglIntFlushAndWait_impl, (uint32_t flushgl, uint32_t flushvg))
+ FN(void, eglIntFlush_impl, (uint32_t flushgl, uint32_t flushvg))
+
+-FN(void, eglIntSwapBuffers_impl, (EGL_SURFACE_ID_T s, uint32_t width, uint32_t height, uint32_t handle, uint32_t preserve, uint32_t position))
++FN(void, eglIntSwapBuffers_impl, (EGL_SURFACE_ID_T s, uint32_t width, uint32_t height, uint32_t handle, uint32_t preserve, uint32_t position, DISPMANX_RESOURCE_HANDLE_T new_back_buffer))
+ FN(void, eglIntSelectMipmap_impl, (EGL_SURFACE_ID_T s, int level))
+
+ FN(void, eglIntGetColorData_impl, (EGL_SURFACE_ID_T s, KHRN_IMAGE_FORMAT_T format, uint32_t width, uint32_t height, int32_t stride, uint32_t y_offset, void *data))
+--
+2.1.4
+
diff --git a/recipes-graphics/userland/userland/0005-wayland-Add-support-for-the-Wayland-winsys.patch b/recipes-graphics/userland/userland/0005-wayland-Add-support-for-the-Wayland-winsys.patch
new file mode 100644
index 0000000..1d1ef59
--- /dev/null
+++ b/recipes-graphics/userland/userland/0005-wayland-Add-support-for-the-Wayland-winsys.patch
@@ -0,0 +1,1847 @@
+From c22c00f1e430b105a2c3dbbeffcf4762f27c3b17 Mon Sep 17 00:00:00 2001
+From: Tomeu Vizoso <tomeu.vizoso@collabora.com>
+Date: Tue, 1 Oct 2013 13:19:20 +0200
+Subject: [PATCH 2/3] wayland: Add support for the Wayland winsys
+
+* Adds EGL_WL_bind_wayland_display extension
+* Adds wayland-egl library
+* Adds wl_dispmanx_buffer protocol extension
+
+TODO: Check that platform_get_dimensions() returning swapchain_count == 1 is correct
+
+TODO: Remove the requirement of passing a valid DispmanX element handle to
+the SwapBuffers and CreateSurface RPC calls. This will remove the need to open
+a DispmanX display from the clients.
+
+TODO: wl_dispmanx_server_buffer should probably be defined in a
+private header that can be included from EGL and vc_* instead of in
+vc_vchi_dispmanx.h
+---
+Upstream-Status: Submitted
+
+ .gitignore | 2 +
+ CMakeLists.txt | 11 +
+ README.md | 4 +
+ buildme | 14 +-
+ interface/khronos/CMakeLists.txt | 52 ++++-
+ interface/khronos/common/khrn_client.c | 15 ++
+ interface/khronos/common/khrn_client.h | 10 +
+ interface/khronos/common/khrn_client_mangle.h | 3 +
+ interface/khronos/common/khrn_client_platform.h | 8 +
+ interface/khronos/common/khrn_client_unmangle.h | 3 +
+ .../common/linux/khrn_client_platform_linux.c | 115 ++++++++--
+ interface/khronos/common/linux/khrn_wayland.c | 215 ++++++++++++++++++
+ .../common/linux/khrn_wayland.h} | 46 +---
+ interface/khronos/egl/egl_client.c | 92 +++++---
+ interface/khronos/egl/egl_client_get_proc.c | 11 +
+ interface/khronos/egl/egl_client_surface.c | 42 +++-
+ interface/khronos/egl/egl_client_surface.h | 38 +++-
+ interface/khronos/egl/egl_int_impl.h | 2 +-
+ interface/khronos/ext/egl_wayland.c | 246 +++++++++++++++++++++
+ interface/khronos/include/EGL/eglext.h | 23 ++
+ interface/khronos/wayland-egl/wayland-egl-priv.h | 53 +++++
+ interface/khronos/wayland-egl/wayland-egl.c | 59 +++++
+ interface/khronos/wayland-egl/wayland-egl.pc.in | 10 +
+ interface/vmcs_host/CMakeLists.txt | 21 +-
+ interface/vmcs_host/vc_dispmanx.h | 10 +
+ interface/vmcs_host/vc_vchi_dispmanx.c | 42 ++++
+ interface/vmcs_host/vc_vchi_dispmanx.h | 15 ++
+ interface/wayland/dispmanx.xml | 123 +++++++++++
+ makefiles/cmake/Wayland.cmake | 72 ++++++
+ 29 files changed, 1260 insertions(+), 97 deletions(-)
+ create mode 100644 interface/khronos/common/linux/khrn_wayland.c
+ copy interface/{vmcs_host/vc_vchi_dispmanx.h => khronos/common/linux/khrn_wayland.h} (56%)
+ create mode 100644 interface/khronos/ext/egl_wayland.c
+ create mode 100644 interface/khronos/wayland-egl/wayland-egl-priv.h
+ create mode 100644 interface/khronos/wayland-egl/wayland-egl.c
+ create mode 100644 interface/khronos/wayland-egl/wayland-egl.pc.in
+ create mode 100644 interface/wayland/dispmanx.xml
+ create mode 100644 makefiles/cmake/Wayland.cmake
+
+Index: git/.gitignore
+===================================================================
+--- git.orig/.gitignore
++++ git/.gitignore
+@@ -10,3 +10,5 @@
+ *.lai
+ *.la
+ *.a
++
++*~
+Index: git/CMakeLists.txt
+===================================================================
+--- git.orig/CMakeLists.txt
++++ git/CMakeLists.txt
+@@ -13,6 +13,17 @@ include(makefiles/cmake/global_settings.
+ include(makefiles/cmake/arm-linux.cmake)
+ include(makefiles/cmake/vmcs.cmake)
+
++if (BUILD_WAYLAND)
++ include(makefiles/cmake/Wayland.cmake)
++
++ # Find Wayland libraries
++ find_package(PkgConfig)
++ pkg_check_modules(WAYLAND_CLIENT wayland-client REQUIRED)
++ pkg_check_modules(WAYLAND_SERVER wayland-server REQUIRED)
++
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DBUILD_WAYLAND")
++endif()
++
+ enable_language(ASM)
+
+ # Global include paths
+Index: git/README.md
+===================================================================
+--- git.orig/README.md
++++ git/README.md
+@@ -4,3 +4,7 @@ EGL, mmal, GLESv2, vcos, openmaxil, vchi
+
+ Use buildme to build. It requires cmake to be installed and an arm cross compiler. It is set up to use this one:
+ https://github.com/raspberrypi/tools/tree/master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian
++
++To build support for the Wayland winsys in EGL, execute the buildme script like this:
++
++$ BUILD_WAYLAND=1 ./buildme.
+Index: git/buildme
+===================================================================
+--- git.orig/buildme
++++ git/buildme
+@@ -1,10 +1,14 @@
+ #!/bin/bash
+
++if [ -n "$BUILD_WAYLAND" ]; then
++ WAYLAND_VARS="-DBUILD_WAYLAND=TRUE"
++fi
++
+ if [ "armv6l" = `arch` ] || [ "armv7l" = `arch` ]; then
+ # Native compile on the Raspberry Pi
+ mkdir -p build/raspberry/release
+ pushd build/raspberry/release
+- cmake -DCMAKE_BUILD_TYPE=Release ../../..
++ cmake -DCMAKE_BUILD_TYPE=Release $WAYLAND_VARS ../../..
+ if [ "armv6l" = `arch` ]; then
+ make
+ else
+@@ -17,9 +21,15 @@ if [ "armv6l" = `arch` ] || [ "armv7l" =
+ fi
+ else
+ # Cross compile on a more capable machine
++
++ if [ -n "$BUILD_WAYLAND" ]; then
++ # Use wayland-scanner from the build platform
++ WAYLAND_VARS+=" -DWAYLAND_SCANNER_EXECUTABLE:FILEPATH=/usr/bin/wayland-scanner"
++ fi
++
+ mkdir -p build/arm-linux/release/
+ pushd build/arm-linux/release/
+- cmake -DCMAKE_TOOLCHAIN_FILE=../../../makefiles/cmake/toolchains/arm-linux-gnueabihf.cmake -DCMAKE_BUILD_TYPE=Release ../../..
++ cmake -DCMAKE_TOOLCHAIN_FILE=../../../makefiles/cmake/toolchains/arm-linux-gnueabihf.cmake -DCMAKE_BUILD_TYPE=Release $WAYLAND_VARS ../../..
+ make -j 6
+
+ if [ "$1" != "" ]; then
+Index: git/interface/khronos/CMakeLists.txt
+===================================================================
+--- git.orig/interface/khronos/CMakeLists.txt
++++ git/interface/khronos/CMakeLists.txt
+@@ -6,6 +6,12 @@
+ # have quite a few circular dependencies, and so the only way
+ # to make it work seems to be to have everything static.
+
++if (BUILD_WAYLAND)
++include_directories(
++ ${WAYLAND_SERVER_INCLUDE_DIRS}
++)
++endif ()
++
+ set(EGL_SOURCE
+ egl/egl_client_config.c
+ egl/egl_client_context.c
+@@ -55,19 +61,63 @@ set(CLIENT_SOURCE
+ common/khrn_int_hash_asm.s
+ common/khrn_client_cache.c)
+
++set(EGL_LIBS
++ khrn_client
++ vchiq_arm
++ vcos
++ bcm_host
++ -lm)
++
++if (BUILD_WAYLAND)
++ set(EGL_SOURCE
++ ${EGL_SOURCE}
++ ext/egl_wayland.c
++ common/linux/khrn_wayland.c)
++
++ set(EGL_LIBS
++ ${EGL_LIBS}
++ wayland-client
++ wayland-server)
++
++ set(WAYLAND_EGL_SOURCE
++ wayland-egl/wayland-egl.c)
++
++ wayland_add_protocol_server(
++ EGL_SOURCE
++ ../../interface/wayland/dispmanx.xml
++ dispmanx
++ )
++
++ wayland_add_protocol_client(
++ EGL_SOURCE
++ ../../interface/wayland/dispmanx.xml
++ dispmanx
++ )
++
++ add_library(wayland-egl ${SHARED} ${WAYLAND_EGL_SOURCE})
++ install(TARGETS wayland-egl DESTINATION lib)
++
++ configure_file ("wayland-egl/wayland-egl.pc.in" "wayland-egl/wayland-egl.pc" @ONLY)
++ install (FILES "${CMAKE_CURRENT_BINARY_DIR}/wayland-egl/wayland-egl.pc"
++ DESTINATION lib/pkgconfig)
++endif ()
++
+ add_library(EGL ${SHARED} ${EGL_SOURCE})
+ add_library(GLESv2 ${SHARED} ${GLES_SOURCE})
+ add_library(OpenVG ${SHARED} ${VG_SOURCE})
+ add_library(WFC ${SHARED} ${WFC_SOURCE})
+ add_library(khrn_client ${CLIENT_SOURCE})
+
++set_target_properties(EGL PROPERTIES SOVERSION 1 VERSION 1.0.0)
++set_target_properties(GLESv2 PROPERTIES SOVERSION 2 VERSION 2.0.0)
++
+ # TODO do we need EGL_static and GLESv2_static now that khrn_static exists?
+ add_library(EGL_static STATIC ${EGL_SOURCE})
+ add_library(GLESv2_static STATIC ${GLES_SOURCE})
+ add_library(khrn_static STATIC
+ ${EGL_SOURCE} ${GLES_SOURCE} ${VG_SOURCE} ${WFC_SOURCE} ${CLIENT_SOURCE})
+
+-target_link_libraries(EGL khrn_client vchiq_arm vcos bcm_host -lm)
++target_link_libraries(EGL ${EGL_LIBS})
+ target_link_libraries(GLESv2 EGL khrn_client vcos)
+ target_link_libraries(WFC EGL)
+ target_link_libraries(OpenVG EGL)
+Index: git/interface/khronos/common/khrn_client.c
+===================================================================
+--- git.orig/interface/khronos/common/khrn_client.c
++++ git/interface/khronos/common/khrn_client.c
+@@ -54,6 +54,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
+ #include "applications/vmcs/khronos/khronos_server.h"
+ #endif
+
++#ifdef BUILD_WAYLAND
++#include "interface/khronos/common/linux/khrn_wayland.h"
++#endif
++
+ VCOS_LOG_CAT_T khrn_client_log = VCOS_LOG_INIT("khrn_client", VCOS_LOG_WARN);
+
+ /*
+@@ -142,6 +146,10 @@ void client_try_unload_server(CLIENT_PRO
+ bool client_process_state_init(CLIENT_PROCESS_STATE_T *process)
+ {
+ if (!process->inited) {
++#ifdef BUILD_WAYLAND
++ process->wl_global = NULL;
++#endif
++
+ if (!khrn_pointer_map_init(&process->contexts, 64))
+ return false;
+
+@@ -194,6 +202,13 @@ bool client_process_state_init(CLIENT_PR
+ }
+ #endif
+
++#ifdef BUILD_WAYLAND
++ struct wl_display *wl_display = khrn_platform_get_wl_display();
++ if (wl_display)
++ if (!init_process_wayland(process))
++ return false;
++#endif
++
+ process->inited = true;
+ }
+
+Index: git/interface/khronos/common/khrn_client.h
+===================================================================
+--- git.orig/interface/khronos/common/khrn_client.h
++++ git/interface/khronos/common/khrn_client.h
+@@ -310,6 +310,16 @@ struct CLIENT_PROCESS_STATE {
+ #ifdef RPC_LIBRARY
+ KHRONOS_SERVER_CONNECTION_T khrn_connection;
+ #endif
++
++#ifdef BUILD_WAYLAND
++ /* Client-side Wayland state */
++ struct wl_registry *wl_registry;
++ struct wl_dispmanx *wl_dispmanx;
++ struct wl_event_queue *wl_queue;
++
++ /* Compositor-side Wayland state */
++ struct wl_global *wl_global;
++#endif
+ };
+
+ extern bool client_process_state_init(CLIENT_PROCESS_STATE_T *process);
+Index: git/interface/khronos/common/khrn_client_mangle.h
+===================================================================
+--- git.orig/interface/khronos/common/khrn_client_mangle.h
++++ git/interface/khronos/common/khrn_client_mangle.h
+@@ -83,6 +83,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
+ #define eglReleaseGlobalImageBRCM mangled_eglReleaseGlobalImageBRCM
+ #define eglInitGlobalImageBRCM mangled_eglInitGlobalImageBRCM
+ #define eglTermGlobalImageBRCM mangled_eglTermGlobalImageBRCM
++#define eglBindWaylandDisplayWL mangled_eglBindWaylandDisplayWL
++#define eglUnbindWaylandDisplayWL mangled_eglUnbindWaylandDisplayWL
++#define eglQueryWaylandBufferWL mangled_eglQueryWaylandBufferWL
+
+ /* OpenGL ES 1.1 and 2.0 functions */
+
+Index: git/interface/khronos/common/khrn_client_platform.h
+===================================================================
+--- git.orig/interface/khronos/common/khrn_client_platform.h
++++ git/interface/khronos/common/khrn_client_platform.h
+@@ -48,6 +48,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
+ #include "interface/khronos/common/vcos/khrn_client_platform_filler_vcos.h"
+ #endif
+
++#ifdef BUILD_WAYLAND
++#include <wayland-client.h>
++#endif
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -328,4 +332,8 @@ typedef struct
+
+ void *platform_wfc_bounce_thread(void *param);
+
++#ifdef BUILD_WAYLAND
++struct wl_display *khrn_platform_get_wl_display();
++#endif
++
+ #endif // KHRN_CLIENT_PLATFORM_H
+Index: git/interface/khronos/common/khrn_client_unmangle.h
+===================================================================
+--- git.orig/interface/khronos/common/khrn_client_unmangle.h
++++ git/interface/khronos/common/khrn_client_unmangle.h
+@@ -83,6 +83,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
+ #undef eglReleaseGlobalImageBRCM
+ #undef eglInitGlobalImageBRCM
+ #undef eglTermGlobalImageBRCM
++#undef eglBindWaylandDisplayWL
++#undef eglUnbindWaylandDisplayWL
++#undef eglQueryWaylandBufferWL
+
+ /* OpenGL ES 1.1 and 2.0 functions */
+
+Index: git/interface/khronos/common/linux/khrn_client_platform_linux.c
+===================================================================
+--- git.orig/interface/khronos/common/linux/khrn_client_platform_linux.c
++++ git/interface/khronos/common/linux/khrn_client_platform_linux.c
+@@ -37,6 +37,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
+ #include "X11/Xlib.h"
+ #endif
+
++#ifdef BUILD_WAYLAND
++#include <wayland-client.h>
++#include "interface/khronos/wayland-egl/wayland-egl-priv.h"
++#endif
++
+ extern VCOS_LOG_CAT_T khrn_client_log;
+
+ extern void vc_vchi_khronos_init();
+@@ -460,14 +465,37 @@ EGLDisplay khrn_platform_set_display_id(
+ return EGL_NO_DISPLAY;
+ }
+ #else
++
++#ifdef BUILD_WAYLAND
++static struct wl_display *hacky_display = NULL;
++#endif
++
+ EGLDisplay khrn_platform_set_display_id(EGLNativeDisplayType display_id)
+ {
+ if (display_id == EGL_DEFAULT_DISPLAY)
+ return (EGLDisplay)1;
+- else
+- return EGL_NO_DISPLAY;
++ else {
++#ifdef BUILD_WAYLAND
++ void *first_pointer = *(void **) display_id;
++
++ /* wl_display is a wl_proxy, which is a wl_object.
++ * wl_object's first element points to the interfacetype. */
++ if (first_pointer == &wl_display_interface) {
++ hacky_display = (struct wl_display*)display_id;
++ return (EGLDisplay)1;
++ } else
++#endif
++ return EGL_NO_DISPLAY;
++ }
++}
++
++#ifdef BUILD_WAYLAND
++struct wl_display *khrn_platform_get_wl_display()
++{
++ return hacky_display;
+ }
+ #endif
++#endif
+
+ #ifdef WANT_X
+ static void dump_hierarchy(Window w, Window thisw, Window look, int level)
+@@ -801,22 +829,81 @@ static EGL_DISPMANX_WINDOW_T *check_defa
+ void platform_get_dimensions(EGLDisplay dpy, EGLNativeWindowType win,
+ uint32_t *width, uint32_t *height, uint32_t *swapchain_count)
+ {
+- EGL_DISPMANX_WINDOW_T *dwin = check_default(win);
+- vcos_assert(dwin);
+- vcos_assert(dwin->width < 1<<16); // sanity check
+- vcos_assert(dwin->height < 1<<16); // sanity check
+- *width = dwin->width;
+- *height = dwin->height;
+- *swapchain_count = 0;
++#ifdef BUILD_WAYLAND
++ if(khrn_platform_get_wl_display()) {
++ struct wl_egl_window *wl_egl_window = (struct wl_egl_window*)win;
++ *width = wl_egl_window->width;
++ *height = wl_egl_window->height;
++ /* This seems to be used for sync'ing with the VC on buffer creation, but
++ we are managing them on the CPU side */
++ *swapchain_count = 1;
++ } else {
++#endif
++ EGL_DISPMANX_WINDOW_T *dwin = check_default(win);
++ vcos_assert(dwin);
++ vcos_assert(dwin->width < 1<<16); // sanity check
++ vcos_assert(dwin->height < 1<<16); // sanity check
++ *width = dwin->width;
++ *height = dwin->height;
++ *swapchain_count = 0;
++#ifdef BUILD_WAYLAND
++ }
++#endif
++}
++
++#ifdef BUILD_WAYLAND
++static DISPMANX_ELEMENT_HANDLE_T create_dummy_element()
++{
++ DISPMANX_DISPLAY_HANDLE_T display = vc_dispmanx_display_open(0);
++ DISPMANX_UPDATE_HANDLE_T update = vc_dispmanx_update_start(0);
++ DISPMANX_ELEMENT_HANDLE_T element;
++ VC_DISPMANX_ALPHA_T alpha = {DISPMANX_FLAGS_ALPHA_FIXED_ALL_PIXELS, 255, 0};
++ VC_RECT_T src_rect;
++ VC_RECT_T dst_rect;
++
++ src_rect.x = 0;
++ src_rect.y = 0;
++ src_rect.width = 1 << 16;
++ src_rect.height = 1 << 16;
++
++ dst_rect.x = 0;
++ dst_rect.y = 0;
++ dst_rect.width = 1;
++ dst_rect.height = 1;
++
++ element = vc_dispmanx_element_add(update, display, 0/*layer*/, &dst_rect,
++ 0/*src*/, &src_rect,
++ DISPMANX_PROTECTION_NONE, &alpha,
++ 0/*clamp*/, 0/*transform*/);
++
++ vc_dispmanx_update_submit_sync(update);
++
++ vc_dispmanx_display_close(display);
++
++ return element;
+ }
++#endif
+
+ uint32_t platform_get_handle(EGLDisplay dpy, EGLNativeWindowType win)
+ {
+- EGL_DISPMANX_WINDOW_T *dwin = check_default(win);
+- vcos_assert(dwin);
+- vcos_assert(dwin->width < 1<<16); // sanity check
+- vcos_assert(dwin->height < 1<<16); // sanity check
+- return dwin->element;
++#ifdef BUILD_WAYLAND
++ if(khrn_platform_get_wl_display()) {
++ struct wl_egl_window *wl_egl_window = (struct wl_egl_window*)win;
++
++ if (wl_egl_window->dummy_element == PLATFORM_WIN_NONE)
++ wl_egl_window->dummy_element = create_dummy_element();
++
++ return wl_egl_window->dummy_element;
++ } else {
++#endif
++ EGL_DISPMANX_WINDOW_T *dwin = check_default(win);
++ vcos_assert(dwin);
++ vcos_assert(dwin->width < 1<<16); // sanity check
++ vcos_assert(dwin->height < 1<<16); // sanity check
++ return dwin->element;
++#ifdef BUILD_WAYLAND
++ }
++#endif
+ }
+
+ #endif
+Index: git/interface/khronos/common/linux/khrn_wayland.c
+===================================================================
+--- /dev/null
++++ git/interface/khronos/common/linux/khrn_wayland.c
+@@ -0,0 +1,215 @@
++/*
++Copyright (c) 2013, Raspberry Pi Foundation
++All rights reserved.
++
++Redistribution and use in source and binary forms, with or without
++modification, are permitted provided that the following conditions are met:
++ * Redistributions of source code must retain the above copyright
++ notice, this list of conditions and the following disclaimer.
++ * 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.
++ * Neither the name of the copyright holder 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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.
++*/
++
++#define VCOS_LOG_CATEGORY (&khrn_client_log)
++
++#include "interface/khronos/common/linux/khrn_wayland.h"
++#include "interface/khronos/wayland-dispmanx-client-protocol.h"
++#include "interface/khronos/wayland-egl/wayland-egl-priv.h"
++
++extern VCOS_LOG_CAT_T khrn_client_log;
++
++static void handle_dispmanx_format(void *data, struct wl_dispmanx *dispmanx,
++ uint32_t format)
++{
++}
++
++static void handle_dispmanx_allocated(void *data, struct wl_dispmanx *dispmanx,
++ struct wl_buffer *wl_buffer,
++ uint32_t resource_handle)
++{
++ struct wl_dispmanx_client_buffer *buffer = wl_buffer_get_user_data(wl_buffer);
++
++ buffer->pending_allocation = 0;
++ buffer->resource = resource_handle;
++}
++
++static const struct wl_dispmanx_listener dispmanx_listener = {
++ handle_dispmanx_format,
++ handle_dispmanx_allocated,
++};
++
++static void
++sync_callback(void *data, struct wl_callback *callback, uint32_t serial)
++{
++ int *done = data;
++
++ *done = 1;
++
++ wl_callback_destroy(callback);
++}
++
++static const struct wl_callback_listener sync_listener = {
++ sync_callback
++};
++
++static int
++roundtrip(CLIENT_PROCESS_STATE_T *process)
++{
++ struct wl_display *wl_display = khrn_platform_get_wl_display();
++ struct wl_callback *callback;
++ int done = 0, ret = 0;
++
++ callback = wl_display_sync(wl_display);
++ wl_callback_add_listener(callback, &sync_listener, &done);
++ wl_proxy_set_queue((struct wl_proxy *) callback, process->wl_queue);
++ while (ret != -1 && !done)
++ ret = wl_display_dispatch_queue(wl_display, process->wl_queue);
++
++ if (!done)
++ wl_callback_destroy(callback);
++
++ return ret;
++}
++
++int do_wl_roundtrip()
++{
++ CLIENT_PROCESS_STATE_T *process = CLIENT_GET_PROCESS_STATE();
++ return roundtrip(process);
++}
++
++static void
++registry_handle_global(void *data, struct wl_registry *registry,
++ uint32_t name, const char *interface, uint32_t version)
++{
++ struct wl_display *wl_display = khrn_platform_get_wl_display();
++ CLIENT_PROCESS_STATE_T *process = (CLIENT_PROCESS_STATE_T *)data;
++
++ if (strcmp(interface, "wl_dispmanx") == 0) {
++ process->wl_dispmanx = wl_registry_bind(registry, name,
++ &wl_dispmanx_interface, 1);
++
++ wl_proxy_set_queue((struct wl_proxy *) process->wl_dispmanx,
++ process->wl_queue);
++ wl_dispmanx_add_listener(process->wl_dispmanx, &dispmanx_listener, wl_display);
++ roundtrip(process);
++ }
++}
++
++static void
++registry_handle_global_remove(void *data, struct wl_registry *registry,
++ uint32_t name)
++{
++}
++
++static const struct wl_registry_listener registry_listener = {
++ registry_handle_global,
++ registry_handle_global_remove
++};
++
++int
++init_process_wayland(CLIENT_PROCESS_STATE_T *process)
++{
++ struct wl_display *wl_display = khrn_platform_get_wl_display();
++
++ process->wl_queue = wl_display_create_queue(wl_display);
++ if (!process->wl_queue) {
++ vcos_log_error("wl_display_create_queue failed\n");
++ return false;
++ }
++ wl_display_dispatch_pending(wl_display);
++
++ process->wl_registry = wl_display_get_registry(wl_display);
++ if (!process->wl_registry) {
++ vcos_log_error("wl_display_get_registry failed\n");
++ return false;
++ }
++
++ wl_proxy_set_queue((struct wl_proxy *) process->wl_registry,
++ process->wl_queue);
++
++ wl_registry_add_listener(process->wl_registry, ®istry_listener, process);
++
++ if (roundtrip(process) < 0 || process->wl_dispmanx == NULL) {
++ vcos_log_error("failed to get wl_dispmanx\n");
++ return false;
++ }
++
++ return true;
++}
++
++#ifndef ALIGN_UP
++#define ALIGN_UP(x,y) ((x + (y)-1) & ~((y)-1))
++#endif
++
++static void handle_buffer_release(void *data, struct wl_buffer *buffer_wl)
++{
++ struct wl_dispmanx_client_buffer *wl_dispmanx_client_buffer = data;
++ wl_dispmanx_client_buffer->in_use = 0;
++}
++
++static const struct wl_buffer_listener buffer_listener = {
++ handle_buffer_release
++};
++
++struct wl_dispmanx_client_buffer *
++allocate_wl_buffer(struct wl_egl_window *window, KHRN_IMAGE_FORMAT_T color)
++{
++ CLIENT_PROCESS_STATE_T *process = CLIENT_GET_PROCESS_STATE();
++ struct wl_dispmanx_client_buffer *wl_dispmanx_client_buffer;
++ struct wl_buffer *wl_buffer;
++ uint32_t stride = ALIGN_UP(window->width * 4, 16);
++ uint32_t buffer_height = ALIGN_UP(window->height, 16);
++ enum wl_dispmanx_format color_format;
++ int ret = 0;
++
++ switch (color) {
++ case ABGR_8888:
++ color_format = WL_DISPMANX_FORMAT_ABGR8888;
++ break;
++ case XBGR_8888:
++ color_format = WL_DISPMANX_FORMAT_XBGR8888;
++ break;
++ case RGB_565:
++ color_format = WL_DISPMANX_FORMAT_RGB565;
++ break;
++ default:
++ vcos_log_error("unknown KHRN_IMAGE_FORMAT_T 0x%x\n", color);
++ return NULL;
++ }
++
++ wl_buffer = wl_dispmanx_create_buffer(process->wl_dispmanx, window->width,
++ window->height, stride, buffer_height,
++ color_format);
++ if (wl_buffer == NULL)
++ return NULL;
++
++ wl_dispmanx_client_buffer = calloc(1, sizeof(struct wl_dispmanx_client_buffer));
++ wl_dispmanx_client_buffer->wl_buffer = wl_buffer;
++ wl_dispmanx_client_buffer->in_use = 0;
++ wl_dispmanx_client_buffer->pending_allocation = 1;
++ wl_dispmanx_client_buffer->width = window->width;
++ wl_dispmanx_client_buffer->height = window->height;
++
++ wl_proxy_set_queue((struct wl_proxy *) wl_buffer, process->wl_queue);
++ wl_buffer_add_listener(wl_buffer, &buffer_listener, wl_dispmanx_client_buffer);
++
++ while (ret != -1 && wl_dispmanx_client_buffer->pending_allocation)
++ ret = do_wl_roundtrip();
++
++ return wl_dispmanx_client_buffer;
++}
+Index: git/interface/vmcs_host/vc_vchi_dispmanx.h
+===================================================================
+--- git.orig/interface/vmcs_host/vc_vchi_dispmanx.h
++++ git/interface/vmcs_host/vc_vchi_dispmanx.h
+@@ -66,4 +66,19 @@ typedef struct {
+ #define ELEMENT_CHANGE_MASK_RESOURCE (1<<4)
+ #define ELEMENT_CHANGE_TRANSFORM (1<<5)
+
++#ifdef BUILD_WAYLAND
++/* XXX: This should be in a private header that can be included from EGL and vc_* */
++#include <wayland-server.h>
++#include "interface/vmcs_host/wayland-dispmanx-server-protocol.h"
++struct wl_dispmanx_server_buffer {
++ struct wl_resource *resource;
++ struct wl_dispmanx *dispmanx;
++ enum wl_dispmanx_format format;
++ DISPMANX_RESOURCE_HANDLE_T handle;
++ int32_t width;
++ int32_t height;
++ int in_use;
++};
++#endif
++
+ #endif
+Index: git/interface/khronos/common/linux/khrn_wayland.h
+===================================================================
+--- /dev/null
++++ git/interface/khronos/common/linux/khrn_wayland.h
+@@ -0,0 +1,33 @@
++/*
++Copyright (c) 2013, Raspberry Pi Foundation
++All rights reserved.
++
++Redistribution and use in source and binary forms, with or without
++modification, are permitted provided that the following conditions are met:
++ * Redistributions of source code must retain the above copyright
++ notice, this list of conditions and the following disclaimer.
++ * 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.
++ * Neither the name of the copyright holder 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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.
++*/
++
++#include "interface/khronos/common/khrn_client.h"
++
++int init_process_wayland(CLIENT_PROCESS_STATE_T *process);
++int do_wl_roundtrip();
++
++struct wl_dispmanx_client_buffer *allocate_wl_buffer(struct wl_egl_window *window, KHRN_IMAGE_FORMAT_T color);
+Index: git/interface/khronos/egl/egl_client.c
+===================================================================
+--- git.orig/interface/khronos/egl/egl_client.c
++++ git/interface/khronos/egl/egl_client.c
+@@ -153,6 +153,10 @@ by an attribute value"
+ #include <stdlib.h>
+ #include <string.h>
+
++#ifdef BUILD_WAYLAND
++#include "interface/khronos/wayland-egl/wayland-egl-priv.h"
++#include "interface/khronos/common/linux/khrn_wayland.h"
++#endif
+
+ #include "interface/khronos/egl/egl_client_cr.c"
+
+@@ -162,17 +166,6 @@ static void egl_current_release(CLIENT_P
+ void egl_gl_flush_callback(bool wait);
+ void egl_vg_flush_callback(bool wait);
+
+-#include "interface/vmcs_host/vc_dispmanx_types.h"
+-/**HACKHACK - give us the ability to inject a DispmanX
+- * resource handle into the CreateWindowSurface and
+- * SwapBuffers calls */
+-static DISPMANX_RESOURCE_HANDLE_T next_resource_handle;
+-
+-EGLAPI EGLBoolean EGLAPIENTRY eglSetNextResourceHandle(DISPMANX_RESOURCE_HANDLE_T handle)
+-{
+- next_resource_handle = handle;
+-}
+-
+ /*
+ TODO: do an RPC call to make sure the Khronos vll is loaded (and that it stays loaded until eglTerminate)
+ Also affects global image (and possibly others?)
+@@ -451,6 +444,9 @@ EGLAPI const char EGLAPIENTRY * eglQuery
+ "EGL_KHR_fence_sync "
+ #endif
+ #endif
++#if EGL_WL_bind_wayland_display
++ "EGL_WL_bind_wayland_display "
++#endif
+ ;
+ break;
+ case EGL_VENDOR:
+@@ -655,8 +651,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreateW
+ false,
+ EGL_NO_TEXTURE,
+ EGL_NO_TEXTURE,
+- 0, 0,
+- next_resource_handle);
++ 0, 0);
+
+ if (surface) {
+ if (khrn_pointer_map_insert(&process->surfaces, process->next_surface, surface)) {
+@@ -901,7 +896,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreateP
+ mipmap_texture,
+ texture_format,
+ texture_target,
+- 0, 0, 0);
++ 0, 0);
+
+ if (surface) {
+ if (khrn_pointer_map_insert(&process->surfaces, process->next_surface, surface)) {
+@@ -1043,7 +1038,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreateP
+ false,
+ EGL_NO_TEXTURE,
+ EGL_NO_TEXTURE,
+- pixmap, ((server_handle[0] == 0) && (server_handle[1] == (uint32_t)(-1))) ? NULL : server_handle, 0);
++ pixmap, ((server_handle[0] == 0) && (server_handle[1] == (uint32_t)(-1))) ? NULL : server_handle);
+
+ if (surface) {
+ if (khrn_pointer_map_insert(&process->surfaces, process->next_surface, surface)) {
+@@ -2245,6 +2240,9 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuf
+ CLIENT_THREAD_STATE_T *thread;
+ CLIENT_PROCESS_STATE_T *process;
+ EGLBoolean result;
++#ifdef BUILD_WAYLAND
++ struct wl_display *wl_display = khrn_platform_get_wl_display();
++#endif
+
+ vcos_log_trace("eglSwapBuffers start. dpy=%d. surf=%d.", (int)dpy, (int)surf);
+
+@@ -2315,18 +2313,58 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuf
+
+ vcos_log_trace("eglSwapBuffers server call");
+
+- if (next_resource_handle)
+- RPC_CALL7(eglIntSwapBuffers_impl,
+- thread,
+- EGLINTSWAPBUFFERS_ID_V2,
+- RPC_UINT(surface->serverbuffer),
+- RPC_UINT(surface->width),
+- RPC_UINT(surface->height),
+- RPC_UINT(surface->internal_handle),
+- RPC_UINT(surface->swap_behavior == EGL_BUFFER_PRESERVED ? 1 : 0),
+- RPC_UINT(khrn_platform_get_window_position(surface->win)),
+- RPC_INT(next_resource_handle));
+- else
++#ifdef BUILD_WAYLAND
++ if (wl_display) {
++ struct wl_egl_window *wl_egl_window = surface->wl_egl_window;
++ struct wl_dispmanx_client_buffer *buffer_temp;
++ uint32_t configid;
++ KHRN_IMAGE_FORMAT_T color;
++ int ret = 0;
++
++ buffer_temp = surface->front_wl_buffer;
++ surface->front_wl_buffer = surface->back_wl_buffer;
++ surface->back_wl_buffer = buffer_temp;
++
++ configid = egl_config_to_id(surface->config);
++ color = egl_config_get_color_format(configid);
++
++ if (surface->back_wl_buffer == NULL)
++ surface->back_wl_buffer = allocate_wl_buffer(wl_egl_window, color);
++ else if (surface->back_wl_buffer->width != width ||
++ surface->back_wl_buffer->height != height) {
++
++ struct wl_dispmanx_client_buffer *buffer;
++
++ wl_buffer_destroy(surface->back_wl_buffer->wl_buffer);
++ free(surface->back_wl_buffer);
++
++ buffer = allocate_wl_buffer(wl_egl_window, color);
++ surface->back_wl_buffer = buffer;
++ }
++
++ RPC_CALL7(eglIntSwapBuffers_impl,
++ thread,
++ EGLINTSWAPBUFFERS_ID_V2,
++ RPC_UINT(surface->serverbuffer),
++ RPC_UINT(surface->width),
++ RPC_UINT(surface->height),
++ RPC_UINT(surface->internal_handle),
++ RPC_UINT(surface->swap_behavior == EGL_BUFFER_PRESERVED ? 1 : 0),
++ RPC_UINT(khrn_platform_get_window_position(surface->win)),
++ RPC_INT(surface->back_wl_buffer->resource));
++
++ surface->front_wl_buffer->in_use = 1;
++ wl_surface_attach(wl_egl_window->wl_surface,
++ surface->front_wl_buffer->wl_buffer,
++ 0, 0);
++ wl_surface_damage(wl_egl_window->wl_surface, 0, 0,
++ surface->width, surface->height);
++ wl_surface_commit(wl_egl_window->wl_surface);
++
++ while(ret != -1 && surface->back_wl_buffer->in_use)
++ ret = wl_display_dispatch_queue(wl_display, process->wl_queue);
++ } else
++#endif
+ RPC_CALL6(eglIntSwapBuffers_impl,
+ thread,
+ EGLINTSWAPBUFFERS_ID,
+Index: git/interface/khronos/egl/egl_client_get_proc.c
+===================================================================
+--- git.orig/interface/khronos/egl/egl_client_get_proc.c
++++ git/interface/khronos/egl/egl_client_get_proc.c
+@@ -254,6 +254,17 @@ EGLAPI void EGLAPIENTRY (* eglGetProcAdd
+ return (void(*)(void))eglQueryGlobalImageBRCM;
+ #endif
+
++#ifdef BUILD_WAYLAND
++#if EGL_WL_bind_wayland_display
++ if (!strcmp(procname, "eglBindWaylandDisplayWL"))
++ return (void(*)(void))eglBindWaylandDisplayWL;
++ if (!strcmp(procname, "eglUnbindWaylandDisplayWL"))
++ return (void(*)(void))eglUnbindWaylandDisplayWL;
++ if (!strcmp(procname, "eglQueryWaylandBufferWL"))
++ return (void(*)(void))eglQueryWaylandBufferWL;
++#endif
++#endif
++
+ return (void(*)(void)) NULL;
+ }
+
+Index: git/interface/khronos/egl/egl_client_surface.c
+===================================================================
+--- git.orig/interface/khronos/egl/egl_client_surface.c
++++ git/interface/khronos/egl/egl_client_surface.c
+@@ -46,6 +46,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
+ #include "interface/khronos/egl/egl_int_impl.h"
+ #endif
+
++#ifdef BUILD_WAYLAND
++#include "interface/khronos/wayland-egl/wayland-egl-priv.h"
++#include "interface/khronos/common/linux/khrn_wayland.h"
++#endif
++
+ #include <stdlib.h>
+
+
+@@ -314,8 +319,7 @@ EGL_SURFACE_T *egl_surface_create(
+ EGLenum texture_format,
+ EGLenum texture_target,
+ EGLNativePixmapType pixmap,
+- const uint32_t *pixmap_server_handle,
+- DISPMANX_RESOURCE_HANDLE_T next_resource_handle)
++ const uint32_t *pixmap_server_handle)
+ {
+ KHRN_IMAGE_FORMAT_T color;
+ KHRN_IMAGE_FORMAT_T depth;
+@@ -326,6 +330,10 @@ EGL_SURFACE_T *egl_surface_create(
+ EGLint config_depth_bits;
+ EGLint config_stencil_bits;
+ CLIENT_THREAD_STATE_T *thread = CLIENT_GET_THREAD_STATE();
++#ifdef BUILD_WAYLAND
++ struct wl_display *wl_display = khrn_platform_get_wl_display();
++ DISPMANX_RESOURCE_HANDLE_T resource;
++#endif
+
+ EGL_SURFACE_T *surface = egl_surface_pool_alloc();
+
+@@ -390,6 +398,18 @@ EGL_SURFACE_T *egl_surface_create(
+
+ vcos_assert(color != IMAGE_FORMAT_INVALID);
+
++#ifdef BUILD_WAYLAND
++ if (type == WINDOW && wl_display) {
++ surface->wl_egl_window = (struct wl_egl_window*)win;
++ surface->back_wl_buffer = allocate_wl_buffer(
++ surface->wl_egl_window, color);
++ resource = surface->back_wl_buffer->resource;
++ } else {
++ surface->wl_egl_window = NULL;
++ resource = DISPMANX_NO_HANDLE;
++ }
++#endif
++
+ #ifdef KHRONOS_EGL_PLATFORM_OPENWFC
+ // Create stream for this window
+ if(type != PBUFFER)
+@@ -474,7 +494,8 @@ EGL_SURFACE_T *egl_surface_create(
+ #endif
+ uint32_t results[3];
+
+- if (next_resource_handle)
++#ifdef BUILD_WAYLAND
++ if (resource != DISPMANX_NO_HANDLE)
+ RPC_CALL16_OUT_CTRL(eglIntCreateSurface_impl,
+ thread,
+ EGLINTCREATESURFACE_ID_V2,
+@@ -492,9 +513,10 @@ EGL_SURFACE_T *egl_surface_create(
+ RPC_UINT(config_stencil_bits),
+ RPC_UINT(sem_name),
+ RPC_UINT(type),
+- RPC_INT(next_resource_handle),
++ RPC_INT(resource),
+ results);
+ else
++#endif
+ RPC_CALL15_OUT_CTRL(eglIntCreateSurface_impl,
+ thread,
+ EGLINTCREATESURFACE_ID,
+@@ -663,6 +685,18 @@ void egl_surface_free(EGL_SURFACE_T *sur
+ if( surface->type == WINDOW ) {
+ vcos_log_trace("egl_surface_free: calling platform_destroy_winhandle...");
+ platform_destroy_winhandle( surface->win, surface->internal_handle );
++
++#ifdef BUILD_WAYLAND
++ if (surface->back_wl_buffer) {
++ wl_buffer_destroy(surface->back_wl_buffer->wl_buffer);
++ free(surface->back_wl_buffer);
++ }
++
++ if (surface->front_wl_buffer) {
++ wl_buffer_destroy(surface->front_wl_buffer->wl_buffer);
++ free(surface->front_wl_buffer);
++ }
++#endif
+ }
+ /* return value ignored -- read performed to ensure blocking. we want this to
+ * block so clients can safely destroy the surface's window as soon as the
+Index: git/interface/khronos/egl/egl_client_surface.h
+===================================================================
+--- git.orig/interface/khronos/egl/egl_client_surface.h
++++ git/interface/khronos/egl/egl_client_surface.h
+@@ -288,6 +288,41 @@ typedef struct {
+ type == PIXMAP
+ */
+ bool server_owned;
++
++#ifdef BUILD_WAYLAND
++ /*
++ wl_egl_window
++
++ Validity:
++ type == WINDOW
++
++ Invariant:
++ wayland EGL window
++ */
++ struct wl_egl_window *wl_egl_window;
++
++ /*
++ front_wl_buffer
++
++ Validity:
++ type == WINDOW
++
++ Invariant:
++ client-side information about the wl_buffer in the front
++ */
++ struct wl_dispmanx_client_buffer *front_wl_buffer;
++
++ /*
++ back_wl_buffer
++
++ Validity:
++ type == WINDOW
++
++ Invariant:
++ client-side information about the wl_buffer in the back
++ */
++ struct wl_dispmanx_client_buffer *back_wl_buffer;
++#endif
+ } EGL_SURFACE_T;
+
+ extern bool egl_surface_check_attribs(
+@@ -322,8 +357,7 @@ extern EGL_SURFACE_T *egl_surface_create
+ EGLenum texture_format,
+ EGLenum texture_target,
+ EGLNativePixmapType pixmap,
+- const uint32_t *pixmap_server_handle,
+- DISPMANX_RESOURCE_HANDLE_T next_resource_handle);
++ const uint32_t *pixmap_server_handle);
+ extern EGL_SURFACE_T *egl_surface_from_vg_image(
+ VGImage vg_handle,
+ EGLSurface name,
+Index: git/interface/khronos/egl/egl_int_impl.h
+===================================================================
+--- git.orig/interface/khronos/egl/egl_int_impl.h
++++ git/interface/khronos/egl/egl_int_impl.h
+@@ -57,7 +57,7 @@ FN(int, eglIntCreateSurface_impl, (
+ uint32_t sem,
+ uint32_t type,
+ uint32_t *results,
+- DISPMANX_RESOURCE_HANDLE_T next_resource_handle))
++ DISPMANX_RESOURCE_HANDLE_T resource_handle))
+
+ FN(int, eglIntCreatePbufferFromVGImage_impl, (
+ VGImage vg_handle,
+Index: git/interface/khronos/ext/egl_wayland.c
+===================================================================
+--- /dev/null
++++ git/interface/khronos/ext/egl_wayland.c
+@@ -0,0 +1,246 @@
++/*
++Copyright (c) 2013, Raspberry Pi Foundation
++All rights reserved.
++
++Redistribution and use in source and binary forms, with or without
++modification, are permitted provided that the following conditions are met:
++ * Redistributions of source code must retain the above copyright
++ notice, this list of conditions and the following disclaimer.
++ * 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.
++ * Neither the name of the copyright holder 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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.
++*/
++
++#include "interface/khronos/common/khrn_client_mangle.h"
++#include "interface/khronos/common/khrn_client_rpc.h"
++
++#include "interface/khronos/ext/egl_khr_sync_client.h"
++#include "interface/khronos/include/EGL/egl.h"
++#include "interface/khronos/include/EGL/eglext.h"
++
++#include "interface/vmcs_host/vc_vchi_dispmanx.h"
++
++#include <wayland-server.h>
++#include "interface/khronos/wayland-dispmanx-server-protocol.h"
++
++static void
++destroy_buffer(struct wl_resource *resource)
++{
++ struct wl_dispmanx_server_buffer *buffer = wl_resource_get_user_data(resource);
++
++ if(!buffer->in_use)
++ vc_dispmanx_resource_delete(buffer->handle);
++
++ free(buffer);
++}
++
++static void
++buffer_destroy(struct wl_client *client, struct wl_resource *resource)
++{
++ wl_resource_destroy(resource);
++}
++
++static const struct wl_buffer_interface dispmanx_buffer_interface = {
++ buffer_destroy
++};
++
++static VC_IMAGE_TYPE_T
++get_vc_format(enum wl_dispmanx_format format)
++{
++ /* XXX: The app is likely to have been premultiplying in its shaders,
++ * but the VC scanout hardware on the RPi cannot mix premultiplied alpha
++ * channel with the element's alpha.
++ */
++ switch (format) {
++ case WL_DISPMANX_FORMAT_ABGR8888:
++ return VC_IMAGE_RGBA32;
++ case WL_DISPMANX_FORMAT_XBGR8888:
++ return VC_IMAGE_BGRX8888;
++ case WL_DISPMANX_FORMAT_RGB565:
++ return VC_IMAGE_RGB565;
++ default:
++ /* invalid format */
++ return VC_IMAGE_MIN;
++ }
++}
++
++static void
++dispmanx_create_buffer(struct wl_client *client, struct wl_resource *resource,
++ uint32_t id, int32_t width, int32_t height,
++ uint32_t stride, uint32_t buffer_height, uint32_t format)
++{
++ struct wl_dispmanx_server_buffer *buffer;
++ VC_IMAGE_TYPE_T vc_format = get_vc_format(format);
++ uint32_t dummy;
++
++ if(vc_format == VC_IMAGE_MIN) {
++ wl_resource_post_error(resource,
++ WL_DISPMANX_ERROR_INVALID_FORMAT,
++ "invalid format");
++ return;
++ }
++
++ buffer = calloc(1, sizeof *buffer);
++ if (buffer == NULL) {
++ wl_resource_post_no_memory(resource);
++ return;
++ }
++
++ buffer->handle = vc_dispmanx_resource_create(vc_format,
++ width | (stride << 16),
++ height | (buffer_height << 16),
++ &dummy);
++ if(buffer->handle == DISPMANX_NO_HANDLE) {
++ wl_resource_post_error(resource,
++ WL_DISPMANX_ERROR_ALLOC_FAILED,
++ "allocation failed");
++ free(buffer);
++ return;
++ }
++
++ buffer->width = width;
++ buffer->height = height;
++ buffer->format = format;
++
++ buffer->resource = wl_resource_create(resource->client, &wl_buffer_interface,
++ 1, id);
++ if (!buffer->resource) {
++ wl_resource_post_no_memory(resource);
++ vc_dispmanx_resource_delete(buffer->handle);
++ free(buffer);
++ return;
++ }
++
++ wl_resource_set_implementation(buffer->resource,
++ (void (**)(void)) &dispmanx_buffer_interface,
++ buffer, destroy_buffer);
++
++ wl_dispmanx_send_buffer_allocated(resource, buffer->resource,
++ buffer->handle);
++}
++
++static const struct wl_dispmanx_interface dispmanx_interface = {
++ dispmanx_create_buffer,
++};
++
++static void
++bind_dispmanx(struct wl_client *client, void *data, uint32_t version, uint32_t id)
++{
++ struct wl_resource *resource;
++
++ resource = wl_resource_create(client, &wl_dispmanx_interface, 1, id);
++ wl_resource_set_implementation(resource, &dispmanx_interface, NULL, NULL);
++
++ wl_resource_post_event(resource, WL_DISPMANX_FORMAT,
++ WL_DISPMANX_FORMAT_ARGB8888);
++
++ wl_resource_post_event(resource, WL_DISPMANX_FORMAT,
++ WL_DISPMANX_FORMAT_XRGB8888);
++
++ wl_resource_post_event(resource, WL_DISPMANX_FORMAT,
++ WL_DISPMANX_FORMAT_ABGR8888);
++
++ wl_resource_post_event(resource, WL_DISPMANX_FORMAT,
++ WL_DISPMANX_FORMAT_XBGR8888);
++
++ wl_resource_post_event(resource, WL_DISPMANX_FORMAT,
++ WL_DISPMANX_FORMAT_RGB565);
++}
++
++EGLBoolean EGLAPIENTRY
++eglBindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display)
++{
++ CLIENT_THREAD_STATE_T *thread;
++ CLIENT_PROCESS_STATE_T *process;
++
++ if (!CLIENT_LOCK_AND_GET_STATES(dpy, &thread, &process))
++ return EGL_FALSE;
++
++ if (process->wl_global != NULL)
++ goto error;
++
++ process->wl_global = wl_global_create(display, &wl_dispmanx_interface, 1,
++ NULL, bind_dispmanx);
++ if (process->wl_global == NULL)
++ goto error;
++
++ return EGL_TRUE;
++
++error:
++ CLIENT_UNLOCK();
++ return EGL_FALSE;
++}
++
++EGLBoolean EGLAPIENTRY
++eglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display)
++{
++ CLIENT_THREAD_STATE_T *thread;
++ CLIENT_PROCESS_STATE_T *process;
++
++ if (!CLIENT_LOCK_AND_GET_STATES(dpy, &thread, &process))
++ return EGL_FALSE;
++
++ wl_global_destroy(process->wl_global);
++ process->wl_global = NULL;
++
++ CLIENT_UNLOCK();
++
++ return EGL_TRUE;
++}
++
++static int
++get_egl_format(enum wl_dispmanx_format format)
++{
++ switch (format) {
++ case WL_DISPMANX_FORMAT_ABGR8888:
++ return EGL_TEXTURE_RGBA;
++ case WL_DISPMANX_FORMAT_XBGR8888:
++ return EGL_TEXTURE_RGB;
++ case WL_DISPMANX_FORMAT_RGB565:
++ return EGL_TEXTURE_RGB;
++ default:
++ /* invalid format */
++ return EGL_NO_TEXTURE;
++ }
++}
++
++EGLBoolean EGLAPIENTRY
++eglQueryWaylandBufferWL(EGLDisplay dpy, struct wl_resource *_buffer,
++ EGLint attribute, EGLint *value)
++{
++ struct wl_dispmanx_server_buffer *buffer = wl_resource_get_user_data(_buffer);
++
++ if (wl_resource_instance_of(_buffer, &wl_dispmanx_interface,
++ &dispmanx_buffer_interface))
++ return EGL_FALSE;
++
++ switch (attribute) {
++ case EGL_TEXTURE_FORMAT:
++ *value = get_egl_format(buffer->format);
++ if (*value == EGL_NO_TEXTURE)
++ return EGL_FALSE;
++ return EGL_TRUE;
++ case EGL_WIDTH:
++ *value = buffer->width;
++ return EGL_TRUE;
++ case EGL_HEIGHT:
++ *value = buffer->height;
++ return EGL_TRUE;
++ }
++
++ return EGL_FALSE;
++}
+Index: git/interface/khronos/include/EGL/eglext.h
+===================================================================
+--- git.orig/interface/khronos/include/EGL/eglext.h
++++ git/interface/khronos/include/EGL/eglext.h
+@@ -191,6 +191,29 @@ typedef EGLBoolean (EGLAPIENTRYP PFNEGLG
+ #endif
+
+
++#ifndef EGL_WL_bind_wayland_display
++#define EGL_WL_bind_wayland_display 1
++
++#define EGL_WAYLAND_BUFFER_WL 0x31D5 /* eglCreateImageKHR target */
++#define EGL_WAYLAND_PLANE_WL 0x31D6 /* eglCreateImageKHR target */
++#define EGL_TEXTURE_Y_U_V_WL 0x31D7
++#define EGL_TEXTURE_Y_UV_WL 0x31D8
++#define EGL_TEXTURE_Y_XUXV_WL 0x31D9
++
++struct wl_display;
++struct wl_resource;
++#ifdef EGL_EGLEXT_PROTOTYPES
++EGLAPI EGLBoolean EGLAPIENTRY eglBindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display);
++EGLAPI EGLBoolean EGLAPIENTRY eglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display);
++EGLAPI EGLBoolean EGLAPIENTRY eglQueryWaylandBufferWL(EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value);
++#endif
++typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDWAYLANDDISPLAYWL) (EGLDisplay dpy, struct wl_display *display);
++typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNBINDWAYLANDDISPLAYWL) (EGLDisplay dpy, struct wl_display *display);
++typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWL) (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value);
++
++#endif
++
++
+ #ifdef __cplusplus
+ }
+ #endif
+Index: git/interface/khronos/wayland-egl/wayland-egl-priv.h
+===================================================================
+--- /dev/null
++++ git/interface/khronos/wayland-egl/wayland-egl-priv.h
+@@ -0,0 +1,53 @@
++/* Copied from Mesa */
++
++#ifndef _WAYLAND_EGL_PRIV_H
++#define _WAYLAND_EGL_PRIV_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/* GCC visibility */
++#if defined(__GNUC__) && __GNUC__ >= 4
++#define WL_EGL_EXPORT __attribute__ ((visibility("default")))
++#else
++#define WL_EGL_EXPORT
++#endif
++
++#include "interface/vmcs_host/vc_dispmanx.h"
++#include "interface/khronos/egl/egl_client_surface.h"
++
++#include <wayland-client.h>
++
++struct wl_dispmanx_client_buffer {
++ struct wl_buffer *wl_buffer;
++ DISPMANX_RESOURCE_HANDLE_T resource;
++
++ int pending_allocation;
++ int in_use;
++ int width;
++ int height;
++};
++
++struct wl_egl_window {
++ struct wl_surface *wl_surface;
++
++ int width;
++ int height;
++ int dx;
++ int dy;
++
++ int attached_width;
++ int attached_height;
++
++ /* XXX: The VC side seems to expect a valid element handle to be
++ passed to eglIntCreateSurface_impl and/or eglIntSwapBuffers_impl,
++ even for host-managed surfaces. */
++ DISPMANX_ELEMENT_HANDLE_T dummy_element;
++};
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif
+Index: git/interface/khronos/wayland-egl/wayland-egl.c
+===================================================================
+--- /dev/null
++++ git/interface/khronos/wayland-egl/wayland-egl.c
+@@ -0,0 +1,59 @@
++/* Copied from Mesa */
++
++#include <stdlib.h>
++
++#include <wayland-client.h>
++#include <wayland-egl.h>
++#include "wayland-egl-priv.h"
++
++WL_EGL_EXPORT void
++wl_egl_window_resize(struct wl_egl_window *egl_window,
++ int width, int height,
++ int dx, int dy)
++{
++ if (egl_window->width == width &&
++ egl_window->height == height &&
++ egl_window->dx == dx &&
++ egl_window->dy == dy)
++ return;
++
++ egl_window->width = width;
++ egl_window->height = height;
++ egl_window->dx = dx;
++ egl_window->dy = dy;
++}
++
++WL_EGL_EXPORT struct wl_egl_window *
++wl_egl_window_create(struct wl_surface *surface,
++ int width, int height)
++{
++ struct wl_egl_window *egl_window;
++
++ egl_window = calloc(1, sizeof *egl_window);
++ if (!egl_window)
++ return NULL;
++
++ egl_window->wl_surface = surface;
++ wl_egl_window_resize(egl_window, width, height, 0, 0);
++ egl_window->attached_width = 0;
++ egl_window->attached_height = 0;
++ egl_window->dummy_element = PLATFORM_WIN_NONE;
++
++ return egl_window;
++}
++
++WL_EGL_EXPORT void
++wl_egl_window_destroy(struct wl_egl_window *egl_window)
++{
++ free(egl_window);
++}
++
++WL_EGL_EXPORT void
++wl_egl_window_get_attached_size(struct wl_egl_window *egl_window,
++ int *width, int *height)
++{
++ if (width)
++ *width = egl_window->attached_width;
++ if (height)
++ *height = egl_window->attached_height;
++}
+Index: git/interface/khronos/wayland-egl/wayland-egl.pc.in
+===================================================================
+--- /dev/null
++++ git/interface/khronos/wayland-egl/wayland-egl.pc.in
+@@ -0,0 +1,10 @@
++prefix=@CMAKE_INSTALL_PREFIX@
++exec_prefix=${prefix}
++libdir=${exec_prefix}/lib
++includedir=${prefix}/include
++
++Name: wayland-egl
++Description: VideoCore wayland-egl library
++Version: @PROJECT_APIVER@
++Libs: -L${libdir} -lwayland-egl
++Cflags: -I${includedir}
+Index: git/interface/vmcs_host/CMakeLists.txt
+===================================================================
+--- git.orig/interface/vmcs_host/CMakeLists.txt
++++ git/interface/vmcs_host/CMakeLists.txt
+@@ -9,13 +9,24 @@ add_definitions(-fno-strict-aliasing)
+
+ include_directories(${VMCS_TARGET}/vcfiled)
+
+-add_library(vchostif
+- ${VMCS_TARGET}/vcfilesys.c ${VMCS_TARGET}/vcmisc.c
+- vc_vchi_gencmd.c vc_vchi_filesys.c
+- vc_vchi_tvservice.c vc_vchi_cecservice.c
+- vc_vchi_dispmanx.c vc_service_common.c)
++set(VCHOSTIF_SOURCE
++ ${VMCS_TARGET}/vcfilesys.c ${VMCS_TARGET}/vcmisc.c
++ vc_vchi_gencmd.c vc_vchi_filesys.c
++ vc_vchi_tvservice.c vc_vchi_cecservice.c
++ vc_vchi_dispmanx.c vc_service_common.c)
+ # ${VMCS_TARGET}/vmcs_main.c
+ # vc_vchi_haud.c
++
++if (BUILD_WAYLAND)
++wayland_add_protocol_server(
++ VCHOSTIF_SOURCE
++ ../../interface/wayland/dispmanx.xml
++ dispmanx
++)
++endif ()
++
++add_library(vchostif ${VCHOSTIF_SOURCE})
++
+ #add_library(bufman vc_vchi_bufman.c )
+
+ # OpenMAX/IL component service
+Index: git/interface/vmcs_host/vc_dispmanx.h
+===================================================================
+--- git.orig/interface/vmcs_host/vc_dispmanx.h
++++ git/interface/vmcs_host/vc_dispmanx.h
+@@ -39,6 +39,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
++
++#ifdef BUILD_WAYLAND
++struct wl_resource;
++#endif
++
+ // Same function as above, to aid migration of code.
+ VCHPRE_ int VCHPOST_ vc_dispman_init( void );
+ // Stop the service from being used
+@@ -135,6 +140,11 @@ VCHPRE_ int VCHPOST_ vc_dispmanx_resourc
+ // Start triggering callbacks synced to vsync
+ VCHPRE_ int VCHPOST_ vc_dispmanx_vsync_callback( DISPMANX_DISPLAY_HANDLE_T display, DISPMANX_CALLBACK_FUNC_T cb_func, void *cb_arg );
+
++#ifdef BUILD_WAYLAND
++VCHPRE_ DISPMANX_RESOURCE_HANDLE_T VCHPOST_ vc_dispmanx_get_handle_from_wl_buffer( struct wl_resource *_buffer );
++
++VCHPRE_ void VCHPOST_ vc_dispmanx_set_wl_buffer_in_use( struct wl_resource *_buffer, int in_use );
++#endif
+ #ifdef __cplusplus
+ }
+ #endif
+Index: git/interface/vmcs_host/vc_vchi_dispmanx.c
+===================================================================
+--- git.orig/interface/vmcs_host/vc_vchi_dispmanx.c
++++ git/interface/vmcs_host/vc_vchi_dispmanx.c
+@@ -1308,3 +1308,45 @@ static void *dispmanx_notify_func( void
+ }
+ return 0;
+ }
++
++
++#ifdef BUILD_WAYLAND
++/***********************************************************
++ * Name: vc_dispmanx_get_handle_from_wl_buffer
++ *
++ * Arguments:
++ * struct wl_resource *_buffer
++ *
++ * Description: Return the handle of the resource associated to this Wayland buffer
++ *
++ * Returns: A resource handle
++ *
++ ***********************************************************/
++VCHPRE_ DISPMANX_RESOURCE_HANDLE_T VCHPOST_ vc_dispmanx_get_handle_from_wl_buffer( struct wl_resource *_buffer )
++{
++ struct wl_dispmanx_server_buffer *buffer = (struct wl_dispmanx_server_buffer*)_buffer->data;
++ if (!buffer)
++ return DISPMANX_NO_HANDLE;
++
++ return buffer->handle;
++}
++
++/***********************************************************
++ * Name: vc_dispmanx_set_wl_buffer_in_use
++ *
++ * Arguments:
++ * struct wl_resource *_buffer
++ * int in_use
++ *
++ * Description: Mark this Wayland buffer as being in use by the compositor
++ *
++ ***********************************************************/
++VCHPRE_ void VCHPOST_ vc_dispmanx_set_wl_buffer_in_use( struct wl_resource *_buffer, int in_use )
++{
++ struct wl_dispmanx_server_buffer *buffer = (struct wl_dispmanx_server_buffer*)_buffer->data;
++ if (!buffer)
++ return;
++
++ buffer->in_use = in_use;
++}
++#endif
+Index: git/interface/wayland/dispmanx.xml
+===================================================================
+--- /dev/null
++++ git/interface/wayland/dispmanx.xml
+@@ -0,0 +1,123 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<protocol name="dispmanx">
++
++ <copyright>
++ Copyright © 2008-2011 Kristian Høgsberg
++ Copyright © 2010-2011 Intel Corporation
++ Copyright © 2013 Raspberry Pi Foundation
++
++ Permission to use, copy, modify, distribute, and sell this
++ software and its documentation for any purpose is hereby granted
++ without fee, provided that\n 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>
++
++ <!-- DispManX support. This object is created by the server and published
++ using the display's global event. -->
++ <interface name="wl_dispmanx" version="1">
++ <enum name="error">
++ <entry name="alloc_failed" value="0"/>
++ <entry name="invalid_format" value="1"/>
++ </enum>
++
++ <enum name="format">
++ <!-- The pixel format codes match the #defines in drm_fourcc.h.
++ The formats actually supported by the compositor will be
++ reported by the format event. -->
++ <entry name="c8" value="0x20203843"/>
++ <entry name="rgb332" value="0x38424752"/>
++ <entry name="bgr233" value="0x38524742"/>
++ <entry name="xrgb4444" value="0x32315258"/>
++ <entry name="xbgr4444" value="0x32314258"/>
++ <entry name="rgbx4444" value="0x32315852"/>
++ <entry name="bgrx4444" value="0x32315842"/>
++ <entry name="argb4444" value="0x32315241"/>
++ <entry name="abgr4444" value="0x32314241"/>
++ <entry name="rgba4444" value="0x32314152"/>
++ <entry name="bgra4444" value="0x32314142"/>
++ <entry name="xrgb1555" value="0x35315258"/>
++ <entry name="xbgr1555" value="0x35314258"/>
++ <entry name="rgbx5551" value="0x35315852"/>
++ <entry name="bgrx5551" value="0x35315842"/>
++ <entry name="argb1555" value="0x35315241"/>
++ <entry name="abgr1555" value="0x35314241"/>
++ <entry name="rgba5551" value="0x35314152"/>
++ <entry name="bgra5551" value="0x35314142"/>
++ <entry name="rgb565" value="0x36314752"/>
++ <entry name="bgr565" value="0x36314742"/>
++ <entry name="rgb888" value="0x34324752"/>
++ <entry name="bgr888" value="0x34324742"/>
++ <entry name="xrgb8888" value="0x34325258"/>
++ <entry name="xbgr8888" value="0x34324258"/>
++ <entry name="rgbx8888" value="0x34325852"/>
++ <entry name="bgrx8888" value="0x34325842"/>
++ <entry name="argb8888" value="0x34325241"/>
++ <entry name="abgr8888" value="0x34324241"/>
++ <entry name="rgba8888" value="0x34324152"/>
++ <entry name="bgra8888" value="0x34324142"/>
++ <entry name="xrgb2101010" value="0x30335258"/>
++ <entry name="xbgr2101010" value="0x30334258"/>
++ <entry name="rgbx1010102" value="0x30335852"/>
++ <entry name="bgrx1010102" value="0x30335842"/>
++ <entry name="argb2101010" value="0x30335241"/>
++ <entry name="abgr2101010" value="0x30334241"/>
++ <entry name="rgba1010102" value="0x30334152"/>
++ <entry name="bgra1010102" value="0x30334142"/>
++ <entry name="yuyv" value="0x56595559"/>
++ <entry name="yvyu" value="0x55595659"/>
++ <entry name="uyvy" value="0x59565955"/>
++ <entry name="vyuy" value="0x59555956"/>
++ <entry name="ayuv" value="0x56555941"/>
++ <entry name="nv12" value="0x3231564e"/>
++ <entry name="nv21" value="0x3132564e"/>
++ <entry name="nv16" value="0x3631564e"/>
++ <entry name="nv61" value="0x3136564e"/>
++ <entry name="yuv410" value="0x39565559"/>
++ <entry name="yvu410" value="0x39555659"/>
++ <entry name="yuv411" value="0x31315559"/>
++ <entry name="yvu411" value="0x31315659"/>
++ <entry name="yuv420" value="0x32315559"/>
++ <entry name="yvu420" value="0x32315659"/>
++ <entry name="yuv422" value="0x36315559"/>
++ <entry name="yvu422" value="0x36315659"/>
++ <entry name="yuv444" value="0x34325559"/>
++ <entry name="yvu444" value="0x34325659"/>
++ </enum>
++
++ <event name="format">
++ <arg name="format" type="uint"/>
++ </event>
++
++ <!-- Create a wayland buffer for the DispManX resource. -->
++ <request name="create_buffer">
++ <arg name="id" type="new_id" interface="wl_buffer"/>
++ <arg name="width" type="int"/>
++ <arg name="height" type="int"/>
++ <arg name="stride" type="uint"/>
++ <arg name="buffer_height" type="uint"/>
++ <arg name="format" type="uint"/>
++ </request>
++
++ <event name="buffer_allocated">
++ <arg name="buffer" type="object" interface="wl_buffer"/>
++ <arg name="handle" type="uint"/>
++ </event>
++ </interface>
++
++</protocol>
+Index: git/makefiles/cmake/Wayland.cmake
+===================================================================
+--- /dev/null
++++ git/makefiles/cmake/Wayland.cmake
+@@ -0,0 +1,72 @@
++#=============================================================================
++# Copyright (C) 2012-2013 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
++# All rights reserved.
++#
++# Redistribution and use in source and binary forms, with or without
++# modification, are permitted provided that the following conditions
++# are met:
++#
++# * Redistributions of source code must retain the above copyright
++# notice, this list of conditions and the following disclaimer.
++#
++# * 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.
++#
++# * Neither the name of Pier Luigi Fiorini nor the names of his
++# contributors may be used to endorse or promote products derived
++# from this software without specific prior written permission.
++#
++# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT
++# HOLDER 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.
++#=============================================================================
++
++find_program(WAYLAND_SCANNER_EXECUTABLE NAMES wayland-scanner)
++
++# wayland_add_protocol_client(outfiles inputfile basename)
++function(WAYLAND_ADD_PROTOCOL_CLIENT _sources _protocol _basename)
++ if(NOT WAYLAND_SCANNER_EXECUTABLE)
++ message(FATAL "The wayland-scanner executable has nto been found on your system. You must install it.")
++ endif()
++
++ get_filename_component(_infile ${_protocol} ABSOLUTE)
++ set(_client_header "${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-client-protocol.h")
++ set(_code "${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-protocol.c")
++
++ add_custom_command(OUTPUT "${_client_header}"
++ COMMAND ${WAYLAND_SCANNER_EXECUTABLE} client-header < ${_infile} > ${_client_header}
++ DEPENDS ${_infile} VERBATIM)
++
++ add_custom_command(OUTPUT "${_code}"
++ COMMAND ${WAYLAND_SCANNER_EXECUTABLE} code < ${_infile} > ${_code}
++ DEPENDS ${_infile} VERBATIM)
++
++ list(APPEND ${_sources} "${_client_header}" "${_code}")
++ set(${_sources} ${${_sources}} PARENT_SCOPE)
++endfunction()
++
++# wayland_add_protocol_server(outfiles inputfile basename)
++function(WAYLAND_ADD_PROTOCOL_SERVER _sources _protocol _basename)
++ if(NOT WAYLAND_SCANNER_EXECUTABLE)
++ message(FATAL "The wayland-scanner executable has nto been found on your system. You must install it.")
++ endif()
++
++ get_filename_component(_infile ${_protocol} ABSOLUTE)
++ set(_server_header "${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-server-protocol.h")
++
++ add_custom_command(OUTPUT "${_server_header}"
++ COMMAND ${WAYLAND_SCANNER_EXECUTABLE} server-header < ${_infile} > ${_server_header}
++ DEPENDS ${_infile} VERBATIM)
++
++ list(APPEND ${_sources} "${_server_header}")
++ set(${_sources} ${${_sources}} PARENT_SCOPE)
++endfunction()
diff --git a/recipes-graphics/userland/userland/0006-wayland-Add-Wayland-example.patch b/recipes-graphics/userland/userland/0006-wayland-Add-Wayland-example.patch
new file mode 100644
index 0000000..9191ac6
--- /dev/null
+++ b/recipes-graphics/userland/userland/0006-wayland-Add-Wayland-example.patch
@@ -0,0 +1,864 @@
+From 69289713594a707f0475a6a37d0b34380f0634f3 Mon Sep 17 00:00:00 2001
+From: Tomeu Vizoso <tomeu.vizoso@collabora.com>
+Date: Tue, 1 Oct 2013 13:19:20 +0200
+Subject: [PATCH 3/3] wayland: Add Wayland example
+
+---
+Upstream-Status: Submitted
+
+ .../linux/apps/hello_pi/CMakeLists.txt | 1 +
+ .../apps/hello_pi/hello_wayland/CMakeLists.txt | 8 +
+ .../apps/hello_pi/hello_wayland/Djenne_128_128.raw | 3 +
+ .../apps/hello_pi/hello_wayland/Gaudi_128_128.raw | Bin 0 -> 49152 bytes
+ .../apps/hello_pi/hello_wayland/Lucca_128_128.raw | Bin 0 -> 49152 bytes
+ .../linux/apps/hello_pi/hello_wayland/Makefile | 5 +
+ .../hello_wayland/cube_texture_and_coords.h | 100 ++++
+ .../linux/apps/hello_pi/hello_wayland/triangle.c | 666 +++++++++++++++++++++
+ host_applications/linux/apps/hello_pi/rebuild.sh | 2 +
+ 9 files changed, 785 insertions(+)
+ create mode 100644 host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt
+ create mode 100755 host_applications/linux/apps/hello_pi/hello_wayland/Djenne_128_128.raw
+ create mode 100755 host_applications/linux/apps/hello_pi/hello_wayland/Gaudi_128_128.raw
+ create mode 100755 host_applications/linux/apps/hello_pi/hello_wayland/Lucca_128_128.raw
+ create mode 100755 host_applications/linux/apps/hello_pi/hello_wayland/Makefile
+ create mode 100755 host_applications/linux/apps/hello_pi/hello_wayland/cube_texture_and_coords.h
+ create mode 100755 host_applications/linux/apps/hello_pi/hello_wayland/triangle.c
+
+Index: git/host_applications/linux/apps/hello_pi/CMakeLists.txt
+===================================================================
+--- git.orig/host_applications/linux/apps/hello_pi/CMakeLists.txt
++++ git/host_applications/linux/apps/hello_pi/CMakeLists.txt
+@@ -21,6 +21,7 @@ add_subdirectory(hello_encode)
+ add_subdirectory(hello_jpeg)
+ add_subdirectory(hello_videocube)
+ add_subdirectory(hello_teapot)
++add_subdirectory(hello_wayland)
+
+ if(BUILD_FONT)
+ set(VGFONT_SRCS libs/vgfont/font.c libs/vgfont/vgft.c libs/vgfont/graphics.c)
+Index: git/host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt
+===================================================================
+--- /dev/null
++++ git/host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt
+@@ -0,0 +1,8 @@
++set(EXEC hello_wayland.bin)
++set(SRCS triangle.c)
++
++add_executable(${EXEC} ${SRCS})
++target_link_libraries(${EXEC} ${HELLO_PI_LIBS} -lwayland-client -lwayland-egl)
++
++install(TARGETS ${EXEC}
++ RUNTIME DESTINATION bin)
+Index: git/host_applications/linux/apps/hello_pi/hello_wayland/Djenne_128_128.raw
+===================================================================
+--- /dev/null
++++ git/host_applications/linux/apps/hello_pi/hello_wayland/Djenne_128_128.raw
+@@ -0,0 +1,3 @@
++öÖ¿÷×À÷×ÀøØÁúÚÃúÚÃúÚÃúÚÃùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂûÙÂûÙÂûÙÂûÙÂúØÁúØÁúØÁúØÁøÖ¿ù×Àù×ÀúØÁúØÁúØÁúØÁúØÁù×Àù×Àù×Àù×À÷Õ¾øÖ¿ù×Àù×À÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾öÔ½öÔ½÷Õ¾÷Õ¾÷Õ¾÷Õ¾õÓ¼öÔ½öÔ½õÓ¼ôÒ»ôÒ»ôÒ»ôÒ»õкõкõкõкõкõкõкõкôиõѹôиôиòζóÏ·óÏ·õѹñ͵óÏ·óÏ·ñ͵òζñ͵ñ͵ñ͵ñ͵ñ͵ðÌ´ðÌ´ðÌ´ï˳ï˳ï˳î˱î˱î˱î˱î˱î˱î˱íʰïʰïʰîɯîɯíÈ®ìÇìÇìÇëÆ¬ëÆ¬ëÆ¬êÅ«êÅ«êÅ«ëÆ¬ëÆ¬èééĪéĪèéèéèéèéç¨ùÙÂúÚÃúÚÃûÛÄüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄûÛÄûÛÄûÛÄûÛÄûÛÄûÛÄýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃûÙÂûÙÂûÙÂûÙÂúØÁúØÁúØÁúØÁù×Àù×Àù×Àù×ÀúØÁù×Àù×Àù×ÀøÖ¿øÖ¿øÖ¿øÖ¿øÖ¿øÖ¿øÖ¿÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾øÓ½øÓ½øÓ½øÓ½÷Ò¼÷Ò¼÷Ò¼÷Ò¼öÓº÷Ó»÷Ó»÷Ó»õѹöÒºöÒºöÒºôиõѹõѹôиôиôиôиóÏ·ôиóÏ·óÏ·óÏ·óÏ·òζòζòζñδñδñδñδñδñδðͳðͳòͳñ̲ñ̲ñ̲ð˱ïʰïʰïʰîɯîɯîɯíÈ®îɯíÈ®íÈ®ìÇìÇíÈ®íÈ®ìÇëÆ¬ëÆ¬êÅ«êÅ«ûÛÄûÛÄûÛÄûÛÄüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄûÛÄûÛÄýÛÄýÛÄüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃûÙÂúØÁûÙÂûÙÂûÙÂûÙÂúØÁúØÁúØÁúØÁúØÁúØÁù×Àù×ÀøÖ¿øÖ¿øÖ¿øÖ¿øÖ¿ù×ÀøÖ¿÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾øÓ½øÓ½øÓ½øÓ½÷Ò¼÷Ò¼÷Ò¼÷Ò¼öÓº÷Ó»÷Ó»öÒºöÒºöÒºöÒºöÒºõѹõѹõѹõѹõѹõѹôиôиôиôиôиóÏ·óÏ·óÏ·òζòζñδñδñδñδñδñδðͳðͳòͳñ̲ñ̲ñ̲ð˱ð˱ïʰïʰïʰîɯîɯîɯïʰîɯíÈ®ìÇìÇìÇìÇëÆ¬ìÇëÆ¬ëÆ¬ëÆ¬üÜÅüÜÅüÜÅüÜÅýÝÆýÝÆýÝÆýÝÆüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄûÛÄûÛÄüÚÃýÛÄýÛÄýÛÄüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃûÙÂûÙÂûÙÂûÙÂûÙÂûÙÂûÙÂûÙÂúØÁúØÁúØÁúØÁúØÁúØÁù×Àù×Àù×Àù×Àù×Àù×ÀøÖ¿ù×ÀøÖ¿÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾øÓ½øÓ½øÓ½øÓ½÷Ò¼÷Ò¼÷Ò¼÷Ò¼öÓº÷Ó»÷Ó»öÒº÷Ó»÷Ó»öÒºöÒºõѹôиõѹöÒºõѹõѹôиôиõѹôиôиôиóÏ·óÏ·óÏ·òζòϵòϵòϵòϵñδñδðͳðͳòͳñ̲ñ̲ñ̲ð˱ð˱ð˱ïʰïʰïʰîɯîɯîɯîɯîɯîɯíÈ®îɯîɯíÈ®ìÇìÇëÆ¬ëÆ¬ûÜÅüÝÆýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÛÄûÛÄûÛÄûÛÄüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄûÛÄûÛÄúÚÃûÛÄûÛÄûÛÄýÛÃýÛÃýÛÃýÛÃüÚÂüÚÂüÚÂüÚÂüÚÃüÚÃüÚÃüÚÃûÙÂûÙÂûÙÂûÙÂúØÀúØÀúØÀù׿÷Õ½úØÀúØÀù׿øÖ¿øÖ¿øÖ¿÷Õ¾÷Õ¾ù×Àù×ÀöÔ¾øÔ¼øÔ¼ùÕ½úÖ¾õѹøÔ¼ùÕ½ùÕ½÷Ó»÷Ó»÷Ó»÷Ó»öÒºöÒºöÒºöÒºõѹõѹõѹõѹõѹõѹõѹõѹõѹõѹõѹõѹôиôиóÏ·óÏ·óжòϵòϵòϵñδñδðͳðͳñ̲ñ̲ñ̲ñ̲ñ̲ñ̲ð˱ð˱ð˱ð˱ð˱ïʰïʰîɯîɯîɯïʰîɯîɯîɯìÇìÇìÇëÆ¬ûÜÅüÝÆýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄüÜÅûÛÄýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃýÛÄýÛÄýÛÄýÛÄüÚÃüÚÃüÚÃüÚÃüÚÂüÚÂüÚÂûÙÁúØÀúØÀúØÀù׿ù×Àù×Àù×ÀøÖ¿ù×Àù×Àù×À÷Õ¿úÖ¾úÖ¾û׿û׿øÔ¼ùÕ½ùÕ½øÔ¼ùÕ½ùÕ½ùÕ½ùÕ½øÔ¼øÔ¼øÔ¼øÔ¼÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»õѹõѹõѹõѹõѹôиôиôиóжóжóжòϵóжóжòϵòϵóδóδóδóδòͳñ̲ñ̲ñ̲ñ̲ñ̲ð˱ð˱ð˱ïʰïʰïʰïʰïʰîɯîɯîɯîɯîɯíÈ®üÝÆýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅýÝÆýÝÆýÝÆýÝÆûÛÄüÜÅüÜÅüÜÅþÜÄþÜÄþÜÄþÜÄýÛÃýÛÃýÛÃýÛÃýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄüÚÂüÚÂüÚÂûÙÁüÚÂûÙÁûÙÁúØÀûÙÂûÙÂúØÁúØÁúØÁúØÁù×Àù×Àû׿û׿û׿û׿û׿úÖ¾ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»öÒºöÒºõѹõѹõÒ¸ôÑ·ôÑ·ôÑ·óжóжòϵòϵõжôϵôϵôϵóδóδòͳòͳòͳòͳòͳñ̲ñ̲ñ̲ð˱ð˱ð˱ð˱ð˱ïʰïʰïʰîɯíÈ®üÝÆýÞÇþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆýÝÆýÝÆýÝÆýÝÆüÜÅýÝÆýÝÆüÜÅÿÝÅÿÝÅÿÝÅÿÝÅþÜÄþÜÄþÜÄþÜÄþÜÅþÜÅþÜÅþÜÅýÛÄýÛÄýÛÄýÛÄþÜÄýÛÃýÛÃýÛÃüÚÂûÙÁûÙÁýÛÃüÚÃüÚÃüÚÃûÙÂüÚÃûÙÂúØÁûÙÂýÙÀüØÀüØÀû׿üØÀúÖ¾úÖ¾û׿úÖ¾úÖ¾úÖ¾úÖ¾ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼÷Ó»÷Ó»öÒºöÒºöÓ¹õÒ¸õÒ¸õÒ¸ôÑ·ôÑ·ôÑ·óжõжõжôϵóδôϵôϵóδóδóδóδóδòͳòͳòͳòͳñ̲ñ̲ñ̲ñ̲ð˱ð˱ñ̲ð˱ïʰýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆýÞÇýÞÇýÞÇýÞÇüÝÆýÞÇýÞÇýÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆýÝÆýÝÆýÝÆýÝÆüÜÅüÜÅüÜÅüÜÅûÜÂüÝÄüÝÄûÜÃûÜÃûÜÃûÜÃûÜÃýÜÂýÜÂýÜÂýÜÂýÜÂýÜÂýÜÂýÜÂüÚÂüÚÂüÚÂüÚÂüÚÂüÚÂüÚÂüÚÂúÙ¿úÙ¿úÙ¿úÙ¿úÙ¿úÙ¿úÙ¿ùؾúØÁúØÁúØÁúØÁøÖ¿øÖ¿øÖ¿øÖ¿øÖ¾÷Õ½÷Õ½÷Õ½÷Õ½÷Õ½÷Õ½÷Õ½öÔ¼÷Õ½öÔ¼õÓ»õÓ»õÓ»õÓ»ôÒºóѹôÒºóѹòиóѹòиòиòиôиóÏ·óÏ·óÏ·ôиôиôиôиñÏ·ñÏ·ñÏ·ðζðζðζï͵ï͵ðͳðͳðͳï̲ï̲ï̲î˱î˱þßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÝÆýÝÆýÝÆýÝÆüÜÅüÜÅüÜÅüÜÅûÜÃüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄþÝÃþÝÃþÝÃþÝÃýÜÂýÜÂýÜÂýÜÂýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃüÛÁüÛÁüÛÁüÛÁýÜÂýÜÂüÛÁüÜÁúØÁúØÁúØÁúØÁúØÁúØÁúØÁúØÁúØÀúØÀù׿ù׿øÖ¾øÖ¾øÖ¾øÖ¾÷Õ½øÖ¾÷Õ½öÔ¼øÖ¾÷Õ½÷Õ½öÔ¼öÔ¼öÔ¼õÓ»ôÒºõÓ»õÓ»ôÒºôÒºöÒºõѹõѹõѹóÏ·óÏ·óÏ·óÏ·ñÏ·ñÏ·ðζðζñÏ·ðζðζðζòϵòϵòϵñδñδñδðͳðͳþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈÿàÉþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆþÞÇþÞÇþÞÇþÞÇýÝÆýÝÆýÝÆýÝÆüÝÄýÞÅýÞÅüÝÄýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅüÝÄüÝÄüÝÄüÝÄûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃúÚÃúÚÃúÚÃúÚÃùÙÂùÙÂùÙÂùÙÂøÚÀøÙÀøÙÀøÙÀ÷Ø¿÷Ø¿÷Ø¿÷Ø¿ù׿ù׿øÖ¾øÖ¾øÖ¾øÖ¾÷Õ½÷Õ½÷Õ½÷Õ½öÔ¼õÓ»õÓ»õÓ»õÓ»õÓ»öÒºöÒºõѹõѹôиôиôиôиòиòиñÏ·ñÏ·òиòиñÏ·ñÏ·òϵòϵòϵñδñδñδðͳðͳüàÈüàÈüàÈüàÈýáÉýáÉýáÉýáÉüàÈüàÈüàÈüàÈüàÈýáÉýáÉýáÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇÿßÈÿßÈÿßÈÿßÈþÞÇþÞÇþÞÇþÞÇýÞÅýÞÅþ߯ýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄûÜÃûÜÃüÝÄüÝÄûÛÄûÛÄûÛÄûÛÄúÚÃúÚÃúÚÃúÚÃúÛÂúÛÂúÛÂùÚÁùÚÁùÚÁùÚÁùÚÁúØÀúØÀúØÀù׿úØÀù׿ù׿ù׿ù׿ù׿øÖ¾÷Õ½÷Õ½÷Õ½öÔ¼öÔ¼öÔ¼õÓ»õÓ»õÓ»ôÒºôÒºôÒºôÒºôÒºôÒºóѹóѹóѹóѹòиòиòÑ·ñжñжñжðϵðϵðϵïδüàÈüàÈýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄýÞÅýÞÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅýÜÆùÚÁùÚÁùÚÁùÚÁùÚÁùÚÁùÚÁùÚÁùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂ÷Ø¿÷Ø¿÷Ø¿÷Ø¿ö×¾ö×¾ö×¾õÖ½øÖ¾÷Õ½÷Õ½÷Õ½öÔ¼öÔ¼öÔ¼÷Ô¼òÓºòÓºòÓºòÓºòÓºòÓºñÒ¹ñÒ¹òиòиñÏ·ñÏ·ñÏ·ñÏ·ñÏ·ðζüàÈýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇþßÈþßÈýÞÇþßÈþßÈþßÈþßÈÿàÉÿàÉÿàÉÿàÉýÞÇýÞÇýÞÇýÞÇýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅüÝÄýÞÅýÞÅýÞÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÝÄüÝÄüÝÄüÝÄûÜÃûÜÃûÜÃûÜÃûÛÄûÛÄûÛÄûÛÄúÚÃúÚÃúÚÃúÚÃùÚÁùÚÁøÙÀøÙÀùÚÁøÙÀøÙÀøÙÀù׿øÖ¾øÖ¾øÖ¾÷Õ½÷Õ½÷Õ½öÔ¼ôÕ¼ôÕ¼ôÕ¼ôÕ¼óÔ»óÔ»óÔ»òÓºôÒºóѹóѹóѹòиòиñÏ·ñÏ·ûáÉûáÉûáÉüâÊûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉýÞÇþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇý߯ý߯ý߯ý߯üÞÅüÞÅüÞÅüÞÅüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄûÛÄûÛÄûÜÃúÛÂúÛÂúÛÂùÚÁùÚÁøÙÀøÙÀúØÀúØÀù׿ù׿ù׿ù׿øÖ¾øÖ¾ö×¾ö×¾ö×¾õÖ½õÖ½õÖ½ôÕ¼ôÕ¼õÓ»õÓ»ôÒºôÒºóѹóѹóѹòиûáÉûáÉüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉþßÈÿàÉÿàÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈý߯ý߯ý߯ý߯üÞÅüÞÅüÞÅüÞÅüÝÆüÝÆüÝÆüÝÆýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅûÜÃúÛÂúÛÂúÛÂûÜÃúÛÂúÛÂúÛÂúÛÂùÚÁùÚÁùÚÁøÙÀøÙÀøÙÀ÷Ø¿÷Ø¿÷Ø¿ö×¾õÖ½õÖ½õÖ½ôÕ¼ôÕ¼óÔ»óÔ»óÔ»òÓºòÓºòÓºòÓºñÒ¹ùâÈùâÈùáÉùáÉüáÌüáÌüáÍüáÍûáÉûáÉûáÉûáÉüâÊüâÊüâÊüâÊüâÊüâÊüâÊþâÊýáÉýáÉýáÉÿàÉýãÈýâÈýâÈýâÈýâÈýâÈýâÈýâÈÿáÈÿáÈÿáÈÿáÈÿáÈÿáÈÿáÈÿáÈþáÀúàÆøÞÊþÞÇÿãÄÿâÃûÝÃöÚÆúÞÅÿãÈúÝÂ÷äÊùÝÎÿÛÎÿÞÈñåÃÿÞÉÿßÈÿßÈÿßÈþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇýÝÆýÝÆýÝÆýÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÅøÙÂ÷ØÁ÷ØÁ÷ØÁ÷Ø¿÷Ø¿÷Ø¿ö×¾õÖ½ö×¾õÖ½ôÕ¼ôÕ¼ôÕ¼ôÕ¼óÔ»óÔ»óÔ»òÓºòÓºùãÊúâÊúâÊúâÌüáÌüáÌüáÍüáÍüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿâÄýâÈûàÌÿàÉÿÞÅÿæÈúÜÃöàÍþéÖÿãÉûÝÁùæÊúßËÿÛÎÿÞÈõäÃÿÞÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄøÙÂøÙÂ÷ØÁ÷ØÁøÙÀøÙÀ÷Ø¿÷Ø¿ö×¾ö×¾õÖ½õÖ½õÖ½ôÕ¼ôÕ¼ôÕ¼óÔ»óÔ»óÔ»óÔ»úäËúäËûãÍûãÍûãÍýâÍýâÎýâÎýãËýãËýãËýãËüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉþâÃùàÈúßÊþßÈþàÆÿãÇ÷ßÌìÜÑóãÒÿãÏÿáÅøâÈûàÍÿÞÌÿàÉöäÇÿàÉÿàÉÿàÉÿàÉþßÈþßÈþßÈþßÈÿàÉÿàÉÿàÉÿàÉýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄúÛÄùÚÃùÚÃøÙÂøÙÂùÚÁøÙÀøÙÀøÙÀ÷Ø¿ö×¾ö×¾ö×¾ö×¾õÖ½õÖ½õÖ½ôÕ¼ôÕ¼ôÕ¼óÔ»úãÍúãÍúãÍûãÍüäÎüäÎþãÏþãÏûãÍûãÍûãÍûãÍûãÍûãÍûãÍûãÍûãÍûãÍýâÍýâÍüáÌþáÌþáÌþáÌþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊýâÇûáÉûàÌÿàÉÿåÉøÝÅúíÞnhcòëÞøÜËÿäÊøàÅúßËÿÞÌÿßËøäÆÿàÉÿàÉÿàÉÿàÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄùÚÃùÚÃùÚÃùÚÁùÚÁùÚÁøÙÀøÙÀö×¾ö×¾÷Ø¿ö×¾ö×¾õÖ½õÖ½õÖ½õÖ½ôÕ¼ôÕ¼úâÎúâÎúâÎúâÎúáÍüãÏüäÎûãÍüäÎüäÎüäÎüäÎûãÍûãÍûãÍûãÍûãÍûãÍûãÍýâÍýâÍýâÍýâÍÿâÍüâÊüâÊüâÊüâÊûáÉüâÊýãËûâÊýáÉýáÉþâÊÿãËþâÊþâÊþâÊþâÊþâÊüáÍüáÌÿãÉýàÄñÝÇÚÖÌ]egòÛÌÿÜÄÿæÊøáÉÿàËÿßËúâÈÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇþßÈþßÈýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄùÚÃùÚÃùÚÁùÚÁøÙÀøÙÀøÙÀøÙÀ÷Ø¿÷Ø¿ö×¾ö×¾õÖ½õÖ½ôÕ¼ôÕ¼ôÕ¼ôÕ¼üæÔûåÓüäÐúâÎûãÏüãÏýåÏüäÎüäÎüäÎüäÎüäÎûãÍûãÍûãÍûãÍûãÍûãÍûãÍûãÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍþãÎþãÎýâÍþáÌþáÌþáÌþáÌþáÌþáÌþáÌþáÌûáÌüáÌüáÌÿâÉùàÅôæÓ¬«UdlYheÿìáÿäÐþáÅùäÉþáÍÿàÌþâÊýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉþâÊþâÊþâÊþâÊýáÉýáÉýáÉýáÉüàÈüàÈüàÈüàÈüàÈüàÈüàÈûàÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄùÚÃúÛÂúÛÂúÛÂùÚÁøÙÀøÙÀøÙÀøÙÀ÷Ø¿ö×¾ö×¾ö×¾ö×¾õÖ½õÖ½ôÕ¼ùãÑùãÑùãÑûãÏûãÏûãÏûãÍûãÍüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏûãÏûãÏüãÏüãÏüãÏþãÏþãÏþãÏýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍüáÌüáÌüáÌüáÌüáÌüáÌüáÌüáÌüâÊþãÉÿèÍîâÐ@Vg:PMÿõîÿÞÉÿäÆùåÈüáÍÿáÌÿáÍýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉüàÈüàÈüàÈüàÈýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉÿàÉÿàÉÿàÉÿàÉÿàÉþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄûÜÃûÜÃúÛÂúÛÂùÚÁùÚÁùÚÁøÙÀ÷Ø¿÷Ø¿÷Ø¿ö×¾øÙÀ÷Ø¿ö×¾õÖ½þç×þç×þèÖÿçÖÿçÓýåÑûäÎýåÏüäÐüäÐüäÐüäÐûãÏûãÏûãÏûãÏûãÏûãÏüãÏüãÏüãÏþãÏþãÏþãÏýâÍýâÍýâÍýâÍþãÎýâÍýâÍþãÎüáÌýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÎýâÎýãËÿäÉøàÆäÚÉlyzB[n>VWIJ¬ÿÞÉÿ寸äÈùâÊÿßÎÿáÌþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉþáÉýáÉýáÉýáÉþßÈþßÈþßÈþßÈþßÈþßÈÿàÉÿàÉþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÂúÛÂúÛÂúÛÂúÛÂúÛÂùÚÁùÚÁøÙÀøÙÀ÷Ø¿÷Ø¿ö×¾ö×¾ö×¾ö×¾úêÒýëÚþëÜùçÖõåÎøçÏûåÓüá×øãÎùäÏùåÐùåÏüäÐüäÐüäÐüäÐüäÎüäÎýåÏýåÏüäÎüäÎüäÎüäÎüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüåÎüäÎüäÎüäÎûãÍûãÍûãÍúãÍÿáÈõâÎöâÍÿåÃÿèÏA;=?LWI]`AU[ôãÛúÝÍÿãÈüãÉûâÉþßÎýãÇýâÈýâÈýâÈýãÈþãÉÿäÊÿäÊþãÉþãÉþãÉþãÉýâÈýâÈýâÈýâÇøßËïæÉÿàÂÿäËÙáÈøãÒÿØÉðèÈýàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈûßÇûßÇûßÇûßÇûßÇûßÇûßÇúßÇýÞÇýÞÇýÞÇýÞÇûÜÅüÝÆýÞÇýÞÇüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄùÚÃùÚÃùÚÃùÚÃùÚÃøÙÂùÙÂøØÁøØÁøØÁ÷×À÷×À÷×ÀöÖ¿ùéÙ÷ç×ö娸è×øêÔûêÕýéØýçÛÿñÛÿîÙÿëÖýèÓûãÏûãÏûãÏûãÏüäÎüäÎüäÎüäÎüäÎüäÎüäÎüäÎýäÐýäÐýäÐýäÐüãÏüãÏüãÏüãÏüäÎüäÎüäÎüäÎûãÍûãÍûãÍûãÍÿäÈ÷ãÏ÷ãÍÿæÆüåÏÉÇÅGV`=QV@TY.23D2+óØÆÿãËüãÉüâÊþßÎÿãËÿãËÿãËÿãËÿãËÿãËþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþßÈõçËþÛÄüâÑÝç×îÚÏÿßÌõåÄüßÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈûßÇûßÇûßÇûßÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄùÚÃúÛÄùÚÃùÚÃùÚÃøÙÂøÙÂ÷ØÁ÷ØÁ÷ØÁ÷ØÁö×Àö×Àúîâùîâùíß÷ëÙøêØúêÙùéÚøèÛúåÏùäÏùäÏúåÐüäÐüäÐüäÐüäÐýåÏýåÏüäÎüäÎüäÎüäÎüäÎüäÎüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüäÎüäÎüäÎüäÎüäÎüäÎüäÎüäÎÿäÈúâÑúâÎÿäÈ𶸻_pzGV]@T\MRS¡÷ÞËýâÊüäÉüáÍüáÎüâÉüâÊüâÊûâÊýãËýãËüâÊûáÉþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊÿáÅùáÈýâÒêÝÙhwvñäàÿÝÌùãÁýáÊýáÉýáÉýáÉýáÉýáÉýáÉýáÉüàÈüàÈüàÈüàÈûßÇûßÇûßÇûßÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆýÞÇüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄúÛÄúÛÄùÚÃùÚÃùÚÃùÚÃøÙÂøÙÂøÙÂ÷ØÁ÷ØÁ÷ØÁõíéùðæúòáýñßÿðàþîáûëßùêÚüçÒúåÐùäÏûæÑÿèÔÿèÔÿèÔÿèÔÿçÑÿçÑþæÐýåÏýåÏýåÏýåÏýåÏüãÏüãÏüãÏüãÏýäÐýäÐýäÐýäÐüäÎüäÎüäÎüäÎüäÎüäÎüäÎüäÎÿåÈùâÑûáÑÿåÉìßÍ\m|M[d:T\LSVÿñëöÝÍüäÊûãËûãÍýâÎýãËýãËýãËýãËüâÊüâÊýãËýãËþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâËÿãÅÿàÊöâÚ¦¯³Viu¯©¯ýÞÐþå¿ýáÊýáÉýáÉýáÉýáÉýáÉýáÉýáÉüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈúßÇûßÇûßÇûßÇûßÇûßÇúÞÆúÞÆúÞÆúÞÆúÞÆúÞÆùÝÅùÝÅøÜÄøÜÄøÜÄøÜÄøÜÄ÷ÛÃúÛÄùÚÃùÚÃùÚÃøÙÂøÙÂøÙÂ÷ØÁõìïôìåøñÞùîÚøéÙúèÞùêÝøê×þèÓÿëÖÿì×þéÔýäÐýåÑýåÑýåÑûãÐüäÐüäÐüäÐüäÐüäÐüäÐüäÐýäÐýäÐýäÐýäÐüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÐõâÄûäÓþãÕþáË¢ /5G\nJS_<ZgFOWËÁ½º¤ÿîØûæÌüäÎúâÎýãËýãËýãËýãËýãËýãËýãËýãËüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâËýãÂûÙÅóæâ¥K`tSS_üêàÿåÅúáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉúáÉüâÊûáÉùßÇúàÈúàÈúàÈúàÈûßÇûßÇûßÇûßÇûßÇûßÇûßÇûßÇúÞÆúÞÆúÞÆúÞÆùÝÅùÝÅùÝÅùÝÅùÝÅùÝÅùÝÅùÝÅøÜÄøÜÄøÜÄøÜÄúÛÄúÛÄúÛÄúÛÄùÚÃùÚÃøÙÂøÙÂÑÆÑöìåøí×ùëÔüæ×úãÜ÷äÕõèÐúåÐûæÑûæÑúåÐýåÑýåÑýåÑýåÑüäÐüäÐüäÐüäÐüäÐüäÐüäÐüäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐüãÏüãÏüãÏüãÐùåÇøàÏÿáÕõçÑÓÎÁv1EYPVd;ZiGQYogcÿîáùàÌûåËûäÎüãÏûãÍûãÍûãÍûãÍûãÍûãÍûãÍûãÎýâÍýâÍýâÍýâÍüáÌüáÌüáÌýáÎõãÅÿÚÍßÖÓ|¥?RePUbâáØúàÇûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉúàÈúàÈúàÈúàÈúàÈüàÈüàÈüàÈüàÈûßÇûßÇûßÇûßÇúÞÆúÞÆúÞÆúÞÆúÞÆúÞÆúÞÆúÞÆùÝÅùÝÅùÝÅùÝÅøÜÄøÜÄøÜÄøÜÄøÜÄøÜÄøÜÄøÜÄ÷ÛÃ÷ÛÃ÷ÛÃöÚÂ|éÝ×óèÌýìÐþãÖýàÚúãÒùéËûæÑûæÑüçÒûæÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑþåÑþåÑþåÑþåÑýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐüãÏüãÏüãÏýãÐøéÇþåÕ÷ÕÉÿíÞÌÍÃ|@ZnKM\=_nJU`C<;ÿÿòùäÎøäÎüäÎüãÏüäÎüäÎüäÎüäÎüäÎüäÎüäÎüäÎýâÍýâÍýâÍýâÍüáÌüáÌüáÌþáÌéàÊÿßÓ³§\x129=APbTYf£êÔÃýâÊüâÊüâÊüâÊûáÉûáÉûáÉûáÉüâÊûáÉûáÉûáÉûáÉûáÉûáÉûáÉúàÈúàÈúàÈúàÈùßÇùßÇùßÇùßÇùßÇùßÇùßÇùßÇøÞÆøÞÆøÞÆøÞÆ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅøÜÄøÜÄøÜÄøÜÄøÜÄøÜÄ÷ÛÃ÷ÛÃjWiïàÚøêÍÿîÑÿäÕÿâÜÿæ×üêÊûæÒûæÑûæÑûæÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑþåÑþåÑþåÑþåÑýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐþäÐ÷êÆþãÕþØÐÿçÕÏÑÆw¡]v`bsChx[irúæÚûåÍúäÎúåÏýäÑüäÎüäÎüäÎüäÎüäÎüäÎüäÎüäÎýâÍýâÍýâÍýâÍýâÍýâÍýâÍÿâÍêèÒ纲¾¹³b;JXZbn°Á»îßÏýâÉüâÊüâÊüâÊüâÊüâÊüâÊüâÊýâÊûáÉûáÉüâÊûáÉûáÉûáÉûáÉúàÈúàÈúàÈúàÈúàÈúàÈúàÈúàÈùßÇùßÇùßÇùßÇøÞÆøÞÆøÞÆøÞÆøÞÆøÞÆøÞÆøÞÆ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅùÝÅùÝÅùÝÅùÝÅùÝÅøÜÄøÜÄøÜÄCHVèÚÔÿæÔ÷ãÓöåÔýçÎýçÍôä×öæÑöæÑöæÑùæÑ÷åÐøæÑûæÑüçÒýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýæÐýæÐýæÐýæÐüåÏýæÐýæÐÿçÑòêÌþêÈûçÎóäÚøáÒÿäÆüàËóèãÐãÚÌßÚ¼ÕÕ®ËÔª¼±Äµ\x7f³k
;W^Nir/GQ¤¶»ÒÙÖîíßçßÍùåÊûåÌûåËûäÎûãÏüãÏüãÏüáÓüéÅüåËúæËûãÐùâÎûâÎûãÍþãÊóáÊïçࡹÃjUT_MZ[xôÜÜúãÌúâÌùáÎüáÍüáÍüáÎúâÌúâÍøãÊùãÊúâÊúâÊûáÉûáÉþáÉþáÉùáÌùáËùáËùáÌøàÊøàÊøàÊøàË÷àÆ÷àÆ÷àÆ÷àÆõßÅ÷àÆ÷àÆøáÇößÅößÅößÅößÅößÅößÅößÅößÅ÷ÞÄ÷ÞÄ÷ÞÄ÷ÞÄõÜÂ÷ÞÄöÝÃõÜÂJM[÷éãýåÑ÷ãÒ÷åÔýæÐýçÎõåÕúæÑúæÑùæÑùæÑýçÒüçÒûæÑûæÑûæÑûæÑûæÑûæÑûæÑûæÑûæÑûæÑûæÐûæÐûæÐûæÐüçÑüçÑúæÐûæÐöæÔÿæÍÿåÒöäØúæÕúãÉäÛË¥¦¤±£°¢´}©¥¶y©z©x§\mx<R^8M]K\iJVaV[^onjîéåþèÌúæÍýåÐüåÏüäÐýäÐýäÐýãÓüåÊüäÌûäÎüãÏýäÐýäÑÿåÌÿäÍÿèËüçÞm"?PSXiN^`F]YåÎÌúäÉûãÎþâÍþãÍüáÌüáÌúâÌúâÌùãÊùãÊúâÊúâÊûáÉûáÉûáÉþáÉùáËùáËùáËùáËøàÊøàÊøàÊøàÊøàÈøàÈøàÈøàÈ÷ßÈ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇöÞÆöÞÆöÞÆöÞÆ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÆ÷ÝÅ÷ÝÅNQ_öéãþéÕüè×øæÕþçÑþèÏöæÖúçÒúçÒüçÒüçÒýèÓþæÒþæÒýåÑüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒýèÓüçÒüçÒûæÑöáÝÿäÓÿäÑûäÖôãÒöêÔ´¾´v¥¿·{°{µs¨\x7f¡°~¡]R_q>M_BSg=L`KXhFO]OU]»ÁÉþåÌúåÏùåÏüåÏüäÐüäÐýäÐýäÐûäÎûäÎýãÏüãÏþãÏþãÎÿäÌÿåËþéÄઽÃs§KRhL]h#>:ÿôôûçÌûåÌüäËÿãÏüáÌýáÌúâÌùáÎùãÊùãÊúâÊúâÊùâÊüâÊüâÊüâÊùáËùáËùáËùáËùáËùáËùáËùáÌøàÈøàÈøàÈøàÈøàÈøàÈ÷ßÇöÞÆöÞÆöÞÆöÞÆöÞÆ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅöÜÄöÜÄ÷ÜÄJM[çÙÓÿñÝøäÓøæÕþçÑþèÏöæÖýæÔýæÔüæÔüæÔþæÔþæÔþæÔÿçÖüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒþèÓôäÝÿæÑÿèÎÿæÒþêÕøêÓ ¨¥v«}µy¯x®|°s¥¡²
£^\x7f^gv@Q]>N^<L^<M]TaoMZdþäËúåÐúåÐùåÐüäÐüäÐüäÐüäÐúäÓùäÒüäÒýäÐÿäÐÿäÏÿäÐÿäÍÿóÌýÛ̼Äm¤gn`w.OJðæåôâÌõäÌúãÎýãÊýãÊýâÍûãÍúâÎûãÍûãÍûãÍûãÍúâÌúâÌúâÌúâÌúâÌúâÌúâÌúâÌùáËùáËùáËùáËøàÈøàÈøàÈøàÈ÷ßÇøàÈøàÈùáÉ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇöÞÆöÞÆöÞÆöÞÆöÞÆôÝÅõÞÆ÷ßÇ,/=ztnZþíÜøæÕþçÑþèÏöæÖöâÐôàÎÿìÚýèÖüæÔþæÔþæÔþæÔüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒýçÒéåÔÿìÑÿèËÿçÒúãÌþèÒª§¤q¦®§µ^wm^s
CXkCZj|£Obf<MVBV\BU\@TZGXaCW]rÿçÒ÷äÒ÷ãÍýèÓúæÑþåÑýåÑþåÑ÷äÒüæÔþæÔýäÐýâÎùàÌûåÑüèÔÿåÇóßÕm:Zt©Mfs.QRQINÓ̺ßÔÃòãÍ÷àÊþãËþâÍúãÍ÷ãÎûãÍûãÍûãÍûãÍúãÍúãÍùâÌùâÌùâÌùâÌùâÌùâÌøáËøáËøáËøáËøâÉøâÉøâÉøãÉöàÇöàÇöàÇöàÇ÷áÈ÷áÈ÷áÈ÷áÈöàÇöàÇ÷áÈ÷âÈ÷ßÇ÷ßÇöÞÆöÞÆõÝÅõÝÅöÞÆöÞÆ?BPùëåûàÌïÚÉøæÕþçÑþèÏöæÖöåÒÿðÝñÝËþé×úæÔüæÔüæÔüæÔúçÒúçÒúçÒúçÒúçÒúçÒúçÒúçÒúæÕúæÔúæÔúæÔúæÔúæÔúæÔúæÔïéÔúéÍÿëÏøç×ôßÑùéØ
°Yxy\b%*=Q\-?M<N_yYj{CTfTglATZAT[AT[@RY!59@PUuÿèÓýíÚôßÍýêÙüçÑúæÑýåÑþåÑøåÓûåÓýåÐþåÑüäÏùåÓ÷è×íàÑðéÜ®¦¨ªÈÖPp
£§ÀK`k*PS|}¢¤MJ@ýðáúèÒûãÎûãÊüãÍúâÏûãÍûãÍûãÍúäÍùâÌûãÍøãÍòÞÈùâÌùâÌùâÌùâÌøáËøáËøáËøáËøáËøáËøáËøáË÷àË÷àË÷àË÷àË÷àÊ÷àÊ÷àÊ÷àÊößÊößÊ÷àÊ÷àÊ÷ßÊ÷ßÉ÷ßÉöÞÉöÞÈöÞÈöÞÈöÞÈDGUóåßüãÏþêÙøæÕþçÑþèÏöæÖùë×ôåÒ÷èÕìÛÈ÷æÓ÷çÔúæÔúæÔúçÒúçÒúçÒúçÒúçÒúçÒúçÒúçÒúæÔúæÔúæÔúæÔúæÔúæÔúæÔúæÔûêÔÿéÏôâÓëáàïìëäáÝ u²
¬¦¾Ï²Ä©½Ï¶ÅÙj~JapeoVlxF\cGW`2@J6CK-6A\v\x17$ìôßÏÿîÝ÷ãÑûåÔûæÑúæÑþåÑùçÑûæÑýæÐýåÑýçÕðàÐòêÞåÝаÅʯ¸È³Çx¬wyRhlCkm¨O\]Z`\ÈĺñâÑüäÎüäÌüäÎûäÎüãÏüãÏüãÏûãÐûâÏûæÒöàÌñÜÇúãÍùâÌùâÌùâÌùâÌùâÌùâÌùâÌøáËøáËøáËøáËøáËøáËøáËøáËøáËøáËøáËøáË÷àÊ÷àÊ÷àÊ÷àÊøàÊ÷ßÉ÷ßÉ÷ßÉ÷ßÉöÞÈöÞÈõÝÇGIWóãÝþåÐÿìÛùçÖÿèÒÿéÐ÷ç×÷é×÷èÕÑ¿ÿóà÷çÖøæÕ÷æÖ÷æÕúçÓûçÑüèÑúçÒúçÓúçÒúçÒúçÒûæÕûæÔûæÔúæÔúæÕúæÔúæÔúæÕÿäÕÿâÒûèãÒÐÙ¥°¡«m¢¼z°º±~¬7R_3T[6]]<RiAYjBTe>N\<GS\x0e\x14">BPEJ]ÿÿÿóßÍýéØùåÒüæÔüçÒüçÒüçÒûçÒûæÏýæÐÿèÑôåÑöéÚðëঠ¨¼¤¹y¢ºSu
qm|]pt:dfNU`^mvZcdÅûæÙÉúåÎþåËýäÌúäÎüãÏüãÏüãÏûâÏûçÒñÜÇüèÒéÕ¿ýäÍûãÍúãÍúãÍùâÌùâÌùâÌùâÌùâÌùâÌùâÌúâÌøáËøáËøáËøàËøáËøáËøáËøáËøáËøàÊ÷àÊ÷àÊ÷àÊ÷àÊößÉößÉößÉößÉõÞÈôÝÇ?TXÃÎÍçåÝùë×ÿèÑüèÓõç×ñè×çÞ˽ÇÄZp~XdrîßÞþàÑÿßËÿíÝúë¼êãâäâí÷èÔÿæÇüàÒúäÚýìËîêÍêè×ïêÖÿíÏýçÈùèÓùêÑûéÁûæÉÿéØèçän{¢µ¶¶ªu¡sx¡ne|7N]>R^=Q_8MR@U\@V]@S[9MU\x1a/6;MV<NWwØãåïæåûãÙÿæÑÿçÎÿæÒÿã×èäÝôåÖ÷äÖöä×þçÐÿëÊïèÞ{¬
¨Á¬Á®Â]j~CTdYhwSak<NXSkd^fuµº´áåÐÒÎÚåÚÚòçÅÿäÒöãÑöãÒøäÏýäÌþåÉõæÑàÞÚU`kÙÞØäàÏûæÐýäËûáÍ÷áÐ÷âÎ÷åÈõãÌõãÌõãÌõäÌóâËõãÌõãÌöåÎõàÊöáË÷âÌ÷âÌöáËöáËöáËöáË÷àÊ÷àÊ÷àÊ÷àÊößÉøàÊ÷àÊöÞÈBTZJSWöóëôãÓÿçÓÿèÒùèÓöèÖóêÜPdlEU^ïêéÿîÝüéÔöêÓó鯼º¸\\cöìÞýèÎüâÓ÷åØýîÒÚÙÍÛØÖìãÚüãÏþëÕîâÕêâÖüðÞÿòÕíÚÊåãর
¨¹µ©¬w¡k|£f}Thw>U`@Vc:P\AT[@SZ@RZEX`?OYGXaBS\DT^9WRHX[ÿñéýçÑÿèÎùçÒõæ×òæÖûçÑýçÑøæÖùãÍÿéËâàÔ§¸
©½o¢°Åh|DTdfvDU^9ITIa[HQb¢¨£ÚàÑF>HôéèöêÊÿäÔøäÒøäÒ÷åÐüæÍüèËõåÐÆÂ¼fpz¼À·ïéÛìÚÅþäËûâÎøâÐõãÎøäËöäÍöäÍöäÍöäÍõãÌõãÌõãÌõãÌ÷âÌ÷âÌöáËöáËöáËöáËöáËöáËõàÊõàÊõàÊõàÊõàÊõáËöáËõàÊ9JX<FMuppíßÓýçÕÿèÒþèÒùéÑåãÜpz~>T\@S[åßÒïêÖèæÍæéÔ}U\iòçÑøäÓöåÙíçÓ\x7fZ]höïñüåÕüæ×îéé²¶¹ÓÕÖñäÍöêßÍÎФ«¦¹}¦o\x7fux£u| aue|8KV@S_F[bFV_>OXIZcFW`GU^GV_ET]ES\7Y^G[c@FJÿüõõçÕõêÎõèÒïèÖøæÐÿçÌþçÍôäÔöéÖõåÑÐÎǨ¸~´{¸ÉLdt=P]_q|?RY;NWCZYWarÒÝÏ_^lÏËÍõêÐýäÕ÷äÒøäÒ÷åÐüæÌþéÏîáͧ¨¦UblûöêýíØüèÒúáÍöâÐöãÎøäÊöãÎöãÎöãÎöãÎöãÎöãÎõâÍõâÍøãÍ÷âÌ÷áËöáËöáËöáËöáËöáËöáËöáËöáËöáËõàÊôßÉôßÉõàÊ4DTGQ[IHMòçä÷æÙûçÕûèÓúéÒÂÌÎ`ruBZbAT\]adîåÝðâÑöëÔÀÔËdpxKXeZcgöñæùåÓñå×ÑÒÄlzO[k§¥©ùèÙóâѧ¬®XjvAS\ìèÛêãߥ©§µ\x7f¯^o
1C!<K[n\x19-=;O`6KZ*<I@T_>SZ1FN\x1e-:\x19)5=JW!.;1?LJUaFR^NXd:XbBUaBDMðèæôçÖöëÒöêÑóè×õçÕÿêÍûèÐêæÜëèåÙÚÓÅÎЯƼ̨¹\x7f©Lcr9P[OdoI\c<OX\x17.-'2IQ`]²Â¹LReÅÅÊêåËÿâÖûæÏøäÓøåÐúäÏñÞÆéÞ˼½¼QapRYZÞнúäÎùäÎôãÐôãÑöåÍ÷ãÎöãÎ÷ãÎ÷ãÎ÷ãÎöãÎõâÍõâÍõãÌõãÌõãÌöåÍõãÌõãÌõãÌõäÌöáËöáËöáËöáËöáÊôßÉôßÉõàÊ\x1e.?\x19%347?æáãèÝÚøìàòè×íäϤSls:RX<LVFFNüìîüãÛÿêÙ°³Tdl>KZCU^çëåöäÒóéÛTjx>R__egÿøæãßÏ~D`lA^eglfäå硯¾ ²¥·kzx¡Tj|y ¦BWfG^i?R]@U\9NV0?L7GS0>J#1=6DP\x17#/\x19%1"-9"6F2<K74?ÿúûøè×öæÎýì×øåÔñåÙûèÐòåÒÜã䣱¾¦²½§~µw °c}H`l?UaAW^BR[>PWDWX;F\)8;¨½·GRgíèÒüäÖùäÏ÷ãÒôäÏøæÏöåÌÿöè©°Ug{T]]ÛÚÔíßËþèÒ÷äÏõäÑõäÑøäÏóãÎôäÏôãÎôãÎóâÍóâÍóâÍóâÍõâÍõâÍõâÍõâÍôáÌõâÍõâÍóàËöáÌöáÌöáÌöáÌõàËõàËõàËõàË,9G!,:7=H #,/.3¹»²ÀÁ¸a|Jbh?UZ>MTEDS¬ ªýæäüáÒjHV^;IU:P`mtsúçÔïâ×rUnt4OYGVXááÕÓØÌgz~>[e9TZ7EIÝäîx\x1d8I\x188I\x7f¢}v¡ µz¤czqQit<R]@Va6NU<KW<LX3CO1AM/<H:HT;IU(6B(:G*2A'%0F85áÑ¿ÿóÛúäÏþèØìæÛüèÓòê×¾ËÐu¨
²©¡¼xcyUny=VbCVbG[b?NWDPYHZZEPe@QSPhbP_tZbjóî×üàÔûæÏùæÐöåÑöæÎ÷éÑðèÜ{Uk\hnÛÜ×èßÎôäÌõäÏóäÑòãÒõäÑôãÐõäÑõäÒôãÐôãÐôãÐôãÐôãÑõâÍõâÍõâÍõâÍôáÌõâÍõâÍôáÌôáÌôáÌôáÌôáÌôáÌôáÌôáÌôáÌ?KT.:F0:H1;JCMW?JQ>LPCRP8KY:NR>RR=PW?M\BIVôôöøóèeIRULU_/J]WaeÿîÚìàÓx£I_c@[h8LXqxw¦®®qLdtIZ`2LTHQ`¡²¯ÀNj{.?Pet^|r nx¢o`{8P\=Ua<V`AQ^?P^9JW6GT7GT6FS8HV8HU7LW8DQ;=EéáÞôæÖòåÌýíÚüèÙòæÚÿîÑõèѹÅÊRp\x14/@*<K\x1f2@;KWdw&9D9OZ@V]\x1c-7%2:AKTL\[CLaGXZF`[FVmIPXÿüáÿäÖûæÐùæÑ÷æÑ÷æÑëÛÇÀ½²¢®³=TlWclvxu»° ðãÌöäÏóãÒóãÒõäÑõäÑõäÑõäÑôãÐôãÐôãÐôãÐôãÐóâÍóâÍóâÍóâÍóâÍóâÍóâÍóãÎôáÌôáÌôáÌôáÌõâÍõâÍõâÍõâÍ@JR?IS/:I%3C(8J&9G-BI7OU;FU@MR;IJ5HO1JZ2L[-CEL`O/TdMRSKPY4OeGRVÿ÷áéÛÐOmgz}:TfCWjPXbl}G[nCQV1N[CPas¢s¡\x7f lz]{t¦n
®oQk|4O]:U`9T`<O\;O\1ER*:G=N[<MZ?O\BQ_5SW-@G9CGáâÛùòßëàÉûîÚøèß÷çÔÿèÅþïеÂÀoz¢wNW\FVd5GQVkuAU`GZa8GP5?G?FQ*75ILeK\^Hc\@PgAIQÿûàþâÔýæÏùåÐ÷æÐùæÏúèÑäÞФE_xWbj¨«ªïæÔôåÍóæÎòäÒóãÒõâÓõäÑöåÒõäÑõäÑõãÐõäÑõãÐõãÑôãÎôãÎôãÎôãÎôãÎòáÌóâÍôãÎõâÍõâÍõâÍõâÍôáÌôáÌôáÌôáÌ9JP4BH1<C/8A-5>\x13\x1a'%,;1;J6FN2DN3FR2ES1DP8IS7HR1?L?P];P_5KX@P\>P^J`rq
ftBX`9MW=P]7K[¢²Zr|Kbk4MT7PZ.KV
¡²w¤nkh
fua}B]jXsd{@Tc?P`=P_8CQ\x1a*7+<I@Sa8LY2BO^[(6"+:ALS6=G7:>îçäøîà÷èÐÿëÌêëÙõäÕòäÜ£«©yv¢s¥s¯i}^s
as;N\I[f@QZ;NU6JP;M\@RV>HQ,3@-7@CEJ¶±¬ùéÔÞáÖüêØöß×ÎÑÝ¥ÄÕ¡ÄÏ®½«Í¢´l·¿ÄçâÛòâÔóåÎóåÎñåÎóäÑóäÑóäÑóäÑñâÏñâÏòãÐòãÐñâÐñâÐñâÐñâÐðâÏñâÏñâÏïáÎóâÍóâÍóâÍóâÍòáÌòáÌòáÌòáÌ4DK)9BEOY2;D4=G\x1a"0)2?1=I6EN:IQ5EQ7GT8IV9IU5CL\x10\x1f(.?L5ER6GT<MZ7GT3CP@P];KX4JQ3GS=P]>Qa:M\H[h6JU6KR2IQ2JV`wd}d|z§a|qh\x7f<SbAYh;O^AVe/DS=P_=P`<IU5EQ2DO9NY8JU-<I+9EEP\:KW)8D\x1e(2y}¸»ÀÛÙÕåäÚëèÙÍÑÅøìâüòꢰ¯t\x7f¦®mk\x7f§h{BUbEWbCT]BT[<NUI]dK\cLY^9DLLU_/38ëåÜúêÖïæÕúæÎÿòæw£©g~u¨a}Seo]bd¾¸²ñäÔôåÓôæÐóæÐóäÑóäÑóäÑóäÑôåÒóäÑóäÑóäÑòãÐòãÐòãÐòãÐòãÐñâÏñâÏñâÏóâÍóâÍóâÍóâÍòáÌòáÌòáÌòáÌ-=J+9E\x16#/)2?-6@2=F0:D2=G3?I<GT6DP/@M5ER1?K9DQ#/9'7E4DQ;KX9IV@L[9FT\x0f^[)+8F4JQ4HS8KX8K[3FU8KX1EP8MU<QY6IU!4A)<K^rgz{ v9IUK\iAQ^FZf?R_?Q^;N[<S_BS[5FO:MU;NU9MT:KT7FO=HQ4IW8IV1CQ©et^luëøÿ ¬²N^[ÈÄÄõö󤦯¿n~|xh|s_rDWdEWbK\eM_fGY`HYc@NTfqt^gn=GQEKOøôìøéØúëÏýæÎóæÛ£t¬~©~h|Wn~HZdfoputkðèÚôæÔõåÓôçÐòäÓòäÓòäÓòäÓòäÒñäÒñãÑðâÐñãÐñãÐñãÐñãÐñãÐñãÐðâÏðâÏóâÍóâÍóâÍóâÍòáÌòáÌòáÌòáÌ)9F\x1c)72=K*3@%/9=GQ0>E6CK8BL6BN4AP5AO5BP:GUDP\8BK1BO5ER8ES8ES2?M8BP\x1f)7.8F0EP6HR;KYCS`%6C$5B2BM5EQ7JR=MV&6C+;F\x1f/<]lyM^k9IV-8C<GS@NZ\f\x1c(3EP8LW8LW<S^CS\:KT?OY@QZFXaFU^?NW<GQ;LX8HU7IVN_lSgw?Sc¦¼Ìe{F_d\dlñõúVns\a$2-?P3>M\a\x1a\x1enThy\x1d0?9LYEWb$4=\x17)0&8?*9B2=C\x1f*.s\x7fJW^CKPòñéõçÙþëÎúæÌçàÙ|¦Khj\mw`t[n{@R\OY^_^[îèÞïæÔóåÑôåÒóåÓóåÓóåÓóåÓòäÒóåÓóåÓóåÓñãÐñãÐñãÐòäÐñãÐñãÐñãÐðâÏñâÏñâÏñâÏñâÏñâÏñâÏñâÏñâÏ3BS3@P5?M.7D/8F7AJ6BL(9?-6D)5A3@N1=N2>O#0>\x0f^['/7E7HU8HU6BQ7DRAN\5?M9DR>HV.?L2BP3FP:LW0?L)9E-:H/<J5GO8GP".8\x1d&0\x1c&/\x13\x1f,\x18%1\x1c,:\x19"+.7AFQ[:IQ5FNAT[?U\6OV&6?\x17(1,>G\v\x1a#\x15$-\x19(1\x1a(1-=F9AGO\`?KSAPY7ITBUbXpTk|1N^@MZ²ºÄqgj{7DP\qsK_q,@R`r9LYEWb:KT8JPCV\BP]?JR4?C +.1@G2<?®¯ªÚÑÅüéÒúì×ÒÖÒ«Á¤Æu©|£oWfoLX]DGFÙØÎêáÔóçÕöçÔóåÓóåÓóåÓóåÓñãÑòäÒòäÒòäÒñãÑñãÑñãÑñãÑñãÑñãÑñãÑñãÑðâÏðâÏðâÏðâÏðâÏðâÏðâÏðâÏ3DQ6GS2@N1<J2;H5BN-9E\x17%2\x1f+7\x1d(63@N/>O7FV)6C0:H?LW;KX:JW3DQ1AN0<J\x19&4\v\x18&.;I3CT4ER1CNCS\>MU1?L1;I,6H4GS;IU5?H'0:#'3 )3#0<\x1f,:\x1e&31>J:ERDQ^DS`@R^?S^9MY1DK6GP+9B +5&2<&1;0@H\x19)207=\x17\x1e$\x1c(.$17\x14'-:MT?R_J_n,L[CS_z~¨g{£¨by|[n§¸M`o7KX?Q\>OX<NU:MS@M\BNYEPSARX:MU:GNàãâóîåëâÙÒÊÀ¸w°©¤|ªO_kSblVcgAHGããÞãÞÔóæÖóãÒóåÓóåÓóåÓóåÓóåÓòäÒñãÑñãÑòãÑòãÑòãÑòãÑòãÑòãÑòãÑòãÒñãÐñãÐñãÐñãÐðâÏðâÏðâÏðâÏ3EP6FS2@L.:F.:H6AO0>L%2@%3?.:I1AQ/?O1AQ/>N0<J8GS7HU5FS5FS4ER2CO\x1c,9?P\=MZ5EU0BN4CO3DM\x16%.\x19%108F29J8IZ8HU&.;%*5(.9'1:,4B"/= /:3AM:HT?O[:MX@R]=OZ<Q[6GS0@L9GT\x10\x18%)1>0=I8FS\x16$0&.=.6C;GQ:KQ;MT3FM<MXAS`-IZBM\~\x7f§Yzu Xey[r|ThzOcu{DWdI[fEV_ASY@SX;I]?MYBSYDW[=S[<PXª³³íéãÙÙâ¶¼ºYlpv§z¢ h¢UbnSclP\cOZZEJFêæÛíãÖõåÓñäÔñäÔñäÔñäÔòåÕñäÔðãÓïâÒðäÒðäÒðäÒðäÒðäÒðäÒðäÒðäÒïäÐïäÐïäÐïäÐîäÏîäÏîäÏîäÏ4HO1BK7FR*7C-8G09K-:J-8K.=H+<I/?O';J*>M.>N,<I4BN5IV3FS4HU4ER/@M(9F)9E5FR.>O2DP3CO2@H)4=8DO5=K4;M(<M)7H\x19 -',6-0:).9/8F1>O&7C->K8HU8IV>O\GWe;LY6FT3CQ8HU+4C^[#18@O?FUCQ_\x18%3'0G6DX6GS1AN<PW;MX7KX>Qa3P^@JUEKX6Qb'J_¼dt &2Pcu^[/A\x1e1@AUbEWb>OX'9@L^c?NdGXf@PWDX^8P]H]fS\`ÕÔÎ^fm
]{fw}ªe©U^jNYdAPVWehU]XöõìîäÖúéØñãÕñäÓòåÓóäÓòãÓòäÓñäÔñäÕðäÒðäÒðäÒðäÒðäÒðäÒðäÒñäÒðãÒðãÒðãÒðãÒïãÑïãÑïãÑïãÑ0=I0>J\x1c(13<F.8A2>J0=K1>M*8D,=I'8E+>M.BN2DN3EM3CI1@M/?K1AN4DQ6EV,;K+9L/<O/@J0AO,@P0CU+>P/?Q)9I*7E-<M);G!3@#1?#.="2>*8D+<G*;H-?L2CP5IV2ER9Q\:Q]8Q],CM 7B"7B:MX9JV6GS\x18&2\x1f,8.EN5HR=MY>KW4?K4?KCP\<IU;JW8ETAMY:CO2<IDTbudy9IT0AM1CM2DOCVa*;D<LV\x12$.\x1a")\x16\x1f'4<E*4<DPWKW_YfoGY`¥@UewPaoQbrtK^o<K\LdiEX_HX^@EK=<>ìä×íæ×ïëÆòèÝìçìÝãÛàçØæäÚîä×öæÍìåÔíåÔíåÔíåÔëãÒëãÒëãÒëãÒìãÒìãÒìãÒíãÒìâÑìâÑìâÑìâÑ,<I\x1d+7-9E-9C\x1d*6.9G*7G-;M3AM0=K-=J.>N0AN5EQ3BK1BH3CP4DP->I7GT6FS2AR1@P0@P0@L0@L1BO7FW6EV+:K+8F*6B,>K/?L'4B#.<)1>#/;'3?)7C/;J0@M1AN4ER6JW;N[.EQ/EQ/EP-@K+@K8JU<LX5EQ1?K9GS8NY2EO\x15%1^[)58DP3?K/=I-:F,<I5APBNZ'4=\x1d)5 \x15#%5F(9M0@L5ER3BO:JVFVc!2;6GP=OX"*3DLU9EL>HP\x1c)15BJ\x1f,4<MRjzDXeatzViwCUfi{xH[bNahFU[V_cLQRØ×ÓæáØêâÖæéÐÏÌÈäæÝææÓêä×ìä×òæÒíåÔíåÔíåÔíåÔìäÓìäÓìäÓìäÓîäÓîäÓîäÓîäÓîãÒîãÒîãÒîãÒ2BR3CP1=L)7C-;I-:J-;N/>Q4@K7BP0<M-<L3BS7DR9EN8CN8GP1@I2@L9GS1?K1?J.;I,9G5DL/>G->J3CP:JW2?K-8B09C0AN2>L)4B(0?)1>%-;)1?*6B/9H0=K2?M3CP:JW=N[8HV7JX7KV5JU7HS7IT:JV1AM6DP;IU5GR4DQ3AM=IU8DP.:FFT`6GR3BS3@N@LX"+5.8B'09*6B0;F2?M0=L2AL8EQES`7FOCR[APY<FNFQY<GOGQY&4<:GOGT\EQYWiq6GOI[fSdpzlli}I]aIYa4@EALT>BFçèçÞÜ×âò妪°XW]êéÛêçÒìåÖìãÚìåÖíåÔíåÔíåÔíåÔíåÔíåÔíåÔíåÔìäÓìäÓìäÓìäÓëäÓëäÓëäÓëäÓ5GX-=M9IV)6E*7E*9I)9J\x16(;\x16\x1f-\x17"0.;K2?N3@P-:H\x16!.$-7".8%0:$09*6@=IR.9F%1=5AM8EL0<F1?L7DPDR^2=G3=E,6=.;J4?M,5C%-:)/<'0=-6?/9C1:H4?M9DR;HV?KY<LY<MZ7HU;MW9JU5HS<KX8HT3DP9FR:HT3DM1CL9HQ?JT^['0/:D2BJ%7?'7H7DR@KW:DM7?H*5;8?F3;@4=L@HV3;H9EQFR^NYcJV`DOZHV]DQYES[AOWCPXFS[IV^@MUDTZBQXEV_br~xtfxH]pIV\R`fLX^JS[U_bowz¥¨¬¤¦[]iÜØÊîéÎîæÔêâÙäãÛìåÖìåÖìåÖìå×ëäÕëäÕëäÕëäÕëãÒëãÒëãÒëãÒëãÒëãÒëãÒëãÒ(:K.>N/?L&3A,9G2BR-=N!3F08F0:K9GV5@S.;J/<J'3?7AJ\x1e*6\x1c(4%1=*6?-8B\x1f+4\x18$.\x1e)3\x12^[%\x12\x1e(\x1e)55DP&2;\x1e)0\x1f)0"*-$/>7?L)1>',9#)6 &0)2<+3=-6E.7E'2@*4B<IW8HU:JW@P]<LX5EQ9IU9IU9IU7DP6DP@NZ<KS>MV>IT@IS1>H7BL6EN2CL=IX8ES&5@&1>2=D$+2\x1d"'4;<(/?\x1e$409F7@M?LX7CM&1<&6?1BI8IOMYaGT\VckN[cMZb;IQFQW;JOHU]CS[DR^4DRgx6GYJT\R^dCOU>JPEOWIS[blt<Y_}¡OQ^ÚÚÌïêÐîæÔìãÝæåÜëäÕëäÕëäÕëäÕëäÕëäÕëäÕêäÕëãÒëãÒëãÒêâÑêâÑêâÑêâÑêâÑ.>N;KX<IW+:F1>L7DT+9K)8K,7E.7I/:M0?Q/=P6CS/;F/;G+8F&3A,:F)7C/=I,:F+;C$3< ,6(4@&5A-:F^[*6\x16$+\x12\x1e$\x19$(\x1c+8)5A\x13\x1c)\x1f'5\x1a\x1f*\x0f\x19#\x1a"-\x1f)3\x0e\x17%\x1f+9\x1f)7\x15"08DR;LY:KX6GT!1=\x16&2\x1f/;\x18(4)7C*9E.<H$1>&6>/;E.8B5?I+4>9EO.=F3DM:HT3@N0=L.<H-9C"*4\x1e(*/67&-=")8)2?;CPCO[AQY7GO;IR*9@/>E^[,2\x1e/5(5=,9A2?G9FNIS\?JRGRZ;FM0:D7AK%/9\foEPWQ\dGSZ>IMYdh+6:ISZhoyOin
¤\`nÐÒÉçäÎêâÒêãÚçãÙëäÕëäÕëäÕëäÕêãÔêãÔêãÔêãÔêãÒêãÒéâÑéâÑéâÑéâÑéâÑéâÑ"2?!.:^['3*6@*6B9DR4AQ-;M.;K2?O1?Q1AR4DU4DS/<J0>J.=N)9I+:J%6B*;H0@L&6C*:G.8G&3A*6D'8E/=I'2=\x1c(-"-0&4A+7C/7D\x1f(1^[%.\x1a#-".5$.6"-<%0>$2@,8F1BN9JW:KX:KX*7C1>J0=I,9E1?K-;G9JV%6B/:E(2<+5@(2<(1;9EO.@I6HQ5AJ0<H5AP.?L(4C'3=&/9(06,2C)3@)1>4@LAO\AR[<LV;OW1CJ=OV8JQ<KR?PWJW_<IQ'4<6@J09CCLU3:C:@F29@;=EHJR@KUV^hNY\GTU1=?HUVMY\SYbCVSR[hgj{¹½¹áäÐçãÙèßÖîçØëãÖëãÖëãÖëãÖêâÕêâÕêâÕêâÕêãÒéâÑéâÑéâÑéâÑéâÑéâÑéâÑ0<H*7B7BK\x1e'1\x1f(2.:F4AO1>N,9J)8H*:K*=N-?P2BR,=J0?K-;O+8K(7G)8I5EQ2CP%5A*:F&3A.;K&6F0?O1AN(7?!.6%16+<H-;G0<H )3\x1f'1\x1e(2&19%3:"/?%2A)5D,<J.?M;LY7KX2ER7CO1>K6DP4BN3AM3@L2BN3CP7BI7@H;EMELU6AH3@G+?E3GM19C1>J5AP,<M(8I%2B(3<,5=,6E.6E,8D/=IANZ>OX7KS<OW=PW@SZ<OVEV\DU\>KS<JRBPW@HW?HRDIU@EN9;D*(/<=@HDF>JTV^h?IM9EGQZY6>APY]KSYR`VJR]EJ[^fdÖÝÍÞÝÔòèàñåÑéãÖéãÖéãÖéãÖçáÔçâÔçâÔçâÔéâÑéâÑéâÑèáÐéâÑéâÑéâÑéâÑ$@Q$<M+?N&7D)6E2>J7?L/;D,=H/@M3CT0=T-<O5DT3>J7AI+:B/=H,8F,9I1>O3?M.<H+:B-:I+<I)8I0AQ,;K.:I\x1e*7$-7(9K6FS+9E#.5\x1f+2\x1f*2%08$0;$4<&5=':B,=E*=H6HS8MW<O\7LV8MX0EP5GR2DO0CN3CO4DP3MT/HP8NV?T\"1:\x14 *\x1d&0!(2\x18'4\x1e)50=I%.7)2<%.8-2>29B'-63;E2>J-;G@P\<LY7EO0AH9@IGNX5@G(2;KV\JT[MT[DHO>IQ>KP>IO:EL3<C5<@:@F=DIAIOMW^NZ`HTXNZ_HTYBOPIPT3GGL\YFPKQUOéçÞäâ×ãäÓâåÕæâ׿â׿â×éâ×èâ×ëá×ëá×ìáØëãÏëãÐêãÏêãÑéáÒçâÓæàÓåßÒ+BR*@O4DT)6D+6D.9G+7C,7C5EQ'9E.>O-:Q0?R5DT3AM/<D1AJ3AN5AP.;K6CS4AO0>J-<D/:G(5D(9F/>N3DP(6B(1;!-4*:L.?K'5A!,3\x1e)1!,4%08'3=%0;,8B%4=1>K5ER6HS5ES8KX3EP8JU+=H0CM9IU.>J7GS3CO2IP5HP6IQAR\0@H,8B*4>6?I.=I'3?2>J(2<%/9\x16 )\x1d"..6>\x1c#,\x19!++7C3@L<MYEVb(7@"39(1;",61=G8EM\x19&.\x18#+\x17"(*28ALTCPV?IPDLS5=D>DI.49?BG<DKISZHTZAMQJVZT`dIVXFNRN][HUUNVSab^ïìååãØæå×êêÙàãÖãã×ãã×âã×ãá×ãâ׿â׿â×äáÓäáÓááÓâàÕâàÕâàÕâàÕáßÕ0BM1AL7ER)4B.9G-7H(5E\x11\x1e.\x1c-8\x1e-=,<M,;N*9M,;K\x1c*6\x18$.\x18'0\x12 ,\x12\x1f-%2B5BR)6D!/;\x1e.6+3=!.:&5@5BP7EQ+7A$,5'18*;L6FS-;G!,3\x1e)1!,4(3;$0:-6@'0: ,9\x14#/+8D7HU1AN9JW2AM(8D/?K(9E1>J>LX1?K@NZ5CL;JS=MUEPZ?KU/;E1:D9BL/>J,7C6BO+5>%/9"+5(-9+2;*1:(1;(4@0>J:JV:KW>MV5EL:FR8DP8FS<KT5DM@LWAMT,4>,8@&07)3:,4;"*2-380386:?DLSHRYAMT6BF.:>+7;5BC=FIANNX``LQQPQMÏÑÇààÖèåÛáßÑÝâÖÝâÖÝâÖÝâÖàâÖàâÖßâÖàâÖÜà×ÞàØßàØßà×ÝßÕÝßÕàßÕáà×5DM6AM=FS,5C/7E-7I/:L"0C&2@,<L*;L*:K+;L3AQ\x1f-9/>F(7@\x1f-9-9H'3D.;K&2@"/;\x16%.^[&-!+5&2>3?J\x15 ,\x17!+\x19"+\x1d$*(9J*;G\x18%1 *2\x19$,\v\x16\x1e\x1c'/$0;\x0f\x19"\x1e'5&/<^['3%2A:FT7GT'7C\x11!-%5A\x15#/\x1f-9#1=\x19$0*6B\x15!- +5\x14 *\x14 *\x17#-\x1f+5.:D,9C5AK4CO)5A6BN4=G&0:$-7(.9*1:.4=*3=(4@0>J5EQ@P\@OX=NT:GV@NZ;KW9IU9IV>NWFR\8CM:CL;EL4?F8@G-2:3:?8<A<?D<DKISZMZ`HTXEQUEQU>KMBKN@GJ?DEHMLTXWããÝáÞÖæäÛääØàâÖàâÖàâÖàâÖàâÖßâÖàâÖßâÕÜßÚßàØÞà×ßà×ááÕÞßÓáàÒâáÓ2>H'2>&/<+4B2;I6@Q.<O*:K,:J.;K-;M-=N,<L4DT-=J-:F,=F-=I*;H(7G5DT6FS'7C&8A*5<&/9#/;/;G.:F)3<\x1c$-")/&7I*;G!/;^[&-\x16!)^[&.(3;\x1f,6"*8(1>'0<)3B%3@7DR<LX4CT.>J0@L2?K-;G0?K2>J1=I6BN4@J.:D7BM8DN6BL\x12\x1e(\x18$.1=G&5A)4@6BN7@J%/9#,6-3>+2;-4=/7A(4@/=I7HT?O\IXaCTZ?KZAR^<KWAT_8GTFU^COZ>HS;CM<GN>EL=FM06><?D7;@CEJ9AHKU\MY_NZ^LX\MY]KWYHQTUZ]PUVKPOOTRÏÓÎàâÜååÜáâØéçÛäâ×ßÜÑãáÖààÔääØááÕÝÜÐàÞÔàÞÒçäÙáàÑàßÑÝÚÊáÞËæäÑ"0< .9.9F*5C!,:+9I/>O.>N3<N1>N.>M-=M+;K2CO+;H.>K4EM.>K3CP,;L2AQ9IV*:F,=F4=G*7C&4@4AO7EQ-8B#+4",3+<M)9F(6B *2!,4\x1e)1(3;$0:,4A)1>%0?+8F,8F5FR<K\8HX7GS7GS4DP5FR7EQ6DP7DP<IV8GO:IR9HQ?IT9EO\x1e*4",6+4>\x12!-\x18$0+7C\x18"+ *4\x1d&0)/:+2;.5>.7@(4@-;G:KWDTa(7@"28^[)5\x1d+77GTEV_+=F+:C:GO)4<'0:)18.6=.4;#*126:,/41389AHCMT:FL0<@-9=.:>3@B*46;>B:?@=ACIRQØßÜØÞÙÛßÙÜßÖæâÚßÜÔàÝÕãàØÖÒÊåæÝÝÞÕãäÛäâÖßÜÑâßÔáÞÓÛÚËææ×§¥¹¼¬3CS+;K/?O&3A/<J2?M1AL/AL3=O3?Q1@P-=M/@L4ER,=J2BN0AJ-=I1AN*9I4CS:KW.>J->F/:G.;J'8E0?P8IU+9E%.8\x1e)1+<M/?L5CO\x1f*1 +3\x1e)1$/7#/:'3?)4C'4B)5C&7C2BS9IY1ET7IS;MX8JU4FQ8HT8HT6FR>NZ1GN;MU8LS=NX;JS0;F&/9;EN)7D&2>:GS0:C^[%/\x15\x1e(!&2(/8(.71:D/;G*8D>NZBR_?MV<MTBLW;KSAPYGZa8IO5AJ>JP7BH8?H:BI:BI8>E(+326;/271386>EHRYKW]JVZ@LPAMRJVX>HKIKOHLM?IINYW»ÆÃ¾ÈÂÐ×ÒÕÝÖ×ÛÕâæàÓÚÓÞåÞ×Þ׻¼×ߨÕÝÖÛÜÓßßÙÝßÙÕÙÓäëäÚáܬ¶°2EW4EW8GX&6C)5D.=H0AM,>F37M4=P1@P/AM0AM8IV,=J.=N,>F.>K.>K(7H6FV5FS-=J&8@+8G):G$3D/@Q6EV+8F'4@\x1e'2*<M1AN3AN\x1e)0\x1c'/\x1e)1%08'4>#1A$1@$6C'8E):K1AR3GV5GW9NY:OZ6KV:MX5HS5HS1AM:JW5OV3LT4JR7KS;JT1=G%0:4=G6ER*5B6BN2<F\x1e)3\x1f(2(-9$+4\x16\x1d%$-7+7C*8D:JVBR_HV_DT[GS[FRZ?PW@PW>NTBPVKV\?IO;AK;CJ7<C@FM.1:15:58=79>4<CBLSERXHTXHTXFRVJVXFOSNSULSV=GGANLwz
§¡¼À»´¾¹ÇÑÌ¥yoxt
~¯Ä½ÈÉȾÂÀÅÊÉÑÚÚvv
dx|*KS2QY0GR-?J.<H.:F7?L3;H1AI6FN7GT3BS/?Q3BR4@Q1>L-<D/>F4BN)6D0<J;IT1@H,:C4?I/;E+9E4BM8FR2>G+6=&06,9F7DQ:DK$.4#*1%,3*3<)2<06>/8@-7@*6?.<H2BM8IV8LY<JRAOX>LU=GR<GQ@KU@LVCLVEOWDMU:DK:DL2=D.4=04=?>H5BL%2;5AK5?I&/8"+4&-5%,5$-6,5?,4A-9E@MYBR^EV_9MTBRYGW^=MTAQX>NU>OVEV]:LS5?F=GN3<CGLT,3758=26;:=A6;BHOWJUXHTXJVZFTUDPR/=>=@E9@B;CGFQRizwaupn~b{rl\x7f^uid}|[rp[ljcqk}}m\x7f|cvw^uv«°t¡§w|.JT1JT2FQ/?K1@K4@L -8\x12\x1e*\x13"+\x1f,9/?L,<L4DT7FV&3C\x1c)7\x1f.7!09#1=\x1f,:9FT4BN'6>\x1e-6\x17"-^[&0%4@5CN'5A\x13\x1f)\x17"*\x18!(#4B0>J#,6\x1e'0\x1d%+\x1e$.%.7#,6\x1e'2(0:\x1f*3\x1a&3$2>6FR3DQ)=K\x1e,4\x12!* /8\x14$-!,6\x1f*5\x1d)3^['1\x1c%/\x16",\x1a&0\x19$/+7B\x1c%/\x11\x17#03>\x13 )\x1a&02>H*3>\x1e'/$-6%+4&,5"+4(1;*3@/;G3AM@Q]CT]6JQ&6=\x1d-4,<CHX_2BI-=D3CJ1BI\x1f'1)3:%-419A^[!&*.3$(-,059?FGOV2;C+7;/;?/;@;GI9FHJPT?DI>IMIVXCQSbwt\sp_tsUthp`|rczucvt[libpn}y
¡«¶¤ªz{n4JV8KX<LY1>L+6D5?M(4C!-<,<D*:F2CP/>N-<M1AQ"3?"/=\x1c,4\x16$1'5@$1?1>L,;F\x1a(5$3<(3=-;H"0<.?L1>J*5?\x1d(/\x16 &&7E-;G\x19%/\x1a"+
\x17\x1e\x11\x1a$\x1f(1\x1d&0\x16\x1f)*4=&.<\x15"-,9E:JV2CP(8F$5==NW$5>3AJ/>G.>G2=G'2<3CL-<E2CL3DM9HP/;E#,6;?J$4A\x17#,/<E\x1f(2\x1a$.\x12^[$\x1e(1"(1\x12^[$!*4(1>'3?1?K=MZ8HQ(;B7FM?OVGW^BRYBRY=MT/?F0AH4=F@IR5=D@HO(-5.59,/41498=DFNUFPX?KN>NPAMQBNR<IJBJQ<FM<GM;IOy~|x]tpv^wlUja\nfdvr_jnt\x7f`m{sxwfw[j~m}^l\x7f.>K.>K5BP/9G/:H0=K.?L(9E.;H1AM3DP,@O+>M7GW/?L+9D1@H)7C+7F"/=1=K7DR2@L-<D,8A+9E"3@2BO9IV1?K(1;\x1d(/,=K9FR7CM\x1e)1\x18 *^[$-(1;!,5(1?*2@(5@)8C,=H3CO:KX9JW2EL5EN6GP5FP5CLN\eKZcN]f?PY7JR7IQ7JR7HR0?H&2<5?I4BO\x14"/+7C;GQ\x17!+^[#.!*3\x1d&/#,5'0:*3@&2>2@LAQ^EV_BU\BRY@PW?OVAQX@PWAQXCSZCT[2>EAJS+5>DLS05<+1947<48<1:@@JQEQWESZFVXBRUAMQ<GK?IPAMR1>F>MVvwlr
cvz^qnXkbRdV\naycqxwcp~zv{}fwhwdq(7D\x1a*71>K1<J"/=3@N4DQ,=J2BN3BP1@Q+>M(;J7GT8HT)9F.>J-=I.>K&5E4CS7GT3DO,<I0>K/=I(8E4DP8HU8FR(4>\x1e(0(:G3DQ7CL&18\x19"+ )1%0:'0>'2@+6D*8F0<J,=J<KY:LW>P[8KS8KS9LT9LT6GP5FO:KT>LU5IQ9LT8NU9NV7KR5FO\x1f+53<E5CO!/;+:F8DQ\x19",!+6"+5$-7'08&/9'0=(4@-;G?O[CT]>RYJY`GW^=MTAQX?OVHX_AQXGW^/:BDOW6>H@IR-6<16=/6=45>/6??HQIU[GU[DRXBRTEQU=IM=JP=IN6BJ<KT`p}euN]nQdw:JPWfiVf^M^Q`ndhtsir
Wfobt|Xht\mzOancr\x7fJYbJW_-@O1@P5DT-<L.;K1@Q1AR-AP0@M3EQ*=L)<K)<K4GT9KV,=F3CP4DQ4DQ)8H7EV8HT2BO.>J3@L->K$4A-=M<MY7EQ*6@!,3,=N4DQ6DP%/9^['.",6)3<*2?)7H+8I,9F->K0@M9IV<NY;MX;QX6LT:MU=OW:NU;LU=NW<MV;MY<MY;OZ<Q\:LW4EQ\x1e*6/7E/@M!.:+9E7CO\x1c(5",6!,6"+5)2;&/9&/<'3?*8DAQ^BS\-AH$4;\x18(/ 07AQX<LS&6=(8?$5<+4?BLV2;CBLT28B-5<06=4:A39B>GPLV_ESXCTZCQWCQX?JN=JP9EK6CK;FP;IVUfs[kxSbtcv}kz}bnn{
qw_otvarzpbs|ex~lzbrt2IX0ET6IX-<M,;K1AQ3CS+>M.>K8HX2ET+>M)<K2ER9KV+<E3CO6FS6EU)8H3BR8GW3CP2BN6DP1BO)8I2BR6EU6BP-9B"+5/@Q4DQ9GS)2<\x1a$.#-7'0>'4?)9I+:J,;K/?K,<I4DQ7JU:LW5JR9NV<QY9OW<NVAT\EX`?RZ;JW9KV9KV;MX9LW8FR!.94<I1BO$5B/<H7EQ\x1c(5!+4#-7",6)1:&/8%.;%1<.<HCS_AQZ&9@5EL:JQ?OVBRYEU\<LS@PWCTZ3<FEOY1;EDNW07@18A39?27>1:C=FOHU]BSZFV\CSYESY@LR>GOBKS3?ELW_ERZ>ITM]fZir ¥aqw¥°·xz{~{^mvFVb n~x{DPV0M[0LZ7M]1EU0AQ2BR4DT.AO0?L4CT2ET*>P+AP4HT;OU,=E3CO3CP5CT+:J2AQ:IY2CO/?K8FR3CP(8I1AQ9IY7HT2>J\x1d)3/@Q1AN:HT(4>\x1a$.%.8(0>(5@(5J+9L-<L0?O6FR9IV5DP;LX5MU9MU:PX:OW@V^AS[AT\?RYBQ^=LY:LX<NY9HU6DQ"*82:G3DQ&7D.:I2AM"/;"+9#-7 *5(19*3<*3A%2>(7C?O\HYb:NUBRYEU\CRY;KRFV]IX_:JQGW^1=H>HR.8CAIS09C.5>04>49@/8A>IQER[FW^DTZBRXDRX?JQ@KN=HK<FM7CI:FLAOVSagVbirK^epyccstp~lhrvyxcn~wzsqgoz~?O\?NZ7FR1?K1>K2AQ/?P.?S/CO.AN3FU.>O*:K5EU9JX0@M2BO4DQ4DQ-=J2BO8IU5ER0@N4BN0@M"2?1AR8HT6DP.:C",6+<I:JV4EM(7@\x19%/%2<'/=.6E*:A+9E,<I/>N.=N:JW8KV9MT7JR;NV<OWCU]>QYBU]<OWAT\=QXBU];NU;NV=QX3BJ\x1c(2/8A.<I+9E0<H8DN&0:$/8&/9&.7$0;)2<+5?.8A+4>=LUDU^>RZ>PWDV]CV]@RYEX_FX_ASZEY`9EK<HN2<C?IP.6=6;B06=4:A7;D;BILX^KX^EU[?SVARU6HJ?HS:EN7AIGPTCLOGSTT`dQac7JRJ[bS_e[gjo{~¢£°¼|Xqvtr}\x7flmZovo|/>O8IV<LY0>J8ES4CS/?P.?R3FR2ER6IX0@Q,<M4DT8IV-=J2BO3CP4DQ-=J0@M5ER0@M.>K/=I2BO 0=1AR?O\7DP0<E"+5+<J9IU3EM+:C\x19%/#/9&.<,5C,<D,:F*:G,:K/>N9IU;MX>RY:MU9LT8KS7JR@S[@S[>QYCV^=PX>QY=PX:MU:MU2AJ ,61;D;JV*8D6BN8DN*4>",6%.8&/8%1;)2<+5?,6@7@JAPYGXa-@H7GM2AH+;B1AHCSZ#3:$4;%5<\x1d)/4AG09@@KQ08?.7>27>39@9>G:BIIU[ESYCSZCSVBSV9JM<IQ;GM:EI?HL:ED?HKNZ\OZ^5HO8FM[gk_kmZeikv}tx_u{n~¢r}tuct}x':H%5E\x14$1!2=\x13$1,;K1AR0AU1DQ3FS4GV.>O.>O7GW9KW.>K4DQ6FS7GT0@M/?L9IV6FS-=J1?K-=J#3@/?P7GT8FR0;E!+50AN9IU5FO0?H\x1a&0!.7&/<,5C+;C,:F):G-;L,;K3CP7IT:MU8KS9LT=PX?RZ9LT=PX@S[CV^AT\?RZ=PX8KS<PX4CL$0:09C4CO-;G/;G:FP,6@!+5%.8$-6%1<)3=*4>,6@3<F>NW>OX!5=)9@%5<-=DAQXAQX4DK>NU?OV9DJBNT2?DBLS29@/8?27>5;B3:D6=DHTZESY@QW@QTCQT6EHETZ<HL6CEAIIbjj^gfV\_NVY?MTT`d\ijJVXFRUix¢i|¥U\i}o~u_o|PZd,?Q*=K5FS,<I-=J.>J3CS3EV3FS6IV3FU.>O,<M5EU9JW.=J1AN4DQ6FS.>K4DQ8HU4DQ/?L2@L3CQ%5B1ARIYf/=I3>H!*42CP6FR0AJ-<E\x1d)3#/9&/<.6E'7?*8D*:G0?O2AQ5ER:LW:MT<OW;NV@S[=PX9LT@S[EX`?RZ>QYBU]=PX?RZ:NU4CL&2<1;D4BO/=I2=J7DM/8B$.8)2<$-6*6@+5?-7A-7A5>H<LUCT];OWAQX<LSAQX:JQGW^AQXEU\DT[6DJ<JP2>DBKR+5<19@*3:4:A29B0:AFRX@NTFSZDTVBRT8CGFVXBMR2?A=FEMQRBGG:AD9>CCOSP\^forIUWKV\£§»Ì³Ìá®ÀËy
fm|t|t{lz
\er4K[1FT:NZ.?L.>K3CO1AQ4CU/BO3FS6IX/?P*:K4DT6HT1AN1AN3CP7GT0@M0@M8HU7GT/?L2@L4ER3CP+;L3CP4BN3?I)3=->K<LX7HP,;D ,6\x1f+5)2?.6E-=E-:G+<H,;K0?O8HT9KV<OV9LT<OW<OWBU]<OW?RZ;NVBU];NVAT\<OW;NV>QY4CL*6@09C6EQ3BN+7C<HR3=G#-7)1<&/8#/:-7A.8B-7A09D<LTGXaAU]DU[DT[@QX<MSBRYFW^P`gFW^;IO1@F3>DFRX-8?,3:.6=-6<3:C.8?EQV@OU>MSCNRFRV6@E@PSIVX0<>>FECLKGMP',1/7>?JNEQRNWZ?KM>KR\mx]t[t_t@O_LVgwxr¢¨2J]4L\>P`/@M5EQ5ER2BS5EU2ER3FS1DS-=N)9J5EU7IU2AN3CP2BO4DQ.>K3CP9IV7GT.>K=KW.?L"2?3CS1AN1?K3?H,5?,=K9IU6GP-<E\x1c'1!-73;I(1?"2:9FS*:G,;K.=M5ER:LW<OV8KS<OW>QY?RZ=PX=PX<OWDW_?RZ>QY:MU?RZ:MU6EN-9C,6?4CO2@L*6B?KU7AK!+5*3=)1:)5@.8B-7A.8B3<F7FOEV_=QYKW_ANV4AI#081>F>KS^[(0\x14 )&4:0>D7EK:FL/9@&18+3:/7>18A.8?COU>JP>MS@LP>JN4<@AMQIUY1>?:BF<EH>ILhtzx>IPDPTN[\?KM8GJ4GNpnh¦ £´ªº§¶§¹¬0HZ4JZ<Q`2CP4DP4DQ1BO5DU5HU5HU3FU/?P'7H5EU:KX5DQ4DQ3CP6FS/?L4DQ9IV;KX/?L3@L/?MYiv6FV8HT5CN5AJ,6@+<J6FR6GP-<E%1;'4='/=19HP`h(6B0AN1@P.=N6FS=P[<OW8KS:MU<OW=PX8KS=PX>QY>QY:MU<OW=PX>QY>RY6DM0<F09C6DQ5CO)4A<HR8AK!+5&/9&/8(4>-7A,6@-7A/8B4CL;LUBV^$19$19.;C1>F8EM@MU5BJ;HP8IO:HN.<B<HN4AG-7>*5<+3:07@,6=BNT?KQDPVALP:BF5>A;HMGQY1<@=HL;GKCOWGXa2DP9IPCQXIUY=JLFUX;LS|}¥r¦_vhzj\x7f^z]{]u\p2M_+FV8M]/AN/AL4DO4ER:JW3ES3FS4GW0?Q*:L8HX:KX3BO/@M2BO7GT.?K0@L6GS;KX-=J8EP9IV¯¾ËDSd7ES6CO5AJ/9B.?M6FR8IR/>G#/8&3<3:GmsSbkAN[*:H0?O-<M3CP:MX5HP>QY9LT>QY?RZ=PX<OW>QY=PXARZ;NV:NU:NV:NU:GP5?J-5?4BO7ER)5B:FO>GQ*4>&/9)1:%1</9C-9B+7@/8B.<E<MV=RZCNX<HQDQYAMU:GN8EM&3<=ISCRX>NU7EK;FL;GM;EL:DK6>D6<F+4<?KQ=IPCPW?KO4>A9?C>GQ?IPHRYMV]KY_<PV@S_(AN4FP<MTHSZS^bFUWBU[OcoPitBcKeTlPjGj~Lp
Li
Tj4EP6EQ4DP/<J\x1f/<0AM8KW.DP2JV)?K9LX1BN(9F6GT7JW.AN/;J6CQ4DQ*9J1@P3AS0@Q1AR0CTMbq¨B^g2LU/AL:AO03C.=H9KV7JR0?H)/='-="2C«ÄÕMejH]e/AL.<M1>N7DR>LX?PY9MU>QY?RZ>QY:MU?RZ?RZ>PX3SW>RZBN[BNZ7IWs*AH"1:6BJ;HP.;C7GP5FN2>H1;E.7B$5>,5>43B12A0<H$6A/ALHSa=TT>RW>PWAS\*:C(6<>HMJWT>RW9MR6FL5FL8GM:GL?IP=GN9HK7FI;GK>IM@HLINS:@E=?D4AG?KQANTFPXCMT=GNBIP@FM7BH?JPGV\FTZJV_HX_JZ`P`fN]hO^jM\hO^jM\hL[gM\hN^j*<I 3@%6C.>K.>J3CS6JX=Ra*BNG]i5HU<LY):G6GT5IV.AN0<J4AO2BO+:K0?O1>Q8IZ2AS/CUt¦;V`9R\4EP6BN07F0?K8JV7JR2@I.4B2;IBRc¤´OfkEYaEWb1AN5AO;GV<MY=NW;NV=PX?RZ>QY:MU>QY>QY>PX3SW9NVAMYAP^«TnwEYd!3;5AH;HP4AI7GP7CM4AK8BL8AK-AH1<D58C38B(6B«j~?N\>RW:OSASZ?PY?MW@PV:LOERT@TY<OT9IO9JP<JP=IO>HO=FN<KN8HK:FK:EI9DH9CF39>;@E@LP=IMDOS>IMBMQ>JM<GK7BF:FJ;GKCQWGU\JX^GW\EU\GW^EU^FV_EU^HW`HXaHW`HXaIYb4LX,BN8KZ/?O-=M4DT5GX5IZ~¢Lbn?Q^6GT*;H6GT7JW1DQ1=K4AO1BO-=J,:K4CS/@O/?O*>P§¾Í{¤8S]?U`7IT4?K27G5CO6JQ7JR4BK09F5=KScsqLglH_fCT_+;I1=L8FQ;LU:KT<PW9LT9LT>QY;NV>QY=PX=PX7RX<QY>MZ*:G¨ÁÌlI`j>MZ1?H:IR8GP5@J8DN7CM;GRAIT0FJ:HN>GP<EO
\x1d*µÍÜuASeAUY?PXBU[@PZDV]=PU@SVCVX=QVAUZ?OU=KQ>MS@LR=JPBJR=LN8HJ8CG4AD0;>+7:6?B=FJ6<ABGL/9<ENR=HL3=A?KO;FJ>JNAMQGVYFUWIW]JZ`HX^HX^P[cR]eS^fVahU`hWbjYdkYdl:T`5K[4JY1CT5GX<M`8H[;Pa
©H^j>Q^/@M%6D3DQ6IV2ER1=K3@N1AN-=J.>K9IV7GW/?P,AW¦¾Ð¢°Tlx<R\:LW5CO8@M4FN5IP4IR1BK;BO7AO°}¬WpyI_jEYd>MY(8D4CP;LU;LU;NV<OW=PX;NV=PX=PX;NV<OW9U[>PX2AMFXh±ÌÚy¢CXgL[h6JP5FO9HQ;GQ8EO=GO>KS?KT6ML:LNBLTAOWJcn°ÊÚiDWnDU[ASZ?QW>QX@SZ@TY?TY@UZHX^EU[?PUGU[APU@LQ7CI7CI?MS=KQ?NS@KQ:FL.:@8AI#.58<@>BF9>CAJMDOS;GJ@OR@OQFRVEPUJY[JY\HV\BRXIY^Ufl_hq`ir^gp`hqajsbjt`hr^gp0KWKdp1GV-AO1CT0AT1DZGZosRgr7KV6HS+=H1CN5IT/CN.:I5BP4DQ2BO1AO8HU3DQ3DQ1I`³Ç¯Nfq=S^:LW.;H9DP,=F6HQ2IN7HQ?JV,8I¯ÇÖUt
F]hG]hDXc9KW*;C3DM=NW6IQ8KS<OW;NV<OW;NV=PX<OW>QY8QW>PX>N\Ym|¶Ät H_oETdH\g1CO:HQ:EP>IQ>IQ<IR>KQ9PP;MOBMU=NYi°Áq@UnCV]BU]BS\FX^BT[CV]>PWI]cEV]HY`IV^IV^ANVCPXGT]KX`NZcVckUbjTbjWdlCPXLW_S_g\]fX^dPX_XbiS_eP^dP]cL\cQ]aUadTchYgmWejXhoXio\mt_jq`ksbmtcnualtbmt`ks^iqµÁ3GS4ER1AQ4DU7H[3I[|¦¥Lbm>R]<NY4FQ3EP5IT4HS)5C1>L1AN2BO6FR>NZ6HS3EPOh°ÆqNet?S]BT_7GS8FR5HN4KQ2HN4GO7DQO^n«½o¤IaqAXgEXcDW_(9B5EN:MU;NV<OW=PX<OWAT\;NV<OW;NV?RZ7NS<OV>N[¯¯ÀmOgyt_z:NY:JW@KUALT?IR=LQ?OU?SUAQW<LR7JU¥³±ÁeBVn>OY@R^EV_BT\FW]CPY\x1f-4IV`=JRCPXERZFS[KX`MZbR_gUbjScjRbiPagT`hUbjZgnZgoWdl\enYaj]enWaiZgoZfnWgnVfm\go\goXemYgn\gq\ks\ks]mubmw`lv]irZeo]isalv]hrVak_qx0?HDR_8IV0@P.BS6L^³ËÝ©Ndo=P[8JU5GR6HS7KV2FQ0<M5BP0AN3CP3CO=LY8KS8KS·Ó좸w BYhK]jI[eCR_.>J:LR2IN.GM5GO)9Feu
¾e]u
D[jGZeGZb/BH:MT6IQ9LT;NV=PX<OW=PX;NV<OW;NV>QY;PX=NZ(;G¾×ç~ ¯m¡Hav¯¾Ñp>T_5ER>GQDMVBNSCQWFV\ARWERZCMW6JU£ÀγÁr¢BWm:MZ?Q\8IRARXHUZXaj\x04
++\x15bepSaiYfnYfn[hpWdlZgo\iq]iqYhrWfoYhq[ktUdm[jsZir[js[jr]ktZjrZirZir[js[js]lu\fo^hr]ir_kw^jv\kv\iwYftWgsQamO_kRbnM]iM]iM]iN^jgsy=IQDOY:HT6FS4IX/HX¡ºÌ
¨BWc6JU8JU:LW7IT6KV4IS0<M8DR0@M7FS8HT(9ANah §t¬WsOhzNdsL`lr £¬¡z{¦ª·Â·ÅÕ¥µk¦[qAXhF\fO`gI[a@RX%7>&;B(9A)<C-@G5HO7JP?QX@RYBRZ<QX1@Ks¸Ç³Æk TlÆÓê®·5NZ<LX@ITAISALR>KR9LM@MVAITHQ^1CO²ÐÝ´Â`}BWj@QaNbmYjsYhm]gmbjr41@gu|gt|cpxanvcpxamvZkqSdkZhpWfn[irZhq]ktXiqWhq[ltZlxYlvaq}`p|^o{ao{_ny^lxem{fm{amxbl{_hv\huZeuR]nL_lL_lL_lL_lJ^kI\iG[hFYgOjp2IN;LU8FR6FS3HW/JZ¬»v>V\8MU3HP7IT4ER1AN1AN\x1d18;MX]ozeykj}h~PfsE]iG\gJ[eO_l^n~¬³¤¹ª»\x7f¯
¤µ½ÑµÉ®Ã³r¢wOfvI`pG^n{¢\x7f©¨¶®º²»¨µª ²®¥µ«¦²¡°¦ÄÒ°Îߺд\x7f³Ur¸Óçv¨Gam>LT?HPESXAQWHV[HSY[ggO^cZp{d~¬ËÞ²Çd\x7f@Yi7R^FakXkr`pyv,1>kp~\x1c\x1e3YhpWgo\gr_ls]jqanu_ltbntWkyWkx[o{Xmx[ny^p{]oz\nz[nx^nz`p|aq}dq\x7fdq\x7ferercrz^nz[jvVgsPcrL`rKcsNfvOeqNepRerWguVfrUeqZgtWfoPjp;PV5HO;KW@P]2ET±ÁºÉYqw:PU6KS4IQ:LW5FSN^kbr~t\nyRdoL`kM`mK^k>T`>T`4LX=S_\lyZkx>Raax³t©¡±¬À¦¹®Á§º
´w¦w§h~\sYq~§«»«¹\t¤¢²¨º°Á½¬½³Â¸Æ¦ÁҴƮ¥¼t«yª§Áצ²<VbCR^ET\K[d>SZFXcQ]jK\aN`jXq¼×ëºÏ¨¼iCZi=Vb9P[Ymt`kuYclX`mt{06Ebs_o|_o{_o{`nz^lxao{_lx[kxUfsTenTenSdmTfoTfoZirZjv]mxYiuScpScpYiuZhxVduTfpXhtUhuSfuSftRgxThyThzRhtPcpPdqSepXhuZjv\ktXgp\v|=T[3EP5DQ8HUL`l®¾pG]b7LT5JR6GS9KV8IV8HU:IY7JT9KV>P[<P[ATb5HU9P[8OZ7M]9OZ¾ÑÞRboBVe9QaRl}²s£y§³¢¶±¤µ\x7f¬y¥nnWpt¡y¦\x7f®¥¶¤²9JWl¥¶ ³´É®Ä²´ÈµÉ²Ç®Å¦¿§Àsª§À·Ë
¨¶<Vd>MZ\myy¨¤³°Â¸ÅªÅÖ¥ÃÖ°ÐèµÎ°^tDYh=T`9MXWhqbnxCLWHS\DMZ%,;as^o|]n{Zkx_p}YjwQboYjx]jq]jr^ksbowiv~dqybowhu|evjzjzfw`o[m|TixPetPfuOfuQetNbsOctRduPbsM_qOcnPdoUfr_q}XiqRclRakQ`i^wCYd/DN6HR8IV6GTl\x7fH^j>QY9LT5IP6IT5FS8IU8HY:JZ7JT;MW8JU9LY6IV7JV7L[7L[4N]:Q`®ÂÒ@S`BUb=Ra7Qasx¦|o
´x§®}ky£d}h[v|«t§¨»«¼DP`AUf°¦º¤»|³·ªÀ¶Ê´ËƤÀ{µz±§¾¤½u£B\l?Q`Pdu°Á±Ã²Ë¬Ç¬¿¾Ö«Ìã¦ÆÝ¸Ít¡]qGVg<P]GYdTcl\iq`ksLU`8DNco|_itdoygr|hs}lteq~huivlu|nx~jt{ku}r}
vr|oy\x7fap[jzSbrM`oK_pKbrIbrHaqGbrF_oGaqKcsMasPctTduTdvPbmYkvfz\mvPajL_fIZ`EU\VnzDZf=P]<MZ:LW4FQ>P[9KV7HQ6GP7GS2BN7HU7GW9IX5EU8JT:KX8IV3FS6IV;M]5JY4IX3K]E^n«ºRhs7MY6K[<Sc<Scayx¥{©¯°{ªpf~«a}fjy®t¦µÈmUaq2FXs¢z±¤¼w°µ¡·Ï¤»²Ë »{´y² ¹©Á±Ë|¨AXh:K])=N°Á} ´±Ê®Ë§À¿Ö¦¾v©lUl~M`oK\iCVcDUc?NWeszgrzZem1=Gkx\x7f{\x7fx~u{\x7fxzw~oxt~s~
s}o{
lwit}anz[hsTctN`qM^oI\mI_pI`rGbrF`pD_oIasJ`rOcuQds]m~aq~dt\mvZjtVgqN`gL_fIY`FV]BRX]t@Wf8NY7JW9KV5ER7FO7FO<KS7EQ5FR7GU5EQ,<L2BR5EW5FS5FS3DQ3GS3FV5GV2HV5JY+DX=Ug®¾Pfv@Va6LX:LY7JZ8PcMex®y©z©kq¤oi]yhzªp£©ÈÛ ±O_lAVf3I\^w\x7f³µÐ ¹¡¸¯Æ¨Á¡¼w²\x7f¸n¥©ÃÜ ·Îk
AVgGVe8K]t¡vªªÂ»yp¡GauB[n>VfCYhBTbFWaBWg>Q^>OXiv~v}$/7S_h
z{v}wxx\x7fn}
mziy]lxWgsN`oObpM^oNasJ_rI_qG_pG_sHbuJcwFbvPfxNdwShy[o~`q~euYiu]luK\eJ]dHZaEX_FV\AQWAPWBRXI`pNeu9N^=P]<NY?NW=JR<FN2@M1?K2@L0AN#2B#3C-=N4DU7HU6GT4ER6IX7JY3FU/DU/CT3Kb¸Ì ¯D_l=Ua5LX2ER;LY7N^7M]Ibr{¦w¦nq¥n¤x¡qhf}y©o¶Ò㣲Zr|>T`?QbQ^u«
µ~¶Â£º\x7f¡¹}·x³x°}´®Èݦ»c{IXgETd8KZUp~¡¯e}L^tCXjEYl=OaG[h@R]DUa=RZAV]8O`8N[=QY[goxjt|\x11\x1c":CMclsgsxis{lwiw`o{[kwZjvUhwQcrQftLcrG^pG_sG`sG^uF`pFaqHauIbvIcvKcyMe|Nf}Xi}[n~aqZkxXhu[luN`gK[bL\cFV]M\dGV\CSYDTZ=PS;NQLctAXh=Ra9KXCT^DQYEQXIRZDO[6CO-:F,9G\x04\x13$^[+;-<M1@R5ER6FS3DQ2FU4GV1DS1DU*=N.E\²Ë߬Zu<T`FYd9JU@O\0JV;S_=VgB]nw¦s¦p¥u¬y ld~h~«©¹«Ç×UtyLbm@N^NTiz
©Ã§¾\x7f¬Á|³¨¾} ·y³\x7f ¶±Æ°Ä~¨Shw@OaBM[?P]*FQ2O]9Qa<K\AP`>M^BM\ANZ<MU?RY=RZ<QW6Ra9R^@RYCRXq{\x7fty\x7fqv|gkoVdoTdpTdoK]kM`qJ`rI]sD\qI`oF`oE]nF^rE`tD`y=]tFe\x7fDcuHcwJexKg{TlUmUn
Volw]i}_n\x7fWguM^hEW^GW]DUWDS[HX_>NTCTYCSYASU;OR@SVfD_h6P\6P\5O[>YgB]kHcqTjtATaq¡o~y¤tr¢¦\x7fx¡®¬º£ÅÚ¥ÃÖ\x7f©Vm|BXdATa?Rb8KZ>TXBZcF\i?ZjF`tkp¦m£wsjg}µȨ¼¡7MY=P_.BSx£¬Á¤»¤»£Â£½y³{³·±Ç²dFX^>QY@R]=OZ7HU=NZ9IY;K[;J[<MZ9JW:KX=N[<NY;MX<MX4IY3K[5M`/J[Gcx>ZoA]rB^q9Xr>Yt>XqBZsF^tBZqC[qF`sM_tK_tG_rB_tFcwFbzMg\x7fSiNkYtLg}^yWqWo~WlxLanHfkQjoEX_IY`IU]GW^ASZBT[=VV?TV>NTDOWEPXDOUCQT>OR_xPiu7Q]4N\5O]:TbE^nOhx¦¤²
©®¥©º®¶Æ§ ®¬\x7f¡¯«º ¹É³ÃÁÕ²Å
®Vm|F\gI[h@Rb;N]DXXCV[K^fNaoVi|F`pv¡}¨|§z¥oq¡v¨´Ñæ»Î³ÇXpxC[g@Ud9M^tªÁx®¤»©Ã
¥¼¶{¬dUpF]q?YjBT[BU]>P\:LW;LZ8JV:JZ9IZ4EQ6GT8IV<LZ8JU;MX=OZ:LW;LV<MU9LZ3HWJaqD[nC]mD]qA\qC^sD_tH_uBYpIbuJbuA]pKbzLe}Kf~MlHg~KkVp]t[w`xIcwp¤´j\x7fKamNbnG`fI`eFX_GW^CPXAQW@SY=PW=STAUY>NUBMUFPXAMS?NQ=OPlSm{6P^2K[5O^:ScC[mLdul
®v¢°~«~®mq¥l}«{§ ´¥µ¨¹©¹¹Î¶Év¢k
?Sb@Ud@Ud=PbKZ^N]dTemZlvK^kYo{Umyw~«z¦{ª\x7f¯¡¿Ó¼Ñ·É¢¶_{
?Ye>Tc.EUw
°µ°`yk;Sf@Wg>Vf0EU<S^5HV<NY;MX<NY=OZ8HV:KX3DQ5FS:KX8IV9JW8IV9KV6HS;LX:LY@KN@NT>NT9KUThwLcuGbuKfzMgzLezHeyEauLh{Kf~Hg}Gf|IfKlNoSuKkPoSp
Okj ¶y¡}£patI]hN_kCV^CT^BQZ@OX?NW?NW>OX:MU9MS@QZ>NV@LVAMW=KQ?MP=OPz£Xq5N^6N`1I[;SeAYmH`tiz®µXsu§gWuqª¡º{³|²r¨}±©¾¨½®Â¥ÆÚ»Î¬½n<RaE[j=Tc@WhL_hSeqXm{`s¦µ «¦¯¦·ª¿«À²Æ°Ì塽ҷʡ±c>Xf5Q^9Rb>Uem?TfBUl:P^>Td?R_BVc9KU>P[5GR:IV<NY7IT4FQ+=H\x13$28IV1BO8IV7IV5FS9JW6HS9KV9KW>QY8LT?MN@OU;MS7JUE^mJg{MjJhPm
PrXzVzTxJoVzl«z¼\x7f£Â©Ç±É¯Æ¶Ì°Ä¥¹{¡]qUgyPdsL]jHYf=OZBU`AR[DU^>LV?MVAPY?PZ;KU<MV>MVAQY;IU>IVBNXAOUBSV@RSr_w5M_/GY1I[7OcC[oNfzr«vw«b\x7fIe~=\u6Tp=^{Xwcl¥k£}´§¾\x7fµ¤¼¿Ö¹Î|¨pC]k;Uc:Sc<Ud>WkE]qC^r¡¹ ¸}®\x7f ²¨¶¯±¨½§ÃÛ¨ÄܳȱÄ}®VsB`o<Vf6O_4L\AUg<K\6FX9LV<NY9KV;KW=MY8IQ6GO6HP@P^3CP4DQ\x18(5\x1c,89IU7GS4DP6FS9IT8HT9IU8HU:KT;LU:KT7IQ=OW6JT5LZ]x ½{ Â{¢É¨Ê§É}¦Æ~©É{¨Ê¬Ð«Î¸Ü´Ð¶Ô¼×j¢`}h
c~JduRetI\lHYfDTbCT`CUa?RZ>OX>OV>PX4GNASZ7JQ:LSASZ>QXCQY;GQ7FOBQZ@NX@PV?PS=OPªd}>Wg0HZ2J\7OaBZoNfzn¤uªmXs9Ti5Qj$A]"@]">RJh}s¨q©uw®¡»¥¾ÀÖ¨½ ³Vp\x7fIcs<Vf6O`4Pa9Yo@`wIgm¦r¬ ¹{²x²yª®Â®Ç¶Î©È߰űÄu¦[t@Zj6P`4N^3IX9KZ4DT:IZ9IT;KW:JV8HT7FR7GS7GS7GS5ER5EQp\x0e\x1e+!1=7GS1AM1@M2BN9IU9IU:JW9JR;LU<MV<LU2IU7NY5KV2IX9Ti½t½rÅt¿y Çz¤Êy§É¯Ò¶Û»Ýºß¨ÀZzTpLdzQiyF[kAWc=TaCTaCT`BT_?Q]?RY<OW>PY>PX:RW5MR5MQ6OS4JO;OT9LR;LR<HMBQT>MT9KS=OV<OTASU>OS|¤kD]m3L\4M]7OaBZlOgyn¢x©s\u
Ict-H\,Gb\x184S4GX,CS³Ä©½z® ·}´
£¼¾Õ¦» ³c~Jdt;Ue6Sb3O`7Ug@_rIf|Lh¢¼¢»¢ºv«´
¡º¯ÇǼӨ½ª½q£Wn>Vh<Wf2L\2M[6LX8HU8HU7HU7IU:JW9JV4ER5FS6GT6GS7FV8GWJZgRbo1AM:JW=NV3EM;KW9IU;KW6GP=NW;KU8JQ7IP6IQ7KR9LS;NV-BQHdxIeDhDdGkCjBiFoFhHdKa~E`pLdtNetPanJZhHXeDW_BU]?RZ>RY<OW>PX:OW8MU=SY9NTEdcDdc8WV+JI1MM2KK=OP:ILCQMDRP9KL@SV=QV>RV>NT=LO{¢s=We7O_6O_7P`B[kPhzq z¥iXn}=Wd0IZ,G_\x1c8T7EO/AN{£¨¸«¾z±¡»
£¼¿×¯Ä§ºu¡[y9Vd7Tc2Pa;V`A[iLeuTm¯£¸z¦u p¥³|°¯È®Å¦»¬¿y¬h|<Qc=Wf4O_0KY1GS9KU<KW<MZ4CT3GV2ET4GW2FU3EW4GY2AR8GX0@M5ER5EQ8HU6GP3DM6ER4CP9HU<MV:JT8IS7JQ6IQ>PP:IK=KHBNO=MR6J[2Kd3Qq8Sx8Vw4Uu2Vo9\uMj\x7f[p]l~QhtJ\gQ_kJV_T\fO\cDSZ=OU=PX:MU2IP;QX7NT7MT9MT#5>UuuCgfMqpRrsPmnF[]\x1f.15>CMXPLYUburF[\DY^ATZ?NUN[bs¤e7Sd0JZ3L\6Pa@YmMh|x¯}¯}ª\w7Wj3Sf.F\'5O;R[7M_r¦¤¾¥¹¢±¢·¦Á¼Ë½~¯k
^y<Wl5Sh3Rg3Wd<^mFbsQj~ku¦|³{¶{®~µ\x7f¶¹Ò«Äx®s¦x¬e=Wg<Ue6M]1EV3DV5EV7EZ3HR5JT5JT4GU5FS6GT/@M5FT6GO6GP6GP4EN:IR>MV6EN8GP7KS5HO9LS5IM6JO9JL<MP<JM:KN<MO=MS;LS4CKES_M[gKVd<P]CVcOcnWht_pxUfoYioRbhK]iGYdGYdGYdDWb>P[?Q\9KV4HO-;G7CO4@L2BIAWZ\x1240SyqDyk?uf:oaH|jF{iPpPqNmL
sU{p.A>{ENQ0BA9SO4OKu¦b?Yj1JZ4M];SeB[pKg{}µt£nh4Ue3Sf+CY%3N5LU,BTr¦·¨»¨¸¡¶¨ÃÂѪºq¢hJcw?[o>Yn3Pe5Wf@]nHcwTkd|iu«v¯wªs©\x7f¶°É¥¿«Âvªr¦kIcs:Sc5L\8L]1CT6EV5DV3HR3GR3GR2ES2CP0AN2CP4DR3DM4EN8IR9KT>MV;JS:IR:HR6IP6HO9LS9IP<LR=MTAPS@OR:KM;JQ9HN9IP5DM?MYM[gFR`M_lZkyVhsSfpCR_UfnIYcXhqGYdDVa?Q[?Q\>PZ<NY9KV;MX1EL,:F5BN;CQUaj[mqXsq[{tI|oDvj;pcG|oCxiCxjEzlLrc|h
ƾŽƿ½¹°«p¡e>Xi5N^8Qa;SeB[oLeys¨lv£Uq<^m0Qd.DZ 0G/FP2H[¥À ¹¨»}¯|°¡¼§ÈÚÀ{¬r_xD]r:Sh7Sd7Vi@^qGbwOf}Wo
t¦t¨t«yw¤½§À§Á\x7fµ©¾wªrRl|:Sc6M]7K\2CT3EV5DV4HR2FQ1FQ4FQ3EP5HS9IU8GT;MT4FM3FM<LS<LS9IP9IP:FN7GN8IO:JQ<IQ;IO>MR>MSCNT;OS;NS7IP9KRL]fJZfO_k`p|]mzTdq[kwUdpOalHYeGZb>RXBS`=N[AR_;LY7HU9JW:KX4FS1AM6EP6>L\x18!+2;EBNRFXWf|xT\x7fwJunN|rM}tExnG|rH\x7fqKv?pGwCui®¥qÀµuºr¹®Ä»~¯fB\m?Xh7P`?WiHauIbvt¨r¢o[u8Zj5Sf)?V!.EE\f?Ug´Î
£¼£·~ ¯q¥¥À¿Ðª½v§w¡¥·Zq>Wh4M]:UkC^sHcxNh}Xsw©}¯v¨¥º~´§À§À¨Á¥¼\x7f³~±rUn~<Vf5N^/FV2EW3EV4GV6IV3FT4FQ5GR6HS3CO2BN:KS;NT;MT=MT<LS=NTANV>KS<IQ:GO>KS>KSANV:GPALT<GO>HP2EK9KR:MSFW`N`hRbnP`lO_kP]kKWfJ[fGWcBT^?S^DYc<Q[<MZ;LY7HU6GT6HU:LY2CP8IW1BM2@L<FP"(1;CJHQV(21\x1a&&*CA
)&?]Z`}V~wS~wQ~wU|JDxE\x7fvMrº°o¿¶}ÍÄ5zu¤mBZl?XhCYi@VhMeyc|v«s¢~§\v<Zk2Pa&>R$1IAXb8Na£½×§Àt©£²µ«ÆÁÔ¨»}®§¸Wn~L`o<R^=S_8PhBYpIdyPm^zw¨w¨z«yt«¡»¨ÁªÄ¡·\x7f³~±v¢\x;Uf6O^1HX3HW4GV2FU6FS6GT6HS6HT5FO5FO3EN4EO;KQAQX:JQ<LSBNV?LT9FN:HP<GO<GOAKS?LT<IP5AI/<D>KR;LUEV_^ow[ltO_kTdpQamO`lKXdIWbBR_@P]?O\>Q^:NZ;N[;KX7GT3DP1AN7GS9IV3CP5FR0=K.:F1;E")35;@JOR"'*\x18\x1d\x1d\x19"''46\x1f-/\a\x16\x18\b\x1e^[\v$"!=:Xurs~rZ:u^¯¤o¸±M~zg
y¨oNfx?VfAXhF\nf~¬t©~«qf=\k/M^(=R!.E1HRAWi©ÂݧÀ}²£³\x7f³®ÉÀÓ¥¸À£²^s3FS7IT3FM9RhE^rIdyPmZyk¡{®{¯¡µ¦¾¡º®Ç¥¾©À{¯~±|«f?Yj2K[6M]3HW1FU4GS4ER6GT7IT6FR8IR1DK6FM;KR;KR=MT7HN?LT>KS<IQ=JS@KS?JR9FN9FN<IQ5AKCR[=LTCRZdt]myu
Wfs^nzK[gAP]HXdGWcBQ]JZgAQ^:KX:KW8HX9IY:IY7FV8GW6EU2AQ5DT0?O0@P,7H%.='0;\x1d%,8>CEJM&)-\x14\x15\x19 #(-/527:48;7>A\x10^[^[\x0e\x18\x18\x16!!\x15^[\x1a\x17"\x1f\x1f1-&FAcrss¢u¢^vRiyjpy¦®{¬¡µ¢´x¢:Zi0N_(=R!-C\x1d4>1GY¶Ðy±w¬{¬¥º©ÄÁÔ©½«ÉÜnZlyJ\g:KT/AG5K_C[mFavKj\x7fSrj¡r©u«vª¢¹¡º²Ë«Ä
¤»¨½\x7f ²w¨l<Xi4N]4M^1GV/EP.EQ9IV7HU<LW8GT5FO>NU9IN=MS<LR<LR9JP@NT=KQ>MS>JP:FL6CL8DM7HO<LSGU_7HQVfr[jwGZdj|CU`PbmDVaAS^GYdAS^7IT7IT9JW4ER6FR6EV9HX8GW5DT7FV3BR8GW5DT5DT2AQ0@P-5F$+:"+5\x1d%-+2527:69=\x1c\x1c \x19\x1e#\x1e$(-25-25!$) \v\f "#^[^[\x1c\x03\x1e^[\x18##$\x1f )\x1f\x1f>;;<DG"47%9?q ojuwezv |§k|§¨m:Zi6Rc&<N ,C\x1c3<EZm¨Ã¬Åw¬¢±«Á·ÒÆÙ¯Ã¯Àc{Wiv?PX+=D*9?8M`6P`Nk|Gh{Uuq©y±{´s¦z°¥¾¶Ï¸¦½¦»¡³
£µs¡=Yj1K[8Qa5L[4JU0GS8HU2BO9HU5FO&7A<LSBRX4DJ:IO;KQ=KQ>LR9GM9EJ/;A5AG7EJ=MT?OUAR[WgpZlwM_jXjuQaoM]kJ\gFXcAS^>P[:LW<MX;PZ6JU<P]2CO6EU8GW<GY4?Q5DT3BR6EU4CS2AQ2AQ1@P,=L+0D!'7\x1f(2\x18$';EH\x14^[\x1e^[!$\x1c\x1e$\x13 #\x1d+-^[(* \x10\x14 %&/12\x1e\x1d\x1f!\x1d\x1f\x15\x16^[\x19\x1a\x1c\x18\x1a^[\x0f\x18\x15%53,;=..7WLY °lqd}rqu¥w§|«z§gjG^m;P^1CP-@M0HX¥¾Î·È®¦¹À«¿·Ë¼Ï\x7f²³sPetAR^:KS:JQ3DR4GVRg|Nf\x7fg\x7fz®n v§{´\x7fµ¬Ã¦ÆÝ°Ç|¯¥ºvªq¥e
>\o=Wf7Q_;Q]6JU7HS1FQ4HT6KS9KS7IP6FM;IO>IO:PR7LM:MU3EM1AN%7@=KU;KQ?QX:LSWip[msQbkRclVgpPajCV^J]e@S[<OV=OZ@R]7IS:KW4DT;K[:JZ7GW5EU9IY8HX3CS4DT2BR1AQ9HX1@P.=M.>N.;K$/=\x1e'4\x1c#,^[!&\x1c!%\x19\x1d\x1e/45\x15\x1a^[\x18\x1e\x1d\x1d#"#('\x14\x16\x16 .,,&!"\x19\x12\x14\a\x19\x15\a\x0f\b+"^[O93D($gRQqgj~r£j
r¡nw§m~°v¨|«¬i
^xOhx@WgCWfMap¡²µÆ¥¶¯¸Ê²Ç´É½Ð¶É¢µ~«azEZi6FSARZ8GP/BM/CRJ_u\ty¯s§u©w§~·£¹°Ç¦ÆÝ§¾~²~²r¦¥º{¯:Xk5N^9Tb:O[9MW3GR4FQ7IT9LT9MU6IO9IP<JO;GM9IK<JP1>F:FP1>J@LX?KULWbSfm\nuQcjQcjL]fHYbK\eFW`GZb>QY:MT>P[7IT:LW6GT7HT6FV9IY8HX6FV7GW8HX7GW7GW3CS3CS1AQ3BR/>N,<L3@P,9I$/=\x1c%3\x1a!*\x18\x1e#\x14\x19\x1c\x1a\x1d\x1e\x17\x1c\x1d\x1c!"\x14\x19\x18\x15\x1a\x19022^[\x1d\x1d\x13\x13\x13###\x1a\x18\x18 \x1d\x1d\a\x0e
\x19\x1a\x16$\x1e\x173'\x1f;.(60-#'&\x05\x11\x14|´\x7f·z²¥¾~´´{°z¯§ºu¦[vrNhy@Xj²Á«¥¸®Á¯Ä©¾³È±È¶Í¸ÎÀ©¼«¼z£6JY9KU4EM5DL6GS,<L8Oa¸\x7fµ§¾¡¶¡´{´°Ç¢ÂÙ©ÉàªÁx¬¨½x¬´a:Xk=Wg:Sc;Qa4JU6HV3EP6IP7HQ8GP9HQ:GN;IQ<GO<FM6?H5>G19FAJWZbp\fpfnyNahFX_GY_@QZHYbEV_;LTFUbDW_:MT;MX5GR:LV3CQ3DQ4FR3CT5EU4DT3CS6FV6FV5EU4DT1BR/?O/>N.=M-<L0=M0=M*7H&1?^[$1\x15\x1c%\x12\x18\x1d!&)\x18^[\x1c\x12\x17\x18
\x13\x14\x16\x19\x19\x10\x12\x12&((\x16\x18\x18\x0e\x11\x11!##\x18\x19\x19\x11\x13\x13% "LFHQMI]]T$) #.'CSL\x17)%°Ì§Ä«Ç¥¿
£¾}µ°É®Ç±Å³ÇÂv§g±År «¾¶Í¾ÕªÁ³É´Ê´Ë¯É¨Â«Â ¿Ô¬¼tVlwVhs7GS<JV2CL5FS\x1f3E´Ë¥¿§À§½ª¾¦À¼Ó¦ÆÝÀ×®Å{¯|°w«~±aYw6RcA[k9P_:Q`5KW5HO7HQ8GP7CM@LV:EO:FP:EP2<C:FP6BNlv
¥±À¡WgqJ\cBT[HYb6GP?QY;KW;KW<KX9MT3EP>P[2DO6GT2CP6GT3EQ3CS3CS4DT7GW4DT5EU3CS->N2AQ.=M0?O.=M.;K+8H2?O#1A\x17"0\x13\x1c*\x16\x1d&\x1a &\x14\x19\x1c\x1a\x1d\x1e\x10\x15\x166<=\x13\x13\x13%%%\x17\x19\x19\x1d\x1f\x1f\x14\x15\x15\x14\x19\x18\x17\x1c^[\f\x12\x10\x17\x10\x15ebdLNLAIB\x1a&\x1c\x0e\x18\x0e!)"\x1e&\x1f¦È±Ñ£Äv¶¤ÁªÅ
£¼{°m¡s§Wss©µÌ¬Â¯Æ¡¸\x7f¤¿§Á
©Â¿Ù°Ë»Ö¬Ä¶«Â ¿Ó©¹lOdoDVa;KW8ER7FO/@N*>Qu¤¤¿§À¦½´È¦À»Ò¿Ö¡ÁخťºÂ¥º¥·mRq@[l=Vh9Rb:Qa6M]:MS9JS5DM:FP:DM4@L3AM:JV?U\-AL·Ê×§´¶ÂmRhsLdkCT]HYb?PY>PX:JW<LX=MY9IU3EP9KV2DN.>L3DQ4ER4ER3CS3CS2BR3CS1AQ4DT6FV4DT/?O1@P2AQ.=M1>N0=M-;K2<M#,>\x1d(6\x19"/\x1c#-\x19\x1f$\x17\x1c\x1f\x16\x1a^[\x0f\x14\x15$)*\x0f\x0e\x0e\x0f\x11\x11\x1e \x15\x17\x17\x0e\x13\x12\x11\x16\x15\x12\x17\x16\f\x12\x10%!&XWY@ECCJE\x15\x1a\x1487.\RKgXRz¢Åj´j°xº ½tl¡t¨{¯f
o¦«Ä¡º¬Æv±y¶\x7f£Áa
£§Ä}¼©Æ®ËªÅªÅ°É´É©·[tKak;MX9HT8ES4DJ2BO.CTBZq
¡»«Ã°Ê®Å«Ä¤ÅÛ ÀׯƬīÀt¨n¢|¯v§`~B]n=Wh:Te9Qa1K[4HO6IQ6DM2=J,8D0>JDVa9KX®¹®¹©LguwNfr=Va<W^9IR@QZ7HP?O[7GS8HT8HT3CP3EP1CN5FS1BO.?L3DP3CS1AQ5EU3CS3CS1AQ3CS4DT3CS/?O2AQ1AQ0=M/<L0=M/9J+5F$.@!,:\x1d&4\x1d$.\x1a %\x18\x1e!\x12\x16\x17\x11\x17\x18!&'\x12\x17\x16\x0f\x14\x13\f\x11\x10 \x0e
\x10\x15\x14\x12\x17\x16\x0f\x15\x14 \x0f\x0e\x1c\x1e \x18\x1a\x1a475GHF\x1a\x17\x13>3/ub]B)%b±h³q¹v¸q®v´v¦m¤p§ ¹¥¿«Å}¼~£¿{ ¼¤Å¦Çv¸¨Æ¦Ä}¼°Í¢¿®ÇÂ|§j
E\d@RZ:JW6BS9FL/?L/AS0H^®É¥¾³Ë´Ê®Ç¯Æ£ÃÚ\x7f¶ªÁ
¤¹z®s§{«w¨g<Xh=Yj;Uf8Rc2L^7NU4IQ+<D8COAO[;JWx²¾¥¯Rm|lF]mYn}7JW9KV=QX>NX:KT9JS7GS2BN:JU6FS9HV2EO.?L5FS1BO0AM1AQ1AQ1AQ2BR2BR2BR2BR1AQ3CS4DT3CS2AQ0=M0=M/<L0:K1;L)3D(2C#.<\x1f)6\x1d$.\x1c"'$),\x1c !^[ !#()\x11\x19\x18\x14\x1a\x19\x14\x1a\x19\x13\x18\x17\x10\x15\x14\x0f\x11\x11\x0e\x10\x10\x13\x13\x13
++\b!" &'%&$$\x0e\v\a/(%$^[\x17OD=kºy¡Ä±Ó¤Â§Â®Æ«À¬Ã©Â ¹È°Ê¯Í²Î{¡¿©Ç
¤È{¾r´o´¨Å¨Æg¨|¡½£¾¯Æ\x7fªwE\dCV]7FT>K[9FM3CP*<M$<R²Ì¹¯ÆÅ§À¢¸¡¸¬Ã¶{¯|°s§r£mk>Ym=Yj:Te8Rc6Pb1KQ/FO9IR>KX
º}¢^x[vf}Oct:L]BQbAN\;GSDMW;MV5GO1AM5EQ5EQ5ER9IV3BO1BO/@M3DQ/@L3CS/?O0@P2BR0@P0@P2BR3CS0@P1AQ1AQ1AQ,9I0=M1>N'4D+5F1;L'1B'1C"-;!*7\x1d$.\x1e$*&+/&*+"'((,-".+%-,^[#"\x1e%$\x16\x1c^[\x0f\x11\x11\x13\x13\x13#!!,+'\x18\x18\x13/+*=98\x12\x10\x0f\x13\x14\x10\x10\x17\x10%-&
+\ No newline at end of file
+Index: git/host_applications/linux/apps/hello_pi/hello_wayland/Makefile
+===================================================================
+--- /dev/null
++++ git/host_applications/linux/apps/hello_pi/hello_wayland/Makefile
+@@ -0,0 +1,5 @@
++OBJS=triangle.o
++BIN=hello_wayland.bin
++LDFLAGS+=-lwayland-client -lwayland-egl
++
++include ../Makefile.include
+Index: git/host_applications/linux/apps/hello_pi/hello_wayland/cube_texture_and_coords.h
+===================================================================
+--- /dev/null
++++ git/host_applications/linux/apps/hello_pi/hello_wayland/cube_texture_and_coords.h
+@@ -0,0 +1,100 @@
++/*
++Copyright (c) 2012, Broadcom Europe Ltd
++All rights reserved.
++
++Redistribution and use in source and binary forms, with or without
++modification, are permitted provided that the following conditions are met:
++ * Redistributions of source code must retain the above copyright
++ notice, this list of conditions and the following disclaimer.
++ * 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.
++ * Neither the name of the copyright holder 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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.
++*/
++
++// Spatial coordinates for the cube
++
++static const GLbyte quadx[6*4*3] = {
++ /* FRONT */
++ -10, -10, 10,
++ 10, -10, 10,
++ -10, 10, 10,
++ 10, 10, 10,
++
++ /* BACK */
++ -10, -10, -10,
++ -10, 10, -10,
++ 10, -10, -10,
++ 10, 10, -10,
++
++ /* LEFT */
++ -10, -10, 10,
++ -10, 10, 10,
++ -10, -10, -10,
++ -10, 10, -10,
++
++ /* RIGHT */
++ 10, -10, -10,
++ 10, 10, -10,
++ 10, -10, 10,
++ 10, 10, 10,
++
++ /* TOP */
++ -10, 10, 10,
++ 10, 10, 10,
++ -10, 10, -10,
++ 10, 10, -10,
++
++ /* BOTTOM */
++ -10, -10, 10,
++ -10, -10, -10,
++ 10, -10, 10,
++ 10, -10, -10,
++};
++
++/** Texture coordinates for the quad. */
++static const GLfloat texCoords[6 * 4 * 2] = {
++ 0.f, 0.f,
++ 1.f, 0.f,
++ 0.f, 1.f,
++ 1.f, 1.f,
++
++ 0.f, 0.f,
++ 1.f, 0.f,
++ 0.f, 1.f,
++ 1.f, 1.f,
++
++ 0.f, 0.f,
++ 1.f, 0.f,
++ 0.f, 1.f,
++ 1.f, 1.f,
++
++ 0.f, 0.f,
++ 1.f, 0.f,
++ 0.f, 1.f,
++ 1.f, 1.f,
++
++ 0.f, 0.f,
++ 1.f, 0.f,
++ 0.f, 1.f,
++ 1.f, 1.f,
++
++ 0.f, 0.f,
++ 1.f, 0.f,
++ 0.f, 1.f,
++ 1.f, 1.f,
++};
++
+Index: git/host_applications/linux/apps/hello_pi/hello_wayland/triangle.c
+===================================================================
+--- /dev/null
++++ git/host_applications/linux/apps/hello_pi/hello_wayland/triangle.c
+@@ -0,0 +1,666 @@
++/*
++Copyright (c) 2012, Broadcom Europe Ltd
++All rights reserved.
++
++Redistribution and use in source and binary forms, with or without
++modification, are permitted provided that the following conditions are met:
++ * Redistributions of source code must retain the above copyright
++ notice, this list of conditions and the following disclaimer.
++ * 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.
++ * Neither the name of the copyright holder 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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.
++*/
++
++// A rotating cube rendered with OpenGL|ES. Three images used as textures on the cube faces.
++
++#define _GNU_SOURCE
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <math.h>
++#include <assert.h>
++#include <unistd.h>
++#include <sys/socket.h>
++#include <sys/un.h>
++
++#include <wayland-egl.h>
++#include <wayland-client.h>
++
++#include "GLES/gl.h"
++#include "EGL/egl.h"
++#include "EGL/eglext.h"
++
++#include "cube_texture_and_coords.h"
++
++#define PATH "./"
++
++#define IMAGE_SIZE 128
++
++#ifndef M_PI
++ #define M_PI 3.141592654
++#endif
++
++
++typedef struct
++{
++ uint32_t screen_width;
++ uint32_t screen_height;
++// OpenGL|ES objects
++ EGLDisplay display;
++ EGLSurface surface;
++ EGLContext context;
++ GLuint tex[6];
++// model rotation vector and direction
++ GLfloat rot_angle_x_inc;
++ GLfloat rot_angle_y_inc;
++ GLfloat rot_angle_z_inc;
++// current model rotation angles
++ GLfloat rot_angle_x;
++ GLfloat rot_angle_y;
++ GLfloat rot_angle_z;
++// current distance from camera
++ GLfloat distance;
++ GLfloat distance_inc;
++// pointers to texture buffers
++ char *tex_buf1;
++ char *tex_buf2;
++ char *tex_buf3;
++ struct wl_display *wl_display;
++ struct wl_registry *wl_registry;
++ struct wl_shell *wl_shell;
++ struct wl_shell_surface *wl_shell_surface;
++ struct wl_compositor *wl_compositor;
++ struct wl_surface *wl_surface;
++ struct wl_callback *wl_callback;
++ struct wl_egl_window *wl_egl_window;
++ int needs_update;
++ int ellapsed_frames;
++ int kill_compositor;
++ int single_frame;
++ int terminate_abruptly;
++} CUBE_STATE_T;
++
++static void init_ogl(CUBE_STATE_T *state);
++static void init_model_proj(CUBE_STATE_T *state);
++static void reset_model(CUBE_STATE_T *state);
++static GLfloat inc_and_wrap_angle(GLfloat angle, GLfloat angle_inc);
++static GLfloat inc_and_clip_distance(GLfloat distance, GLfloat distance_inc);
++static void redraw_scene(CUBE_STATE_T *state);
++static void update_model(CUBE_STATE_T *state);
++static void init_textures(CUBE_STATE_T *state);
++static void load_tex_images(CUBE_STATE_T *state);
++static void exit_func(CUBE_STATE_T *state);
++
++static void
++registry_handle_global(void *data, struct wl_registry *registry,
++ uint32_t name, const char *interface, uint32_t version)
++{
++ CUBE_STATE_T *state = data;
++
++ if (strcmp(interface, "wl_compositor") == 0) {
++ state->wl_compositor =
++ wl_registry_bind(registry, name,
++ &wl_compositor_interface, 1);
++ } else if (strcmp(interface, "wl_shell") == 0) {
++ state->wl_shell = wl_registry_bind(registry, name,
++ &wl_shell_interface, 1);
++ }
++}
++
++static void
++registry_handle_global_remove(void *data, struct wl_registry *registry,
++ uint32_t name)
++{
++}
++
++static const struct wl_registry_listener registry_listener = {
++ registry_handle_global,
++ registry_handle_global_remove
++};
++
++/***********************************************************
++ * Name: init_ogl
++ *
++ * Arguments:
++ * CUBE_STATE_T *state - holds OGLES model info
++ *
++ * Description: Sets the display, OpenGL|ES context and screen stuff
++ *
++ * Returns: void
++ *
++ ***********************************************************/
++static void init_ogl(CUBE_STATE_T *state)
++{
++ EGLBoolean result;
++ EGLint num_config;
++
++ static const EGLint attribute_list[] =
++ {
++ EGL_RED_SIZE, 8,
++ EGL_GREEN_SIZE, 8,
++ EGL_BLUE_SIZE, 8,
++ EGL_ALPHA_SIZE, 8,
++ EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
++ EGL_NONE
++ };
++
++ EGLConfig config;
++
++ state->wl_display = wl_display_connect(NULL);
++
++ state->wl_registry = wl_display_get_registry(state->wl_display);
++ wl_registry_add_listener(state->wl_registry, ®istry_listener, state);
++
++ wl_display_dispatch(state->wl_display);
++
++ // get an EGL display connection
++ state->display = eglGetDisplay(state->wl_display);
++ assert(state->display!=EGL_NO_DISPLAY);
++
++ // initialize the EGL display connection
++ result = eglInitialize(state->display, NULL, NULL);
++ assert(EGL_FALSE != result);
++
++ // get an appropriate EGL frame buffer configuration
++ result = eglChooseConfig(state->display, attribute_list, &config, 1, &num_config);
++ assert(EGL_FALSE != result);
++
++ // create an EGL rendering context
++ state->context = eglCreateContext(state->display, config, EGL_NO_CONTEXT, NULL);
++ assert(state->context!=EGL_NO_CONTEXT);
++
++ // create an EGL window surface
++ state->screen_width = 1024;
++ state->screen_height = 860;
++
++ state->wl_surface = wl_compositor_create_surface(state->wl_compositor);
++ state->wl_shell_surface = wl_shell_get_shell_surface(state->wl_shell, state->wl_surface);
++
++ wl_shell_surface_set_toplevel(state->wl_shell_surface);
++ wl_shell_surface_set_title(state->wl_shell_surface, "triangle.c");
++
++ state->wl_egl_window = wl_egl_window_create(state->wl_surface, state->screen_width, state->screen_height);
++
++ state->surface = eglCreateWindowSurface( state->display, config, state->wl_egl_window, NULL );
++ assert(state->surface != EGL_NO_SURFACE);
++
++ // connect the context to the surface
++ result = eglMakeCurrent(state->display, state->surface, state->surface, state->context);
++ assert(EGL_FALSE != result);
++
++ // Set background color and clear buffers
++ glClearColor(0.15f, 0.25f, 0.35f, 1.0f);
++
++ // Enable back face culling.
++ glEnable(GL_CULL_FACE);
++
++ glMatrixMode(GL_MODELVIEW);
++}
++
++/***********************************************************
++ * Name: init_model_proj
++ *
++ * Arguments:
++ * CUBE_STATE_T *state - holds OGLES model info
++ *
++ * Description: Sets the OpenGL|ES model to default values
++ *
++ * Returns: void
++ *
++ ***********************************************************/
++static void init_model_proj(CUBE_STATE_T *state)
++{
++ float nearp = 1.0f;
++ float farp = 500.0f;
++ float hht;
++ float hwd;
++
++ glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
++
++ glViewport(0, 0, (GLsizei)state->screen_width, (GLsizei)state->screen_height);
++
++ glMatrixMode(GL_PROJECTION);
++ glLoadIdentity();
++
++ hht = nearp * (float)tan(45.0 / 2.0 / 180.0 * M_PI);
++ hwd = hht * (float)state->screen_width / (float)state->screen_height;
++
++ glFrustumf(-hwd, hwd, -hht, hht, nearp, farp);
++
++ glEnableClientState( GL_VERTEX_ARRAY );
++ glVertexPointer( 3, GL_BYTE, 0, quadx );
++
++ reset_model(state);
++}
++
++/***********************************************************
++ * Name: reset_model
++ *
++ * Arguments:
++ * CUBE_STATE_T *state - holds OGLES model info
++ *
++ * Description: Resets the Model projection and rotation direction
++ *
++ * Returns: void
++ *
++ ***********************************************************/
++static void reset_model(CUBE_STATE_T *state)
++{
++ // reset model position
++ glMatrixMode(GL_MODELVIEW);
++ glLoadIdentity();
++ glTranslatef(0.f, 0.f, -50.f);
++
++ // reset model rotation
++ state->rot_angle_x = 45.f; state->rot_angle_y = 30.f; state->rot_angle_z = 0.f;
++ state->rot_angle_x_inc = 0.5f; state->rot_angle_y_inc = 0.5f; state->rot_angle_z_inc = 0.f;
++ state->distance = 40.f;
++}
++
++/***********************************************************
++ * Name: update_model
++ *
++ * Arguments:
++ * CUBE_STATE_T *state - holds OGLES model info
++ *
++ * Description: Updates model projection to current position/rotation
++ *
++ * Returns: void
++ *
++ ***********************************************************/
++static void update_model(CUBE_STATE_T *state)
++{
++ // update position
++ state->rot_angle_x = inc_and_wrap_angle(state->rot_angle_x, state->rot_angle_x_inc);
++ state->rot_angle_y = inc_and_wrap_angle(state->rot_angle_y, state->rot_angle_y_inc);
++ state->rot_angle_z = inc_and_wrap_angle(state->rot_angle_z, state->rot_angle_z_inc);
++ state->distance = inc_and_clip_distance(state->distance, state->distance_inc);
++
++ glLoadIdentity();
++ // move camera back to see the cube
++ glTranslatef(0.f, 0.f, -state->distance);
++
++ // Rotate model to new position
++ glRotatef(state->rot_angle_x, 1.f, 0.f, 0.f);
++ glRotatef(state->rot_angle_y, 0.f, 1.f, 0.f);
++ glRotatef(state->rot_angle_z, 0.f, 0.f, 1.f);
++}
++
++/***********************************************************
++ * Name: inc_and_wrap_angle
++ *
++ * Arguments:
++ * GLfloat angle current angle
++ * GLfloat angle_inc angle increment
++ *
++ * Description: Increments or decrements angle by angle_inc degrees
++ * Wraps to 0 at 360 deg.
++ *
++ * Returns: new value of angle
++ *
++ ***********************************************************/
++static GLfloat inc_and_wrap_angle(GLfloat angle, GLfloat angle_inc)
++{
++ angle += angle_inc;
++
++ if (angle >= 360.0)
++ angle -= 360.f;
++ else if (angle <=0)
++ angle += 360.f;
++
++ return angle;
++}
++
++/***********************************************************
++ * Name: inc_and_clip_distance
++ *
++ * Arguments:
++ * GLfloat distance current distance
++ * GLfloat distance_inc distance increment
++ *
++ * Description: Increments or decrements distance by distance_inc units
++ * Clips to range
++ *
++ * Returns: new value of angle
++ *
++ ***********************************************************/
++static GLfloat inc_and_clip_distance(GLfloat distance, GLfloat distance_inc)
++{
++ distance += distance_inc;
++
++ if (distance >= 120.0f)
++ distance = 120.f;
++ else if (distance <= 40.0f)
++ distance = 40.0f;
++
++ return distance;
++}
++
++static pid_t get_server_pid(CUBE_STATE_T *state)
++{
++ struct ucred ucred;
++ socklen_t len;
++ int fd;
++
++ fd = wl_display_get_fd(state->wl_display);
++ len = sizeof ucred;
++ getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &ucred, &len);
++
++ return ucred.pid;
++}
++
++static void
++frame(void *data, struct wl_callback *callback, uint32_t time)
++{
++ CUBE_STATE_T *state = (CUBE_STATE_T *) data;
++
++ state->needs_update = 1;
++}
++
++static const struct wl_callback_listener frame_listener = {
++ frame
++};
++
++static void
++update(CUBE_STATE_T *state)
++{
++ if (!state->single_frame || state->ellapsed_frames == 0) {
++ update_model(state);
++ redraw_scene(state);
++ }
++
++ state->wl_callback = wl_surface_frame(state->wl_surface);
++ wl_callback_add_listener(state->wl_callback, &frame_listener, state);
++
++ if (state->ellapsed_frames == 100) {
++ if (state->kill_compositor) {
++ fprintf(stderr, "reached frame 100, killing compositor\n");
++ pid_t pid = get_server_pid(state);
++ kill(pid, SIGTERM);
++ } else if (state->terminate_abruptly) {
++ fprintf(stderr, "reached frame 100, terminating right away\n");
++ exit_func(state);
++ exit(0);
++ }
++ }
++
++ if (!state->single_frame || state->ellapsed_frames == 0)
++ eglSwapBuffers(state->display, state->surface);
++ else {
++ wl_surface_damage(state->wl_surface, 0, 0, state->screen_width,
++ state->screen_height);
++ wl_surface_commit(state->wl_surface);
++ }
++
++ state->ellapsed_frames++;
++}
++
++/***********************************************************
++ * Name: redraw_scene
++ *
++ * Arguments:
++ * CUBE_STATE_T *state - holds OGLES model info
++ *
++ * Description: Draws the model and calls eglSwapBuffers
++ * to render to screen
++ *
++ * Returns: void
++ *
++ ***********************************************************/
++static void redraw_scene(CUBE_STATE_T *state)
++{
++ // Start with a clear screen
++ glClear( GL_COLOR_BUFFER_BIT );
++
++ // Draw first (front) face:
++ // Bind texture surface to current vertices
++ glBindTexture(GL_TEXTURE_2D, state->tex[0]);
++
++ // Need to rotate textures - do this by rotating each cube face
++ glRotatef(270.f, 0.f, 0.f, 1.f ); // front face normal along z axis
++
++ // draw first 4 vertices
++ glDrawArrays( GL_TRIANGLE_STRIP, 0, 4);
++
++ // same pattern for other 5 faces - rotation chosen to make image orientation 'nice'
++ glBindTexture(GL_TEXTURE_2D, state->tex[1]);
++ glRotatef(90.f, 0.f, 0.f, 1.f ); // back face normal along z axis
++ glDrawArrays( GL_TRIANGLE_STRIP, 4, 4);
++
++ glBindTexture(GL_TEXTURE_2D, state->tex[2]);
++ glRotatef(90.f, 1.f, 0.f, 0.f ); // left face normal along x axis
++ glDrawArrays( GL_TRIANGLE_STRIP, 8, 4);
++
++ glBindTexture(GL_TEXTURE_2D, state->tex[3]);
++ glRotatef(90.f, 1.f, 0.f, 0.f ); // right face normal along x axis
++ glDrawArrays( GL_TRIANGLE_STRIP, 12, 4);
++
++ glBindTexture(GL_TEXTURE_2D, state->tex[4]);
++ glRotatef(270.f, 0.f, 1.f, 0.f ); // top face normal along y axis
++ glDrawArrays( GL_TRIANGLE_STRIP, 16, 4);
++
++ glBindTexture(GL_TEXTURE_2D, state->tex[5]);
++ glRotatef(90.f, 0.f, 1.f, 0.f ); // bottom face normal along y axis
++ glDrawArrays( GL_TRIANGLE_STRIP, 20, 4);
++}
++
++/***********************************************************
++ * Name: init_textures
++ *
++ * Arguments:
++ * CUBE_STATE_T *state - holds OGLES model info
++ *
++ * Description: Initialise OGL|ES texture surfaces to use image
++ * buffers
++ *
++ * Returns: void
++ *
++ ***********************************************************/
++static void init_textures(CUBE_STATE_T *state)
++{
++ // load three texture buffers but use them on six OGL|ES texture surfaces
++ load_tex_images(state);
++ glGenTextures(6, &state->tex[0]);
++
++ // setup first texture
++ glBindTexture(GL_TEXTURE_2D, state->tex[0]);
++ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, IMAGE_SIZE, IMAGE_SIZE, 0,
++ GL_RGB, GL_UNSIGNED_BYTE, state->tex_buf1);
++ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLfloat)GL_NEAREST);
++ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLfloat)GL_NEAREST);
++
++ // setup second texture - reuse first image
++ glBindTexture(GL_TEXTURE_2D, state->tex[1]);
++ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, IMAGE_SIZE, IMAGE_SIZE, 0,
++ GL_RGB, GL_UNSIGNED_BYTE, state->tex_buf1);
++ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLfloat)GL_NEAREST);
++ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLfloat)GL_NEAREST);
++
++ // third texture
++ glBindTexture(GL_TEXTURE_2D, state->tex[2]);
++ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, IMAGE_SIZE, IMAGE_SIZE, 0,
++ GL_RGB, GL_UNSIGNED_BYTE, state->tex_buf2);
++ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLfloat)GL_NEAREST);
++ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLfloat)GL_NEAREST);
++
++ // fourth texture - reuse second image
++ glBindTexture(GL_TEXTURE_2D, state->tex[3]);
++ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, IMAGE_SIZE, IMAGE_SIZE, 0,
++ GL_RGB, GL_UNSIGNED_BYTE, state->tex_buf2);
++ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLfloat)GL_NEAREST);
++ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLfloat)GL_NEAREST);
++
++ //fifth texture
++ glBindTexture(GL_TEXTURE_2D, state->tex[4]);
++ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, IMAGE_SIZE, IMAGE_SIZE, 0,
++ GL_RGB, GL_UNSIGNED_BYTE, state->tex_buf3);
++ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLfloat)GL_NEAREST);
++ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLfloat)GL_NEAREST);
++
++ // sixth texture - reuse third image
++ glBindTexture(GL_TEXTURE_2D, state->tex[5]);
++ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, IMAGE_SIZE, IMAGE_SIZE, 0,
++ GL_RGB, GL_UNSIGNED_BYTE, state->tex_buf3);
++ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLfloat)GL_NEAREST);
++ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLfloat)GL_NEAREST);
++
++ // setup overall texture environment
++ glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
++ glEnableClientState(GL_TEXTURE_COORD_ARRAY);
++
++ glEnable(GL_TEXTURE_2D);
++}
++
++/***********************************************************
++ * Name: load_tex_images
++ *
++ * Arguments:
++ * void
++ *
++ * Description: Loads three raw images to use as textures on faces
++ *
++ * Returns: void
++ *
++ ***********************************************************/
++static void load_tex_images(CUBE_STATE_T *state)
++{
++ FILE *tex_file1 = NULL, *tex_file2=NULL, *tex_file3 = NULL;
++ int bytes_read, image_sz = IMAGE_SIZE*IMAGE_SIZE*3;
++
++ state->tex_buf1 = malloc(image_sz);
++ state->tex_buf2 = malloc(image_sz);
++ state->tex_buf3 = malloc(image_sz);
++
++ tex_file1 = fopen(PATH "Lucca_128_128.raw", "rb");
++ if (tex_file1 && state->tex_buf1)
++ {
++ bytes_read=fread(state->tex_buf1, 1, image_sz, tex_file1);
++ assert(bytes_read == image_sz); // some problem with file?
++ fclose(tex_file1);
++ }
++
++ tex_file2 = fopen(PATH "Djenne_128_128.raw", "rb");
++ if (tex_file2 && state->tex_buf2)
++ {
++ bytes_read=fread(state->tex_buf2, 1, image_sz, tex_file2);
++ assert(bytes_read == image_sz); // some problem with file?
++ fclose(tex_file2);
++ }
++
++ tex_file3 = fopen(PATH "Gaudi_128_128.raw", "rb");
++ if (tex_file3 && state->tex_buf3)
++ {
++ bytes_read=fread(state->tex_buf3, 1, image_sz, tex_file3);
++ assert(bytes_read == image_sz); // some problem with file?
++ fclose(tex_file3);
++ }
++}
++
++//------------------------------------------------------------------------------
++
++static void exit_func(CUBE_STATE_T *state)
++{
++ // clear screen
++ glClear( GL_COLOR_BUFFER_BIT );
++ eglSwapBuffers(state->display, state->surface);
++
++ // Release OpenGL resources
++ eglMakeCurrent( state->display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT );
++
++ wl_egl_window_destroy(state->wl_egl_window);
++ wl_shell_surface_destroy(state->wl_shell_surface);
++ wl_surface_destroy(state->wl_surface);
++
++ eglDestroySurface( state->display, state->surface );
++ eglDestroyContext( state->display, state->context );
++ eglTerminate( state->display );
++
++ wl_display_flush(state->wl_display);
++
++ // release texture buffers
++ free(state->tex_buf1);
++ free(state->tex_buf2);
++ free(state->tex_buf3);
++
++ printf("\ncube closed\n");
++} // exit_func()
++
++static int running = 1;
++
++static void
++signal_int(int signum)
++{
++ running = 0;
++}
++
++//==============================================================================
++
++int main (int argc, char *argv[])
++{
++ struct sigaction sigint;
++ CUBE_STATE_T state = {0,};
++ int ret = 0;
++ int i;
++
++ for (i = 0; i < argc; i++) {
++ if (strcmp(argv[i], "--kill-compositor") == 0)
++ state.kill_compositor = 1;
++ if (strcmp(argv[i], "--single-frame") == 0)
++ state.single_frame = 1;
++ if (strcmp(argv[i], "--terminate-abruptly") == 0)
++ state.terminate_abruptly = 1;
++ else if (strcmp(argv[i], "--help") == 0 ||
++ strcmp(argv[i], "-h") == 0) {
++ printf("Usage: hello_wayland.bin [OPTION]\n\n");
++ printf("\t--kill-compositor\tkill the Wayland compositor after 100 frames\n");
++ printf("\t-h, --help\t\tshow this text\n");
++ printf("\t--single-frame\t\tupdate the display only once\n");
++ printf("\t--terminate-abruptly\texit right after rendering the 100th frame\n");
++ return 0;
++ }
++ }
++
++ // Start OGLES
++ init_ogl(&state);
++
++ // Setup the model world
++ init_model_proj(&state);
++
++ // initialise the OGLES texture(s)
++ init_textures(&state);
++
++ sigint.sa_handler = signal_int;
++ sigemptyset(&sigint.sa_mask);
++ sigint.sa_flags = SA_RESETHAND;
++ sigaction(SIGINT, &sigint, NULL);
++
++ state.needs_update = 1;
++ while (running && ret != -1) {
++ if (state.needs_update) {
++ update(&state);
++ state.needs_update = 0;
++ }
++
++ ret = wl_display_dispatch(state.wl_display);
++ }
++
++ exit_func(&state);
++
++ return 0;
++}
++
+Index: git/host_applications/linux/apps/hello_pi/rebuild.sh
+===================================================================
+--- git.orig/host_applications/linux/apps/hello_pi/rebuild.sh
++++ git/host_applications/linux/apps/hello_pi/rebuild.sh
+@@ -13,6 +13,7 @@ make -C hello_jpeg clean
+ make -C hello_videocube clean
+ make -C hello_teapot clean
+ make -C hello_fft clean
++make -C hello_wayland clean
+
+ make -C libs/ilclient
+ make -C libs/vgfont
+@@ -29,4 +30,4 @@ make -C hello_jpeg
+ make -C hello_videocube
+ make -C hello_teapot
+ make -C hello_fft
+-
++make -C hello_wayland
diff --git a/recipes-graphics/userland/userland/0007-wayland-egl-Add-bcm_host-to-dependencies.patch b/recipes-graphics/userland/userland/0007-wayland-egl-Add-bcm_host-to-dependencies.patch
new file mode 100644
index 0000000..011f255
--- /dev/null
+++ b/recipes-graphics/userland/userland/0007-wayland-egl-Add-bcm_host-to-dependencies.patch
@@ -0,0 +1,30 @@
+From de087d5081c45384c40f62de70267581476edba3 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 10 Aug 2015 02:38:27 -0700
+Subject: [PATCH] wayland-egl: Add bcm_host to dependencies
+
+It uses headers like vcos_platform_types.h but does not
+depend on module which should add the required include paths
+lets add the dependency on bcm_host module which should do it
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted
+
+ interface/khronos/wayland-egl/wayland-egl.pc.in | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/interface/khronos/wayland-egl/wayland-egl.pc.in b/interface/khronos/wayland-egl/wayland-egl.pc.in
+index 8bafc15..fd259c9 100644
+--- a/interface/khronos/wayland-egl/wayland-egl.pc.in
++++ b/interface/khronos/wayland-egl/wayland-egl.pc.in
+@@ -6,5 +6,6 @@ includedir=${prefix}/include
+ Name: wayland-egl
+ Description: VideoCore wayland-egl library
+ Version: @PROJECT_APIVER@
++Requires: bcm_host
+ Libs: -L${libdir} -lwayland-egl
+ Cflags: -I${includedir}
+--
+2.1.4
+
diff --git a/recipes-graphics/userland/userland_git.bb b/recipes-graphics/userland/userland_git.bb
index 65ff128..d8626cd 100644
--- a/recipes-graphics/userland/userland_git.bb
+++ b/recipes-graphics/userland/userland_git.bb
@@ -23,19 +23,29 @@ SRC_URI = "\
file://0003-fix-alloc-size-uninitialized.patch \
file://0002-set-VMCS_INSTALL_PREFIX-to-usr.patch \
file://0003-cmake-generate-and-install-pkgconfig-files.patch \
+ file://0004-Allow-applications-to-set-next-resource-handle.patch \
+ file://0005-wayland-Add-support-for-the-Wayland-winsys.patch \
+ file://0006-wayland-Add-Wayland-example.patch \
+ file://0007-wayland-egl-Add-bcm_host-to-dependencies.patch \
"
-
S = "${WORKDIR}/git"
inherit cmake pkgconfig
-EXTRA_OECMAKE = "-DCMAKE_BUILD_TYPE=Release -DCMAKE_EXE_LINKER_FLAGS='-Wl,--no-as-needed'"
+EXTRA_OECMAKE = "-DCMAKE_BUILD_TYPE=Release -DCMAKE_EXE_LINKER_FLAGS='-Wl,--no-as-needed' \
+ "
+
+PACKAGECONFIG ?= "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '', d)}"
+
+PACKAGECONFIG[wayland] = "-DBUILD_WAYLAND=TRUE,,wayland,"
+
CFLAGS_append = " -fPIC"
# Shared libs from userland package build aren't versioned, so we need
# to force the .so files into the runtime package (and keep them
# out of -dev package).
FILES_SOLIBSDEV = ""
+INSANE_SKIP_${PN} += "dev-so"
FILES_${PN} += " \
${libdir}/*.so \
--
2.6.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [meta-raspberrypi][PATCH V4 3/5] userland: Adjust include location for pthreads-headers
2015-10-03 16:37 [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs Khem Raj
2015-10-03 16:37 ` [meta-raspberrypi][PATCH V4 2/5] userland: Add wayland support Khem Raj
@ 2015-10-03 16:37 ` Khem Raj
2015-10-24 20:05 ` Andrei Gherzan
2015-10-03 16:37 ` [meta-raspberrypi][PATCH V4 4/5] weston: Enable rpi compositor backend Khem Raj
` (3 subsequent siblings)
5 siblings, 1 reply; 26+ messages in thread
From: Khem Raj @ 2015-10-03 16:37 UTC (permalink / raw)
To: yocto
vcos headers include headers like "vcos_platform.h" "vcos_futex_mutex.h"
"vcos_platform_types.h" and these headers are different based on
platform/OSes. e.g. OS targets that support pthreads these headers
should come from pthreads/ folder but not for others. So one would add
right -I option for every package that accesses them directly or
indirectly. so if a software does #include <EGL/egl.h> then it will
break
| In file included from
/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/sysroots/raspberrypi2/usr/include/interface/vcos/vcos_assert.h:149:0,
| from
/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/sysroots/raspberrypi2/usr/include/interface/vcos/vcos.h:114,
| from
/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/sysroots/raspberrypi2/usr/include/interface/vmcs_host/vc_dispmanx.h:33,
| from
/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/sysroots/raspberrypi2/usr/include/EGL/eglplatform.h:110,
| from
/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/sysroots/raspberrypi2/usr/include/EGL/egl.h:36,
| from
/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/armv7at2hf-vfp-neon-angstrom-linux-gnueabi/weston/1.8.0-r0/weston-1.8.0/clients/../shared/platform.h:29,
| from
/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/armv7at2hf-vfp-neon-angstrom-linux-gnueabi/weston/1.8.0-r0/weston-1.8.0/clients/window.h:33,
| from
/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/armv7at2hf-vfp-neon-angstrom-linux-gnueabi/weston/1.8.0-r0/weston-1.8.0/clients/eventdemo.c:40:
|
/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/sysroots/raspberrypi2/usr/include/interface/vcos/vcos_types.h:38:33:
fatal error: vcos_platform_types.h: No such file or directory
| #include "vcos_platform_types.h"
| ^
| compilation terminated.
This is wrong, it should not happen since doing simple #include
<EGL/egl.h> should not demand manual addition of some internal paths
tobe added to -I flags.
This patch fixes the headers which refer to headers inside pthreads/
folder to prefix them with pthreads/ so we dont have to specify
additional paths
This fixes weston on rpi and I believe there are more patches now to
recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend
recipes-multimedia/omxplayer/omxplayer_git.bb
which can be removed as well
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
recipes-graphics/userland/userland_git.bb | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/recipes-graphics/userland/userland_git.bb b/recipes-graphics/userland/userland_git.bb
index d8626cd..f9af226 100644
--- a/recipes-graphics/userland/userland_git.bb
+++ b/recipes-graphics/userland/userland_git.bb
@@ -41,6 +41,14 @@ PACKAGECONFIG[wayland] = "-DBUILD_WAYLAND=TRUE,,wayland,"
CFLAGS_append = " -fPIC"
+do_install_append () {
+ for f in `find ${D}${includedir}/interface/vcos/ -name "*.h"`; do
+ sed -i 's/include "vcos_platform.h"/include "pthreads\/vcos_platform.h"/g' ${f}
+ sed -i 's/include "vcos_futex_mutex.h"/include "pthreads\/vcos_futex_mutex.h"/g' ${f}
+ sed -i 's/include "vcos_platform_types.h"/include "pthreads\/vcos_platform_types.h"/g' ${f}
+ done
+}
+
# Shared libs from userland package build aren't versioned, so we need
# to force the .so files into the runtime package (and keep them
# out of -dev package).
--
2.6.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [meta-raspberrypi][PATCH V4 4/5] weston: Enable rpi compositor backend
2015-10-03 16:37 [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs Khem Raj
2015-10-03 16:37 ` [meta-raspberrypi][PATCH V4 2/5] userland: Add wayland support Khem Raj
2015-10-03 16:37 ` [meta-raspberrypi][PATCH V4 3/5] userland: Adjust include location for pthreads-headers Khem Raj
@ 2015-10-03 16:37 ` Khem Raj
2015-10-03 16:37 ` [meta-raspberrypi][PATCH V4 5/5] userland: Fix build with clang compiler Khem Raj
` (2 subsequent siblings)
5 siblings, 0 replies; 26+ messages in thread
From: Khem Raj @ 2015-10-03 16:37 UTC (permalink / raw)
To: yocto
oe-core default configure options disables it
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
recipes-graphics/wayland/weston_%.bbappend | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 recipes-graphics/wayland/weston_%.bbappend
diff --git a/recipes-graphics/wayland/weston_%.bbappend b/recipes-graphics/wayland/weston_%.bbappend
new file mode 100644
index 0000000..c3a7421
--- /dev/null
+++ b/recipes-graphics/wayland/weston_%.bbappend
@@ -0,0 +1,4 @@
+EXTRA_OECONF_append_rpi = "\
+ --enable-rpi-compositor \
+ WESTON_NATIVE_BACKEND=rpi-backend.so \
+ "
--
2.6.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [meta-raspberrypi][PATCH V4 5/5] userland: Fix build with clang compiler
2015-10-03 16:37 [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs Khem Raj
` (2 preceding siblings ...)
2015-10-03 16:37 ` [meta-raspberrypi][PATCH V4 4/5] weston: Enable rpi compositor backend Khem Raj
@ 2015-10-03 16:37 ` Khem Raj
2015-10-03 18:24 ` [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs Andrei Gherzan
2015-10-24 19:56 ` Andrei Gherzan
5 siblings, 0 replies; 26+ messages in thread
From: Khem Raj @ 2015-10-03 16:37 UTC (permalink / raw)
To: yocto
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=UTF-8, Size: 119262 bytes --]
ends up with some warning cleanups and extern inline semantics changes
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
...h => 0001-set-VMCS_INSTALL_PREFIX-to-usr.patch} | 5 +-
...ake-generate-and-install-pkgconfig-files.patch} | 5 +-
...applications-to-set-next-resource-handle.patch} | 18 +-
...yland-Add-support-for-the-Wayland-winsys.patch} | 427 +++++++++++----------
...atch => 0005-wayland-Add-Wayland-example.patch} | 76 ++--
...wayland-egl-Add-bcm_host-to-dependencies.patch} | 6 +-
.../0007-user-vcsm-Fix-build-with-clang.patch | 44 +++
.../0008-Fix-enum-type-conversion-warnings.patch | 166 ++++++++
...rm_types-Dont-use-extern-inline-with-clan.patch | 66 ++++
recipes-graphics/userland/userland_git.bb | 15 +-
10 files changed, 568 insertions(+), 260 deletions(-)
rename recipes-graphics/userland/userland/{0002-set-VMCS_INSTALL_PREFIX-to-usr.patch => 0001-set-VMCS_INSTALL_PREFIX-to-usr.patch} (85%)
rename recipes-graphics/userland/userland/{0003-cmake-generate-and-install-pkgconfig-files.patch => 0002-cmake-generate-and-install-pkgconfig-files.patch} (95%)
rename recipes-graphics/userland/userland/{0004-Allow-applications-to-set-next-resource-handle.patch => 0003-Allow-applications-to-set-next-resource-handle.patch} (96%)
rename recipes-graphics/userland/userland/{0005-wayland-Add-support-for-the-Wayland-winsys.patch => 0004-wayland-Add-support-for-the-Wayland-winsys.patch} (85%)
rename recipes-graphics/userland/userland/{0006-wayland-Add-Wayland-example.patch => 0005-wayland-Add-Wayland-example.patch} (96%)
rename recipes-graphics/userland/userland/{0007-wayland-egl-Add-bcm_host-to-dependencies.patch => 0006-wayland-egl-Add-bcm_host-to-dependencies.patch} (85%)
create mode 100644 recipes-graphics/userland/userland/0007-user-vcsm-Fix-build-with-clang.patch
create mode 100644 recipes-graphics/userland/userland/0008-Fix-enum-type-conversion-warnings.patch
create mode 100644 recipes-graphics/userland/userland/0009-vcos_platform_types-Dont-use-extern-inline-with-clan.patch
diff --git a/recipes-graphics/userland/userland/0002-set-VMCS_INSTALL_PREFIX-to-usr.patch b/recipes-graphics/userland/userland/0001-set-VMCS_INSTALL_PREFIX-to-usr.patch
similarity index 85%
rename from recipes-graphics/userland/userland/0002-set-VMCS_INSTALL_PREFIX-to-usr.patch
rename to recipes-graphics/userland/userland/0001-set-VMCS_INSTALL_PREFIX-to-usr.patch
index 1c981af..da7e297 100644
--- a/recipes-graphics/userland/userland/0002-set-VMCS_INSTALL_PREFIX-to-usr.patch
+++ b/recipes-graphics/userland/userland/0001-set-VMCS_INSTALL_PREFIX-to-usr.patch
@@ -1,13 +1,12 @@
-From 05554d8486050546efc3c0605015786c8b267d19 Mon Sep 17 00:00:00 2001
+From 58bbb7d205f4bb5d33be8fff05fe199a193b7f03 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sun, 9 Aug 2015 23:58:17 -0700
-Subject: [PATCH 1/2] set VMCS_INSTALL_PREFIX to /usr
+Subject: [PATCH 1/9] set VMCS_INSTALL_PREFIX to /usr
in OE we dont use /opt/vc but standard prefix
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
-Upstream-Status: Submitted
makefiles/cmake/vmcs.cmake | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/recipes-graphics/userland/userland/0003-cmake-generate-and-install-pkgconfig-files.patch b/recipes-graphics/userland/userland/0002-cmake-generate-and-install-pkgconfig-files.patch
similarity index 95%
rename from recipes-graphics/userland/userland/0003-cmake-generate-and-install-pkgconfig-files.patch
rename to recipes-graphics/userland/userland/0002-cmake-generate-and-install-pkgconfig-files.patch
index c644d52..4beb825 100644
--- a/recipes-graphics/userland/userland/0003-cmake-generate-and-install-pkgconfig-files.patch
+++ b/recipes-graphics/userland/userland/0002-cmake-generate-and-install-pkgconfig-files.patch
@@ -1,14 +1,13 @@
-From ef43e09c2d13b88c2e92cffc94b68003afcb1f13 Mon Sep 17 00:00:00 2001
+From 201277d2ae4cc1344ef0775596ff057d58c12595 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sun, 9 Aug 2015 23:59:32 -0700
-Subject: [PATCH 2/2] cmake: generate and install pkgconfig files
+Subject: [PATCH 2/9] cmake: generate and install pkgconfig files
many packages expect packageconfig support especially for detecting EGL
libraries. This patch helps in compiling those packages on RPi
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
-Upstream-Status: Submitted
CMakeLists.txt | 10 +++++++++-
pkgconfig/bcm_host.pc.in | 10 ++++++++++
pkgconfig/egl.pc.in | 12 ++++++++++++
diff --git a/recipes-graphics/userland/userland/0004-Allow-applications-to-set-next-resource-handle.patch b/recipes-graphics/userland/userland/0003-Allow-applications-to-set-next-resource-handle.patch
similarity index 96%
rename from recipes-graphics/userland/userland/0004-Allow-applications-to-set-next-resource-handle.patch
rename to recipes-graphics/userland/userland/0003-Allow-applications-to-set-next-resource-handle.patch
index d5b43ca..d0eab50 100644
--- a/recipes-graphics/userland/userland/0004-Allow-applications-to-set-next-resource-handle.patch
+++ b/recipes-graphics/userland/userland/0003-Allow-applications-to-set-next-resource-handle.patch
@@ -1,14 +1,12 @@
-From 825c3236e5908ff003644abd870bfe98e82722b2 Mon Sep 17 00:00:00 2001
+From 570a438c38f59541ec13738bfd11c1565e8f47d4 Mon Sep 17 00:00:00 2001
From: Dom Cobley <dc4@broadcom.com>
Date: Tue, 9 Jul 2013 09:26:26 -0400
-Subject: [PATCH 1/3] Allow applications to set next resource handle
+Subject: [PATCH 3/9] Allow applications to set next resource handle
This patch adds provisions in userland to
let apps callers set the next rendereing dispmanx resource.
It's useful for implementing, say, a buffer carousel.
---
-Upstream-Status: Submitted
-
interface/khronos/common/khrn_client_rpc.h | 2 ++
interface/khronos/common/khrn_int_ids.h | 2 ++
interface/khronos/egl/egl_client.c | 30 +++++++++++++++++++++++++++---
@@ -58,7 +56,7 @@ index 8378f4a..ec961e0 100644
#define EGLINTFLUSH_ID 0x400c
#define EGLINTGETCOLORDATA_ID 0x400d
diff --git a/interface/khronos/egl/egl_client.c b/interface/khronos/egl/egl_client.c
-index fd07eb6..e902d19 100644
+index 472ef0c..234da65 100644
--- a/interface/khronos/egl/egl_client.c
+++ b/interface/khronos/egl/egl_client.c
@@ -162,6 +162,17 @@ static void egl_current_release(CLIENT_PROCESS_STATE_T *process, EGL_CURRENT_T *
@@ -79,7 +77,7 @@ index fd07eb6..e902d19 100644
/*
TODO: do an RPC call to make sure the Khronos vll is loaded (and that it stays loaded until eglTerminate)
Also affects global image (and possibly others?)
-@@ -643,7 +654,8 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig c
+@@ -644,7 +655,8 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig c
false,
EGL_NO_TEXTURE,
EGL_NO_TEXTURE,
@@ -89,7 +87,7 @@ index fd07eb6..e902d19 100644
if (surface) {
if (khrn_pointer_map_insert(&process->surfaces, process->next_surface, surface)) {
-@@ -888,7 +900,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig
+@@ -889,7 +901,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig
mipmap_texture,
texture_format,
texture_target,
@@ -98,7 +96,7 @@ index fd07eb6..e902d19 100644
if (surface) {
if (khrn_pointer_map_insert(&process->surfaces, process->next_surface, surface)) {
-@@ -1030,7 +1042,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig c
+@@ -1031,7 +1043,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig c
false,
EGL_NO_TEXTURE,
EGL_NO_TEXTURE,
@@ -107,7 +105,7 @@ index fd07eb6..e902d19 100644
if (surface) {
if (khrn_pointer_map_insert(&process->surfaces, process->next_surface, surface)) {
-@@ -2302,6 +2314,18 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surf)
+@@ -2303,6 +2315,18 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surf)
vcos_log_trace("eglSwapBuffers server call");
@@ -127,7 +125,7 @@ index fd07eb6..e902d19 100644
thread,
EGLINTSWAPBUFFERS_ID,
diff --git a/interface/khronos/egl/egl_client_surface.c b/interface/khronos/egl/egl_client_surface.c
-index cda5943..0be56c5 100644
+index 0fa1fd1..0dc10e2 100644
--- a/interface/khronos/egl/egl_client_surface.c
+++ b/interface/khronos/egl/egl_client_surface.c
@@ -314,7 +314,8 @@ EGL_SURFACE_T *egl_surface_create(
diff --git a/recipes-graphics/userland/userland/0005-wayland-Add-support-for-the-Wayland-winsys.patch b/recipes-graphics/userland/userland/0004-wayland-Add-support-for-the-Wayland-winsys.patch
similarity index 85%
rename from recipes-graphics/userland/userland/0005-wayland-Add-support-for-the-Wayland-winsys.patch
rename to recipes-graphics/userland/userland/0004-wayland-Add-support-for-the-Wayland-winsys.patch
index 1d1ef59..c373ee9 100644
--- a/recipes-graphics/userland/userland/0005-wayland-Add-support-for-the-Wayland-winsys.patch
+++ b/recipes-graphics/userland/userland/0004-wayland-Add-support-for-the-Wayland-winsys.patch
@@ -1,7 +1,7 @@
-From c22c00f1e430b105a2c3dbbeffcf4762f27c3b17 Mon Sep 17 00:00:00 2001
+From a6963871ccc253e82cc738b5dbe98a44d7f1ba77 Mon Sep 17 00:00:00 2001
From: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Date: Tue, 1 Oct 2013 13:19:20 +0200
-Subject: [PATCH 2/3] wayland: Add support for the Wayland winsys
+Subject: [PATCH 4/9] wayland: Add support for the Wayland winsys
* Adds EGL_WL_bind_wayland_display extension
* Adds wayland-egl library
@@ -17,8 +17,6 @@ TODO: wl_dispmanx_server_buffer should probably be defined in a
private header that can be included from EGL and vc_* instead of in
vc_vchi_dispmanx.h
---
-Upstream-Status: Submitted
-
.gitignore | 2 +
CMakeLists.txt | 11 +
README.md | 4 +
@@ -58,21 +56,21 @@ Upstream-Status: Submitted
create mode 100644 interface/wayland/dispmanx.xml
create mode 100644 makefiles/cmake/Wayland.cmake
-Index: git/.gitignore
-===================================================================
---- git.orig/.gitignore
-+++ git/.gitignore
+diff --git a/.gitignore b/.gitignore
+index 8df9393..d0d1387 100644
+--- a/.gitignore
++++ b/.gitignore
@@ -10,3 +10,5 @@
*.lai
*.la
*.a
+
+*~
-Index: git/CMakeLists.txt
-===================================================================
---- git.orig/CMakeLists.txt
-+++ git/CMakeLists.txt
-@@ -13,6 +13,17 @@ include(makefiles/cmake/global_settings.
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index f15dc2b..b240ef6 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -13,6 +13,17 @@ include(makefiles/cmake/global_settings.cmake)
include(makefiles/cmake/arm-linux.cmake)
include(makefiles/cmake/vmcs.cmake)
@@ -90,11 +88,11 @@ Index: git/CMakeLists.txt
enable_language(ASM)
# Global include paths
-Index: git/README.md
-===================================================================
---- git.orig/README.md
-+++ git/README.md
-@@ -4,3 +4,7 @@ EGL, mmal, GLESv2, vcos, openmaxil, vchi
+diff --git a/README.md b/README.md
+index 358d2b4..4da4448 100644
+--- a/README.md
++++ b/README.md
+@@ -4,3 +4,7 @@ EGL, mmal, GLESv2, vcos, openmaxil, vchiq_arm, bcm_host, WFC, OpenVG.
Use buildme to build. It requires cmake to be installed and an arm cross compiler. It is set up to use this one:
https://github.com/raspberrypi/tools/tree/master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian
@@ -102,10 +100,10 @@ Index: git/README.md
+To build support for the Wayland winsys in EGL, execute the buildme script like this:
+
+$ BUILD_WAYLAND=1 ./buildme.
-Index: git/buildme
-===================================================================
---- git.orig/buildme
-+++ git/buildme
+diff --git a/buildme b/buildme
+index d5d3de9..c46f214 100755
+--- a/buildme
++++ b/buildme
@@ -1,10 +1,14 @@
#!/bin/bash
@@ -122,7 +120,7 @@ Index: git/buildme
if [ "armv6l" = `arch` ]; then
make
else
-@@ -17,9 +21,15 @@ if [ "armv6l" = `arch` ] || [ "armv7l" =
+@@ -17,9 +21,15 @@ if [ "armv6l" = `arch` ] || [ "armv7l" = `arch` ]; then
fi
else
# Cross compile on a more capable machine
@@ -139,10 +137,10 @@ Index: git/buildme
make -j 6
if [ "$1" != "" ]; then
-Index: git/interface/khronos/CMakeLists.txt
-===================================================================
---- git.orig/interface/khronos/CMakeLists.txt
-+++ git/interface/khronos/CMakeLists.txt
+diff --git a/interface/khronos/CMakeLists.txt b/interface/khronos/CMakeLists.txt
+index c437291..6778e10 100644
+--- a/interface/khronos/CMakeLists.txt
++++ b/interface/khronos/CMakeLists.txt
@@ -6,6 +6,12 @@
# have quite a few circular dependencies, and so the only way
# to make it work seems to be to have everything static.
@@ -221,11 +219,11 @@ Index: git/interface/khronos/CMakeLists.txt
target_link_libraries(GLESv2 EGL khrn_client vcos)
target_link_libraries(WFC EGL)
target_link_libraries(OpenVG EGL)
-Index: git/interface/khronos/common/khrn_client.c
-===================================================================
---- git.orig/interface/khronos/common/khrn_client.c
-+++ git/interface/khronos/common/khrn_client.c
-@@ -54,6 +54,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
+diff --git a/interface/khronos/common/khrn_client.c b/interface/khronos/common/khrn_client.c
+index e38a85f..783a68e 100644
+--- a/interface/khronos/common/khrn_client.c
++++ b/interface/khronos/common/khrn_client.c
+@@ -54,6 +54,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "applications/vmcs/khronos/khronos_server.h"
#endif
@@ -236,7 +234,7 @@ Index: git/interface/khronos/common/khrn_client.c
VCOS_LOG_CAT_T khrn_client_log = VCOS_LOG_INIT("khrn_client", VCOS_LOG_WARN);
/*
-@@ -142,6 +146,10 @@ void client_try_unload_server(CLIENT_PRO
+@@ -142,6 +146,10 @@ void client_try_unload_server(CLIENT_PROCESS_STATE_T *process)
bool client_process_state_init(CLIENT_PROCESS_STATE_T *process)
{
if (!process->inited) {
@@ -247,7 +245,7 @@ Index: git/interface/khronos/common/khrn_client.c
if (!khrn_pointer_map_init(&process->contexts, 64))
return false;
-@@ -194,6 +202,13 @@ bool client_process_state_init(CLIENT_PR
+@@ -194,6 +202,13 @@ bool client_process_state_init(CLIENT_PROCESS_STATE_T *process)
}
#endif
@@ -261,10 +259,10 @@ Index: git/interface/khronos/common/khrn_client.c
process->inited = true;
}
-Index: git/interface/khronos/common/khrn_client.h
-===================================================================
---- git.orig/interface/khronos/common/khrn_client.h
-+++ git/interface/khronos/common/khrn_client.h
+diff --git a/interface/khronos/common/khrn_client.h b/interface/khronos/common/khrn_client.h
+index 804039b..615f7b4 100644
+--- a/interface/khronos/common/khrn_client.h
++++ b/interface/khronos/common/khrn_client.h
@@ -310,6 +310,16 @@ struct CLIENT_PROCESS_STATE {
#ifdef RPC_LIBRARY
KHRONOS_SERVER_CONNECTION_T khrn_connection;
@@ -282,11 +280,11 @@ Index: git/interface/khronos/common/khrn_client.h
};
extern bool client_process_state_init(CLIENT_PROCESS_STATE_T *process);
-Index: git/interface/khronos/common/khrn_client_mangle.h
-===================================================================
---- git.orig/interface/khronos/common/khrn_client_mangle.h
-+++ git/interface/khronos/common/khrn_client_mangle.h
-@@ -83,6 +83,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
+diff --git a/interface/khronos/common/khrn_client_mangle.h b/interface/khronos/common/khrn_client_mangle.h
+index b3c04f4..b7b21c5 100644
+--- a/interface/khronos/common/khrn_client_mangle.h
++++ b/interface/khronos/common/khrn_client_mangle.h
+@@ -83,6 +83,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define eglReleaseGlobalImageBRCM mangled_eglReleaseGlobalImageBRCM
#define eglInitGlobalImageBRCM mangled_eglInitGlobalImageBRCM
#define eglTermGlobalImageBRCM mangled_eglTermGlobalImageBRCM
@@ -296,11 +294,11 @@ Index: git/interface/khronos/common/khrn_client_mangle.h
/* OpenGL ES 1.1 and 2.0 functions */
-Index: git/interface/khronos/common/khrn_client_platform.h
-===================================================================
---- git.orig/interface/khronos/common/khrn_client_platform.h
-+++ git/interface/khronos/common/khrn_client_platform.h
-@@ -48,6 +48,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
+diff --git a/interface/khronos/common/khrn_client_platform.h b/interface/khronos/common/khrn_client_platform.h
+index 1c9da3a..715c67e 100644
+--- a/interface/khronos/common/khrn_client_platform.h
++++ b/interface/khronos/common/khrn_client_platform.h
+@@ -48,6 +48,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "interface/khronos/common/vcos/khrn_client_platform_filler_vcos.h"
#endif
@@ -320,11 +318,11 @@ Index: git/interface/khronos/common/khrn_client_platform.h
+#endif
+
#endif // KHRN_CLIENT_PLATFORM_H
-Index: git/interface/khronos/common/khrn_client_unmangle.h
-===================================================================
---- git.orig/interface/khronos/common/khrn_client_unmangle.h
-+++ git/interface/khronos/common/khrn_client_unmangle.h
-@@ -83,6 +83,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
+diff --git a/interface/khronos/common/khrn_client_unmangle.h b/interface/khronos/common/khrn_client_unmangle.h
+index 4f3ce49..84f6ec0 100644
+--- a/interface/khronos/common/khrn_client_unmangle.h
++++ b/interface/khronos/common/khrn_client_unmangle.h
+@@ -83,6 +83,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#undef eglReleaseGlobalImageBRCM
#undef eglInitGlobalImageBRCM
#undef eglTermGlobalImageBRCM
@@ -334,11 +332,11 @@ Index: git/interface/khronos/common/khrn_client_unmangle.h
/* OpenGL ES 1.1 and 2.0 functions */
-Index: git/interface/khronos/common/linux/khrn_client_platform_linux.c
-===================================================================
---- git.orig/interface/khronos/common/linux/khrn_client_platform_linux.c
-+++ git/interface/khronos/common/linux/khrn_client_platform_linux.c
-@@ -37,6 +37,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
+diff --git a/interface/khronos/common/linux/khrn_client_platform_linux.c b/interface/khronos/common/linux/khrn_client_platform_linux.c
+index a060f26..13c8c25 100644
+--- a/interface/khronos/common/linux/khrn_client_platform_linux.c
++++ b/interface/khronos/common/linux/khrn_client_platform_linux.c
+@@ -37,6 +37,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "X11/Xlib.h"
#endif
@@ -350,7 +348,7 @@ Index: git/interface/khronos/common/linux/khrn_client_platform_linux.c
extern VCOS_LOG_CAT_T khrn_client_log;
extern void vc_vchi_khronos_init();
-@@ -460,14 +465,37 @@ EGLDisplay khrn_platform_set_display_id(
+@@ -460,13 +465,36 @@ EGLDisplay khrn_platform_set_display_id(EGLNativeDisplayType display_id)
return EGL_NO_DISPLAY;
}
#else
@@ -378,19 +376,18 @@ Index: git/interface/khronos/common/linux/khrn_client_platform_linux.c
+#endif
+ return EGL_NO_DISPLAY;
+ }
-+}
+ }
+
+#ifdef BUILD_WAYLAND
+struct wl_display *khrn_platform_get_wl_display()
+{
+ return hacky_display;
- }
- #endif
++}
+#endif
+ #endif
#ifdef WANT_X
- static void dump_hierarchy(Window w, Window thisw, Window look, int level)
-@@ -801,22 +829,81 @@ static EGL_DISPMANX_WINDOW_T *check_defa
+@@ -801,22 +829,81 @@ static EGL_DISPMANX_WINDOW_T *check_default(EGLNativeWindowType win)
void platform_get_dimensions(EGLDisplay dpy, EGLNativeWindowType win,
uint32_t *width, uint32_t *height, uint32_t *swapchain_count)
{
@@ -421,8 +418,8 @@ Index: git/interface/khronos/common/linux/khrn_client_platform_linux.c
+#ifdef BUILD_WAYLAND
+ }
+#endif
-+}
-+
+ }
+
+#ifdef BUILD_WAYLAND
+static DISPMANX_ELEMENT_HANDLE_T create_dummy_element()
+{
@@ -453,9 +450,9 @@ Index: git/interface/khronos/common/linux/khrn_client_platform_linux.c
+ vc_dispmanx_display_close(display);
+
+ return element;
- }
++}
+#endif
-
++
uint32_t platform_get_handle(EGLDisplay dpy, EGLNativeWindowType win)
{
- EGL_DISPMANX_WINDOW_T *dwin = check_default(win);
@@ -484,10 +481,11 @@ Index: git/interface/khronos/common/linux/khrn_client_platform_linux.c
}
#endif
-Index: git/interface/khronos/common/linux/khrn_wayland.c
-===================================================================
+diff --git a/interface/khronos/common/linux/khrn_wayland.c b/interface/khronos/common/linux/khrn_wayland.c
+new file mode 100644
+index 0000000..0e1b9e7
--- /dev/null
-+++ git/interface/khronos/common/linux/khrn_wayland.c
++++ b/interface/khronos/common/linux/khrn_wayland.c
@@ -0,0 +1,215 @@
+/*
+Copyright (c) 2013, Raspberry Pi Foundation
@@ -704,72 +702,74 @@ Index: git/interface/khronos/common/linux/khrn_wayland.c
+
+ return wl_dispmanx_client_buffer;
+}
-Index: git/interface/vmcs_host/vc_vchi_dispmanx.h
-===================================================================
---- git.orig/interface/vmcs_host/vc_vchi_dispmanx.h
-+++ git/interface/vmcs_host/vc_vchi_dispmanx.h
-@@ -66,4 +66,19 @@ typedef struct {
- #define ELEMENT_CHANGE_MASK_RESOURCE (1<<4)
- #define ELEMENT_CHANGE_TRANSFORM (1<<5)
-
-+#ifdef BUILD_WAYLAND
-+/* XXX: This should be in a private header that can be included from EGL and vc_* */
-+#include <wayland-server.h>
-+#include "interface/vmcs_host/wayland-dispmanx-server-protocol.h"
-+struct wl_dispmanx_server_buffer {
-+ struct wl_resource *resource;
-+ struct wl_dispmanx *dispmanx;
-+ enum wl_dispmanx_format format;
-+ DISPMANX_RESOURCE_HANDLE_T handle;
-+ int32_t width;
-+ int32_t height;
-+ int in_use;
-+};
-+#endif
-+
- #endif
-Index: git/interface/khronos/common/linux/khrn_wayland.h
-===================================================================
---- /dev/null
-+++ git/interface/khronos/common/linux/khrn_wayland.h
-@@ -0,0 +1,33 @@
-+/*
+diff --git a/interface/vmcs_host/vc_vchi_dispmanx.h b/interface/khronos/common/linux/khrn_wayland.h
+similarity index 56%
+copy from interface/vmcs_host/vc_vchi_dispmanx.h
+copy to interface/khronos/common/linux/khrn_wayland.h
+index b723b76..b9bf08c 100644
+--- a/interface/vmcs_host/vc_vchi_dispmanx.h
++++ b/interface/khronos/common/linux/khrn_wayland.h
+@@ -1,5 +1,5 @@
+ /*
+-Copyright (c) 2012, Broadcom Europe Ltd
+Copyright (c) 2013, Raspberry Pi Foundation
-+All rights reserved.
-+
-+Redistribution and use in source and binary forms, with or without
-+modification, are permitted provided that the following conditions are met:
-+ * Redistributions of source code must retain the above copyright
-+ notice, this list of conditions and the following disclaimer.
-+ * 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.
-+ * Neither the name of the copyright holder 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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.
-+*/
-+
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+@@ -25,45 +25,9 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+-#ifndef VC_VCHI_DISPMANX_H
+-#define VC_VCHI_DISPMANX_H
+#include "interface/khronos/common/khrn_client.h"
-+
+
+-#include "interface/peer/vc_vchi_dispmanx_common.h"
+int init_process_wayland(CLIENT_PROCESS_STATE_T *process);
+int do_wl_roundtrip();
-+
+
+-#define VC_NUM_HOST_RESOURCES 64
+-#define DISPMANX_MSGFIFO_SIZE 1024
+-#define DISPMANX_CLIENT_NAME MAKE_FOURCC("DISP")
+-#define DISPMANX_NOTIFY_NAME MAKE_FOURCC("UPDH")
+-
+-//Or with command to indicate we don't need a response
+-#define DISPMANX_NO_REPLY_MASK (1<<31)
+-
+-typedef struct {
+- char description[32];
+- uint32_t width;
+- uint32_t height;
+- uint32_t aspect_pixwidth;
+- uint32_t aspect_pixheight;
+- uint32_t fieldrate_num;
+- uint32_t fieldrate_denom;
+- uint32_t fields_per_frame;
+- uint32_t transform;
+-} GET_MODES_DATA_T;
+-
+-typedef struct {
+- int32_t response;
+- uint32_t width;
+- uint32_t height;
+- uint32_t transform;
+- uint32_t input_format;
+-} GET_INFO_DATA_T;
+-
+-//Attributes changes flag mask
+-#define ELEMENT_CHANGE_LAYER (1<<0)
+-#define ELEMENT_CHANGE_OPACITY (1<<1)
+-#define ELEMENT_CHANGE_DEST_RECT (1<<2)
+-#define ELEMENT_CHANGE_SRC_RECT (1<<3)
+-#define ELEMENT_CHANGE_MASK_RESOURCE (1<<4)
+-#define ELEMENT_CHANGE_TRANSFORM (1<<5)
+-
+-#endif
+struct wl_dispmanx_client_buffer *allocate_wl_buffer(struct wl_egl_window *window, KHRN_IMAGE_FORMAT_T color);
-Index: git/interface/khronos/egl/egl_client.c
-===================================================================
---- git.orig/interface/khronos/egl/egl_client.c
-+++ git/interface/khronos/egl/egl_client.c
+diff --git a/interface/khronos/egl/egl_client.c b/interface/khronos/egl/egl_client.c
+index 234da65..024f3ed 100644
+--- a/interface/khronos/egl/egl_client.c
++++ b/interface/khronos/egl/egl_client.c
@@ -153,6 +153,10 @@ by an attribute value"
#include <stdlib.h>
#include <string.h>
@@ -781,7 +781,7 @@ Index: git/interface/khronos/egl/egl_client.c
#include "interface/khronos/egl/egl_client_cr.c"
-@@ -162,17 +166,6 @@ static void egl_current_release(CLIENT_P
+@@ -162,17 +166,6 @@ static void egl_current_release(CLIENT_PROCESS_STATE_T *process, EGL_CURRENT_T *
void egl_gl_flush_callback(bool wait);
void egl_vg_flush_callback(bool wait);
@@ -799,7 +799,7 @@ Index: git/interface/khronos/egl/egl_client.c
/*
TODO: do an RPC call to make sure the Khronos vll is loaded (and that it stays loaded until eglTerminate)
Also affects global image (and possibly others?)
-@@ -451,6 +444,9 @@ EGLAPI const char EGLAPIENTRY * eglQuery
+@@ -451,6 +444,9 @@ EGLAPI const char EGLAPIENTRY * eglQueryString(EGLDisplay dpy, EGLint name)
"EGL_KHR_fence_sync "
#endif
#endif
@@ -809,7 +809,7 @@ Index: git/interface/khronos/egl/egl_client.c
;
break;
case EGL_VENDOR:
-@@ -655,8 +651,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreateW
+@@ -655,8 +651,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig c
false,
EGL_NO_TEXTURE,
EGL_NO_TEXTURE,
@@ -819,7 +819,7 @@ Index: git/interface/khronos/egl/egl_client.c
if (surface) {
if (khrn_pointer_map_insert(&process->surfaces, process->next_surface, surface)) {
-@@ -901,7 +896,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreateP
+@@ -901,7 +896,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig
mipmap_texture,
texture_format,
texture_target,
@@ -828,7 +828,7 @@ Index: git/interface/khronos/egl/egl_client.c
if (surface) {
if (khrn_pointer_map_insert(&process->surfaces, process->next_surface, surface)) {
-@@ -1043,7 +1038,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreateP
+@@ -1043,7 +1038,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig c
false,
EGL_NO_TEXTURE,
EGL_NO_TEXTURE,
@@ -837,7 +837,7 @@ Index: git/interface/khronos/egl/egl_client.c
if (surface) {
if (khrn_pointer_map_insert(&process->surfaces, process->next_surface, surface)) {
-@@ -2245,6 +2240,9 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuf
+@@ -2245,6 +2240,9 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surf)
CLIENT_THREAD_STATE_T *thread;
CLIENT_PROCESS_STATE_T *process;
EGLBoolean result;
@@ -847,7 +847,7 @@ Index: git/interface/khronos/egl/egl_client.c
vcos_log_trace("eglSwapBuffers start. dpy=%d. surf=%d.", (int)dpy, (int)surf);
-@@ -2315,18 +2313,58 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuf
+@@ -2315,18 +2313,58 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surf)
vcos_log_trace("eglSwapBuffers server call");
@@ -918,11 +918,11 @@ Index: git/interface/khronos/egl/egl_client.c
RPC_CALL6(eglIntSwapBuffers_impl,
thread,
EGLINTSWAPBUFFERS_ID,
-Index: git/interface/khronos/egl/egl_client_get_proc.c
-===================================================================
---- git.orig/interface/khronos/egl/egl_client_get_proc.c
-+++ git/interface/khronos/egl/egl_client_get_proc.c
-@@ -254,6 +254,17 @@ EGLAPI void EGLAPIENTRY (* eglGetProcAdd
+diff --git a/interface/khronos/egl/egl_client_get_proc.c b/interface/khronos/egl/egl_client_get_proc.c
+index 4cfa9ff..6a715af 100644
+--- a/interface/khronos/egl/egl_client_get_proc.c
++++ b/interface/khronos/egl/egl_client_get_proc.c
+@@ -254,6 +254,17 @@ EGLAPI void EGLAPIENTRY (* eglGetProcAddress(const char *procname))(void)
return (void(*)(void))eglQueryGlobalImageBRCM;
#endif
@@ -940,11 +940,11 @@ Index: git/interface/khronos/egl/egl_client_get_proc.c
return (void(*)(void)) NULL;
}
-Index: git/interface/khronos/egl/egl_client_surface.c
-===================================================================
---- git.orig/interface/khronos/egl/egl_client_surface.c
-+++ git/interface/khronos/egl/egl_client_surface.c
-@@ -46,6 +46,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
+diff --git a/interface/khronos/egl/egl_client_surface.c b/interface/khronos/egl/egl_client_surface.c
+index 0dc10e2..49cf7e5 100644
+--- a/interface/khronos/egl/egl_client_surface.c
++++ b/interface/khronos/egl/egl_client_surface.c
+@@ -46,6 +46,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "interface/khronos/egl/egl_int_impl.h"
#endif
@@ -1018,7 +1018,7 @@ Index: git/interface/khronos/egl/egl_client_surface.c
RPC_CALL15_OUT_CTRL(eglIntCreateSurface_impl,
thread,
EGLINTCREATESURFACE_ID,
-@@ -663,6 +685,18 @@ void egl_surface_free(EGL_SURFACE_T *sur
+@@ -663,6 +685,18 @@ void egl_surface_free(EGL_SURFACE_T *surface)
if( surface->type == WINDOW ) {
vcos_log_trace("egl_surface_free: calling platform_destroy_winhandle...");
platform_destroy_winhandle( surface->win, surface->internal_handle );
@@ -1037,10 +1037,10 @@ Index: git/interface/khronos/egl/egl_client_surface.c
}
/* return value ignored -- read performed to ensure blocking. we want this to
* block so clients can safely destroy the surface's window as soon as the
-Index: git/interface/khronos/egl/egl_client_surface.h
-===================================================================
---- git.orig/interface/khronos/egl/egl_client_surface.h
-+++ git/interface/khronos/egl/egl_client_surface.h
+diff --git a/interface/khronos/egl/egl_client_surface.h b/interface/khronos/egl/egl_client_surface.h
+index b5bf70a..e328b77 100644
+--- a/interface/khronos/egl/egl_client_surface.h
++++ b/interface/khronos/egl/egl_client_surface.h
@@ -288,6 +288,41 @@ typedef struct {
type == PIXMAP
*/
@@ -1083,7 +1083,7 @@ Index: git/interface/khronos/egl/egl_client_surface.h
} EGL_SURFACE_T;
extern bool egl_surface_check_attribs(
-@@ -322,8 +357,7 @@ extern EGL_SURFACE_T *egl_surface_create
+@@ -322,8 +357,7 @@ extern EGL_SURFACE_T *egl_surface_create(
EGLenum texture_format,
EGLenum texture_target,
EGLNativePixmapType pixmap,
@@ -1093,10 +1093,10 @@ Index: git/interface/khronos/egl/egl_client_surface.h
extern EGL_SURFACE_T *egl_surface_from_vg_image(
VGImage vg_handle,
EGLSurface name,
-Index: git/interface/khronos/egl/egl_int_impl.h
-===================================================================
---- git.orig/interface/khronos/egl/egl_int_impl.h
-+++ git/interface/khronos/egl/egl_int_impl.h
+diff --git a/interface/khronos/egl/egl_int_impl.h b/interface/khronos/egl/egl_int_impl.h
+index 51b3580..6863a3b 100644
+--- a/interface/khronos/egl/egl_int_impl.h
++++ b/interface/khronos/egl/egl_int_impl.h
@@ -57,7 +57,7 @@ FN(int, eglIntCreateSurface_impl, (
uint32_t sem,
uint32_t type,
@@ -1106,10 +1106,11 @@ Index: git/interface/khronos/egl/egl_int_impl.h
FN(int, eglIntCreatePbufferFromVGImage_impl, (
VGImage vg_handle,
-Index: git/interface/khronos/ext/egl_wayland.c
-===================================================================
+diff --git a/interface/khronos/ext/egl_wayland.c b/interface/khronos/ext/egl_wayland.c
+new file mode 100644
+index 0000000..5730743
--- /dev/null
-+++ git/interface/khronos/ext/egl_wayland.c
++++ b/interface/khronos/ext/egl_wayland.c
@@ -0,0 +1,246 @@
+/*
+Copyright (c) 2013, Raspberry Pi Foundation
@@ -1357,11 +1358,11 @@ Index: git/interface/khronos/ext/egl_wayland.c
+
+ return EGL_FALSE;
+}
-Index: git/interface/khronos/include/EGL/eglext.h
-===================================================================
---- git.orig/interface/khronos/include/EGL/eglext.h
-+++ git/interface/khronos/include/EGL/eglext.h
-@@ -191,6 +191,29 @@ typedef EGLBoolean (EGLAPIENTRYP PFNEGLG
+diff --git a/interface/khronos/include/EGL/eglext.h b/interface/khronos/include/EGL/eglext.h
+index 89a3369..d7e5ba7 100755
+--- a/interface/khronos/include/EGL/eglext.h
++++ b/interface/khronos/include/EGL/eglext.h
+@@ -191,6 +191,29 @@ typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EG
#endif
@@ -1391,10 +1392,11 @@ Index: git/interface/khronos/include/EGL/eglext.h
#ifdef __cplusplus
}
#endif
-Index: git/interface/khronos/wayland-egl/wayland-egl-priv.h
-===================================================================
+diff --git a/interface/khronos/wayland-egl/wayland-egl-priv.h b/interface/khronos/wayland-egl/wayland-egl-priv.h
+new file mode 100644
+index 0000000..8e38d36
--- /dev/null
-+++ git/interface/khronos/wayland-egl/wayland-egl-priv.h
++++ b/interface/khronos/wayland-egl/wayland-egl-priv.h
@@ -0,0 +1,53 @@
+/* Copied from Mesa */
+
@@ -1449,10 +1451,11 @@ Index: git/interface/khronos/wayland-egl/wayland-egl-priv.h
+#endif
+
+#endif
-Index: git/interface/khronos/wayland-egl/wayland-egl.c
-===================================================================
+diff --git a/interface/khronos/wayland-egl/wayland-egl.c b/interface/khronos/wayland-egl/wayland-egl.c
+new file mode 100644
+index 0000000..b8f050b
--- /dev/null
-+++ git/interface/khronos/wayland-egl/wayland-egl.c
++++ b/interface/khronos/wayland-egl/wayland-egl.c
@@ -0,0 +1,59 @@
+/* Copied from Mesa */
+
@@ -1513,10 +1516,11 @@ Index: git/interface/khronos/wayland-egl/wayland-egl.c
+ if (height)
+ *height = egl_window->attached_height;
+}
-Index: git/interface/khronos/wayland-egl/wayland-egl.pc.in
-===================================================================
+diff --git a/interface/khronos/wayland-egl/wayland-egl.pc.in b/interface/khronos/wayland-egl/wayland-egl.pc.in
+new file mode 100644
+index 0000000..8bafc15
--- /dev/null
-+++ git/interface/khronos/wayland-egl/wayland-egl.pc.in
++++ b/interface/khronos/wayland-egl/wayland-egl.pc.in
@@ -0,0 +1,10 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+exec_prefix=${prefix}
@@ -1528,10 +1532,10 @@ Index: git/interface/khronos/wayland-egl/wayland-egl.pc.in
+Version: @PROJECT_APIVER@
+Libs: -L${libdir} -lwayland-egl
+Cflags: -I${includedir}
-Index: git/interface/vmcs_host/CMakeLists.txt
-===================================================================
---- git.orig/interface/vmcs_host/CMakeLists.txt
-+++ git/interface/vmcs_host/CMakeLists.txt
+diff --git a/interface/vmcs_host/CMakeLists.txt b/interface/vmcs_host/CMakeLists.txt
+index e0c6e13..35150ed 100755
+--- a/interface/vmcs_host/CMakeLists.txt
++++ b/interface/vmcs_host/CMakeLists.txt
@@ -9,13 +9,24 @@ add_definitions(-fno-strict-aliasing)
include_directories(${VMCS_TARGET}/vcfiled)
@@ -1562,11 +1566,11 @@ Index: git/interface/vmcs_host/CMakeLists.txt
#add_library(bufman vc_vchi_bufman.c )
# OpenMAX/IL component service
-Index: git/interface/vmcs_host/vc_dispmanx.h
-===================================================================
---- git.orig/interface/vmcs_host/vc_dispmanx.h
-+++ git/interface/vmcs_host/vc_dispmanx.h
-@@ -39,6 +39,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
+diff --git a/interface/vmcs_host/vc_dispmanx.h b/interface/vmcs_host/vc_dispmanx.h
+index 37fdae1..fe3619a 100755
+--- a/interface/vmcs_host/vc_dispmanx.h
++++ b/interface/vmcs_host/vc_dispmanx.h
+@@ -39,6 +39,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifdef __cplusplus
extern "C" {
#endif
@@ -1578,7 +1582,7 @@ Index: git/interface/vmcs_host/vc_dispmanx.h
// Same function as above, to aid migration of code.
VCHPRE_ int VCHPOST_ vc_dispman_init( void );
// Stop the service from being used
-@@ -135,6 +140,11 @@ VCHPRE_ int VCHPOST_ vc_dispmanx_resourc
+@@ -135,6 +140,11 @@ VCHPRE_ int VCHPOST_ vc_dispmanx_resource_set_palette( DISPMANX_RESOURCE_HANDLE_
// Start triggering callbacks synced to vsync
VCHPRE_ int VCHPOST_ vc_dispmanx_vsync_callback( DISPMANX_DISPLAY_HANDLE_T display, DISPMANX_CALLBACK_FUNC_T cb_func, void *cb_arg );
@@ -1590,11 +1594,11 @@ Index: git/interface/vmcs_host/vc_dispmanx.h
#ifdef __cplusplus
}
#endif
-Index: git/interface/vmcs_host/vc_vchi_dispmanx.c
-===================================================================
---- git.orig/interface/vmcs_host/vc_vchi_dispmanx.c
-+++ git/interface/vmcs_host/vc_vchi_dispmanx.c
-@@ -1308,3 +1308,45 @@ static void *dispmanx_notify_func( void
+diff --git a/interface/vmcs_host/vc_vchi_dispmanx.c b/interface/vmcs_host/vc_vchi_dispmanx.c
+index f9ee3f6..1215876 100755
+--- a/interface/vmcs_host/vc_vchi_dispmanx.c
++++ b/interface/vmcs_host/vc_vchi_dispmanx.c
+@@ -1308,3 +1308,45 @@ static void *dispmanx_notify_func( void *arg ) {
}
return 0;
}
@@ -1640,10 +1644,35 @@ Index: git/interface/vmcs_host/vc_vchi_dispmanx.c
+ buffer->in_use = in_use;
+}
+#endif
-Index: git/interface/wayland/dispmanx.xml
-===================================================================
+diff --git a/interface/vmcs_host/vc_vchi_dispmanx.h b/interface/vmcs_host/vc_vchi_dispmanx.h
+index b723b76..f0bae30 100644
+--- a/interface/vmcs_host/vc_vchi_dispmanx.h
++++ b/interface/vmcs_host/vc_vchi_dispmanx.h
+@@ -66,4 +66,19 @@ typedef struct {
+ #define ELEMENT_CHANGE_MASK_RESOURCE (1<<4)
+ #define ELEMENT_CHANGE_TRANSFORM (1<<5)
+
++#ifdef BUILD_WAYLAND
++/* XXX: This should be in a private header that can be included from EGL and vc_* */
++#include <wayland-server.h>
++#include "interface/vmcs_host/wayland-dispmanx-server-protocol.h"
++struct wl_dispmanx_server_buffer {
++ struct wl_resource *resource;
++ struct wl_dispmanx *dispmanx;
++ enum wl_dispmanx_format format;
++ DISPMANX_RESOURCE_HANDLE_T handle;
++ int32_t width;
++ int32_t height;
++ int in_use;
++};
++#endif
++
+ #endif
+diff --git a/interface/wayland/dispmanx.xml b/interface/wayland/dispmanx.xml
+new file mode 100644
+index 0000000..c18626d
--- /dev/null
-+++ git/interface/wayland/dispmanx.xml
++++ b/interface/wayland/dispmanx.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="dispmanx">
@@ -1768,10 +1797,11 @@ Index: git/interface/wayland/dispmanx.xml
+ </interface>
+
+</protocol>
-Index: git/makefiles/cmake/Wayland.cmake
-===================================================================
+diff --git a/makefiles/cmake/Wayland.cmake b/makefiles/cmake/Wayland.cmake
+new file mode 100644
+index 0000000..ad90d30
--- /dev/null
-+++ git/makefiles/cmake/Wayland.cmake
++++ b/makefiles/cmake/Wayland.cmake
@@ -0,0 +1,72 @@
+#=============================================================================
+# Copyright (C) 2012-2013 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
@@ -1845,3 +1875,6 @@ Index: git/makefiles/cmake/Wayland.cmake
+ list(APPEND ${_sources} "${_server_header}")
+ set(${_sources} ${${_sources}} PARENT_SCOPE)
+endfunction()
+--
+2.1.4
+
diff --git a/recipes-graphics/userland/userland/0006-wayland-Add-Wayland-example.patch b/recipes-graphics/userland/userland/0005-wayland-Add-Wayland-example.patch
similarity index 96%
rename from recipes-graphics/userland/userland/0006-wayland-Add-Wayland-example.patch
rename to recipes-graphics/userland/userland/0005-wayland-Add-Wayland-example.patch
index 9191ac6..f4eb171 100644
--- a/recipes-graphics/userland/userland/0006-wayland-Add-Wayland-example.patch
+++ b/recipes-graphics/userland/userland/0005-wayland-Add-Wayland-example.patch
@@ -1,33 +1,27 @@
-From 69289713594a707f0475a6a37d0b34380f0634f3 Mon Sep 17 00:00:00 2001
+From 6f91d5bc02f243909443a0a502015b892ec3c214 Mon Sep 17 00:00:00 2001
From: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Date: Tue, 1 Oct 2013 13:19:20 +0200
-Subject: [PATCH 3/3] wayland: Add Wayland example
+Subject: [PATCH 5/9] wayland: Add Wayland example
---
-Upstream-Status: Submitted
-
.../linux/apps/hello_pi/CMakeLists.txt | 1 +
.../apps/hello_pi/hello_wayland/CMakeLists.txt | 8 +
.../apps/hello_pi/hello_wayland/Djenne_128_128.raw | 3 +
- .../apps/hello_pi/hello_wayland/Gaudi_128_128.raw | Bin 0 -> 49152 bytes
- .../apps/hello_pi/hello_wayland/Lucca_128_128.raw | Bin 0 -> 49152 bytes
.../linux/apps/hello_pi/hello_wayland/Makefile | 5 +
.../hello_wayland/cube_texture_and_coords.h | 100 ++++
.../linux/apps/hello_pi/hello_wayland/triangle.c | 666 +++++++++++++++++++++
- host_applications/linux/apps/hello_pi/rebuild.sh | 2 +
- 9 files changed, 785 insertions(+)
+ host_applications/linux/apps/hello_pi/rebuild.sh | 3 +-
+ 7 files changed, 785 insertions(+), 1 deletion(-)
create mode 100644 host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt
- create mode 100755 host_applications/linux/apps/hello_pi/hello_wayland/Djenne_128_128.raw
- create mode 100755 host_applications/linux/apps/hello_pi/hello_wayland/Gaudi_128_128.raw
- create mode 100755 host_applications/linux/apps/hello_pi/hello_wayland/Lucca_128_128.raw
- create mode 100755 host_applications/linux/apps/hello_pi/hello_wayland/Makefile
- create mode 100755 host_applications/linux/apps/hello_pi/hello_wayland/cube_texture_and_coords.h
- create mode 100755 host_applications/linux/apps/hello_pi/hello_wayland/triangle.c
+ create mode 100644 host_applications/linux/apps/hello_pi/hello_wayland/Djenne_128_128.raw
+ create mode 100644 host_applications/linux/apps/hello_pi/hello_wayland/Makefile
+ create mode 100644 host_applications/linux/apps/hello_pi/hello_wayland/cube_texture_and_coords.h
+ create mode 100644 host_applications/linux/apps/hello_pi/hello_wayland/triangle.c
-Index: git/host_applications/linux/apps/hello_pi/CMakeLists.txt
-===================================================================
---- git.orig/host_applications/linux/apps/hello_pi/CMakeLists.txt
-+++ git/host_applications/linux/apps/hello_pi/CMakeLists.txt
+diff --git a/host_applications/linux/apps/hello_pi/CMakeLists.txt b/host_applications/linux/apps/hello_pi/CMakeLists.txt
+index f2c6aef..0df78f7 100644
+--- a/host_applications/linux/apps/hello_pi/CMakeLists.txt
++++ b/host_applications/linux/apps/hello_pi/CMakeLists.txt
@@ -21,6 +21,7 @@ add_subdirectory(hello_encode)
add_subdirectory(hello_jpeg)
add_subdirectory(hello_videocube)
@@ -36,10 +30,11 @@ Index: git/host_applications/linux/apps/hello_pi/CMakeLists.txt
if(BUILD_FONT)
set(VGFONT_SRCS libs/vgfont/font.c libs/vgfont/vgft.c libs/vgfont/graphics.c)
-Index: git/host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt
-===================================================================
+diff --git a/host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt b/host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt
+new file mode 100644
+index 0000000..9a2f75c
--- /dev/null
-+++ git/host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt
++++ b/host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt
@@ -0,0 +1,8 @@
+set(EXEC hello_wayland.bin)
+set(SRCS triangle.c)
@@ -49,29 +44,32 @@ Index: git/host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt
+
+install(TARGETS ${EXEC}
+ RUNTIME DESTINATION bin)
-Index: git/host_applications/linux/apps/hello_pi/hello_wayland/Djenne_128_128.raw
-===================================================================
+diff --git a/host_applications/linux/apps/hello_pi/hello_wayland/Djenne_128_128.raw b/host_applications/linux/apps/hello_pi/hello_wayland/Djenne_128_128.raw
+new file mode 100644
+index 0000000..de9173c
--- /dev/null
-+++ git/host_applications/linux/apps/hello_pi/hello_wayland/Djenne_128_128.raw
++++ b/host_applications/linux/apps/hello_pi/hello_wayland/Djenne_128_128.raw
@@ -0,0 +1,3 @@
+öÖ¿÷×À÷×ÀøØÁúÚÃúÚÃúÚÃúÚÃùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂûÙÂûÙÂûÙÂûÙÂúØÁúØÁúØÁúØÁøÖ¿ù×Àù×ÀúØÁúØÁúØÁúØÁúØÁù×Àù×Àù×Àù×À÷Õ¾øÖ¿ù×Àù×À÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾öÔ½öÔ½÷Õ¾÷Õ¾÷Õ¾÷Õ¾õÓ¼öÔ½öÔ½õÓ¼ôÒ»ôÒ»ôÒ»ôÒ»õкõкõкõкõкõкõкõкôиõѹôиôиòζóÏ·óÏ·õѹñ͵óÏ·óÏ·ñ͵òζñ͵ñ͵ñ͵ñ͵ñ͵ðÌ´ðÌ´ðÌ´ï˳ï˳ï˳î˱î˱î˱î˱î˱î˱î˱íʰïʰïʰîɯîɯíÈ®ìÇìÇìÇëÆ¬ëÆ¬ëÆ¬êÅ«êÅ«êÅ«ëÆ¬ëÆ¬èééĪéĪèéèéèéèéç¨ùÙÂúÚÃúÚÃûÛÄüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄûÛÄûÛÄûÛÄûÛÄûÛÄûÛÄýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃûÙÂûÙÂûÙÂûÙÂúØÁúØÁúØÁúØÁù×Àù×Àù×Àù×ÀúØÁù×Àù×Àù×ÀøÖ¿øÖ¿øÖ¿øÖ¿øÖ¿øÖ¿øÖ¿÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾øÓ½øÓ½øÓ½øÓ½÷Ò¼÷Ò¼÷Ò¼÷Ò¼öÓº÷Ó»÷Ó»÷Ó»õѹöÒºöÒºöÒºôиõѹõѹôиôиôиôиóÏ·ôиóÏ·óÏ·óÏ·óÏ·òζòζòζñδñδñδñδñδñδðͳðͳòͳñ̲ñ̲ñ̲ð˱ïʰïʰïʰîɯîɯîɯíÈ®îɯíÈ®íÈ®ìÇìÇíÈ®íÈ®ìÇëÆ¬ëÆ¬êÅ«êÅ«ûÛÄûÛÄûÛÄûÛÄüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄûÛÄûÛÄýÛÄýÛÄüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃûÙÂúØÁûÙÂûÙÂûÙÂûÙÂúØÁúØÁúØÁúØÁúØÁúØÁù×Àù×ÀøÖ¿øÖ¿øÖ¿øÖ¿øÖ¿ù×ÀøÖ¿÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾øÓ½øÓ½øÓ½øÓ½÷Ò¼÷Ò¼÷Ò¼÷Ò¼öÓº÷Ó»÷Ó»öÒºöÒºöÒºöÒºöÒºõѹõѹõѹõѹõѹõѹôиôиôиôиôиóÏ·óÏ·óÏ·òζòζñδñδñδñδñδñδðͳðͳòͳñ̲ñ̲ñ̲ð˱ð˱ïʰïʰïʰîɯîɯîɯïʰîɯíÈ®ìÇìÇìÇìÇëÆ¬ìÇëÆ¬ëÆ¬ëÆ¬üÜÅüÜÅüÜÅüÜÅýÝÆýÝÆýÝÆýÝÆüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄûÛÄûÛÄüÚÃýÛÄýÛÄýÛÄüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃûÙÂûÙÂûÙÂûÙÂûÙÂûÙÂûÙÂûÙÂúØÁúØÁúØÁúØÁúØÁúØÁù×Àù×Àù×Àù×Àù×Àù×ÀøÖ¿ù×ÀøÖ¿÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾øÓ½øÓ½øÓ½øÓ½÷Ò¼÷Ò¼÷Ò¼÷Ò¼öÓº÷Ó»÷Ó»öÒº÷Ó»÷Ó»öÒºöÒºõѹôиõѹöÒºõѹõѹôиôиõѹôиôиôиóÏ·óÏ·óÏ·òζòϵòϵòϵòϵñδñδðͳðͳòͳñ̲ñ̲ñ̲ð˱ð˱ð˱ïʰïʰïʰîɯîɯîɯîɯîɯîɯíÈ®îɯîɯíÈ®ìÇìÇëÆ¬ëÆ¬ûÜÅüÝÆýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÛÄûÛÄûÛÄûÛÄüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄûÛÄûÛÄúÚÃûÛÄûÛÄûÛÄýÛÃýÛÃýÛÃýÛÃüÚÂüÚÂüÚÂüÚÂüÚÃüÚÃüÚÃüÚÃûÙÂûÙÂûÙÂûÙÂúØÀúØÀúØÀù׿÷Õ½úØÀúØÀù׿øÖ¿øÖ¿øÖ¿÷Õ¾÷Õ¾ù×Àù×ÀöÔ¾øÔ¼øÔ¼ùÕ½úÖ¾õѹøÔ¼ùÕ½ùÕ½÷Ó»÷Ó»÷Ó»÷Ó»öÒºöÒºöÒºöÒºõѹõѹõѹõѹõѹõѹõѹõѹõѹõѹõѹõѹôиôиóÏ·óÏ·óжòϵòϵòϵñδñδðͳðͳñ̲ñ̲ñ̲ñ̲ñ̲ñ̲ð˱ð˱ð˱ð˱ð˱ïʰïʰîɯîɯîɯïʰîɯîɯîɯìÇìÇìÇëÆ¬ûÜÅüÝÆýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄüÜÅûÛÄýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃýÛÄýÛÄýÛÄýÛÄüÚÃüÚÃüÚÃüÚÃüÚÂüÚÂüÚÂûÙÁúØÀúØÀúØÀù׿ù×Àù×Àù×ÀøÖ¿ù×Àù×Àù×À÷Õ¿úÖ¾úÖ¾û׿û׿øÔ¼ùÕ½ùÕ½øÔ¼ùÕ½ùÕ½ùÕ½ùÕ½øÔ¼øÔ¼øÔ¼øÔ¼÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»õѹõѹõѹõѹõѹôиôиôиóжóжóжòϵóжóжòϵòϵóδóδóδóδòͳñ̲ñ̲ñ̲ñ̲ñ̲ð˱ð˱ð˱ïʰïʰïʰïʰïʰîɯîɯîɯîɯîɯíÈ®üÝÆýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅýÝÆýÝÆýÝÆýÝÆûÛÄüÜÅüÜÅüÜÅþÜÄþÜÄþÜÄþÜÄýÛÃýÛÃýÛÃýÛÃýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄüÚÂüÚÂüÚÂûÙÁüÚÂûÙÁûÙÁúØÀûÙÂûÙÂúØÁúØÁúØÁúØÁù×Àù×Àû׿û׿û׿û׿û׿úÖ¾ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»öÒºöÒºõѹõѹõÒ¸ôÑ·ôÑ·ôÑ·óжóжòϵòϵõжôϵôϵôϵóδóδòͳòͳòͳòͳòͳñ̲ñ̲ñ̲ð˱ð˱ð˱ð˱ð˱ïʰïʰïʰîɯíÈ®üÝÆýÞÇþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆýÝÆýÝÆýÝÆýÝÆüÜÅýÝÆýÝÆüÜÅÿÝÅÿÝÅÿÝÅÿÝÅþÜÄþÜÄþÜÄþÜÄþÜÅþÜÅþÜÅþÜÅýÛÄýÛÄýÛÄýÛÄþÜÄýÛÃýÛÃýÛÃüÚÂûÙÁûÙÁýÛÃüÚÃüÚÃüÚÃûÙÂüÚÃûÙÂúØÁûÙÂýÙÀüØÀüØÀû׿üØÀúÖ¾úÖ¾û׿úÖ¾úÖ¾úÖ¾úÖ¾ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼÷Ó»÷Ó»öÒºöÒºöÓ¹õÒ¸õÒ¸õÒ¸ôÑ·ôÑ·ôÑ·óжõжõжôϵóδôϵôϵóδóδóδóδóδòͳòͳòͳòͳñ̲ñ̲ñ̲ñ̲ð˱ð˱ñ̲ð˱ïʰýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆýÞÇýÞÇýÞÇýÞÇüÝÆýÞÇýÞÇýÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆýÝÆýÝÆýÝÆýÝÆüÜÅüÜÅüÜÅüÜÅûÜÂüÝÄüÝÄûÜÃûÜÃûÜÃûÜÃûÜÃýÜÂýÜÂýÜÂýÜÂýÜÂýÜÂýÜÂýÜÂüÚÂüÚÂüÚÂüÚÂüÚÂüÚÂüÚÂüÚÂúÙ¿úÙ¿úÙ¿úÙ¿úÙ¿úÙ¿úÙ¿ùؾúØÁúØÁúØÁúØÁøÖ¿øÖ¿øÖ¿øÖ¿øÖ¾÷Õ½÷Õ½÷Õ½÷Õ½÷Õ½÷Õ½÷Õ½öÔ¼÷Õ½öÔ¼õÓ»õÓ»õÓ»õÓ»ôÒºóѹôÒºóѹòиóѹòиòиòиôиóÏ·óÏ·óÏ·ôиôиôиôиñÏ·ñÏ·ñÏ·ðζðζðζï͵ï͵ðͳðͳðͳï̲ï̲ï̲î˱î˱þßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÝÆýÝÆýÝÆýÝÆüÜÅüÜÅüÜÅüÜÅûÜÃüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄþÝÃþÝÃþÝÃþÝÃýÜÂýÜÂýÜÂýÜÂýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃüÛÁüÛÁüÛÁüÛÁýÜÂýÜÂüÛÁüÜÁúØÁúØÁúØÁúØÁúØÁúØÁúØÁúØÁúØÀúØÀù׿ù׿øÖ¾øÖ¾øÖ¾øÖ¾÷Õ½øÖ¾÷Õ½öÔ¼øÖ¾÷Õ½÷Õ½öÔ¼öÔ¼öÔ¼õÓ»ôÒºõÓ»õÓ»ôÒºôÒºöÒºõѹõѹõѹóÏ·óÏ·óÏ·óÏ·ñÏ·ñÏ·ðζðζñÏ·ðζðζðζòϵòϵòϵñδñδñδðͳðͳþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈÿàÉþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆþÞÇþÞÇþÞÇþÞÇýÝÆýÝÆýÝÆýÝÆüÝÄýÞÅýÞÅüÝÄýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅüÝÄüÝÄüÝÄüÝÄûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃúÚÃúÚÃúÚÃúÚÃùÙÂùÙÂùÙÂùÙÂøÚÀøÙÀøÙÀøÙÀ÷Ø¿÷Ø¿÷Ø¿÷Ø¿ù׿ù׿øÖ¾øÖ¾øÖ¾øÖ¾÷Õ½÷Õ½÷Õ½÷Õ½öÔ¼õÓ»õÓ»õÓ»õÓ»õÓ»öÒºöÒºõѹõѹôиôиôиôиòиòиñÏ·ñÏ·òиòиñÏ·ñÏ·òϵòϵòϵñδñδñδðͳðͳüàÈüàÈüàÈüàÈýáÉýáÉýáÉýáÉüàÈüàÈüàÈüàÈüàÈýáÉýáÉýáÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇÿßÈÿßÈÿßÈÿßÈþÞÇþÞÇþÞÇþÞÇýÞÅýÞÅþ߯ýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄûÜÃûÜÃüÝÄüÝÄûÛÄûÛÄûÛÄûÛÄúÚÃúÚÃúÚÃúÚÃúÛÂúÛÂúÛÂùÚÁùÚÁùÚÁùÚÁùÚÁúØÀúØÀúØÀù׿úØÀù׿ù׿ù׿ù׿ù׿øÖ¾÷Õ½÷Õ½÷Õ½öÔ¼öÔ¼öÔ¼õÓ»õÓ»õÓ»ôÒºôÒºôÒºôÒºôÒºôÒºóѹóѹóѹóѹòиòиòÑ·ñжñжñжðϵðϵðϵïδüàÈüàÈýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄýÞÅýÞÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅýÜÆùÚÁùÚÁùÚÁùÚÁùÚÁùÚÁùÚÁùÚÁùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂ÷Ø¿÷Ø¿÷Ø¿÷Ø¿ö×¾ö×¾ö×¾õÖ½øÖ¾÷Õ½÷Õ½÷Õ½öÔ¼öÔ¼öÔ¼÷Ô¼òÓºòÓºòÓºòÓºòÓºòÓºñÒ¹ñÒ¹òиòиñÏ·ñÏ·ñÏ·ñÏ·ñÏ·ðζüàÈýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇþßÈþßÈýÞÇþßÈþßÈþßÈþßÈÿàÉÿàÉÿàÉÿàÉýÞÇýÞÇýÞÇýÞÇýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅüÝÄýÞÅýÞÅýÞÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÝÄüÝÄüÝÄüÝÄûÜÃûÜÃûÜÃûÜÃûÛÄûÛÄûÛÄûÛÄúÚÃúÚÃúÚÃúÚÃùÚÁùÚÁøÙÀøÙÀùÚÁøÙÀøÙÀøÙÀù׿øÖ¾øÖ¾øÖ¾÷Õ½÷Õ½÷Õ½öÔ¼ôÕ¼ôÕ¼ôÕ¼ôÕ¼óÔ»óÔ»óÔ»òÓºôÒºóѹóѹóѹòиòиñÏ·ñÏ·ûáÉûáÉûáÉüâÊûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉýÞÇþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇý߯ý߯ý߯ý߯üÞÅüÞÅüÞÅüÞÅüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄûÛÄûÛÄûÜÃúÛÂúÛÂúÛÂùÚÁùÚÁøÙÀøÙÀúØÀúØÀù׿ù׿ù׿ù׿øÖ¾øÖ¾ö×¾ö×¾ö×¾õÖ½õÖ½õÖ½ôÕ¼ôÕ¼õÓ»õÓ»ôÒºôÒºóѹóѹóѹòиûáÉûáÉüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉþßÈÿàÉÿàÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈý߯ý߯ý߯ý߯üÞÅüÞÅüÞÅüÞÅüÝÆüÝÆüÝÆüÝÆýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅûÜÃúÛÂúÛÂúÛÂûÜÃúÛÂúÛÂúÛÂúÛÂùÚÁùÚÁùÚÁøÙÀøÙÀøÙÀ÷Ø¿÷Ø¿÷Ø¿ö×¾õÖ½õÖ½õÖ½ôÕ¼ôÕ¼óÔ»óÔ»óÔ»òÓºòÓºòÓºòÓºñÒ¹ùâÈùâÈùáÉùáÉüáÌüáÌüáÍüáÍûáÉûáÉûáÉûáÉüâÊüâÊüâÊüâÊüâÊüâÊüâÊþâÊýáÉýáÉýáÉÿàÉýãÈýâÈýâÈýâÈýâÈýâÈýâÈýâÈÿáÈÿáÈÿáÈÿáÈÿáÈÿáÈÿáÈÿáÈþáÀúàÆøÞÊþÞÇÿãÄÿâÃûÝÃöÚÆúÞÅÿãÈúÝÂ÷äÊùÝÎÿÛÎÿÞÈñåÃÿÞÉÿßÈÿßÈÿßÈþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇýÝÆýÝÆýÝÆýÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÅøÙÂ÷ØÁ÷ØÁ÷ØÁ÷Ø¿÷Ø¿÷Ø¿ö×¾õÖ½ö×¾õÖ½ôÕ¼ôÕ¼ôÕ¼ôÕ¼óÔ»óÔ»óÔ»òÓºòÓºùãÊúâÊúâÊúâÌüáÌüáÌüáÍüáÍüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿâÄýâÈûàÌÿàÉÿÞÅÿæÈúÜÃöàÍþéÖÿãÉûÝÁùæÊúßËÿÛÎÿÞÈõäÃÿÞÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄøÙÂøÙÂ÷ØÁ÷ØÁøÙÀøÙÀ÷Ø¿÷Ø¿ö×¾ö×¾õÖ½õÖ½õÖ½ôÕ¼ôÕ¼ôÕ¼óÔ»óÔ»óÔ»óÔ»úäËúäËûãÍûãÍûãÍýâÍýâÎýâÎýãËýãËýãËýãËüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉþâÃùàÈúßÊþßÈþàÆÿãÇ÷ßÌìÜÑóãÒÿãÏÿáÅøâÈûàÍÿÞÌÿàÉöäÇÿàÉÿàÉÿàÉÿàÉþßÈþßÈþßÈþßÈÿàÉÿàÉÿàÉÿàÉýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄúÛÄùÚÃùÚÃøÙÂøÙÂùÚÁøÙÀøÙÀøÙÀ÷Ø¿ö×¾ö×¾ö×¾ö×¾õÖ½õÖ½õÖ½ôÕ¼ôÕ¼ôÕ¼óÔ»úãÍúãÍúãÍûãÍüäÎüäÎþãÏþãÏûãÍûãÍûãÍûãÍûãÍûãÍûãÍûãÍûãÍûãÍýâÍýâÍüáÌþáÌþáÌþáÌþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊýâÇûáÉûàÌÿàÉÿåÉøÝÅúíÞnhcòëÞøÜËÿäÊøàÅúßËÿÞÌÿßËøäÆÿàÉÿàÉÿàÉÿàÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄùÚÃùÚÃùÚÃùÚÁùÚÁùÚÁøÙÀøÙÀö×¾ö×¾÷Ø¿ö×¾ö×¾õÖ½õÖ½õÖ½õÖ½ôÕ¼ôÕ¼úâÎúâÎúâÎúâÎúáÍüãÏüäÎûãÍüäÎüäÎüäÎüäÎûãÍûãÍûãÍûãÍûãÍûãÍûãÍýâÍýâÍýâÍýâÍÿâÍüâÊüâÊüâÊüâÊûáÉüâÊýãËûâÊýáÉýáÉþâÊÿãËþâÊþâÊþâÊþâÊþâÊüáÍüáÌÿãÉýàÄñÝÇÚÖÌ]egòÛÌÿÜÄÿæÊøáÉÿàËÿßËúâÈÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇþßÈþßÈýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄùÚÃùÚÃùÚÁùÚÁøÙÀøÙÀøÙÀøÙÀ÷Ø¿÷Ø¿ö×¾ö×¾õÖ½õÖ½ôÕ¼ôÕ¼ôÕ¼ôÕ¼üæÔûåÓüäÐúâÎûãÏüãÏýåÏüäÎüäÎüäÎüäÎüäÎûãÍûãÍûãÍûãÍûãÍûãÍûãÍûãÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍþãÎþãÎýâÍþáÌþáÌþáÌþáÌþáÌþáÌþáÌþáÌûáÌüáÌüáÌÿâÉùàÅôæÓ¬«UdlYheÿìáÿäÐþáÅùäÉþáÍÿàÌþâÊýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉþâÊþâÊþâÊþâÊýáÉýáÉýáÉýáÉüàÈüàÈüàÈüàÈüàÈüàÈüàÈûàÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄùÚÃúÛÂúÛÂúÛÂùÚÁøÙÀøÙÀøÙÀøÙÀ÷Ø¿ö×¾ö×¾ö×¾ö×¾õÖ½õÖ½ôÕ¼ùãÑùãÑùãÑûãÏûãÏûãÏûãÍûãÍüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏûãÏûãÏüãÏüãÏüãÏþãÏþãÏþãÏýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍüáÌüáÌüáÌüáÌüáÌüáÌüáÌüáÌüâÊþãÉÿèÍîâÐ@Vg:PMÿõîÿÞÉÿäÆùåÈüáÍÿáÌÿáÍýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉüàÈüàÈüàÈüàÈýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉÿàÉÿàÉÿàÉÿàÉÿàÉþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄûÜÃûÜÃúÛÂúÛÂùÚÁùÚÁùÚÁøÙÀ÷Ø¿÷Ø¿÷Ø¿ö×¾øÙÀ÷Ø¿ö×¾õÖ½þç×þç×þèÖÿçÖÿçÓýåÑûäÎýåÏüäÐüäÐüäÐüäÐûãÏûãÏûãÏûãÏûãÏûãÏüãÏüãÏüãÏþãÏþãÏþãÏýâÍýâÍýâÍýâÍþãÎýâÍýâÍþãÎüáÌýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÎýâÎýãËÿäÉøàÆäÚÉlyzB[n>VWIJ¬ÿÞÉÿ寸äÈùâÊÿßÎÿáÌþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉþáÉýáÉýáÉýáÉþßÈþßÈþßÈþßÈþßÈþßÈÿàÉÿàÉþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÂúÛÂúÛÂúÛÂúÛÂúÛÂùÚÁùÚÁøÙÀøÙÀ÷Ø¿÷Ø¿ö×¾ö×¾ö×¾ö×¾úêÒýëÚþëÜùçÖõåÎøçÏûåÓüá×øãÎùäÏùåÐùåÏüäÐüäÐüäÐüäÐüäÎüäÎýåÏýåÏüäÎüäÎüäÎüäÎüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüåÎüäÎüäÎüäÎûãÍûãÍûãÍúãÍÿáÈõâÎöâÍÿåÃÿèÏA;=?LWI]`AU[ôãÛúÝÍÿãÈüãÉûâÉþßÎýãÇýâÈýâÈýâÈýãÈþãÉÿäÊÿäÊþãÉþãÉþãÉþãÉýâÈýâÈýâÈýâÇøßËïæÉÿàÂÿäËÙáÈøãÒÿØÉðèÈýàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈûßÇûßÇûßÇûßÇûßÇûßÇûßÇúßÇýÞÇýÞÇýÞÇýÞÇûÜÅüÝÆýÞÇýÞÇüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄùÚÃùÚÃùÚÃùÚÃùÚÃøÙÂùÙÂøØÁøØÁøØÁ÷×À÷×À÷×ÀöÖ¿ùéÙ÷ç×ö娸è×øêÔûêÕýéØýçÛÿñÛÿîÙÿëÖýèÓûãÏûãÏûãÏûãÏüäÎüäÎüäÎüäÎüäÎüäÎüäÎüäÎýäÐýäÐýäÐýäÐüãÏüãÏüãÏüãÏüäÎüäÎüäÎüäÎûãÍûãÍûãÍûãÍÿäÈ÷ãÏ÷ãÍÿæÆüåÏÉÇÅGV`=QV@TY.23D2+óØÆÿãËüãÉüâÊþßÎÿãËÿãËÿãËÿãËÿãËÿãËþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþßÈõçËþÛÄüâÑÝç×îÚÏÿßÌõåÄüßÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈûßÇûßÇûßÇûßÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄùÚÃúÛÄùÚÃùÚÃùÚÃøÙÂøÙÂ÷ØÁ÷ØÁ÷ØÁ÷ØÁö×Àö×Àúîâùîâùíß÷ëÙøêØúêÙùéÚøèÛúåÏùäÏùäÏúåÐüäÐüäÐüäÐüäÐýåÏýåÏüäÎüäÎüäÎüäÎüäÎüäÎüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüäÎüäÎüäÎüäÎüäÎüäÎüäÎüäÎÿäÈúâÑúâÎÿäÈ𶸻_pzGV]@T\MRS¡÷ÞËýâÊüäÉüáÍüáÎüâÉüâÊüâÊûâÊýãËýãËüâÊûáÉþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊÿáÅùáÈýâÒêÝÙhwvñäàÿÝÌùãÁýáÊýáÉýáÉýáÉýáÉýáÉýáÉýáÉüàÈüàÈüàÈüàÈûßÇûßÇûßÇûßÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆýÞÇüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄúÛÄúÛÄùÚÃùÚÃùÚÃùÚÃøÙÂøÙÂøÙÂ÷ØÁ÷ØÁ÷ØÁõíéùðæúòáýñßÿðàþîáûëßùêÚüçÒúåÐùäÏûæÑÿèÔÿèÔÿèÔÿèÔÿçÑÿçÑþæÐýåÏýåÏýåÏýåÏýåÏüãÏüãÏüãÏüãÏýäÐýäÐýäÐýäÐüäÎüäÎüäÎüäÎüäÎüäÎüäÎüäÎÿåÈùâÑûáÑÿåÉìßÍ\m|M[d:T\LSVÿñëöÝÍüäÊûãËûãÍýâÎýãËýãËýãËýãËüâÊüâÊýãËýãËþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâËÿãÅÿàÊöâÚ¦¯³Viu¯©¯ýÞÐþå¿ýáÊýáÉýáÉýáÉýáÉýáÉýáÉýáÉüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈúßÇûßÇûßÇûßÇûßÇûßÇúÞÆúÞÆúÞÆúÞÆúÞÆúÞÆùÝÅùÝÅøÜÄøÜÄøÜÄøÜÄøÜÄ÷ÛÃúÛÄùÚÃùÚÃùÚÃøÙÂøÙÂøÙÂ÷ØÁõìïôìåøñÞùîÚøéÙúèÞùêÝøê×þèÓÿëÖÿì×þéÔýäÐýåÑýåÑýåÑûãÐüäÐüäÐüäÐüäÐüäÐüäÐüäÐýäÐýäÐýäÐýäÐüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÐõâÄûäÓþãÕþáË¢ /5G\nJS_<ZgFOWËÁ½º¤ÿîØûæÌüäÎúâÎýãËýãËýãËýãËýãËýãËýãËýãËüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâËýãÂûÙÅóæâ¥K`tSS_üêàÿåÅúáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉúáÉüâÊûáÉùßÇúàÈúàÈúàÈúàÈûßÇûßÇûßÇûßÇûßÇûßÇûßÇûßÇúÞÆúÞÆúÞÆúÞÆùÝÅùÝÅùÝÅùÝÅùÝÅùÝÅùÝÅùÝÅøÜÄøÜÄøÜÄøÜÄúÛÄúÛÄúÛÄúÛÄùÚÃùÚÃøÙÂøÙÂÑÆÑöìåøí×ùëÔüæ×úãÜ÷äÕõèÐúåÐûæÑûæÑúåÐýåÑýåÑýåÑýåÑüäÐüäÐüäÐüäÐüäÐüäÐüäÐüäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐüãÏüãÏüãÏüãÐùåÇøàÏÿáÕõçÑÓÎÁv1EYPVd;ZiGQYogcÿîáùàÌûåËûäÎüãÏûãÍûãÍûãÍûãÍûãÍûãÍûãÍûãÎýâÍýâÍýâÍýâÍüáÌüáÌüáÌýáÎõãÅÿÚÍßÖÓ|¥?RePUbâáØúàÇûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉúàÈúàÈúàÈúàÈúàÈüàÈüàÈüàÈüàÈûßÇûßÇûßÇûßÇúÞÆúÞÆúÞÆúÞÆúÞÆúÞÆúÞÆúÞÆùÝÅùÝÅùÝÅùÝÅøÜÄøÜÄøÜÄøÜÄøÜÄøÜÄøÜÄøÜÄ÷ÛÃ÷ÛÃ÷ÛÃöÚÂ|éÝ×óèÌýìÐþãÖýàÚúãÒùéËûæÑûæÑüçÒûæÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑþåÑþåÑþåÑþåÑýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐüãÏüãÏüãÏýãÐøéÇþåÕ÷ÕÉÿíÞÌÍÃ|@ZnKM\=_nJU`C<;ÿÿòùäÎøäÎüäÎüãÏüäÎüäÎüäÎüäÎüäÎüäÎüäÎüäÎýâÍýâÍýâÍýâÍüáÌüáÌüáÌþáÌéàÊÿßÓ³§\x129=APbTYf£êÔÃýâÊüâÊüâÊüâÊûáÉûáÉûáÉûáÉüâÊûáÉûáÉûáÉûáÉûáÉûáÉûáÉúàÈúàÈúàÈúàÈùßÇùßÇùßÇùßÇùßÇùßÇùßÇùßÇøÞÆøÞÆøÞÆøÞÆ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅøÜÄøÜÄøÜÄøÜÄøÜÄøÜÄ÷ÛÃ÷ÛÃjWiïàÚøêÍÿîÑÿäÕÿâÜÿæ×üêÊûæÒûæÑûæÑûæÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑþåÑþåÑþåÑþåÑýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐþäÐ÷êÆþãÕþØÐÿçÕÏÑÆw¡]v`bsChx[irúæÚûåÍúäÎúåÏýäÑüäÎüäÎüäÎüäÎüäÎüäÎüäÎüäÎýâÍýâÍýâÍýâÍýâÍýâÍýâÍÿâÍêèÒ纲¾¹³b;JXZbn°Á»îßÏýâÉüâÊüâÊüâÊüâÊüâÊüâÊüâÊýâÊûáÉûáÉüâÊûáÉûáÉûáÉûáÉúàÈúàÈúàÈúàÈúàÈúàÈúàÈúàÈùßÇùßÇùßÇùßÇøÞÆøÞÆøÞÆøÞÆøÞÆøÞÆøÞÆøÞÆ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅùÝÅùÝÅùÝÅùÝÅùÝÅøÜÄøÜÄøÜÄCHVèÚÔÿæÔ÷ãÓöåÔýçÎýçÍôä×öæÑöæÑöæÑùæÑ÷åÐøæÑûæÑüçÒýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýæÐýæÐýæÐýæÐüåÏýæÐýæÐÿçÑòêÌþêÈûçÎóäÚøáÒÿäÆüàËóèãÐãÚÌßÚ¼ÕÕ®ËÔª¼±Äµ\x7f³k
;W^Nir/GQ¤¶»ÒÙÖîíßçßÍùåÊûåÌûåËûäÎûãÏüãÏüãÏüáÓüéÅüåËúæËûãÐùâÎûâÎûãÍþãÊóáÊïçࡹÃjUT_MZ[xôÜÜúãÌúâÌùáÎüáÍüáÍüáÎúâÌúâÍøãÊùãÊúâÊúâÊûáÉûáÉþáÉþáÉùáÌùáËùáËùáÌøàÊøàÊøàÊøàË÷àÆ÷àÆ÷àÆ÷àÆõßÅ÷àÆ÷àÆøáÇößÅößÅößÅößÅößÅößÅößÅößÅ÷ÞÄ÷ÞÄ÷ÞÄ÷ÞÄõÜÂ÷ÞÄöÝÃõÜÂJM[÷éãýåÑ÷ãÒ÷åÔýæÐýçÎõåÕúæÑúæÑùæÑùæÑýçÒüçÒûæÑûæÑûæÑûæÑûæÑûæÑûæÑûæÑûæÑûæÑûæÐûæÐûæÐûæÐüçÑüçÑúæÐûæÐöæÔÿæÍÿåÒöäØúæÕúãÉäÛË¥¦¤±£°¢´}©¥¶y©z©x§\mx<R^8M]K\iJVaV[^onjîéåþèÌúæÍýåÐüåÏüäÐýäÐýäÐýãÓüåÊüäÌûäÎüãÏýäÐýäÑÿåÌÿäÍÿèËüçÞm"?PSXiN^`F]YåÎÌúäÉûãÎþâÍþãÍüáÌüáÌúâÌúâÌùãÊùãÊúâÊúâÊûáÉûáÉûáÉþáÉùáËùáËùáËùáËøàÊøàÊøàÊøàÊøàÈøàÈøàÈøàÈ÷ßÈ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇöÞÆöÞÆöÞÆöÞÆ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÆ÷ÝÅ÷ÝÅNQ_öéãþéÕüè×øæÕþçÑþèÏöæÖúçÒúçÒüçÒüçÒýèÓþæÒþæÒýåÑüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒýèÓüçÒüçÒûæÑöáÝÿäÓÿäÑûäÖôãÒöêÔ´¾´v¥¿·{°{µs¨\x7f¡°~¡]R_q>M_BSg=L`KXhFO]OU]»ÁÉþåÌúåÏùåÏüåÏüäÐüäÐýäÐýäÐûäÎûäÎýãÏüãÏþãÏþãÎÿäÌÿåËþéÄઽÃs§KRhL]h#>:ÿôôûçÌûåÌüäËÿãÏüáÌýáÌúâÌùáÎùãÊùãÊúâÊúâÊùâÊüâÊüâÊüâÊùáËùáËùáËùáËùáËùáËùáËùáÌøàÈøàÈøàÈøàÈøàÈøàÈ÷ßÇöÞÆöÞÆöÞÆöÞÆöÞÆ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅöÜÄöÜÄ÷ÜÄJM[çÙÓÿñÝøäÓøæÕþçÑþèÏöæÖýæÔýæÔüæÔüæÔþæÔþæÔþæÔÿçÖüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒþèÓôäÝÿæÑÿèÎÿæÒþêÕøêÓ ¨¥v«}µy¯x®|°s¥¡²
£^\x7f^gv@Q]>N^<L^<M]TaoMZdþäËúåÐúåÐùåÐüäÐüäÐüäÐüäÐúäÓùäÒüäÒýäÐÿäÐÿäÏÿäÐÿäÍÿóÌýÛ̼Äm¤gn`w.OJðæåôâÌõäÌúãÎýãÊýãÊýâÍûãÍúâÎûãÍûãÍûãÍûãÍúâÌúâÌúâÌúâÌúâÌúâÌúâÌúâÌùáËùáËùáËùáËøàÈøàÈøàÈøàÈ÷ßÇøàÈøàÈùáÉ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇöÞÆöÞÆöÞÆöÞÆöÞÆôÝÅõÞÆ÷ßÇ,/=ztnZþíÜøæÕþçÑþèÏöæÖöâÐôàÎÿìÚýèÖüæÔþæÔþæÔþæÔüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒýçÒéåÔÿìÑÿèËÿçÒúãÌþèÒª§¤q¦®§µ^wm^s
CXkCZj|£Obf<MVBV\BU\@TZGXaCW]rÿçÒ÷äÒ÷ãÍýèÓúæÑþåÑýåÑþåÑ÷äÒüæÔþæÔýäÐýâÎùàÌûåÑüèÔÿåÇóßÕm:Zt©Mfs.QRQINÓ̺ßÔÃòãÍ÷àÊþãËþâÍúãÍ÷ãÎûãÍûãÍûãÍûãÍúãÍúãÍùâÌùâÌùâÌùâÌùâÌùâÌøáËøáËøáËøáËøâÉøâÉøâÉøãÉöàÇöàÇöàÇöàÇ÷áÈ÷áÈ÷áÈ÷áÈöàÇöàÇ÷áÈ÷âÈ÷ßÇ÷ßÇöÞÆöÞÆõÝÅõÝÅöÞÆöÞÆ?BPùëåûàÌïÚÉøæÕþçÑþèÏöæÖöåÒÿðÝñÝËþé×úæÔüæÔüæÔüæÔúçÒúçÒúçÒúçÒúçÒúçÒúçÒúçÒúæÕúæÔúæÔúæÔúæÔúæÔúæÔúæÔïéÔúéÍÿëÏøç×ôßÑùéØ
°Yxy\b%*=Q\-?M<N_yYj{CTfTglATZAT[AT[@RY!59@PUuÿèÓýíÚôßÍýêÙüçÑúæÑýåÑþåÑøåÓûåÓýåÐþåÑüäÏùåÓ÷è×íàÑðéÜ®¦¨ªÈÖPp
£§ÀK`k*PS|}¢¤MJ@ýðáúèÒûãÎûãÊüãÍúâÏûãÍûãÍûãÍúäÍùâÌûãÍøãÍòÞÈùâÌùâÌùâÌùâÌøáËøáËøáËøáËøáËøáËøáËøáË÷àË÷àË÷àË÷àË÷àÊ÷àÊ÷àÊ÷àÊößÊößÊ÷àÊ÷àÊ÷ßÊ÷ßÉ÷ßÉöÞÉöÞÈöÞÈöÞÈöÞÈDGUóåßüãÏþêÙøæÕþçÑþèÏöæÖùë×ôåÒ÷èÕìÛÈ÷æÓ÷çÔúæÔúæÔúçÒúçÒúçÒúçÒúçÒúçÒúçÒúçÒúæÔúæÔúæÔúæÔúæÔúæÔúæÔúæÔûêÔÿéÏôâÓëáàïìëäáÝ u²
¬¦¾Ï²Ä©½Ï¶ÅÙj~JapeoVlxF\cGW`2@J6CK-6A\v\x17$ìôßÏÿîÝ÷ãÑûåÔûæÑúæÑþåÑùçÑûæÑýæÐýåÑýçÕðàÐòêÞåÝаÅʯ¸È³Çx¬wyRhlCkm¨O\]Z`\ÈĺñâÑüäÎüäÌüäÎûäÎüãÏüãÏüãÏûãÐûâÏûæÒöàÌñÜÇúãÍùâÌùâÌùâÌùâÌùâÌùâÌùâÌøáËøáËøáËøáËøáËøáËøáËøáËøáËøáËøáËøáË÷àÊ÷àÊ÷àÊ÷àÊøàÊ÷ßÉ÷ßÉ÷ßÉ÷ßÉöÞÈöÞÈõÝÇGIWóãÝþåÐÿìÛùçÖÿèÒÿéÐ÷ç×÷é×÷èÕÑ¿ÿóà÷çÖøæÕ÷æÖ÷æÕúçÓûçÑüèÑúçÒúçÓúçÒúçÒúçÒûæÕûæÔûæÔúæÔúæÕúæÔúæÔúæÕÿäÕÿâÒûèãÒÐÙ¥°¡«m¢¼z°º±~¬7R_3T[6]]<RiAYjBTe>N\<GS\x0e\x14">BPEJ]ÿÿÿóßÍýéØùåÒüæÔüçÒüçÒüçÒûçÒûæÏýæÐÿèÑôåÑöéÚðëঠ¨¼¤¹y¢ºSu
qm|]pt:dfNU`^mvZcdÅûæÙÉúåÎþåËýäÌúäÎüãÏüãÏüãÏûâÏûçÒñÜÇüèÒéÕ¿ýäÍûãÍúãÍúãÍùâÌùâÌùâÌùâÌùâÌùâÌùâÌúâÌøáËøáËøáËøàËøáËøáËøáËøáËøáËøàÊ÷àÊ÷àÊ÷àÊ÷àÊößÉößÉößÉößÉõÞÈôÝÇ?TXÃÎÍçåÝùë×ÿèÑüèÓõç×ñè×çÞ˽ÇÄZp~XdrîßÞþàÑÿßËÿíÝúë¼êãâäâí÷èÔÿæÇüàÒúäÚýìËîêÍêè×ïêÖÿíÏýçÈùèÓùêÑûéÁûæÉÿéØèçän{¢µ¶¶ªu¡sx¡ne|7N]>R^=Q_8MR@U\@V]@S[9MU\x1a/6;MV<NWwØãåïæåûãÙÿæÑÿçÎÿæÒÿã×èäÝôåÖ÷äÖöä×þçÐÿëÊïèÞ{¬
¨Á¬Á®Â]j~CTdYhwSak<NXSkd^fuµº´áåÐÒÎÚåÚÚòçÅÿäÒöãÑöãÒøäÏýäÌþåÉõæÑàÞÚU`kÙÞØäàÏûæÐýäËûáÍ÷áÐ÷âÎ÷åÈõãÌõãÌõãÌõäÌóâËõãÌõãÌöåÎõàÊöáË÷âÌ÷âÌöáËöáËöáËöáË÷àÊ÷àÊ÷àÊ÷àÊößÉøàÊ÷àÊöÞÈBTZJSWöóëôãÓÿçÓÿèÒùèÓöèÖóêÜPdlEU^ïêéÿîÝüéÔöêÓó鯼º¸\\cöìÞýèÎüâÓ÷åØýîÒÚÙÍÛØÖìãÚüãÏþëÕîâÕêâÖüðÞÿòÕíÚÊåãর
¨¹µ©¬w¡k|£f}Thw>U`@Vc:P\AT[@SZ@RZEX`?OYGXaBS\DT^9WRHX[ÿñéýçÑÿèÎùçÒõæ×òæÖûçÑýçÑøæÖùãÍÿéËâàÔ§¸
©½o¢°Åh|DTdfvDU^9ITIa[HQb¢¨£ÚàÑF>HôéèöêÊÿäÔøäÒøäÒ÷åÐüæÍüèËõåÐÆÂ¼fpz¼À·ïéÛìÚÅþäËûâÎøâÐõãÎøäËöäÍöäÍöäÍöäÍõãÌõãÌõãÌõãÌ÷âÌ÷âÌöáËöáËöáËöáËöáËöáËõàÊõàÊõàÊõàÊõàÊõáËöáËõàÊ9JX<FMuppíßÓýçÕÿèÒþèÒùéÑåãÜpz~>T\@S[åßÒïêÖèæÍæéÔ}U\iòçÑøäÓöåÙíçÓ\x7fZ]höïñüåÕüæ×îéé²¶¹ÓÕÖñäÍöêßÍÎФ«¦¹}¦o\x7fux£u| aue|8KV@S_F[bFV_>OXIZcFW`GU^GV_ET]ES\7Y^G[c@FJÿüõõçÕõêÎõèÒïèÖøæÐÿçÌþçÍôäÔöéÖõåÑÐÎǨ¸~´{¸ÉLdt=P]_q|?RY;NWCZYWarÒÝÏ_^lÏËÍõêÐýäÕ÷äÒøäÒ÷åÐüæÌþéÏîáͧ¨¦UblûöêýíØüèÒúáÍöâÐöãÎøäÊöãÎöãÎöãÎöãÎöãÎöãÎõâÍõâÍøãÍ÷âÌ÷áËöáËöáËöáËöáËöáËöáËöáËöáËöáËõàÊôßÉôßÉõàÊ4DTGQ[IHMòçä÷æÙûçÕûèÓúéÒÂÌÎ`ruBZbAT\]adîåÝðâÑöëÔÀÔËdpxKXeZcgöñæùåÓñå×ÑÒÄlzO[k§¥©ùèÙóâѧ¬®XjvAS\ìèÛêãߥ©§µ\x7f¯^o
1C!<K[n\x19-=;O`6KZ*<I@T_>SZ1FN\x1e-:\x19)5=JW!.;1?LJUaFR^NXd:XbBUaBDMðèæôçÖöëÒöêÑóè×õçÕÿêÍûèÐêæÜëèåÙÚÓÅÎЯƼ̨¹\x7f©Lcr9P[OdoI\c<OX\x17.-'2IQ`]²Â¹LReÅÅÊêåËÿâÖûæÏøäÓøåÐúäÏñÞÆéÞ˼½¼QapRYZÞнúäÎùäÎôãÐôãÑöåÍ÷ãÎöãÎ÷ãÎ÷ãÎ÷ãÎöãÎõâÍõâÍõãÌõãÌõãÌöåÍõãÌõãÌõãÌõäÌöáËöáËöáËöáËöáÊôßÉôßÉõàÊ\x1e.?\x19%347?æáãèÝÚøìàòè×íäϤSls:RX<LVFFNüìîüãÛÿêÙ°³Tdl>KZCU^çëåöäÒóéÛTjx>R__egÿøæãßÏ~D`lA^eglfäå硯¾ ²¥·kzx¡Tj|y ¦BWfG^i?R]@U\9NV0?L7GS0>J#1=6DP\x17#/\x19%1"-9"6F2<K74?ÿúûøè×öæÎýì×øåÔñåÙûèÐòåÒÜã䣱¾¦²½§~µw °c}H`l?UaAW^BR[>PWDWX;F\)8;¨½·GRgíèÒüäÖùäÏ÷ãÒôäÏøæÏöåÌÿöè©°Ug{T]]ÛÚÔíßËþèÒ÷äÏõäÑõäÑøäÏóãÎôäÏôãÎôãÎóâÍóâÍóâÍóâÍõâÍõâÍõâÍõâÍôáÌõâÍõâÍóàËöáÌöáÌöáÌöáÌõàËõàËõàËõàË,9G!,:7=H #,/.3¹»²ÀÁ¸a|Jbh?UZ>MTEDS¬ ªýæäüáÒjHV^;IU:P`mtsúçÔïâ×rUnt4OYGVXááÕÓØÌgz~>[e9TZ7EIÝäîx\x1d8I\x188I\x7f¢}v¡ µz¤czqQit<R]@Va6NU<KW<LX3CO1AM/<H:HT;IU(6B(:G*2A'%0F85áÑ¿ÿóÛúäÏþèØìæÛüèÓòê×¾ËÐu¨
²©¡¼xcyUny=VbCVbG[b?NWDPYHZZEPe@QSPhbP_tZbjóî×üàÔûæÏùæÐöåÑöæÎ÷éÑðèÜ{Uk\hnÛÜ×èßÎôäÌõäÏóäÑòãÒõäÑôãÐõäÑõäÒôãÐôãÐôãÐôãÐôãÑõâÍõâÍõâÍõâÍôáÌõâÍõâÍôáÌôáÌôáÌôáÌôáÌôáÌôáÌôáÌôáÌ?KT.:F0:H1;JCMW?JQ>LPCRP8KY:NR>RR=PW?M\BIVôôöøóèeIRULU_/J]WaeÿîÚìàÓx£I_c@[h8LXqxw¦®®qLdtIZ`2LTHQ`¡²¯ÀNj{.?Pet^|r nx¢o`{8P\=Ua<V`AQ^?P^9JW6GT7GT6FS8HV8HU7LW8DQ;=EéáÞôæÖòåÌýíÚüèÙòæÚÿîÑõèѹÅÊRp\x14/@*<K\x1f2@;KWdw&9D9OZ@V]\x1c-7%2:AKTL\[CLaGXZF`[FVmIPXÿüáÿäÖûæÐùæÑ÷æÑ÷æÑëÛÇÀ½²¢®³=TlWclvxu»° ðãÌöäÏóãÒóãÒõäÑõäÑõäÑõäÑôãÐôãÐôãÐôãÐôãÐóâÍóâÍóâÍóâÍóâÍóâÍóâÍóãÎôáÌôáÌôáÌôáÌõâÍõâÍõâÍõâÍ@JR?IS/:I%3C(8J&9G-BI7OU;FU@MR;IJ5HO1JZ2L[-CEL`O/TdMRSKPY4OeGRVÿ÷áéÛÐOmgz}:TfCWjPXbl}G[nCQV1N[CPas¢s¡\x7f lz]{t¦n
®oQk|4O]:U`9T`<O\;O\1ER*:G=N[<MZ?O\BQ_5SW-@G9CGáâÛùòßëàÉûîÚøèß÷çÔÿèÅþïеÂÀoz¢wNW\FVd5GQVkuAU`GZa8GP5?G?FQ*75ILeK\^Hc\@PgAIQÿûàþâÔýæÏùåÐ÷æÐùæÏúèÑäÞФE_xWbj¨«ªïæÔôåÍóæÎòäÒóãÒõâÓõäÑöåÒõäÑõäÑõãÐõäÑõãÐõãÑôãÎôãÎôãÎôãÎôãÎòáÌóâÍôãÎõâÍõâÍõâÍõâÍôáÌôáÌôáÌôáÌ9JP4BH1<C/8A-5>\x13\x1a'%,;1;J6FN2DN3FR2ES1DP8IS7HR1?L?P];P_5KX@P\>P^J`rq
ftBX`9MW=P]7K[¢²Zr|Kbk4MT7PZ.KV
¡²w¤nkh
fua}B]jXsd{@Tc?P`=P_8CQ\x1a*7+<I@Sa8LY2BO^[(6"+:ALS6=G7:>îçäøîà÷èÐÿëÌêëÙõäÕòäÜ£«©yv¢s¥s¯i}^s
as;N\I[f@QZ;NU6JP;M\@RV>HQ,3@-7@CEJ¶±¬ùéÔÞáÖüêØöß×ÎÑÝ¥ÄÕ¡ÄÏ®½«Í¢´l·¿ÄçâÛòâÔóåÎóåÎñåÎóäÑóäÑóäÑóäÑñâÏñâÏòãÐòãÐñâÐñâÐñâÐñâÐðâÏñâÏñâÏïáÎóâÍóâÍóâÍóâÍòáÌòáÌòáÌòáÌ4DK)9BEOY2;D4=G\x1a"0)2?1=I6EN:IQ5EQ7GT8IV9IU5CL\x10\x1f(.?L5ER6GT<MZ7GT3CP@P];KX4JQ3GS=P]>Qa:M\H[h6JU6KR2IQ2JV`wd}d|z§a|qh\x7f<SbAYh;O^AVe/DS=P_=P`<IU5EQ2DO9NY8JU-<I+9EEP\:KW)8D\x1e(2y}¸»ÀÛÙÕåäÚëèÙÍÑÅøìâüòꢰ¯t\x7f¦®mk\x7f§h{BUbEWbCT]BT[<NUI]dK\cLY^9DLLU_/38ëåÜúêÖïæÕúæÎÿòæw£©g~u¨a}Seo]bd¾¸²ñäÔôåÓôæÐóæÐóäÑóäÑóäÑóäÑôåÒóäÑóäÑóäÑòãÐòãÐòãÐòãÐòãÐñâÏñâÏñâÏóâÍóâÍóâÍóâÍòáÌòáÌòáÌòáÌ-=J+9E\x16#/)2?-6@2=F0:D2=G3?I<GT6DP/@M5ER1?K9DQ#/9'7E4DQ;KX9IV@L[9FT\x0f^[)+8F4JQ4HS8KX8K[3FU8KX1EP8MU<QY6IU!4A)<K^rgz{ v9IUK\iAQ^FZf?R_?Q^;N[<S_BS[5FO:MU;NU9MT:KT7FO=HQ4IW8IV1CQ©et^luëøÿ ¬²N^[ÈÄÄõö󤦯¿n~|xh|s_rDWdEWbK\eM_fGY`HYc@NTfqt^gn=GQEKOøôìøéØúëÏýæÎóæÛ£t¬~©~h|Wn~HZdfoputkðèÚôæÔõåÓôçÐòäÓòäÓòäÓòäÓòäÒñäÒñãÑðâÐñãÐñãÐñãÐñãÐñãÐñãÐðâÏðâÏóâÍóâÍóâÍóâÍòáÌòáÌòáÌòáÌ)9F\x1c)72=K*3@%/9=GQ0>E6CK8BL6BN4AP5AO5BP:GUDP\8BK1BO5ER8ES8ES2?M8BP\x1f)7.8F0EP6HR;KYCS`%6C$5B2BM5EQ7JR=MV&6C+;F\x1f/<]lyM^k9IV-8C<GS@NZ\f\x1c(3EP8LW8LW<S^CS\:KT?OY@QZFXaFU^?NW<GQ;LX8HU7IVN_lSgw?Sc¦¼Ìe{F_d\dlñõúVns\a$2-?P3>M\a\x1a\x1enThy\x1d0?9LYEWb$4=\x17)0&8?*9B2=C\x1f*.s\x7fJW^CKPòñéõçÙþëÎúæÌçàÙ|¦Khj\mw`t[n{@R\OY^_^[îèÞïæÔóåÑôåÒóåÓóåÓóåÓóåÓòäÒóåÓóåÓóåÓñãÐñãÐñãÐòäÐñãÐñãÐñãÐðâÏñâÏñâÏñâÏñâÏñâÏñâÏñâÏñâÏ3BS3@P5?M.7D/8F7AJ6BL(9?-6D)5A3@N1=N2>O#0>\x0f^['/7E7HU8HU6BQ7DRAN\5?M9DR>HV.?L2BP3FP:LW0?L)9E-:H/<J5GO8GP".8\x1d&0\x1c&/\x13\x1f,\x18%1\x1c,:\x19"+.7AFQ[:IQ5FNAT[?U\6OV&6?\x17(1,>G\v\x1a#\x15$-\x19(1\x1a(1-=F9AGO\`?KSAPY7ITBUbXpTk|1N^@MZ²ºÄqgj{7DP\qsK_q,@R`r9LYEWb:KT8JPCV\BP]?JR4?C +.1@G2<?®¯ªÚÑÅüéÒúì×ÒÖÒ«Á¤Æu©|£oWfoLX]DGFÙØÎêáÔóçÕöçÔóåÓóåÓóåÓóåÓñãÑòäÒòäÒòäÒñãÑñãÑñãÑñãÑñãÑñãÑñãÑñãÑðâÏðâÏðâÏðâÏðâÏðâÏðâÏðâÏ3DQ6GS2@N1<J2;H5BN-9E\x17%2\x1f+7\x1d(63@N/>O7FV)6C0:H?LW;KX:JW3DQ1AN0<J\x19&4\v\x18&.;I3CT4ER1CNCS\>MU1?L1;I,6H4GS;IU5?H'0:#'3 )3#0<\x1f,:\x1e&31>J:ERDQ^DS`@R^?S^9MY1DK6GP+9B +5&2<&1;0@H\x19)207=\x17\x1e$\x1c(.$17\x14'-:MT?R_J_n,L[CS_z~¨g{£¨by|[n§¸M`o7KX?Q\>OX<NU:MS@M\BNYEPSARX:MU:GNàãâóîåëâÙÒÊÀ¸w°©¤|ªO_kSblVcgAHGããÞãÞÔóæÖóãÒóåÓóåÓóåÓóåÓóåÓòäÒñãÑñãÑòãÑòãÑòãÑòãÑòãÑòãÑòãÑòãÒñãÐñãÐñãÐñãÐðâÏðâÏðâÏðâÏ3EP6FS2@L.:F.:H6AO0>L%2@%3?.:I1AQ/?O1AQ/>N0<J8GS7HU5FS5FS4ER2CO\x1c,9?P\=MZ5EU0BN4CO3DM\x16%.\x19%108F29J8IZ8HU&.;%*5(.9'1:,4B"/= /:3AM:HT?O[:MX@R]=OZ<Q[6GS0@L9GT\x10\x18%)1>0=I8FS\x16$0&.=.6C;GQ:KQ;MT3FM<MXAS`-IZBM\~\x7f§Yzu Xey[r|ThzOcu{DWdI[fEV_ASY@SX;I]?MYBSYDW[=S[<PXª³³íéãÙÙâ¶¼ºYlpv§z¢ h¢UbnSclP\cOZZEJFêæÛíãÖõåÓñäÔñäÔñäÔñäÔòåÕñäÔðãÓïâÒðäÒðäÒðäÒðäÒðäÒðäÒðäÒðäÒïäÐïäÐïäÐïäÐîäÏîäÏîäÏîäÏ4HO1BK7FR*7C-8G09K-:J-8K.=H+<I/?O';J*>M.>N,<I4BN5IV3FS4HU4ER/@M(9F)9E5FR.>O2DP3CO2@H)4=8DO5=K4;M(<M)7H\x19 -',6-0:).9/8F1>O&7C->K8HU8IV>O\GWe;LY6FT3CQ8HU+4C^[#18@O?FUCQ_\x18%3'0G6DX6GS1AN<PW;MX7KX>Qa3P^@JUEKX6Qb'J_¼dt &2Pcu^[/A\x1e1@AUbEWb>OX'9@L^c?NdGXf@PWDX^8P]H]fS\`ÕÔÎ^fm
]{fw}ªe©U^jNYdAPVWehU]XöõìîäÖúéØñãÕñäÓòåÓóäÓòãÓòäÓñäÔñäÕðäÒðäÒðäÒðäÒðäÒðäÒðäÒñäÒðãÒðãÒðãÒðãÒïãÑïãÑïãÑïãÑ0=I0>J\x1c(13<F.8A2>J0=K1>M*8D,=I'8E+>M.BN2DN3EM3CI1@M/?K1AN4DQ6EV,;K+9L/<O/@J0AO,@P0CU+>P/?Q)9I*7E-<M);G!3@#1?#.="2>*8D+<G*;H-?L2CP5IV2ER9Q\:Q]8Q],CM 7B"7B:MX9JV6GS\x18&2\x1f,8.EN5HR=MY>KW4?K4?KCP\<IU;JW8ETAMY:CO2<IDTbudy9IT0AM1CM2DOCVa*;D<LV\x12$.\x1a")\x16\x1f'4<E*4<DPWKW_YfoGY`¥@UewPaoQbrtK^o<K\LdiEX_HX^@EK=<>ìä×íæ×ïëÆòèÝìçìÝãÛàçØæäÚîä×öæÍìåÔíåÔíåÔíåÔëãÒëãÒëãÒëãÒìãÒìãÒìãÒíãÒìâÑìâÑìâÑìâÑ,<I\x1d+7-9E-9C\x1d*6.9G*7G-;M3AM0=K-=J.>N0AN5EQ3BK1BH3CP4DP->I7GT6FS2AR1@P0@P0@L0@L1BO7FW6EV+:K+8F*6B,>K/?L'4B#.<)1>#/;'3?)7C/;J0@M1AN4ER6JW;N[.EQ/EQ/EP-@K+@K8JU<LX5EQ1?K9GS8NY2EO\x15%1^[)58DP3?K/=I-:F,<I5APBNZ'4=\x1d)5 \x15#%5F(9M0@L5ER3BO:JVFVc!2;6GP=OX"*3DLU9EL>HP\x1c)15BJ\x1f,4<MRjzDXeatzViwCUfi{xH[bNahFU[V_cLQRØ×ÓæáØêâÖæéÐÏÌÈäæÝææÓêä×ìä×òæÒíåÔíåÔíåÔíåÔìäÓìäÓìäÓìäÓîäÓîäÓîäÓîäÓîãÒîãÒîãÒîãÒ2BR3CP1=L)7C-;I-:J-;N/>Q4@K7BP0<M-<L3BS7DR9EN8CN8GP1@I2@L9GS1?K1?J.;I,9G5DL/>G->J3CP:JW2?K-8B09C0AN2>L)4B(0?)1>%-;)1?*6B/9H0=K2?M3CP:JW=N[8HV7JX7KV5JU7HS7IT:JV1AM6DP;IU5GR4DQ3AM=IU8DP.:FFT`6GR3BS3@N@LX"+5.8B'09*6B0;F2?M0=L2AL8EQES`7FOCR[APY<FNFQY<GOGQY&4<:GOGT\EQYWiq6GOI[fSdpzlli}I]aIYa4@EALT>BFçèçÞÜ×âò妪°XW]êéÛêçÒìåÖìãÚìåÖíåÔíåÔíåÔíåÔíåÔíåÔíåÔíåÔìäÓìäÓìäÓìäÓëäÓëäÓëäÓëäÓ5GX-=M9IV)6E*7E*9I)9J\x16(;\x16\x1f-\x17"0.;K2?N3@P-:H\x16!.$-7".8%0:$09*6@=IR.9F%1=5AM8EL0<F1?L7DPDR^2=G3=E,6=.;J4?M,5C%-:)/<'0=-6?/9C1:H4?M9DR;HV?KY<LY<MZ7HU;MW9JU5HS<KX8HT3DP9FR:HT3DM1CL9HQ?JT^['0/:D2BJ%7?'7H7DR@KW:DM7?H*5;8?F3;@4=L@HV3;H9EQFR^NYcJV`DOZHV]DQYES[AOWCPXFS[IV^@MUDTZBQXEV_br~xtfxH]pIV\R`fLX^JS[U_bowz¥¨¬¤¦[]iÜØÊîéÎîæÔêâÙäãÛìåÖìåÖìåÖìå×ëäÕëäÕëäÕëäÕëãÒëãÒëãÒëãÒëãÒëãÒëãÒëãÒ(:K.>N/?L&3A,9G2BR-=N!3F08F0:K9GV5@S.;J/<J'3?7AJ\x1e*6\x1c(4%1=*6?-8B\x1f+4\x18$.\x1e)3\x12^[%\x12\x1e(\x1e)55DP&2;\x1e)0\x1f)0"*-$/>7?L)1>',9#)6 &0)2<+3=-6E.7E'2@*4B<IW8HU:JW@P]<LX5EQ9IU9IU9IU7DP6DP@NZ<KS>MV>IT@IS1>H7BL6EN2CL=IX8ES&5@&1>2=D$+2\x1d"'4;<(/?\x1e$409F7@M?LX7CM&1<&6?1BI8IOMYaGT\VckN[cMZb;IQFQW;JOHU]CS[DR^4DRgx6GYJT\R^dCOU>JPEOWIS[blt<Y_}¡OQ^ÚÚÌïêÐîæÔìãÝæåÜëäÕëäÕëäÕëäÕëäÕëäÕëäÕêäÕëãÒëãÒëãÒêâÑêâÑêâÑêâÑêâÑ.>N;KX<IW+:F1>L7DT+9K)8K,7E.7I/:M0?Q/=P6CS/;F/;G+8F&3A,:F)7C/=I,:F+;C$3< ,6(4@&5A-:F^[*6\x16$+\x12\x1e$\x19$(\x1c+8)5A\x13\x1c)\x1f'5\x1a\x1f*\x0f\x19#\x1a"-\x1f)3\x0e\x17%\x1f+9\x1f)7\x15"08DR;LY:KX6GT!1=\x16&2\x1f/;\x18(4)7C*9E.<H$1>&6>/;E.8B5?I+4>9EO.=F3DM:HT3@N0=L.<H-9C"*4\x1e(*/67&-=")8)2?;CPCO[AQY7GO;IR*9@/>E^[,2\x1e/5(5=,9A2?G9FNIS\?JRGRZ;FM0:D7AK%/9\foEPWQ\dGSZ>IMYdh+6:ISZhoyOin
¤\`nÐÒÉçäÎêâÒêãÚçãÙëäÕëäÕëäÕëäÕêãÔêãÔêãÔêãÔêãÒêãÒéâÑéâÑéâÑéâÑéâÑéâÑ"2?!.:^['3*6@*6B9DR4AQ-;M.;K2?O1?Q1AR4DU4DS/<J0>J.=N)9I+:J%6B*;H0@L&6C*:G.8G&3A*6D'8E/=I'2=\x1c(-"-0&4A+7C/7D\x1f(1^[%.\x1a#-".5$.6"-<%0>$2@,8F1BN9JW:KX:KX*7C1>J0=I,9E1?K-;G9JV%6B/:E(2<+5@(2<(1;9EO.@I6HQ5AJ0<H5AP.?L(4C'3=&/9(06,2C)3@)1>4@LAO\AR[<LV;OW1CJ=OV8JQ<KR?PWJW_<IQ'4<6@J09CCLU3:C:@F29@;=EHJR@KUV^hNY\GTU1=?HUVMY\SYbCVSR[hgj{¹½¹áäÐçãÙèßÖîçØëãÖëãÖëãÖëãÖêâÕêâÕêâÕêâÕêãÒéâÑéâÑéâÑéâÑéâÑéâÑéâÑ0<H*7B7BK\x1e'1\x1f(2.:F4AO1>N,9J)8H*:K*=N-?P2BR,=J0?K-;O+8K(7G)8I5EQ2CP%5A*:F&3A.;K&6F0?O1AN(7?!.6%16+<H-;G0<H )3\x1f'1\x1e(2&19%3:"/?%2A)5D,<J.?M;LY7KX2ER7CO1>K6DP4BN3AM3@L2BN3CP7BI7@H;EMELU6AH3@G+?E3GM19C1>J5AP,<M(8I%2B(3<,5=,6E.6E,8D/=IANZ>OX7KS<OW=PW@SZ<OVEV\DU\>KS<JRBPW@HW?HRDIU@EN9;D*(/<=@HDF>JTV^h?IM9EGQZY6>APY]KSYR`VJR]EJ[^fdÖÝÍÞÝÔòèàñåÑéãÖéãÖéãÖéãÖçáÔçâÔçâÔçâÔéâÑéâÑéâÑèáÐéâÑéâÑéâÑéâÑ$@Q$<M+?N&7D)6E2>J7?L/;D,=H/@M3CT0=T-<O5DT3>J7AI+:B/=H,8F,9I1>O3?M.<H+:B-:I+<I)8I0AQ,;K.:I\x1e*7$-7(9K6FS+9E#.5\x1f+2\x1f*2%08$0;$4<&5=':B,=E*=H6HS8MW<O\7LV8MX0EP5GR2DO0CN3CO4DP3MT/HP8NV?T\"1:\x14 *\x1d&0!(2\x18'4\x1e)50=I%.7)2<%.8-2>29B'-63;E2>J-;G@P\<LY7EO0AH9@IGNX5@G(2;KV\JT[MT[DHO>IQ>KP>IO:EL3<C5<@:@F=DIAIOMW^NZ`HTXNZ_HTYBOPIPT3GGL\YFPKQUOéçÞäâ×ãäÓâåÕæâ׿â׿â×éâ×èâ×ëá×ëá×ìáØëãÏëãÐêãÏêãÑéáÒçâÓæàÓåßÒ+BR*@O4DT)6D+6D.9G+7C,7C5EQ'9E.>O-:Q0?R5DT3AM/<D1AJ3AN5AP.;K6CS4AO0>J-<D/:G(5D(9F/>N3DP(6B(1;!-4*:L.?K'5A!,3\x1e)1!,4%08'3=%0;,8B%4=1>K5ER6HS5ES8KX3EP8JU+=H0CM9IU.>J7GS3CO2IP5HP6IQAR\0@H,8B*4>6?I.=I'3?2>J(2<%/9\x16 )\x1d"..6>\x1c#,\x19!++7C3@L<MYEVb(7@"39(1;",61=G8EM\x19&.\x18#+\x17"(*28ALTCPV?IPDLS5=D>DI.49?BG<DKISZHTZAMQJVZT`dIVXFNRN][HUUNVSab^ïìååãØæå×êêÙàãÖãã×ãã×âã×ãá×ãâ׿â׿â×äáÓäáÓááÓâàÕâàÕâàÕâàÕáßÕ0BM1AL7ER)4B.9G-7H(5E\x11\x1e.\x1c-8\x1e-=,<M,;N*9M,;K\x1c*6\x18$.\x18'0\x12 ,\x12\x1f-%2B5BR)6D!/;\x1e.6+3=!.:&5@5BP7EQ+7A$,5'18*;L6FS-;G!,3\x1e)1!,4(3;$0:-6@'0: ,9\x14#/+8D7HU1AN9JW2AM(8D/?K(9E1>J>LX1?K@NZ5CL;JS=MUEPZ?KU/;E1:D9BL/>J,7C6BO+5>%/9"+5(-9+2;*1:(1;(4@0>J:JV:KW>MV5EL:FR8DP8FS<KT5DM@LWAMT,4>,8@&07)3:,4;"*2-380386:?DLSHRYAMT6BF.:>+7;5BC=FIANNX``LQQPQMÏÑÇààÖèåÛáßÑÝâÖÝâÖÝâÖÝâÖàâÖàâÖßâÖàâÖÜà×ÞàØßàØßà×ÝßÕÝßÕàßÕáà×5DM6AM=FS,5C/7E-7I/:L"0C&2@,<L*;L*:K+;L3AQ\x1f-9/>F(7@\x1f-9-9H'3D.;K&2@"/;\x16%.^[&-!+5&2>3?J\x15 ,\x17!+\x19"+\x1d$*(9J*;G\x18%1 *2\x19$,\v\x16\x1e\x1c'/$0;\x0f\x19"\x1e'5&/<^['3%2A:FT7GT'7C\x11!-%5A\x15#/\x1f-9#1=\x19$0*6B\x15!- +5\x14 *\x14 *\x17#-\x1f+5.:D,9C5AK4CO)5A6BN4=G&0:$-7(.9*1:.4=*3=(4@0>J5EQ@P\@OX=NT:GV@NZ;KW9IU9IV>NWFR\8CM:CL;EL4?F8@G-2:3:?8<A<?D<DKISZMZ`HTXEQUEQU>KMBKN@GJ?DEHMLTXWããÝáÞÖæäÛääØàâÖàâÖàâÖàâÖàâÖßâÖàâÖßâÕÜßÚßàØÞà×ßà×ááÕÞßÓáàÒâáÓ2>H'2>&/<+4B2;I6@Q.<O*:K,:J.;K-;M-=N,<L4DT-=J-:F,=F-=I*;H(7G5DT6FS'7C&8A*5<&/9#/;/;G.:F)3<\x1c$-")/&7I*;G!/;^[&-\x16!)^[&.(3;\x1f,6"*8(1>'0<)3B%3@7DR<LX4CT.>J0@L2?K-;G0?K2>J1=I6BN4@J.:D7BM8DN6BL\x12\x1e(\x18$.1=G&5A)4@6BN7@J%/9#,6-3>+2;-4=/7A(4@/=I7HT?O\IXaCTZ?KZAR^<KWAT_8GTFU^COZ>HS;CM<GN>EL=FM06><?D7;@CEJ9AHKU\MY_NZ^LX\MY]KWYHQTUZ]PUVKPOOTRÏÓÎàâÜååÜáâØéçÛäâ×ßÜÑãáÖààÔääØááÕÝÜÐàÞÔàÞÒçäÙáàÑàßÑÝÚÊáÞËæäÑ"0< .9.9F*5C!,:+9I/>O.>N3<N1>N.>M-=M+;K2CO+;H.>K4EM.>K3CP,;L2AQ9IV*:F,=F4=G*7C&4@4AO7EQ-8B#+4",3+<M)9F(6B *2!,4\x1e)1(3;$0:,4A)1>%0?+8F,8F5FR<K\8HX7GS7GS4DP5FR7EQ6DP7DP<IV8GO:IR9HQ?IT9EO\x1e*4",6+4>\x12!-\x18$0+7C\x18"+ *4\x1d&0)/:+2;.5>.7@(4@-;G:KWDTa(7@"28^[)5\x1d+77GTEV_+=F+:C:GO)4<'0:)18.6=.4;#*126:,/41389AHCMT:FL0<@-9=.:>3@B*46;>B:?@=ACIRQØßÜØÞÙÛßÙÜßÖæâÚßÜÔàÝÕãàØÖÒÊåæÝÝÞÕãäÛäâÖßÜÑâßÔáÞÓÛÚËææ×§¥¹¼¬3CS+;K/?O&3A/<J2?M1AL/AL3=O3?Q1@P-=M/@L4ER,=J2BN0AJ-=I1AN*9I4CS:KW.>J->F/:G.;J'8E0?P8IU+9E%.8\x1e)1+<M/?L5CO\x1f*1 +3\x1e)1$/7#/:'3?)4C'4B)5C&7C2BS9IY1ET7IS;MX8JU4FQ8HT8HT6FR>NZ1GN;MU8LS=NX;JS0;F&/9;EN)7D&2>:GS0:C^[%/\x15\x1e(!&2(/8(.71:D/;G*8D>NZBR_?MV<MTBLW;KSAPYGZa8IO5AJ>JP7BH8?H:BI:BI8>E(+326;/271386>EHRYKW]JVZ@LPAMRJVX>HKIKOHLM?IINYW»ÆÃ¾ÈÂÐ×ÒÕÝÖ×ÛÕâæàÓÚÓÞåÞ×Þ׻¼×ߨÕÝÖÛÜÓßßÙÝßÙÕÙÓäëäÚáܬ¶°2EW4EW8GX&6C)5D.=H0AM,>F37M4=P1@P/AM0AM8IV,=J.=N,>F.>K.>K(7H6FV5FS-=J&8@+8G):G$3D/@Q6EV+8F'4@\x1e'2*<M1AN3AN\x1e)0\x1c'/\x1e)1%08'4>#1A$1@$6C'8E):K1AR3GV5GW9NY:OZ6KV:MX5HS5HS1AM:JW5OV3LT4JR7KS;JT1=G%0:4=G6ER*5B6BN2<F\x1e)3\x1f(2(-9$+4\x16\x1d%$-7+7C*8D:JVBR_HV_DT[GS[FRZ?PW@PW>NTBPVKV\?IO;AK;CJ7<C@FM.1:15:58=79>4<CBLSERXHTXHTXFRVJVXFOSNSULSV=GGANLwz
§¡¼À»´¾¹ÇÑÌ¥yoxt
~¯Ä½ÈÉȾÂÀÅÊÉÑÚÚvv
dx|*KS2QY0GR-?J.<H.:F7?L3;H1AI6FN7GT3BS/?Q3BR4@Q1>L-<D/>F4BN)6D0<J;IT1@H,:C4?I/;E+9E4BM8FR2>G+6=&06,9F7DQ:DK$.4#*1%,3*3<)2<06>/8@-7@*6?.<H2BM8IV8LY<JRAOX>LU=GR<GQ@KU@LVCLVEOWDMU:DK:DL2=D.4=04=?>H5BL%2;5AK5?I&/8"+4&-5%,5$-6,5?,4A-9E@MYBR^EV_9MTBRYGW^=MTAQX>NU>OVEV]:LS5?F=GN3<CGLT,3758=26;:=A6;BHOWJUXHTXJVZFTUDPR/=>=@E9@B;CGFQRizwaupn~b{rl\x7f^uid}|[rp[ljcqk}}m\x7f|cvw^uv«°t¡§w|.JT1JT2FQ/?K1@K4@L -8\x12\x1e*\x13"+\x1f,9/?L,<L4DT7FV&3C\x1c)7\x1f.7!09#1=\x1f,:9FT4BN'6>\x1e-6\x17"-^[&0%4@5CN'5A\x13\x1f)\x17"*\x18!(#4B0>J#,6\x1e'0\x1d%+\x1e$.%.7#,6\x1e'2(0:\x1f*3\x1a&3$2>6FR3DQ)=K\x1e,4\x12!* /8\x14$-!,6\x1f*5\x1d)3^['1\x1c%/\x16",\x1a&0\x19$/+7B\x1c%/\x11\x17#03>\x13 )\x1a&02>H*3>\x1e'/$-6%+4&,5"+4(1;*3@/;G3AM@Q]CT]6JQ&6=\x1d-4,<CHX_2BI-=D3CJ1BI\x1f'1)3:%-419A^[!&*.3$(-,059?FGOV2;C+7;/;?/;@;GI9FHJPT?DI>IMIVXCQSbwt\sp_tsUthp`|rczucvt[libpn}y
¡«¶¤ªz{n4JV8KX<LY1>L+6D5?M(4C!-<,<D*:F2CP/>N-<M1AQ"3?"/=\x1c,4\x16$1'5@$1?1>L,;F\x1a(5$3<(3=-;H"0<.?L1>J*5?\x1d(/\x16 &&7E-;G\x19%/\x1a"+
\x17\x1e\x11\x1a$\x1f(1\x1d&0\x16\x1f)*4=&.<\x15"-,9E:JV2CP(8F$5==NW$5>3AJ/>G.>G2=G'2<3CL-<E2CL3DM9HP/;E#,6;?J$4A\x17#,/<E\x1f(2\x1a$.\x12^[$\x1e(1"(1\x12^[$!*4(1>'3?1?K=MZ8HQ(;B7FM?OVGW^BRYBRY=MT/?F0AH4=F@IR5=D@HO(-5.59,/41498=DFNUFPX?KN>NPAMQBNR<IJBJQ<FM<GM;IOy~|x]tpv^wlUja\nfdvr_jnt\x7f`m{sxwfw[j~m}^l\x7f.>K.>K5BP/9G/:H0=K.?L(9E.;H1AM3DP,@O+>M7GW/?L+9D1@H)7C+7F"/=1=K7DR2@L-<D,8A+9E"3@2BO9IV1?K(1;\x1d(/,=K9FR7CM\x1e)1\x18 *^[$-(1;!,5(1?*2@(5@)8C,=H3CO:KX9JW2EL5EN6GP5FP5CLN\eKZcN]f?PY7JR7IQ7JR7HR0?H&2<5?I4BO\x14"/+7C;GQ\x17!+^[#.!*3\x1d&/#,5'0:*3@&2>2@LAQ^EV_BU\BRY@PW?OVAQX@PWAQXCSZCT[2>EAJS+5>DLS05<+1947<48<1:@@JQEQWESZFVXBRUAMQ<GK?IPAMR1>F>MVvwlr
cvz^qnXkbRdV\naycqxwcp~zv{}fwhwdq(7D\x1a*71>K1<J"/=3@N4DQ,=J2BN3BP1@Q+>M(;J7GT8HT)9F.>J-=I.>K&5E4CS7GT3DO,<I0>K/=I(8E4DP8HU8FR(4>\x1e(0(:G3DQ7CL&18\x19"+ )1%0:'0>'2@+6D*8F0<J,=J<KY:LW>P[8KS8KS9LT9LT6GP5FO:KT>LU5IQ9LT8NU9NV7KR5FO\x1f+53<E5CO!/;+:F8DQ\x19",!+6"+5$-7'08&/9'0=(4@-;G?O[CT]>RYJY`GW^=MTAQX?OVHX_AQXGW^/:BDOW6>H@IR-6<16=/6=45>/6??HQIU[GU[DRXBRTEQU=IM=JP=IN6BJ<KT`p}euN]nQdw:JPWfiVf^M^Q`ndhtsir
Wfobt|Xht\mzOancr\x7fJYbJW_-@O1@P5DT-<L.;K1@Q1AR-AP0@M3EQ*=L)<K)<K4GT9KV,=F3CP4DQ4DQ)8H7EV8HT2BO.>J3@L->K$4A-=M<MY7EQ*6@!,3,=N4DQ6DP%/9^['.",6)3<*2?)7H+8I,9F->K0@M9IV<NY;MX;QX6LT:MU=OW:NU;LU=NW<MV;MY<MY;OZ<Q\:LW4EQ\x1e*6/7E/@M!.:+9E7CO\x1c(5",6!,6"+5)2;&/9&/<'3?*8DAQ^BS\-AH$4;\x18(/ 07AQX<LS&6=(8?$5<+4?BLV2;CBLT28B-5<06=4:A39B>GPLV_ESXCTZCQWCQX?JN=JP9EK6CK;FP;IVUfs[kxSbtcv}kz}bnn{
qw_otvarzpbs|ex~lzbrt2IX0ET6IX-<M,;K1AQ3CS+>M.>K8HX2ET+>M)<K2ER9KV+<E3CO6FS6EU)8H3BR8GW3CP2BN6DP1BO)8I2BR6EU6BP-9B"+5/@Q4DQ9GS)2<\x1a$.#-7'0>'4?)9I+:J,;K/?K,<I4DQ7JU:LW5JR9NV<QY9OW<NVAT\EX`?RZ;JW9KV9KV;MX9LW8FR!.94<I1BO$5B/<H7EQ\x1c(5!+4#-7",6)1:&/8%.;%1<.<HCS_AQZ&9@5EL:JQ?OVBRYEU\<LS@PWCTZ3<FEOY1;EDNW07@18A39?27>1:C=FOHU]BSZFV\CSYESY@LR>GOBKS3?ELW_ERZ>ITM]fZir ¥aqw¥°·xz{~{^mvFVb n~x{DPV0M[0LZ7M]1EU0AQ2BR4DT.AO0?L4CT2ET*>P+AP4HT;OU,=E3CO3CP5CT+:J2AQ:IY2CO/?K8FR3CP(8I1AQ9IY7HT2>J\x1d)3/@Q1AN:HT(4>\x1a$.%.8(0>(5@(5J+9L-<L0?O6FR9IV5DP;LX5MU9MU:PX:OW@V^AS[AT\?RYBQ^=LY:LX<NY9HU6DQ"*82:G3DQ&7D.:I2AM"/;"+9#-7 *5(19*3<*3A%2>(7C?O\HYb:NUBRYEU\CRY;KRFV]IX_:JQGW^1=H>HR.8CAIS09C.5>04>49@/8A>IQER[FW^DTZBRXDRX?JQ@KN=HK<FM7CI:FLAOVSagVbirK^epyccstp~lhrvyxcn~wzsqgoz~?O\?NZ7FR1?K1>K2AQ/?P.?S/CO.AN3FU.>O*:K5EU9JX0@M2BO4DQ4DQ-=J2BO8IU5ER0@N4BN0@M"2?1AR8HT6DP.:C",6+<I:JV4EM(7@\x19%/%2<'/=.6E*:A+9E,<I/>N.=N:JW8KV9MT7JR;NV<OWCU]>QYBU]<OWAT\=QXBU];NU;NV=QX3BJ\x1c(2/8A.<I+9E0<H8DN&0:$/8&/9&.7$0;)2<+5?.8A+4>=LUDU^>RZ>PWDV]CV]@RYEX_FX_ASZEY`9EK<HN2<C?IP.6=6;B06=4:A7;D;BILX^KX^EU[?SVARU6HJ?HS:EN7AIGPTCLOGSTT`dQac7JRJ[bS_e[gjo{~¢£°¼|Xqvtr}\x7flmZovo|/>O8IV<LY0>J8ES4CS/?P.?R3FR2ER6IX0@Q,<M4DT8IV-=J2BO3CP4DQ-=J0@M5ER0@M.>K/=I2BO 0=1AR?O\7DP0<E"+5+<J9IU3EM+:C\x19%/#/9&.<,5C,<D,:F*:G,:K/>N9IU;MX>RY:MU9LT8KS7JR@S[@S[>QYCV^=PX>QY=PX:MU:MU2AJ ,61;D;JV*8D6BN8DN*4>",6%.8&/8%1;)2<+5?,6@7@JAPYGXa-@H7GM2AH+;B1AHCSZ#3:$4;%5<\x1d)/4AG09@@KQ08?.7>27>39@9>G:BIIU[ESYCSZCSVBSV9JM<IQ;GM:EI?HL:ED?HKNZ\OZ^5HO8FM[gk_kmZeikv}tx_u{n~¢r}tuct}x':H%5E\x14$1!2=\x13$1,;K1AR0AU1DQ3FS4GV.>O.>O7GW9KW.>K4DQ6FS7GT0@M/?L9IV6FS-=J1?K-=J#3@/?P7GT8FR0;E!+50AN9IU5FO0?H\x1a&0!.7&/<,5C+;C,:F):G-;L,;K3CP7IT:MU8KS9LT=PX?RZ9LT=PX@S[CV^AT\?RZ=PX8KS<PX4CL$0:09C4CO-;G/;G:FP,6@!+5%.8$-6%1<)3=*4>,6@3<F>NW>OX!5=)9@%5<-=DAQXAQX4DK>NU?OV9DJBNT2?DBLS29@/8?27>5;B3:D6=DHTZESY@QW@QTCQT6EHETZ<HL6CEAIIbjj^gfV\_NVY?MTT`d\ijJVXFRUix¢i|¥U\i}o~u_o|PZd,?Q*=K5FS,<I-=J.>J3CS3EV3FS6IV3FU.>O,<M5EU9JW.=J1AN4DQ6FS.>K4DQ8HU4DQ/?L2@L3CQ%5B1ARIYf/=I3>H!*42CP6FR0AJ-<E\x1d)3#/9&/<.6E'7?*8D*:G0?O2AQ5ER:LW:MT<OW;NV@S[=PX9LT@S[EX`?RZ>QYBU]=PX?RZ:NU4CL&2<1;D4BO/=I2=J7DM/8B$.8)2<$-6*6@+5?-7A-7A5>H<LUCT];OWAQX<LSAQX:JQGW^AQXEU\DT[6DJ<JP2>DBKR+5<19@*3:4:A29B0:AFRX@NTFSZDTVBRT8CGFVXBMR2?A=FEMQRBGG:AD9>CCOSP\^forIUWKV\£§»Ì³Ìá®ÀËy
fm|t|t{lz
\er4K[1FT:NZ.?L.>K3CO1AQ4CU/BO3FS6IX/?P*:K4DT6HT1AN1AN3CP7GT0@M0@M8HU7GT/?L2@L4ER3CP+;L3CP4BN3?I)3=->K<LX7HP,;D ,6\x1f+5)2?.6E-=E-:G+<H,;K0?O8HT9KV<OV9LT<OW<OWBU]<OW?RZ;NVBU];NVAT\<OW;NV>QY4CL*6@09C6EQ3BN+7C<HR3=G#-7)1<&/8#/:-7A.8B-7A09D<LTGXaAU]DU[DT[@QX<MSBRYFW^P`gFW^;IO1@F3>DFRX-8?,3:.6=-6<3:C.8?EQV@OU>MSCNRFRV6@E@PSIVX0<>>FECLKGMP',1/7>?JNEQRNWZ?KM>KR\mx]t[t_t@O_LVgwxr¢¨2J]4L\>P`/@M5EQ5ER2BS5EU2ER3FS1DS-=N)9J5EU7IU2AN3CP2BO4DQ.>K3CP9IV7GT.>K=KW.?L"2?3CS1AN1?K3?H,5?,=K9IU6GP-<E\x1c'1!-73;I(1?"2:9FS*:G,;K.=M5ER:LW<OV8KS<OW>QY?RZ=PX=PX<OWDW_?RZ>QY:MU?RZ:MU6EN-9C,6?4CO2@L*6B?KU7AK!+5*3=)1:)5@.8B-7A.8B3<F7FOEV_=QYKW_ANV4AI#081>F>KS^[(0\x14 )&4:0>D7EK:FL/9@&18+3:/7>18A.8?COU>JP>MS@LP>JN4<@AMQIUY1>?:BF<EH>ILhtzx>IPDPTN[\?KM8GJ4GNpnh¦ £´ªº§¶§¹¬0HZ4JZ<Q`2CP4DP4DQ1BO5DU5HU5HU3FU/?P'7H5EU:KX5DQ4DQ3CP6FS/?L4DQ9IV;KX/?L3@L/?MYiv6FV8HT5CN5AJ,6@+<J6FR6GP-<E%1;'4='/=19HP`h(6B0AN1@P.=N6FS=P[<OW8KS:MU<OW=PX8KS=PX>QY>QY:MU<OW=PX>QY>RY6DM0<F09C6DQ5CO)4A<HR8AK!+5&/9&/8(4>-7A,6@-7A/8B4CL;LUBV^$19$19.;C1>F8EM@MU5BJ;HP8IO:HN.<B<HN4AG-7>*5<+3:07@,6=BNT?KQDPVALP:BF5>A;HMGQY1<@=HL;GKCOWGXa2DP9IPCQXIUY=JLFUX;LS|}¥r¦_vhzj\x7f^z]{]u\p2M_+FV8M]/AN/AL4DO4ER:JW3ES3FS4GW0?Q*:L8HX:KX3BO/@M2BO7GT.?K0@L6GS;KX-=J8EP9IV¯¾ËDSd7ES6CO5AJ/9B.?M6FR8IR/>G#/8&3<3:GmsSbkAN[*:H0?O-<M3CP:MX5HP>QY9LT>QY?RZ=PX<OW>QY=PXARZ;NV:NU:NV:NU:GP5?J-5?4BO7ER)5B:FO>GQ*4>&/9)1:%1</9C-9B+7@/8B.<E<MV=RZCNX<HQDQYAMU:GN8EM&3<=ISCRX>NU7EK;FL;GM;EL:DK6>D6<F+4<?KQ=IPCPW?KO4>A9?C>GQ?IPHRYMV]KY_<PV@S_(AN4FP<MTHSZS^bFUWBU[OcoPitBcKeTlPjGj~Lp
Li
Tj4EP6EQ4DP/<J\x1f/<0AM8KW.DP2JV)?K9LX1BN(9F6GT7JW.AN/;J6CQ4DQ*9J1@P3AS0@Q1AR0CTMbq¨B^g2LU/AL:AO03C.=H9KV7JR0?H)/='-="2C«ÄÕMejH]e/AL.<M1>N7DR>LX?PY9MU>QY?RZ>QY:MU?RZ?RZ>PX3SW>RZBN[BNZ7IWs*AH"1:6BJ;HP.;C7GP5FN2>H1;E.7B$5>,5>43B12A0<H$6A/ALHSa=TT>RW>PWAS\*:C(6<>HMJWT>RW9MR6FL5FL8GM:GL?IP=GN9HK7FI;GK>IM@HLINS:@E=?D4AG?KQANTFPXCMT=GNBIP@FM7BH?JPGV\FTZJV_HX_JZ`P`fN]hO^jM\hO^jM\hL[gM\hN^j*<I 3@%6C.>K.>J3CS6JX=Ra*BNG]i5HU<LY):G6GT5IV.AN0<J4AO2BO+:K0?O1>Q8IZ2AS/CUt¦;V`9R\4EP6BN07F0?K8JV7JR2@I.4B2;IBRc¤´OfkEYaEWb1AN5AO;GV<MY=NW;NV=PX?RZ>QY:MU>QY>QY>PX3SW9NVAMYAP^«TnwEYd!3;5AH;HP4AI7GP7CM4AK8BL8AK-AH1<D58C38B(6B«j~?N\>RW:OSASZ?PY?MW@PV:LOERT@TY<OT9IO9JP<JP=IO>HO=FN<KN8HK:FK:EI9DH9CF39>;@E@LP=IMDOS>IMBMQ>JM<GK7BF:FJ;GKCQWGU\JX^GW\EU\GW^EU^FV_EU^HW`HXaHW`HXaIYb4LX,BN8KZ/?O-=M4DT5GX5IZ~¢Lbn?Q^6GT*;H6GT7JW1DQ1=K4AO1BO-=J,:K4CS/@O/?O*>P§¾Í{¤8S]?U`7IT4?K27G5CO6JQ7JR4BK09F5=KScsqLglH_fCT_+;I1=L8FQ;LU:KT<PW9LT9LT>QY;NV>QY=PX=PX7RX<QY>MZ*:G¨ÁÌlI`j>MZ1?H:IR8GP5@J8DN7CM;GRAIT0FJ:HN>GP<EO
\x1d*µÍÜuASeAUY?PXBU[@PZDV]=PU@SVCVX=QVAUZ?OU=KQ>MS@LR=JPBJR=LN8HJ8CG4AD0;>+7:6?B=FJ6<ABGL/9<ENR=HL3=A?KO;FJ>JNAMQGVYFUWIW]JZ`HX^HX^P[cR]eS^fVahU`hWbjYdkYdl:T`5K[4JY1CT5GX<M`8H[;Pa
©H^j>Q^/@M%6D3DQ6IV2ER1=K3@N1AN-=J.>K9IV7GW/?P,AW¦¾Ð¢°Tlx<R\:LW5CO8@M4FN5IP4IR1BK;BO7AO°}¬WpyI_jEYd>MY(8D4CP;LU;LU;NV<OW=PX;NV=PX=PX;NV<OW9U[>PX2AMFXh±ÌÚy¢CXgL[h6JP5FO9HQ;GQ8EO=GO>KS?KT6ML:LNBLTAOWJcn°ÊÚiDWnDU[ASZ?QW>QX@SZ@TY?TY@UZHX^EU[?PUGU[APU@LQ7CI7CI?MS=KQ?NS@KQ:FL.:@8AI#.58<@>BF9>CAJMDOS;GJ@OR@OQFRVEPUJY[JY\HV\BRXIY^Ufl_hq`ir^gp`hqajsbjt`hr^gp0KWKdp1GV-AO1CT0AT1DZGZosRgr7KV6HS+=H1CN5IT/CN.:I5BP4DQ2BO1AO8HU3DQ3DQ1I`³Ç¯Nfq=S^:LW.;H9DP,=F6HQ2IN7HQ?JV,8I¯ÇÖUt
F]hG]hDXc9KW*;C3DM=NW6IQ8KS<OW;NV<OW;NV=PX<OW>QY8QW>PX>N\Ym|¶Ät H_oETdH\g1CO:HQ:EP>IQ>IQ<IR>KQ9PP;MOBMU=NYi°Áq@UnCV]BU]BS\FX^BT[CV]>PWI]cEV]HY`IV^IV^ANVCPXGT]KX`NZcVckUbjTbjWdlCPXLW_S_g\]fX^dPX_XbiS_eP^dP]cL\cQ]aUadTchYgmWejXhoXio\mt_jq`ksbmtcnualtbmt`ks^iqµÁ3GS4ER1AQ4DU7H[3I[|¦¥Lbm>R]<NY4FQ3EP5IT4HS)5C1>L1AN2BO6FR>NZ6HS3EPOh°ÆqNet?S]BT_7GS8FR5HN4KQ2HN4GO7DQO^n«½o¤IaqAXgEXcDW_(9B5EN:MU;NV<OW=PX<OWAT\;NV<OW;NV?RZ7NS<OV>N[¯¯ÀmOgyt_z:NY:JW@KUALT?IR=LQ?OU?SUAQW<LR7JU¥³±ÁeBVn>OY@R^EV_BT\FW]CPY\x1f-4IV`=JRCPXERZFS[KX`MZbR_gUbjScjRbiPagT`hUbjZgnZgoWdl\enYaj]enWaiZgoZfnWgnVfm\go\goXemYgn\gq\ks\ks]mubmw`lv]irZeo]isalv]hrVak_qx0?HDR_8IV0@P.BS6L^³ËÝ©Ndo=P[8JU5GR6HS7KV2FQ0<M5BP0AN3CP3CO=LY8KS8KS·Ó좸w BYhK]jI[eCR_.>J:LR2IN.GM5GO)9Feu
¾e]u
D[jGZeGZb/BH:MT6IQ9LT;NV=PX<OW=PX;NV<OW;NV>QY;PX=NZ(;G¾×ç~ ¯m¡Hav¯¾Ñp>T_5ER>GQDMVBNSCQWFV\ARWERZCMW6JU£ÀγÁr¢BWm:MZ?Q\8IRARXHUZXaj\x04
+\x15bepSaiYfnYfn[hpWdlZgo\iq]iqYhrWfoYhq[ktUdm[jsZir[js[jr]ktZjrZirZir[js[js]lu\fo^hr]ir_kw^jv\kv\iwYftWgsQamO_kRbnM]iM]iM]iN^jgsy=IQDOY:HT6FS4IX/HX¡ºÌ
¨BWc6JU8JU:LW7IT6KV4IS0<M8DR0@M7FS8HT(9ANah §t¬WsOhzNdsL`lr £¬¡z{¦ª·Â·ÅÕ¥µk¦[qAXhF\fO`gI[a@RX%7>&;B(9A)<C-@G5HO7JP?QX@RYBRZ<QX1@Ks¸Ç³Æk TlÆÓê®·5NZ<LX@ITAISALR>KR9LM@MVAITHQ^1CO²ÐÝ´Â`}BWj@QaNbmYjsYhm]gmbjr41@gu|gt|cpxanvcpxamvZkqSdkZhpWfn[irZhq]ktXiqWhq[ltZlxYlvaq}`p|^o{ao{_ny^lxem{fm{amxbl{_hv\huZeuR]nL_lL_lL_lL_lJ^kI\iG[hFYgOjp2IN;LU8FR6FS3HW/JZ¬»v>V\8MU3HP7IT4ER1AN1AN\x1d18;MX]ozeykj}h~PfsE]iG\gJ[eO_l^n~¬³¤¹ª»\x7f¯
¤µ½ÑµÉ®Ã³r¢wOfvI`pG^n{¢\x7f©¨¶®º²»¨µª ²®¥µ«¦²¡°¦ÄÒ°Îߺд\x7f³Ur¸Óçv¨Gam>LT?HPESXAQWHV[HSY[ggO^cZp{d~¬ËÞ²Çd\x7f@Yi7R^FakXkr`pyv,1>kp~\x1c\x1e3YhpWgo\gr_ls]jqanu_ltbntWkyWkx[o{Xmx[ny^p{]oz\nz[nx^nz`p|aq}dq\x7fdq\x7ferercrz^nz[jvVgsPcrL`rKcsNfvOeqNepRerWguVfrUeqZgtWfoPjp;PV5HO;KW@P]2ET±ÁºÉYqw:PU6KS4IQ:LW5FSN^kbr~t\nyRdoL`kM`mK^k>T`>T`4LX=S_\lyZkx>Raax³t©¡±¬À¦¹®Á§º
´w¦w§h~\sYq~§«»«¹\t¤¢²¨º°Á½¬½³Â¸Æ¦ÁҴƮ¥¼t«yª§Áצ²<VbCR^ET\K[d>SZFXcQ]jK\aN`jXq¼×ëºÏ¨¼iCZi=Vb9P[Ymt`kuYclX`mt{06Ebs_o|_o{_o{`nz^lxao{_lx[kxUfsTenTenSdmTfoTfoZirZjv]mxYiuScpScpYiuZhxVduTfpXhtUhuSfuSftRgxThyThzRhtPcpPdqSepXhuZjv\ktXgp\v|=T[3EP5DQ8HUL`l®¾pG]b7LT5JR6GS9KV8IV8HU:IY7JT9KV>P[<P[ATb5HU9P[8OZ7M]9OZ¾ÑÞRboBVe9QaRl}²s£y§³¢¶±¤µ\x7f¬y¥nnWpt¡y¦\x7f®¥¶¤²9JWl¥¶ ³´É®Ä²´ÈµÉ²Ç®Å¦¿§Àsª§À·Ë
¨¶<Vd>MZ\myy¨¤³°Â¸ÅªÅÖ¥ÃÖ°ÐèµÎ°^tDYh=T`9MXWhqbnxCLWHS\DMZ%,;as^o|]n{Zkx_p}YjwQboYjx]jq]jr^ksbowiv~dqybowhu|evjzjzfw`o[m|TixPetPfuOfuQetNbsOctRduPbsM_qOcnPdoUfr_q}XiqRclRakQ`i^wCYd/DN6HR8IV6GTl\x7fH^j>QY9LT5IP6IT5FS8IU8HY:JZ7JT;MW8JU9LY6IV7JV7L[7L[4N]:Q`®ÂÒ@S`BUb=Ra7Qasx¦|o
´x§®}ky£d}h[v|«t§¨»«¼DP`AUf°¦º¤»|³·ªÀ¶Ê´ËƤÀ{µz±§¾¤½u£B\l?Q`Pdu°Á±Ã²Ë¬Ç¬¿¾Ö«Ìã¦ÆÝ¸Ít¡]qGVg<P]GYdTcl\iq`ksLU`8DNco|_itdoygr|hs}lteq~huivlu|nx~jt{ku}r}
vr|oy\x7fap[jzSbrM`oK_pKbrIbrHaqGbrF_oGaqKcsMasPctTduTdvPbmYkvfz\mvPajL_fIZ`EU\VnzDZf=P]<MZ:LW4FQ>P[9KV7HQ6GP7GS2BN7HU7GW9IX5EU8JT:KX8IV3FS6IV;M]5JY4IX3K]E^n«ºRhs7MY6K[<Sc<Scayx¥{©¯°{ªpf~«a}fjy®t¦µÈmUaq2FXs¢z±¤¼w°µ¡·Ï¤»²Ë »{´y² ¹©Á±Ë|¨AXh:K])=N°Á} ´±Ê®Ë§À¿Ö¦¾v©lUl~M`oK\iCVcDUc?NWeszgrzZem1=Gkx\x7f{\x7fx~u{\x7fxzw~oxt~s~
s}o{
lwit}anz[hsTctN`qM^oI\mI_pI`rGbrF`pD_oIasJ`rOcuQds]m~aq~dt\mvZjtVgqN`gL_fIY`FV]BRX]t@Wf8NY7JW9KV5ER7FO7FO<KS7EQ5FR7GU5EQ,<L2BR5EW5FS5FS3DQ3GS3FV5GV2HV5JY+DX=Ug®¾Pfv@Va6LX:LY7JZ8PcMex®y©z©kq¤oi]yhzªp£©ÈÛ ±O_lAVf3I\^w\x7f³µÐ ¹¡¸¯Æ¨Á¡¼w²\x7f¸n¥©ÃÜ ·Îk
AVgGVe8K]t¡vªªÂ»yp¡GauB[n>VfCYhBTbFWaBWg>Q^>OXiv~v}$/7S_h
z{v}wxx\x7fn}
mziy]lxWgsN`oObpM^oNasJ_rI_qG_pG_sHbuJcwFbvPfxNdwShy[o~`q~euYiu]luK\eJ]dHZaEX_FV\AQWAPWBRXI`pNeu9N^=P]<NY?NW=JR<FN2@M1?K2@L0AN#2B#3C-=N4DU7HU6GT4ER6IX7JY3FU/DU/CT3Kb¸Ì ¯D_l=Ua5LX2ER;LY7N^7M]Ibr{¦w¦nq¥n¤x¡qhf}y©o¶Ò㣲Zr|>T`?QbQ^u«
µ~¶Â£º\x7f¡¹}·x³x°}´®Èݦ»c{IXgETd8KZUp~¡¯e}L^tCXjEYl=OaG[h@R]DUa=RZAV]8O`8N[=QY[goxjt|\x11\x1c":CMclsgsxis{lwiw`o{[kwZjvUhwQcrQftLcrG^pG_sG`sG^uF`pFaqHauIbvIcvKcyMe|Nf}Xi}[n~aqZkxXhu[luN`gK[bL\cFV]M\dGV\CSYDTZ=PS;NQLctAXh=Ra9KXCT^DQYEQXIRZDO[6CO-:F,9G\x04\x13$^[+;-<M1@R5ER6FS3DQ2FU4GV1DS1DU*=N.E\²Ë߬Zu<T`FYd9JU@O\0JV;S_=VgB]nw¦s¦p¥u¬y ld~h~«©¹«Ç×UtyLbm@N^NTiz
©Ã§¾\x7f¬Á|³¨¾} ·y³\x7f ¶±Æ°Ä~¨Shw@OaBM[?P]*FQ2O]9Qa<K\AP`>M^BM\ANZ<MU?RY=RZ<QW6Ra9R^@RYCRXq{\x7fty\x7fqv|gkoVdoTdpTdoK]kM`qJ`rI]sD\qI`oF`oE]nF^rE`tD`y=]tFe\x7fDcuHcwJexKg{TlUmUn
Volw]i}_n\x7fWguM^hEW^GW]DUWDS[HX_>NTCTYCSYASU;OR@SVfD_h6P\6P\5O[>YgB]kHcqTjtATaq¡o~y¤tr¢¦\x7fx¡®¬º£ÅÚ¥ÃÖ\x7f©Vm|BXdATa?Rb8KZ>TXBZcF\i?ZjF`tkp¦m£wsjg}µȨ¼¡7MY=P_.BSx£¬Á¤»¤»£Â£½y³{³·±Ç²dFX^>QY@R]=OZ7HU=NZ9IY;K[;J[<MZ9JW:KX=N[<NY;MX<MX4IY3K[5M`/J[Gcx>ZoA]rB^q9Xr>Yt>XqBZsF^tBZqC[qF`sM_tK_tG_rB_tFcwFbzMg\x7fSiNkYtLg}^yWqWo~WlxLanHfkQjoEX_IY`IU]GW^ASZBT[=VV?TV>NTDOWEPXDOUCQT>OR_xPiu7Q]4N\5O]:TbE^nOhx¦¤²
©®¥©º®¶Æ§ ®¬\x7f¡¯«º ¹É³ÃÁÕ²Å
®Vm|F\gI[h@Rb;N]DXXCV[K^fNaoVi|F`pv¡}¨|§z¥oq¡v¨´Ñæ»Î³ÇXpxC[g@Ud9M^tªÁx®¤»©Ã
¥¼¶{¬dUpF]q?YjBT[BU]>P\:LW;LZ8JV:JZ9IZ4EQ6GT8IV<LZ8JU;MX=OZ:LW;LV<MU9LZ3HWJaqD[nC]mD]qA\qC^sD_tH_uBYpIbuJbuA]pKbzLe}Kf~MlHg~KkVp]t[w`xIcwp¤´j\x7fKamNbnG`fI`eFX_GW^CPXAQW@SY=PW=STAUY>NUBMUFPXAMS?NQ=OPlSm{6P^2K[5O^:ScC[mLdul
®v¢°~«~®mq¥l}«{§ ´¥µ¨¹©¹¹Î¶Év¢k
?Sb@Ud@Ud=PbKZ^N]dTemZlvK^kYo{Umyw~«z¦{ª\x7f¯¡¿Ó¼Ñ·É¢¶_{
?Ye>Tc.EUw
°µ°`yk;Sf@Wg>Vf0EU<S^5HV<NY;MX<NY=OZ8HV:KX3DQ5FS:KX8IV9JW8IV9KV6HS;LX:LY@KN@NT>NT9KUThwLcuGbuKfzMgzLezHeyEauLh{Kf~Hg}Gf|IfKlNoSuKkPoSp
Okj ¶y¡}£patI]hN_kCV^CT^BQZ@OX?NW?NW>OX:MU9MS@QZ>NV@LVAMW=KQ?MP=OPz£Xq5N^6N`1I[;SeAYmH`tiz®µXsu§gWuqª¡º{³|²r¨}±©¾¨½®Â¥ÆÚ»Î¬½n<RaE[j=Tc@WhL_hSeqXm{`s¦µ «¦¯¦·ª¿«À²Æ°Ì塽ҷʡ±c>Xf5Q^9Rb>Uem?TfBUl:P^>Td?R_BVc9KU>P[5GR:IV<NY7IT4FQ+=H\x13$28IV1BO8IV7IV5FS9JW6HS9KV9KW>QY8LT?MN@OU;MS7JUE^mJg{MjJhPm
PrXzVzTxJoVzl«z¼\x7f£Â©Ç±É¯Æ¶Ì°Ä¥¹{¡]qUgyPdsL]jHYf=OZBU`AR[DU^>LV?MVAPY?PZ;KU<MV>MVAQY;IU>IVBNXAOUBSV@RSr_w5M_/GY1I[7OcC[oNfzr«vw«b\x7fIe~=\u6Tp=^{Xwcl¥k£}´§¾\x7fµ¤¼¿Ö¹Î|¨pC]k;Uc:Sc<Ud>WkE]qC^r¡¹ ¸}®\x7f ²¨¶¯±¨½§ÃÛ¨ÄܳȱÄ}®VsB`o<Vf6O_4L\AUg<K\6FX9LV<NY9KV;KW=MY8IQ6GO6HP@P^3CP4DQ\x18(5\x1c,89IU7GS4DP6FS9IT8HT9IU8HU:KT;LU:KT7IQ=OW6JT5LZ]x ½{ Â{¢É¨Ê§É}¦Æ~©É{¨Ê¬Ð«Î¸Ü´Ð¶Ô¼×j¢`}h
c~JduRetI\lHYfDTbCT`CUa?RZ>OX>OV>PX4GNASZ7JQ:LSASZ>QXCQY;GQ7FOBQZ@NX@PV?PS=OPªd}>Wg0HZ2J\7OaBZoNfzn¤uªmXs9Ti5Qj$A]"@]">RJh}s¨q©uw®¡»¥¾ÀÖ¨½ ³Vp\x7fIcs<Vf6O`4Pa9Yo@`wIgm¦r¬ ¹{²x²yª®Â®Ç¶Î©È߰űÄu¦[t@Zj6P`4N^3IX9KZ4DT:IZ9IT;KW:JV8HT7FR7GS7GS7GS5ER5EQp\x0e\x1e+!1=7GS1AM1@M2BN9IU9IU:JW9JR;LU<MV<LU2IU7NY5KV2IX9Ti½t½rÅt¿y Çz¤Êy§É¯Ò¶Û»Ýºß¨ÀZzTpLdzQiyF[kAWc=TaCTaCT`BT_?Q]?RY<OW>PY>PX:RW5MR5MQ6OS4JO;OT9LR;LR<HMBQT>MT9KS=OV<OTASU>OS|¤kD]m3L\4M]7OaBZlOgyn¢x©s\u
Ict-H\,Gb\x184S4GX,CS³Ä©½z® ·}´
£¼¾Õ¦» ³c~Jdt;Ue6Sb3O`7Ug@_rIf|Lh¢¼¢»¢ºv«´
¡º¯ÇǼӨ½ª½q£Wn>Vh<Wf2L\2M[6LX8HU8HU7HU7IU:JW9JV4ER5FS6GT6GS7FV8GWJZgRbo1AM:JW=NV3EM;KW9IU;KW6GP=NW;KU8JQ7IP6IQ7KR9LS;NV-BQHdxIeDhDdGkCjBiFoFhHdKa~E`pLdtNetPanJZhHXeDW_BU]?RZ>RY<OW>PX:OW8MU=SY9NTEdcDdc8WV+JI1MM2KK=OP:ILCQMDRP9KL@SV=QV>RV>NT=LO{¢s=We7O_6O_7P`B[kPhzq z¥iXn}=Wd0IZ,G_\x1c8T7EO/AN{£¨¸«¾z±¡»
£¼¿×¯Ä§ºu¡[y9Vd7Tc2Pa;V`A[iLeuTm¯£¸z¦u p¥³|°¯È®Å¦»¬¿y¬h|<Qc=Wf4O_0KY1GS9KU<KW<MZ4CT3GV2ET4GW2FU3EW4GY2AR8GX0@M5ER5EQ8HU6GP3DM6ER4CP9HU<MV:JT8IS7JQ6IQ>PP:IK=KHBNO=MR6J[2Kd3Qq8Sx8Vw4Uu2Vo9\uMj\x7f[p]l~QhtJ\gQ_kJV_T\fO\cDSZ=OU=PX:MU2IP;QX7NT7MT9MT#5>UuuCgfMqpRrsPmnF[]\x1f.15>CMXPLYUburF[\DY^ATZ?NUN[bs¤e7Sd0JZ3L\6Pa@YmMh|x¯}¯}ª\w7Wj3Sf.F\'5O;R[7M_r¦¤¾¥¹¢±¢·¦Á¼Ë½~¯k
^y<Wl5Sh3Rg3Wd<^mFbsQj~ku¦|³{¶{®~µ\x7f¶¹Ò«Äx®s¦x¬e=Wg<Ue6M]1EV3DV5EV7EZ3HR5JT5JT4GU5FS6GT/@M5FT6GO6GP6GP4EN:IR>MV6EN8GP7KS5HO9LS5IM6JO9JL<MP<JM:KN<MO=MS;LS4CKES_M[gKVd<P]CVcOcnWht_pxUfoYioRbhK]iGYdGYdGYdDWb>P[?Q\9KV4HO-;G7CO4@L2BIAWZ\x1240SyqDyk?uf:oaH|jF{iPpPqNmL
sU{p.A>{ENQ0BA9SO4OKu¦b?Yj1JZ4M];SeB[pKg{}µt£nh4Ue3Sf+CY%3N5LU,BTr¦·¨»¨¸¡¶¨ÃÂѪºq¢hJcw?[o>Yn3Pe5Wf@]nHcwTkd|iu«v¯wªs©\x7f¶°É¥¿«Âvªr¦kIcs:Sc5L\8L]1CT6EV5DV3HR3GR3GR2ES2CP0AN2CP4DR3DM4EN8IR9KT>MV;JS:IR:HR6IP6HO9LS9IP<LR=MTAPS@OR:KM;JQ9HN9IP5DM?MYM[gFR`M_lZkyVhsSfpCR_UfnIYcXhqGYdDVa?Q[?Q\>PZ<NY9KV;MX1EL,:F5BN;CQUaj[mqXsq[{tI|oDvj;pcG|oCxiCxjEzlLrc|h
ƾŽƿ½¹°«p¡e>Xi5N^8Qa;SeB[oLeys¨lv£Uq<^m0Qd.DZ 0G/FP2H[¥À ¹¨»}¯|°¡¼§ÈÚÀ{¬r_xD]r:Sh7Sd7Vi@^qGbwOf}Wo
t¦t¨t«yw¤½§À§Á\x7fµ©¾wªrRl|:Sc6M]7K\2CT3EV5DV4HR2FQ1FQ4FQ3EP5HS9IU8GT;MT4FM3FM<LS<LS9IP9IP:FN7GN8IO:JQ<IQ;IO>MR>MSCNT;OS;NS7IP9KRL]fJZfO_k`p|]mzTdq[kwUdpOalHYeGZb>RXBS`=N[AR_;LY7HU9JW:KX4FS1AM6EP6>L\x18!+2;EBNRFXWf|xT\x7fwJunN|rM}tExnG|rH\x7fqKv?pGwCui®¥qÀµuºr¹®Ä»~¯fB\m?Xh7P`?WiHauIbvt¨r¢o[u8Zj5Sf)?V!.EE\f?Ug´Î
£¼£·~ ¯q¥¥À¿Ðª½v§w¡¥·Zq>Wh4M]:UkC^sHcxNh}Xsw©}¯v¨¥º~´§À§À¨Á¥¼\x7f³~±rUn~<Vf5N^/FV2EW3EV4GV6IV3FT4FQ5GR6HS3CO2BN:KS;NT;MT=MT<LS=NTANV>KS<IQ:GO>KS>KSANV:GPALT<GO>HP2EK9KR:MSFW`N`hRbnP`lO_kP]kKWfJ[fGWcBT^?S^DYc<Q[<MZ;LY7HU6GT6HU:LY2CP8IW1BM2@L<FP"(1;CJHQV(21\x1a&&*CA
)&?]Z`}V~wS~wQ~wU|JDxE\x7fvMrº°o¿¶}ÍÄ5zu¤mBZl?XhCYi@VhMeyc|v«s¢~§\v<Zk2Pa&>R$1IAXb8Na£½×§Àt©£²µ«ÆÁÔ¨»}®§¸Wn~L`o<R^=S_8PhBYpIdyPm^zw¨w¨z«yt«¡»¨ÁªÄ¡·\x7f³~±v¢\x;Uf6O^1HX3HW4GV2FU6FS6GT6HS6HT5FO5FO3EN4EO;KQAQX:JQ<LSBNV?LT9FN:HP<GO<GOAKS?LT<IP5AI/<D>KR;LUEV_^ow[ltO_kTdpQamO`lKXdIWbBR_@P]?O\>Q^:NZ;N[;KX7GT3DP1AN7GS9IV3CP5FR0=K.:F1;E")35;@JOR"'*\x18\x1d\x1d\x19"''46\x1f-/\a\x16\x18\b\x1e^[\v$"!=:Xurs~rZ:u^¯¤o¸±M~zg
y¨oNfx?VfAXhF\nf~¬t©~«qf=\k/M^(=R!.E1HRAWi©ÂݧÀ}²£³\x7f³®ÉÀÓ¥¸À£²^s3FS7IT3FM9RhE^rIdyPmZyk¡{®{¯¡µ¦¾¡º®Ç¥¾©À{¯~±|«f?Yj2K[6M]3HW1FU4GS4ER6GT7IT6FR8IR1DK6FM;KR;KR=MT7HN?LT>KS<IQ=JS@KS?JR9FN9FN<IQ5AKCR[=LTCRZdt]myu
Wfs^nzK[gAP]HXdGWcBQ]JZgAQ^:KX:KW8HX9IY:IY7FV8GW6EU2AQ5DT0?O0@P,7H%.='0;\x1d%,8>CEJM&)-\x14\x15\x19 #(-/527:48;7>A\x10^[^[\x0e\x18\x18\x16!!\x15^[\x1a\x17"\x1f\x1f1-&FAcrss¢u¢^vRiyjpy¦®{¬¡µ¢´x¢:Zi0N_(=R!-C\x1d4>1GY¶Ðy±w¬{¬¥º©ÄÁÔ©½«ÉÜnZlyJ\g:KT/AG5K_C[mFavKj\x7fSrj¡r©u«vª¢¹¡º²Ë«Ä
¤»¨½\x7f ²w¨l<Xi4N]4M^1GV/EP.EQ9IV7HU<LW8GT5FO>NU9IN=MS<LR<LR9JP@NT=KQ>MS>JP:FL6CL8DM7HO<LSGU_7HQVfr[jwGZdj|CU`PbmDVaAS^GYdAS^7IT7IT9JW4ER6FR6EV9HX8GW5DT7FV3BR8GW5DT5DT2AQ0@P-5F$+:"+5\x1d%-+2527:69=\x1c\x1c \x19\x1e#\x1e$(-25-25!$) \v\f "#^[^[\x1c\x03\x1e^[\x18##$\x1f )\x1f\x1f>;;<DG"47%9?q ojuwezv |§k|§¨m:Zi6Rc&<N ,C\x1c3<EZm¨Ã¬Åw¬¢±«Á·ÒÆÙ¯Ã¯Àc{Wiv?PX+=D*9?8M`6P`Nk|Gh{Uuq©y±{´s¦z°¥¾¶Ï¸¦½¦»¡³
£µs¡=Yj1K[8Qa5L[4JU0GS8HU2BO9HU5FO&7A<LSBRX4DJ:IO;KQ=KQ>LR9GM9EJ/;A5AG7EJ=MT?OUAR[WgpZlwM_jXjuQaoM]kJ\gFXcAS^>P[:LW<MX;PZ6JU<P]2CO6EU8GW<GY4?Q5DT3BR6EU4CS2AQ2AQ1@P,=L+0D!'7\x1f(2\x18$';EH\x14^[\x1e^[!$\x1c\x1e$\x13 #\x1d+-^[(* \x10\x14 %&/12\x1e\x1d\x1f!\x1d\x1f\x15\x16^[\x19\x1a\x1c\x18\x1a^[\x0f\x18\x15%53,;=..7WLY °lqd}rqu¥w§|«z§gjG^m;P^1CP-@M0HX¥¾Î·È®¦¹À«¿·Ë¼Ï\x7f²³sPetAR^:KS:JQ3DR4GVRg|Nf\x7fg\x7fz®n v§{´\x7fµ¬Ã¦ÆÝ°Ç|¯¥ºvªq¥e
>\o=Wf7Q_;Q]6JU7HS1FQ4HT6KS9KS7IP6FM;IO>IO:PR7LM:MU3EM1AN%7@=KU;KQ?QX:LSWip[msQbkRclVgpPajCV^J]e@S[<OV=OZ@R]7IS:KW4DT;K[:JZ7GW5EU9IY8HX3CS4DT2BR1AQ9HX1@P.=M.>N.;K$/=\x1e'4\x1c#,^[!&\x1c!%\x19\x1d\x1e/45\x15\x1a^[\x18\x1e\x1d\x1d#"#('\x14\x16\x16 .,,&!"\x19\x12\x14\a\x19\x15\a\x0f\b+"^[O93D($gRQqgj~r£j
r¡nw§m~°v¨|«¬i
^xOhx@WgCWfMap¡²µÆ¥¶¯¸Ê²Ç´É½Ð¶É¢µ~«azEZi6FSARZ8GP/BM/CRJ_u\ty¯s§u©w§~·£¹°Ç¦ÆÝ§¾~²~²r¦¥º{¯:Xk5N^9Tb:O[9MW3GR4FQ7IT9LT9MU6IO9IP<JO;GM9IK<JP1>F:FP1>J@LX?KULWbSfm\nuQcjQcjL]fHYbK\eFW`GZb>QY:MT>P[7IT:LW6GT7HT6FV9IY8HX6FV7GW8HX7GW7GW3CS3CS1AQ3BR/>N,<L3@P,9I$/=\x1c%3\x1a!*\x18\x1e#\x14\x19\x1c\x1a\x1d\x1e\x17\x1c\x1d\x1c!"\x14\x19\x18\x15\x1a\x19022^[\x1d\x1d\x13\x13\x13###\x1a\x18\x18 \x1d\x1d\a\x0e
\x19\x1a\x16$\x1e\x173'\x1f;.(60-#'&\x05\x11\x14|´\x7f·z²¥¾~´´{°z¯§ºu¦[vrNhy@Xj²Á«¥¸®Á¯Ä©¾³È±È¶Í¸ÎÀ©¼«¼z£6JY9KU4EM5DL6GS,<L8Oa¸\x7fµ§¾¡¶¡´{´°Ç¢ÂÙ©ÉàªÁx¬¨½x¬´a:Xk=Wg:Sc;Qa4JU6HV3EP6IP7HQ8GP9HQ:GN;IQ<GO<FM6?H5>G19FAJWZbp\fpfnyNahFX_GY_@QZHYbEV_;LTFUbDW_:MT;MX5GR:LV3CQ3DQ4FR3CT5EU4DT3CS6FV6FV5EU4DT1BR/?O/>N.=M-<L0=M0=M*7H&1?^[$1\x15\x1c%\x12\x18\x1d!&)\x18^[\x1c\x12\x17\x18
\x13\x14\x16\x19\x19\x10\x12\x12&((\x16\x18\x18\x0e\x11\x11!##\x18\x19\x19\x11\x13\x13% "LFHQMI]]T$) #.'CSL\x17)%°Ì§Ä«Ç¥¿
£¾}µ°É®Ç±Å³ÇÂv§g±År «¾¶Í¾ÕªÁ³É´Ê´Ë¯É¨Â«Â ¿Ô¬¼tVlwVhs7GS<JV2CL5FS\x1f3E´Ë¥¿§À§½ª¾¦À¼Ó¦ÆÝÀ×®Å{¯|°w«~±aYw6RcA[k9P_:Q`5KW5HO7HQ8GP7CM@LV:EO:FP:EP2<C:FP6BNlv
¥±À¡WgqJ\cBT[HYb6GP?QY;KW;KW<KX9MT3EP>P[2DO6GT2CP6GT3EQ3CS3CS4DT7GW4DT5EU3CS->N2AQ.=M0?O.=M.;K+8H2?O#1A\x17"0\x13\x1c*\x16\x1d&\x1a &\x14\x19\x1c\x1a\x1d\x1e\x10\x15\x166<=\x13\x13\x13%%%\x17\x19\x19\x1d\x1f\x1f\x14\x15\x15\x14\x19\x18\x17\x1c^[\f\x12\x10\x17\x10\x15ebdLNLAIB\x1a&\x1c\x0e\x18\x0e!)"\x1e&\x1f¦È±Ñ£Äv¶¤ÁªÅ
£¼{°m¡s§Wss©µÌ¬Â¯Æ¡¸\x7f¤¿§Á
©Â¿Ù°Ë»Ö¬Ä¶«Â ¿Ó©¹lOdoDVa;KW8ER7FO/@N*>Qu¤¤¿§À¦½´È¦À»Ò¿Ö¡ÁخťºÂ¥º¥·mRq@[l=Vh9Rb:Qa6M]:MS9JS5DM:FP:DM4@L3AM:JV?U\-AL·Ê×§´¶ÂmRhsLdkCT]HYb?PY>PX:JW<LX=MY9IU3EP9KV2DN.>L3DQ4ER4ER3CS3CS2BR3CS1AQ4DT6FV4DT/?O1@P2AQ.=M1>N0=M-;K2<M#,>\x1d(6\x19"/\x1c#-\x19\x1f$\x17\x1c\x1f\x16\x1a^[\x0f\x14\x15$)*\x0f\x0e\x0e\x0f\x11\x11\x1e \x15\x17\x17\x0e\x13\x12\x11\x16\x15\x12\x17\x16\f\x12\x10%!&XWY@ECCJE\x15\x1a\x1487.\RKgXRz¢Åj´j°xº ½tl¡t¨{¯f
o¦«Ä¡º¬Æv±y¶\x7f£Áa
£§Ä}¼©Æ®ËªÅªÅ°É´É©·[tKak;MX9HT8ES4DJ2BO.CTBZq
¡»«Ã°Ê®Å«Ä¤ÅÛ ÀׯƬīÀt¨n¢|¯v§`~B]n=Wh:Te9Qa1K[4HO6IQ6DM2=J,8D0>JDVa9KX®¹®¹©LguwNfr=Va<W^9IR@QZ7HP?O[7GS8HT8HT3CP3EP1CN5FS1BO.?L3DP3CS1AQ5EU3CS3CS1AQ3CS4DT3CS/?O2AQ1AQ0=M/<L0=M/9J+5F$.@!,:\x1d&4\x1d$.\x1a %\x18\x1e!\x12\x16\x17\x11\x17\x18!&'\x12\x17\x16\x0f\x14\x13\f\x11\x10 \x0e
\x10\x15\x14\x12\x17\x16\x0f\x15\x14 \x0f\x0e\x1c\x1e \x18\x1a\x1a475GHF\x1a\x17\x13>3/ub]B)%b±h³q¹v¸q®v´v¦m¤p§ ¹¥¿«Å}¼~£¿{ ¼¤Å¦Çv¸¨Æ¦Ä}¼°Í¢¿®ÇÂ|§j
E\d@RZ:JW6BS9FL/?L/AS0H^®É¥¾³Ë´Ê®Ç¯Æ£ÃÚ\x7f¶ªÁ
¤¹z®s§{«w¨g<Xh=Yj;Uf8Rc2L^7NU4IQ+<D8COAO[;JWx²¾¥¯Rm|lF]mYn}7JW9KV=QX>NX:KT9JS7GS2BN:JU6FS9HV2EO.?L5FS1BO0AM1AQ1AQ1AQ2BR2BR2BR2BR1AQ3CS4DT3CS2AQ0=M0=M/<L0:K1;L)3D(2C#.<\x1f)6\x1d$.\x1c"'$),\x1c !^[ !#()\x11\x19\x18\x14\x1a\x19\x14\x1a\x19\x13\x18\x17\x10\x15\x14\x0f\x11\x11\x0e\x10\x10\x13\x13\x13
+\b!" &'%&$$\x0e\v\a/(%$^[\x17OD=kºy¡Ä±Ó¤Â§Â®Æ«À¬Ã©Â ¹È°Ê¯Í²Î{¡¿©Ç
¤È{¾r´o´¨Å¨Æg¨|¡½£¾¯Æ\x7fªwE\dCV]7FT>K[9FM3CP*<M$<R²Ì¹¯ÆÅ§À¢¸¡¸¬Ã¶{¯|°s§r£mk>Ym=Yj:Te8Rc6Pb1KQ/FO9IR>KX
º}¢^x[vf}Oct:L]BQbAN\;GSDMW;MV5GO1AM5EQ5EQ5ER9IV3BO1BO/@M3DQ/@L3CS/?O0@P2BR0@P0@P2BR3CS0@P1AQ1AQ1AQ,9I0=M1>N'4D+5F1;L'1B'1C"-;!*7\x1d$.\x1e$*&+/&*+"'((,-".+%-,^[#"\x1e%$\x16\x1c^[\x0f\x11\x11\x13\x13\x13#!!,+'\x18\x18\x13/+*=98\x12\x10\x0f\x13\x14\x10\x10\x17\x10%-&
\ No newline at end of file
-Index: git/host_applications/linux/apps/hello_pi/hello_wayland/Makefile
-===================================================================
+diff --git a/host_applications/linux/apps/hello_pi/hello_wayland/Makefile b/host_applications/linux/apps/hello_pi/hello_wayland/Makefile
+new file mode 100644
+index 0000000..c9ddf23
--- /dev/null
-+++ git/host_applications/linux/apps/hello_pi/hello_wayland/Makefile
++++ b/host_applications/linux/apps/hello_pi/hello_wayland/Makefile
@@ -0,0 +1,5 @@
+OBJS=triangle.o
+BIN=hello_wayland.bin
+LDFLAGS+=-lwayland-client -lwayland-egl
+
+include ../Makefile.include
-Index: git/host_applications/linux/apps/hello_pi/hello_wayland/cube_texture_and_coords.h
-===================================================================
+diff --git a/host_applications/linux/apps/hello_pi/hello_wayland/cube_texture_and_coords.h b/host_applications/linux/apps/hello_pi/hello_wayland/cube_texture_and_coords.h
+new file mode 100644
+index 0000000..663e23b
--- /dev/null
-+++ git/host_applications/linux/apps/hello_pi/hello_wayland/cube_texture_and_coords.h
++++ b/host_applications/linux/apps/hello_pi/hello_wayland/cube_texture_and_coords.h
@@ -0,0 +1,100 @@
+/*
+Copyright (c) 2012, Broadcom Europe Ltd
@@ -173,10 +171,11 @@ Index: git/host_applications/linux/apps/hello_pi/hello_wayland/cube_texture_and_
+ 1.f, 1.f,
+};
+
-Index: git/host_applications/linux/apps/hello_pi/hello_wayland/triangle.c
-===================================================================
+diff --git a/host_applications/linux/apps/hello_pi/hello_wayland/triangle.c b/host_applications/linux/apps/hello_pi/hello_wayland/triangle.c
+new file mode 100644
+index 0000000..1a7bfc4
--- /dev/null
-+++ git/host_applications/linux/apps/hello_pi/hello_wayland/triangle.c
++++ b/host_applications/linux/apps/hello_pi/hello_wayland/triangle.c
@@ -0,0 +1,666 @@
+/*
+Copyright (c) 2012, Broadcom Europe Ltd
@@ -844,10 +843,10 @@ Index: git/host_applications/linux/apps/hello_pi/hello_wayland/triangle.c
+ return 0;
+}
+
-Index: git/host_applications/linux/apps/hello_pi/rebuild.sh
-===================================================================
---- git.orig/host_applications/linux/apps/hello_pi/rebuild.sh
-+++ git/host_applications/linux/apps/hello_pi/rebuild.sh
+diff --git a/host_applications/linux/apps/hello_pi/rebuild.sh b/host_applications/linux/apps/hello_pi/rebuild.sh
+index fa4539e..37120ac 100755
+--- a/host_applications/linux/apps/hello_pi/rebuild.sh
++++ b/host_applications/linux/apps/hello_pi/rebuild.sh
@@ -13,6 +13,7 @@ make -C hello_jpeg clean
make -C hello_videocube clean
make -C hello_teapot clean
@@ -862,3 +861,6 @@ Index: git/host_applications/linux/apps/hello_pi/rebuild.sh
make -C hello_fft
-
+make -C hello_wayland
+--
+2.1.4
+
diff --git a/recipes-graphics/userland/userland/0007-wayland-egl-Add-bcm_host-to-dependencies.patch b/recipes-graphics/userland/userland/0006-wayland-egl-Add-bcm_host-to-dependencies.patch
similarity index 85%
rename from recipes-graphics/userland/userland/0007-wayland-egl-Add-bcm_host-to-dependencies.patch
rename to recipes-graphics/userland/userland/0006-wayland-egl-Add-bcm_host-to-dependencies.patch
index 011f255..5de8259 100644
--- a/recipes-graphics/userland/userland/0007-wayland-egl-Add-bcm_host-to-dependencies.patch
+++ b/recipes-graphics/userland/userland/0006-wayland-egl-Add-bcm_host-to-dependencies.patch
@@ -1,7 +1,7 @@
-From de087d5081c45384c40f62de70267581476edba3 Mon Sep 17 00:00:00 2001
+From 429457a9f9f02634bfbd4825f3eba352b3292bfc Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Mon, 10 Aug 2015 02:38:27 -0700
-Subject: [PATCH] wayland-egl: Add bcm_host to dependencies
+Subject: [PATCH 6/9] wayland-egl: Add bcm_host to dependencies
It uses headers like vcos_platform_types.h but does not
depend on module which should add the required include paths
@@ -9,8 +9,6 @@ lets add the dependency on bcm_host module which should do it
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
-Upstream-Status: Submitted
-
interface/khronos/wayland-egl/wayland-egl.pc.in | 1 +
1 file changed, 1 insertion(+)
diff --git a/recipes-graphics/userland/userland/0007-user-vcsm-Fix-build-with-clang.patch b/recipes-graphics/userland/userland/0007-user-vcsm-Fix-build-with-clang.patch
new file mode 100644
index 0000000..6d66c85
--- /dev/null
+++ b/recipes-graphics/userland/userland/0007-user-vcsm-Fix-build-with-clang.patch
@@ -0,0 +1,44 @@
+From f4f6c8e432733a63a3309caf41c0c03cab725f1f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 23 Aug 2015 13:17:33 -0700
+Subject: [PATCH 7/9] user-vcsm: Fix build with clang
+
+/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/raspberrypi2-angstrom-linux-gnueabi/userland/git-r5/git/host_applications/linux/libs/sm/user-vcsm.c:316:36: error: implicit conversion from enumeration
+ type 'enum vmcs_sm_cache_e' to different enumeration type 'VCSM_CACHE_TYPE_T' [-Werror,-Wenum-conversion]
+ return vcsm_malloc_cache( size, VMCS_SM_CACHE_NONE, name );
+ ~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~
+/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/raspberrypi2-angstrom-linux-gnueabi/userland/git-r5/git/host_applications/linux/libs/sm/user-vcsm.c:339:22: error: equality comparison with extraneous
+ parentheses [-Werror,-Wparentheses-equality]
+ if ( (vcsm_handle == VCSM_INVALID_HANDLE) )
+ ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ host_applications/linux/libs/sm/user-vcsm.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/host_applications/linux/libs/sm/user-vcsm.c b/host_applications/linux/libs/sm/user-vcsm.c
+index 4e78dc4..5298f25 100644
+--- a/host_applications/linux/libs/sm/user-vcsm.c
++++ b/host_applications/linux/libs/sm/user-vcsm.c
+@@ -313,7 +313,7 @@ unsigned int vcsm_malloc_cache( unsigned int size, VCSM_CACHE_TYPE_T cache, char
+ */
+ unsigned int vcsm_malloc( unsigned int size, char *name )
+ {
+- return vcsm_malloc_cache( size, VMCS_SM_CACHE_NONE, name );
++ return vcsm_malloc_cache( size, (VCSM_CACHE_TYPE_T)VMCS_SM_CACHE_NONE, name );
+ }
+
+ /* Shares an allocated block of memory.
+@@ -336,7 +336,7 @@ unsigned int vcsm_malloc_share( unsigned int handle )
+ void *usr_ptr = NULL;
+ int rc;
+
+- if ( (vcsm_handle == VCSM_INVALID_HANDLE) )
++ if ( vcsm_handle == VCSM_INVALID_HANDLE )
+ {
+ vcos_log_error( "[%s]: [%d]: NULL size or invalid device!",
+ __func__,
+--
+2.1.4
+
diff --git a/recipes-graphics/userland/userland/0008-Fix-enum-type-conversion-warnings.patch b/recipes-graphics/userland/userland/0008-Fix-enum-type-conversion-warnings.patch
new file mode 100644
index 0000000..5b5eb02
--- /dev/null
+++ b/recipes-graphics/userland/userland/0008-Fix-enum-type-conversion-warnings.patch
@@ -0,0 +1,166 @@
+From ddf0310613457e9a6b42cfb2fbc60588992316bb Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 23 Aug 2015 10:43:37 -0700
+Subject: [PATCH 8/9] Fix enum type conversion warnings
+
+/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/raspberrypi2-angstrom-linux-gnueabi/userland/git-r5/git/interface/mmal/openmaxil/mmalomx_util_params_video.c:59:30: error: implicit conversion from enumeration type 'OMX_DISPLAYTRANSFORMTYPE' (aka 'enum OMX_DISPLAYTRANSFORMTYPE') to different enumeration type 'MMAL_DISPLAYTRANSFORM_T' (aka 'enum MMAL_DISPLAYTRANSFORM_T') [-Werror,-Wenum-conversion]
+ mmal->transform = omx->transform;
+ ~ ~~~~~^~~~~~~~~
+/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/raspberrypi2-angstrom-linux-gnueabi/userland/git-r5/git/interface/mmal/openmaxil/mmalomx_util_params_video.c:63:25: error: implicit conversion from enumeration type 'OMX_DISPLAYMODETYPE' (aka 'enum OMX_DISPLAYMODETYPE') to different enumeration type 'MMAL_DISPLAYMODE_T' (aka 'enum MMAL_DISPLAYMODE_T') [-Werror,-Wenum-conversion]
+ mmal->mode = omx->mode;
+ ~ ~~~~~^~~~
+/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/raspberrypi2-angstrom-linux-gnueabi/userland/git-r5/git/interface/mmal/openmaxil/mmalomx_util_params_video.c:75:31: error: implicit conversion from enumeration type 'MMAL_DISPLAYTRANSFORM_T' (aka 'enum MMAL_DISPLAYTRANSFORM_T') to different enumeration type 'OMX_DISPLAYTRANSFORMTYPE' (aka 'enum OMX_DISPLAYTRANSFORMTYPE') [-Werror,-Wenum-conversion]
+ omx->transform = mmal->transform;
+ ~ ~~~~~~^~~~~~~~~
+/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/raspberrypi2-angstrom-linux-gnueabi/userland/git-r5/git/interface/mmal/openmaxil/mmalomx_util_params_video.c:79:31: error: implicit conversion from enumeration type 'MMAL_DISPLAYMODE_T' (aka 'enum MMAL_DISPLAYMODE_T') to different enumeration type 'OMX_DISPLAYMODETYPE' (aka 'enum OMX_DISPLAYMODETYPE') [-Werror,-Wenum-conversion]
+ omx->mode = mmal->mode;
+ ~ ~~~~~~^~~~
+
+/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/raspberrypi2-angstrom-linux-gnueabi/userland/git-r5/git/interface/mmal/vc/mmal_vc_client.c:102:13: error: implicit conversion from enumeration type
+ 'VCOS_STATUS_T' to different enumeration type 'MMAL_STATUS_T' [-Werror,-Wenum-conversion]
+ status = vcos_semaphore_create(&waitpool->sem, VCOS_FUNCTION,
+ ~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/raspberrypi2-angstrom-linux-gnueabi/userland/git-r5/git/interface/mmal/vc/mmal_vc_client.c:110:16: error: implicit conversion from enumeration type
+ 'VCOS_STATUS_T' to different enumeration type 'MMAL_STATUS_T' [-Werror,-Wenum-conversion]
+ status = vcos_semaphore_create(&waitpool->waiters[i].sem,
+ ~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/raspberrypi2-angstrom-linux-gnueabi/userland/git-r5/git/interface/mmal/openmaxil/mmalomx_core.c:284:17: error: implicit conversion from enumeration
+ type 'MMAL_STATUS_T' to different enumeration type 'OMX_ERRORTYPE' (aka 'enum OMX_ERRORTYPE') [-Werror,-Wenum-conversion]
+ return mmalomx_get_port_settings(port, param);
+ ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/raspberrypi2-angstrom-linux-gnueabi/userland/git-r5/git/interface/mmal/openmaxil/mmalomx_core.c:478:17: error: implicit conversion from enumeration
+ type 'MMAL_STATUS_T' to different enumeration type 'OMX_ERRORTYPE' (aka 'enum OMX_ERRORTYPE') [-Werror,-Wenum-conversion]
+ return mmalomx_set_port_settings(port, param);
+ ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/raspberrypi2-angstrom-linux-gnueabi/userland/git-r5/git/interface/mmal/openmaxil/mmalomx_parameters.c:173:14: error: implicit conversion from
+ enumeration type 'MMAL_STATUS_T' to different enumeration type 'OMX_ERRORTYPE' (aka 'enum OMX_ERRORTYPE') [-Werror,-Wenum-conversion]
+ return xlat->fn.custom(MMALOMX_PARAM_MAPPING_TO_OMX, xlat, mmal_header,
+ ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/raspberrypi2-angstrom-linux-gnueabi/userland/git-r5/git/interface/mmal/openmaxil/mmalomx_parameters.c:557:17: error: implicit conversion from
+ enumeration type 'MMAL_STATUS_T' to different enumeration type 'OMX_ERRORTYPE' (aka 'enum OMX_ERRORTYPE') [-Werror,-Wenum-conversion]
+ return mmal_port_format_commit(port->mmal);
+ ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+/mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/raspberrypi2-angstrom-linux-gnueabi/userland/git-r5/git/interface/mmal/openmaxil/mmalomx_parameters.c:564:17: error: implicit conversion from
+ enumeration type 'MMAL_STATUS_T' to different enumeration type 'OMX_ERRORTYPE' (aka 'enum OMX_ERRORTYPE') [-Werror,-Wenum-conversion]
+ return mmal_port_format_commit(port->mmal);
+ ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ interface/mmal/openmaxil/mmalomx_core.c | 4 ++--
+ interface/mmal/openmaxil/mmalomx_parameters.c | 6 +++---
+ interface/mmal/openmaxil/mmalomx_util_params_video.c | 8 ++++----
+ interface/mmal/vc/mmal_vc_client.c | 4 ++--
+ 4 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/interface/mmal/openmaxil/mmalomx_core.c b/interface/mmal/openmaxil/mmalomx_core.c
+index da66b0b..3a72a2e 100644
+--- a/interface/mmal/openmaxil/mmalomx_core.c
++++ b/interface/mmal/openmaxil/mmalomx_core.c
+@@ -281,7 +281,7 @@ static OMX_ERRORTYPE mmalomx_ComponentGetParameter(
+ {
+ OMX_PARAM_PORTDEFINITIONTYPE *param = (OMX_PARAM_PORTDEFINITIONTYPE *)pParam;
+ PARAM_GET_PORT(port, component, param->nPortIndex);
+- return mmalomx_get_port_settings(port, param);
++ return (OMX_ERRORTYPE)mmalomx_get_port_settings(port, param);
+ }
+ return OMX_ErrorNone;
+ break;
+@@ -475,7 +475,7 @@ static OMX_ERRORTYPE mmalomx_ComponentSetParameter(
+ {
+ OMX_PARAM_PORTDEFINITIONTYPE *param = (OMX_PARAM_PORTDEFINITIONTYPE *)pParam;
+ PARAM_GET_PORT(port, component, param->nPortIndex);
+- return mmalomx_set_port_settings(port, param);
++ return (OMX_ERRORTYPE)mmalomx_set_port_settings(port, param);
+ }
+ return OMX_ErrorNone;
+ break;
+diff --git a/interface/mmal/openmaxil/mmalomx_parameters.c b/interface/mmal/openmaxil/mmalomx_parameters.c
+index a91b68c..f0bd17f 100644
+--- a/interface/mmal/openmaxil/mmalomx_parameters.c
++++ b/interface/mmal/openmaxil/mmalomx_parameters.c
+@@ -170,7 +170,7 @@ static OMX_ERRORTYPE mmalomx_parameter_get_xlat(MMALOMX_COMPONENT_T *component,
+
+ if (xlat->fn.custom)
+ {
+- return xlat->fn.custom(MMALOMX_PARAM_MAPPING_TO_OMX, xlat, mmal_header,
++ return (OMX_ERRORTYPE)xlat->fn.custom(MMALOMX_PARAM_MAPPING_TO_OMX, xlat, mmal_header,
+ pParam, mmal_port);
+ }
+
+@@ -554,14 +554,14 @@ OMX_ERRORTYPE mmalomx_parameter_set(MMALOMX_COMPONENT_T *component,
+ port->mmal->format->es->video.par.num = param->nX;
+ port->mmal->format->es->video.par.den = param->nY;
+ mmal_rational_simplify(&port->mmal->format->es->video.par);
+- return mmal_port_format_commit(port->mmal);
++ return (OMX_ERRORTYPE)mmal_port_format_commit(port->mmal);
+ }
+ case OMX_IndexParamColorSpace:
+ {
+ OMX_PARAM_COLORSPACETYPE *param = (OMX_PARAM_COLORSPACETYPE *)pParam;
+ PARAM_GET_PORT(port, component, param->nPortIndex);
+ port->mmal->format->es->video.color_space = mmalil_omx_color_space_to_mmal(param->eColorSpace);
+- return mmal_port_format_commit(port->mmal);
++ return (OMX_ERRORTYPE)mmal_port_format_commit(port->mmal);
+ }
+ case OMX_IndexParamBrcmVideoCroppingDisable:
+ {
+diff --git a/interface/mmal/openmaxil/mmalomx_util_params_video.c b/interface/mmal/openmaxil/mmalomx_util_params_video.c
+index f088296..83e3724 100644
+--- a/interface/mmal/openmaxil/mmalomx_util_params_video.c
++++ b/interface/mmal/openmaxil/mmalomx_util_params_video.c
+@@ -56,11 +56,11 @@ static MMAL_STATUS_T mmalomx_param_mapping_displayregion(MMALOMX_PARAM_MAPPING_D
+ mmal->set = omx->set;
+ mmal->display_num = omx->num;
+ mmal->fullscreen = omx->fullscreen;
+- mmal->transform = omx->transform;
++ mmal->transform = (MMAL_DISPLAYTRANSFORM_T)omx->transform;
+ rect_to_mmal(&mmal->dest_rect, &omx->dest_rect);
+ rect_to_mmal(&mmal->src_rect, &omx->src_rect);
+ mmal->noaspect = omx->noaspect;
+- mmal->mode = omx->mode;
++ mmal->mode = (MMAL_DISPLAYMODE_T)omx->mode;
+ mmal->pixel_x = omx->pixel_x;
+ mmal->pixel_y = omx->pixel_y;
+ mmal->layer = omx->layer;
+@@ -72,11 +72,11 @@ static MMAL_STATUS_T mmalomx_param_mapping_displayregion(MMALOMX_PARAM_MAPPING_D
+ omx->set = mmal->set;
+ omx->num = mmal->display_num;
+ omx->fullscreen = mmal->fullscreen;
+- omx->transform = mmal->transform;
++ omx->transform = (OMX_DISPLAYTRANSFORMTYPE)mmal->transform;
+ rect_to_omx(&omx->dest_rect, &mmal->dest_rect);
+ rect_to_omx(&omx->src_rect, &mmal->src_rect);
+ omx->noaspect = mmal->noaspect;
+- omx->mode = mmal->mode;
++ omx->mode = (OMX_DISPLAYMODETYPE)mmal->mode;
+ omx->pixel_x = mmal->pixel_x;
+ omx->pixel_y = mmal->pixel_y;
+ omx->layer = mmal->layer;
+diff --git a/interface/mmal/vc/mmal_vc_client.c b/interface/mmal/vc/mmal_vc_client.c
+index b60544b..bd27fc5 100644
+--- a/interface/mmal/vc/mmal_vc_client.c
++++ b/interface/mmal/vc/mmal_vc_client.c
+@@ -99,7 +99,7 @@ static MMAL_STATUS_T create_waitpool(MMAL_WAITPOOL_T *waitpool)
+ MMAL_STATUS_T status;
+ int i;
+
+- status = vcos_semaphore_create(&waitpool->sem, VCOS_FUNCTION,
++ status = (MMAL_STATUS_T)vcos_semaphore_create(&waitpool->sem, VCOS_FUNCTION,
+ MAX_WAITERS);
+ if (status != MMAL_SUCCESS)
+ return status;
+@@ -107,7 +107,7 @@ static MMAL_STATUS_T create_waitpool(MMAL_WAITPOOL_T *waitpool)
+ for (i=0; i<MAX_WAITERS; i++)
+ {
+ waitpool->waiters[i].inuse = 0;
+- status = vcos_semaphore_create(&waitpool->waiters[i].sem,
++ status = (MMAL_STATUS_T)vcos_semaphore_create(&waitpool->waiters[i].sem,
+ "mmal waiter", 0);
+ if (status != MMAL_SUCCESS)
+ break;
+--
+2.1.4
+
diff --git a/recipes-graphics/userland/userland/0009-vcos_platform_types-Dont-use-extern-inline-with-clan.patch b/recipes-graphics/userland/userland/0009-vcos_platform_types-Dont-use-extern-inline-with-clan.patch
new file mode 100644
index 0000000..36c5fdb
--- /dev/null
+++ b/recipes-graphics/userland/userland/0009-vcos_platform_types-Dont-use-extern-inline-with-clan.patch
@@ -0,0 +1,66 @@
+From abc0f4d9d624b638457e33d464921d87dcf00cee Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 23 Aug 2015 13:41:33 -0700
+Subject: [PATCH 9/9] vcos_platform_types: Dont use extern inline with clang
+
+Its very gcc specific implementation here in this code, we cant use
+it with clang as such, so we will use static inline instead which is
+common across gcc and clang starting c99 std onwards
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ interface/vcos/pthreads/vcos_platform_types.h | 4 ----
+ interface/vcos/vcos_timer.h | 5 -----
+ interface/vcos/vcos_types.h | 2 +-
+ 3 files changed, 1 insertion(+), 10 deletions(-)
+
+Index: git/interface/vcos/vcos_timer.h
+===================================================================
+--- git.orig/interface/vcos/vcos_timer.h
++++ git/interface/vcos/vcos_timer.h
+@@ -76,7 +76,6 @@ VCOSPRE_ VCOS_STATUS_T VCOSPOST_ vcos_ti
+ * @param context context passed to expiration routine
+ *
+ */
+-VCOS_INLINE_DECL
+ VCOS_STATUS_T vcos_timer_create(VCOS_TIMER_T *timer,
+ const char *name,
+ void (*expiration_routine)(void *context),
+@@ -91,24 +90,20 @@ VCOS_STATUS_T vcos_timer_create(VCOS_TIM
+ * @param timer timer handle
+ * @param delay Delay to wait for, in ms
+ */
+-VCOS_INLINE_DECL
+ void vcos_timer_set(VCOS_TIMER_T *timer, VCOS_UNSIGNED delay);
+
+ /** Stop an already running timer.
+ *
+ * @param timer timer handle
+ */
+-VCOS_INLINE_DECL
+ void vcos_timer_cancel(VCOS_TIMER_T *timer);
+
+ /** Stop a timer and restart it.
+ * @param timer timer handle
+ * @param delay delay in ms
+ */
+-VCOS_INLINE_DECL
+ void vcos_timer_reset(VCOS_TIMER_T *timer, VCOS_UNSIGNED delay);
+
+-VCOS_INLINE_DECL
+ void vcos_timer_delete(VCOS_TIMER_T *timer);
+
+ #ifdef __cplusplus
+Index: git/interface/vcos/vcos_types.h
+===================================================================
+--- git.orig/interface/vcos/vcos_types.h
++++ git/interface/vcos/vcos_types.h
+@@ -120,7 +120,7 @@ typedef enum
+
+ #if defined(NDEBUG)
+
+-#ifdef __GNUC__
++#if defined(__GNUC__) && !defined(__clang__)
+ # define VCOS_INLINE_DECL extern
+ # define VCOS_INLINE_IMPL static __inline__
+ #else
diff --git a/recipes-graphics/userland/userland_git.bb b/recipes-graphics/userland/userland_git.bb
index f9af226..ae22e6d 100644
--- a/recipes-graphics/userland/userland_git.bb
+++ b/recipes-graphics/userland/userland_git.bb
@@ -21,12 +21,15 @@ SRC_URI = "\
file://0001-fix-gcc-5.x-inlines.patch \
file://0002-fix-musl-build.patch \
file://0003-fix-alloc-size-uninitialized.patch \
- file://0002-set-VMCS_INSTALL_PREFIX-to-usr.patch \
- file://0003-cmake-generate-and-install-pkgconfig-files.patch \
- file://0004-Allow-applications-to-set-next-resource-handle.patch \
- file://0005-wayland-Add-support-for-the-Wayland-winsys.patch \
- file://0006-wayland-Add-Wayland-example.patch \
- file://0007-wayland-egl-Add-bcm_host-to-dependencies.patch \
+ file://0001-set-VMCS_INSTALL_PREFIX-to-usr.patch \
+ file://0002-cmake-generate-and-install-pkgconfig-files.patch \
+ file://0003-Allow-applications-to-set-next-resource-handle.patch \
+ file://0004-wayland-Add-support-for-the-Wayland-winsys.patch \
+ file://0005-wayland-Add-Wayland-example.patch \
+ file://0006-wayland-egl-Add-bcm_host-to-dependencies.patch \
+ file://0007-user-vcsm-Fix-build-with-clang.patch \
+ file://0008-Fix-enum-type-conversion-warnings.patch \
+ file://0009-vcos_platform_types-Dont-use-extern-inline-with-clan.patch \
"
S = "${WORKDIR}/git"
--
2.6.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 16:37 [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs Khem Raj
` (3 preceding siblings ...)
2015-10-03 16:37 ` [meta-raspberrypi][PATCH V4 5/5] userland: Fix build with clang compiler Khem Raj
@ 2015-10-03 18:24 ` Andrei Gherzan
2015-10-03 19:00 ` Khem Raj
2015-10-24 19:56 ` Andrei Gherzan
5 siblings, 1 reply; 26+ messages in thread
From: Andrei Gherzan @ 2015-10-03 18:24 UTC (permalink / raw)
To: Khem Raj; +Cc: yocto
Hey Khem,
On Sat, Oct 03, 2015 at 04:37:34PM +0000, Khem Raj wrote:
> several userspace libraries like libepoxy poke for pkgconfigs ( .pc )
> files to detect egl support, and comes out to fail in configure stage,
> one of the patches now adds support to generate .pc files for some known
> cases. it could be further extended if needed for other libraries too
>
> Secondly, the default CMAKE_INSTALL_PREFIX is /opt/vc but in OE we use
> proper /usr so lets make this change as well, it simplifies do_install()
>
> .so are not versioned so we need to grapple with OE's defaults of
> expecting versioned .so files.
>
> Adjust packages for -dev package such that it can automatically package
> pkgconfig files and inherit pkgconfig because in cmake code we are not
> looking for pkgconfig so we need the dependency also put in place for
> consistent builds
>
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
>
Do you happen to have this patchset in a branch somewhere remote? Something
doesn't apply the way it should.
Thanks,
----
Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 18:24 ` [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs Andrei Gherzan
@ 2015-10-03 19:00 ` Khem Raj
2015-10-03 19:03 ` Andrei Gherzan
0 siblings, 1 reply; 26+ messages in thread
From: Khem Raj @ 2015-10-03 19:00 UTC (permalink / raw)
To: Andrei Gherzan; +Cc: yocto@yoctoproject.org
On Sat, Oct 3, 2015 at 11:24 AM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> Do you happen to have this patchset in a branch somewhere remote? Something
> doesn't apply the way it should.
yes
https://github.com/kraj/meta-raspberrypi/commits/kraj/master
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 19:00 ` Khem Raj
@ 2015-10-03 19:03 ` Andrei Gherzan
2015-10-03 19:15 ` Khem Raj
0 siblings, 1 reply; 26+ messages in thread
From: Andrei Gherzan @ 2015-10-03 19:03 UTC (permalink / raw)
To: Khem Raj; +Cc: yocto@yoctoproject.org
Hi,
On Sat, Oct 03, 2015 at 12:00:13PM -0700, Khem Raj wrote:
> On Sat, Oct 3, 2015 at 11:24 AM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> > Do you happen to have this patchset in a branch somewhere remote? Something
> > doesn't apply the way it should.
>
> yes
> https://github.com/kraj/meta-raspberrypi/commits/kraj/master
Which these commits:
c92ec8f weston: Enable rpi compositor backend
26e2365 userland: Adjust include location for pthreads-headers
ec4ebd1 userland: Add wayland support
070df78 userland: Fix install prefix and generate pkgconfigs
4dfa633 userland: Fix multiple inline issues while building with gcc 5.x
... build fails as it follows:
fatal error: interface/vmcs_host/wayland-dispmanx-server-protocol.h: No such
file or directory
Could you give it a try and see if it compiles for you? As well do you have any
idea who should provide that header? I don't see it in userland.
--
Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 19:03 ` Andrei Gherzan
@ 2015-10-03 19:15 ` Khem Raj
2015-10-03 19:18 ` Andrei Gherzan
0 siblings, 1 reply; 26+ messages in thread
From: Khem Raj @ 2015-10-03 19:15 UTC (permalink / raw)
To: Andrei Gherzan; +Cc: yocto@yoctoproject.org
On Sat, Oct 3, 2015 at 12:03 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> Hi,
>
> On Sat, Oct 03, 2015 at 12:00:13PM -0700, Khem Raj wrote:
>> On Sat, Oct 3, 2015 at 11:24 AM, Andrei Gherzan <andrei@gherzan.ro> wrote:
>> > Do you happen to have this patchset in a branch somewhere remote? Something
>> > doesn't apply the way it should.
>>
>> yes
>> https://github.com/kraj/meta-raspberrypi/commits/kraj/master
>
> Which these commits:
> c92ec8f weston: Enable rpi compositor backend
> 26e2365 userland: Adjust include location for pthreads-headers
> ec4ebd1 userland: Add wayland support
> 070df78 userland: Fix install prefix and generate pkgconfigs
> 4dfa633 userland: Fix multiple inline issues while building with gcc 5.x
>
> ... build fails as it follows:
> fatal error: interface/vmcs_host/wayland-dispmanx-server-protocol.h: No such
> file or directory
OK so you are not testing the topmost patch for clang ?
in any case with or with out that patch build works ok for me here.
Can you show me the DISTRO_FEATURES you are testing with ?
>
> Could you give it a try and see if it compiles for you? As well do you have any
> idea who should provide that header? I don't see it in userland.
>
> --
> Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 19:15 ` Khem Raj
@ 2015-10-03 19:18 ` Andrei Gherzan
2015-10-03 20:06 ` Khem Raj
0 siblings, 1 reply; 26+ messages in thread
From: Andrei Gherzan @ 2015-10-03 19:18 UTC (permalink / raw)
To: Khem Raj; +Cc: yocto@yoctoproject.org
On Sat, Oct 03, 2015 at 12:15:58PM -0700, Khem Raj wrote:
> On Sat, Oct 3, 2015 at 12:03 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> > Hi,
> >
> > On Sat, Oct 03, 2015 at 12:00:13PM -0700, Khem Raj wrote:
> >> On Sat, Oct 3, 2015 at 11:24 AM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> >> > Do you happen to have this patchset in a branch somewhere remote? Something
> >> > doesn't apply the way it should.
> >>
> >> yes
> >> https://github.com/kraj/meta-raspberrypi/commits/kraj/master
> >
> > Which these commits:
> > c92ec8f weston: Enable rpi compositor backend
> > 26e2365 userland: Adjust include location for pthreads-headers
> > ec4ebd1 userland: Add wayland support
> > 070df78 userland: Fix install prefix and generate pkgconfigs
> > 4dfa633 userland: Fix multiple inline issues while building with gcc 5.x
> >
> > ... build fails as it follows:
> > fatal error: interface/vmcs_host/wayland-dispmanx-server-protocol.h: No such
> > file or directory
>
> OK so you are not testing the topmost patch for clang ?
> in any case with or with out that patch build works ok for me here.
> Can you show me the DISTRO_FEATURES you are testing with ?
>
I tested with and without - same result.
DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm
libc-locales libc-locale-code libc-memusage libc-nis
libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
libc-posix-regexp-glibc libc-posix-wchar-io largefile
opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
No modification to the default poky distro.
> >
> > Could you give it a try and see if it compiles for you? As well do you have any
> > idea who should provide that header? I don't see it in userland.
> >
> > --
> > Andrei Gherzan
--
Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 19:18 ` Andrei Gherzan
@ 2015-10-03 20:06 ` Khem Raj
2015-10-03 20:11 ` Andrei Gherzan
0 siblings, 1 reply; 26+ messages in thread
From: Khem Raj @ 2015-10-03 20:06 UTC (permalink / raw)
To: Andrei Gherzan; +Cc: yocto@yoctoproject.org
On Sat, Oct 3, 2015 at 12:18 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> I tested with and without - same result.
> DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
> usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
> libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
> libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
> libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm
> libc-locales libc-locale-code libc-memusage libc-nis
> libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
> libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
> libc-posix-regexp-glibc libc-posix-wchar-io largefile
> opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
>
> No modification to the default poky distro.
hmm I am using angstrom and it works there and for verification I now
tried with OE-Core ( alone ) it works there too, can you check some
other parameters that are there in your sandbox ? here is my build
MACHINE=raspberrypi2 bitbake userland
Parsing recipes: 100%
|######################################################################################################################################################################################################|
ETA: 00:00:00
Parsing of 918 .bb files complete (0 cached, 918 parsed). 1350
targets, 59 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Build Configuration:
BB_VERSION = "1.28.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "Ubuntu-14.04"
TARGET_SYS = "arm-oe-linux-gnueabi"
MACHINE = "raspberrypi2"
DISTRO = "nodistro"
DISTRO_VERSION = "nodistro.0"
TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard
vfpv4 cortexa7"
TARGET_FPU = "vfp-vfpv4-neon"
meta-raspberrypi = "kraj/master:a903a9cd18ae556121265da93ed74f857944a0da"
meta = "kraj/master:602e512b92bcc78403144fedeb4211bbf56ff1c8"
NOTE: Preparing RunQueue
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
NOTE: Tasks Summary: Attempted 454 tasks of which 315 didn't need to
be rerun and all succeeded.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 20:06 ` Khem Raj
@ 2015-10-03 20:11 ` Andrei Gherzan
2015-10-03 20:31 ` Khem Raj
0 siblings, 1 reply; 26+ messages in thread
From: Andrei Gherzan @ 2015-10-03 20:11 UTC (permalink / raw)
To: Khem Raj; +Cc: yocto@yoctoproject.org
On Sat, Oct 03, 2015 at 01:06:55PM -0700, Khem Raj wrote:
> On Sat, Oct 3, 2015 at 12:18 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> > I tested with and without - same result.
> > DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
> > usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
> > libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
> > libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
> > libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm
> > libc-locales libc-locale-code libc-memusage libc-nis
> > libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
> > libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
> > libc-posix-regexp-glibc libc-posix-wchar-io largefile
> > opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
> >
> > No modification to the default poky distro.
>
> hmm I am using angstrom and it works there and for verification I now
> tried with OE-Core ( alone ) it works there too, can you check some
> other parameters that are there in your sandbox ? here is my build
>
> MACHINE=raspberrypi2 bitbake userland
> Parsing recipes: 100%
> |######################################################################################################################################################################################################|
> ETA: 00:00:00
> Parsing of 918 .bb files complete (0 cached, 918 parsed). 1350
> targets, 59 skipped, 0 masked, 0 errors.
> NOTE: Resolving any missing task queue dependencies
>
> Build Configuration:
> BB_VERSION = "1.28.0"
> BUILD_SYS = "x86_64-linux"
> NATIVELSBSTRING = "Ubuntu-14.04"
> TARGET_SYS = "arm-oe-linux-gnueabi"
> MACHINE = "raspberrypi2"
> DISTRO = "nodistro"
> DISTRO_VERSION = "nodistro.0"
> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard
> vfpv4 cortexa7"
> TARGET_FPU = "vfp-vfpv4-neon"
> meta-raspberrypi = "kraj/master:a903a9cd18ae556121265da93ed74f857944a0da"
> meta = "kraj/master:602e512b92bcc78403144fedeb4211bbf56ff1c8"
>
> NOTE: Preparing RunQueue
> NOTE: Executing SetScene Tasks
> NOTE: Executing RunQueue Tasks
> NOTE: Tasks Summary: Attempted 454 tasks of which 315 didn't need to
> be rerun and all succeeded.
Here is my build configuration.
Build Configuration:
BB_VERSION = "1.28.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "Arch-rolling"
TARGET_SYS = "arm-poky-linux-gnueabi"
MACHINE = "raspberrypi2"
DISTRO = "poky"
DISTRO_VERSION = "2.0"
TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard vfpv4
cortexa7"
TARGET_FPU = "vfp-vfpv4-neon"
meta
meta-yocto
meta-yocto-bsp = "master:eac61f37e36099f74485dab398b57f3812826d17"
meta-raspberrypi = "master:48da0cdc5fb147a20b41a77b2dfeef4efd483b32"
meta-oe
meta-multimedia = "master:f4533380c8a5c1d229f692222ee0c2ef9d187ef8"
But anyway can you please check in your userland install dir for the header I'm
missing? Or in sysroot.
--
Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 20:11 ` Andrei Gherzan
@ 2015-10-03 20:31 ` Khem Raj
2015-10-03 20:33 ` Andrei Gherzan
0 siblings, 1 reply; 26+ messages in thread
From: Khem Raj @ 2015-10-03 20:31 UTC (permalink / raw)
To: Andrei Gherzan; +Cc: yocto@yoctoproject.org
On Sat, Oct 3, 2015 at 1:11 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> On Sat, Oct 03, 2015 at 01:06:55PM -0700, Khem Raj wrote:
>> On Sat, Oct 3, 2015 at 12:18 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
>> > I tested with and without - same result.
>> > DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
>> > usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
>> > libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
>> > libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
>> > libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm
>> > libc-locales libc-locale-code libc-memusage libc-nis
>> > libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
>> > libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
>> > libc-posix-regexp-glibc libc-posix-wchar-io largefile
>> > opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
>> >
>> > No modification to the default poky distro.
>>
>> hmm I am using angstrom and it works there and for verification I now
>> tried with OE-Core ( alone ) it works there too, can you check some
>> other parameters that are there in your sandbox ? here is my build
>>
>> MACHINE=raspberrypi2 bitbake userland
>> Parsing recipes: 100%
>> |######################################################################################################################################################################################################|
>> ETA: 00:00:00
>> Parsing of 918 .bb files complete (0 cached, 918 parsed). 1350
>> targets, 59 skipped, 0 masked, 0 errors.
>> NOTE: Resolving any missing task queue dependencies
>>
>> Build Configuration:
>> BB_VERSION = "1.28.0"
>> BUILD_SYS = "x86_64-linux"
>> NATIVELSBSTRING = "Ubuntu-14.04"
>> TARGET_SYS = "arm-oe-linux-gnueabi"
>> MACHINE = "raspberrypi2"
>> DISTRO = "nodistro"
>> DISTRO_VERSION = "nodistro.0"
>> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard
>> vfpv4 cortexa7"
>> TARGET_FPU = "vfp-vfpv4-neon"
>> meta-raspberrypi = "kraj/master:a903a9cd18ae556121265da93ed74f857944a0da"
>> meta = "kraj/master:602e512b92bcc78403144fedeb4211bbf56ff1c8"
>>
>> NOTE: Preparing RunQueue
>> NOTE: Executing SetScene Tasks
>> NOTE: Executing RunQueue Tasks
>> NOTE: Tasks Summary: Attempted 454 tasks of which 315 didn't need to
>> be rerun and all succeeded.
>
> Here is my build configuration.
>
> Build Configuration:
> BB_VERSION = "1.28.0"
> BUILD_SYS = "x86_64-linux"
> NATIVELSBSTRING = "Arch-rolling"
> TARGET_SYS = "arm-poky-linux-gnueabi"
> MACHINE = "raspberrypi2"
> DISTRO = "poky"
> DISTRO_VERSION = "2.0"
> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard vfpv4
> cortexa7"
> TARGET_FPU = "vfp-vfpv4-neon"
> meta
> meta-yocto
> meta-yocto-bsp = "master:eac61f37e36099f74485dab398b57f3812826d17"
> meta-raspberrypi = "master:48da0cdc5fb147a20b41a77b2dfeef4efd483b32"
> meta-oe
> meta-multimedia = "master:f4533380c8a5c1d229f692222ee0c2ef9d187ef8"
>
>
> But anyway can you please check in your userland install dir for the header I'm
> missing? Or in sysroot.
its part of userland itself so no other package should be needed and
not required in sysroot
./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/package/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/packages-split/userland-dbg/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/khronos/wayland-dispmanx-server-protocol.h
./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
>
> --
> Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 20:31 ` Khem Raj
@ 2015-10-03 20:33 ` Andrei Gherzan
2015-10-03 20:40 ` Andrei Gherzan
0 siblings, 1 reply; 26+ messages in thread
From: Andrei Gherzan @ 2015-10-03 20:33 UTC (permalink / raw)
To: Khem Raj; +Cc: yocto@yoctoproject.org
On Sat, Oct 03, 2015 at 01:31:24PM -0700, Khem Raj wrote:
> On Sat, Oct 3, 2015 at 1:11 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> > On Sat, Oct 03, 2015 at 01:06:55PM -0700, Khem Raj wrote:
> >> On Sat, Oct 3, 2015 at 12:18 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> >> > I tested with and without - same result.
> >> > DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
> >> > usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
> >> > libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
> >> > libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
> >> > libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm
> >> > libc-locales libc-locale-code libc-memusage libc-nis
> >> > libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
> >> > libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
> >> > libc-posix-regexp-glibc libc-posix-wchar-io largefile
> >> > opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
> >> >
> >> > No modification to the default poky distro.
> >>
> >> hmm I am using angstrom and it works there and for verification I now
> >> tried with OE-Core ( alone ) it works there too, can you check some
> >> other parameters that are there in your sandbox ? here is my build
> >>
> >> MACHINE=raspberrypi2 bitbake userland
> >> Parsing recipes: 100%
> >> |######################################################################################################################################################################################################|
> >> ETA: 00:00:00
> >> Parsing of 918 .bb files complete (0 cached, 918 parsed). 1350
> >> targets, 59 skipped, 0 masked, 0 errors.
> >> NOTE: Resolving any missing task queue dependencies
> >>
> >> Build Configuration:
> >> BB_VERSION = "1.28.0"
> >> BUILD_SYS = "x86_64-linux"
> >> NATIVELSBSTRING = "Ubuntu-14.04"
> >> TARGET_SYS = "arm-oe-linux-gnueabi"
> >> MACHINE = "raspberrypi2"
> >> DISTRO = "nodistro"
> >> DISTRO_VERSION = "nodistro.0"
> >> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard
> >> vfpv4 cortexa7"
> >> TARGET_FPU = "vfp-vfpv4-neon"
> >> meta-raspberrypi = "kraj/master:a903a9cd18ae556121265da93ed74f857944a0da"
> >> meta = "kraj/master:602e512b92bcc78403144fedeb4211bbf56ff1c8"
> >>
> >> NOTE: Preparing RunQueue
> >> NOTE: Executing SetScene Tasks
> >> NOTE: Executing RunQueue Tasks
> >> NOTE: Tasks Summary: Attempted 454 tasks of which 315 didn't need to
> >> be rerun and all succeeded.
> >
> > Here is my build configuration.
> >
> > Build Configuration:
> > BB_VERSION = "1.28.0"
> > BUILD_SYS = "x86_64-linux"
> > NATIVELSBSTRING = "Arch-rolling"
> > TARGET_SYS = "arm-poky-linux-gnueabi"
> > MACHINE = "raspberrypi2"
> > DISTRO = "poky"
> > DISTRO_VERSION = "2.0"
> > TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard vfpv4
> > cortexa7"
> > TARGET_FPU = "vfp-vfpv4-neon"
> > meta
> > meta-yocto
> > meta-yocto-bsp = "master:eac61f37e36099f74485dab398b57f3812826d17"
> > meta-raspberrypi = "master:48da0cdc5fb147a20b41a77b2dfeef4efd483b32"
> > meta-oe
> > meta-multimedia = "master:f4533380c8a5c1d229f692222ee0c2ef9d187ef8"
> >
> >
> > But anyway can you please check in your userland install dir for the header I'm
> > missing? Or in sysroot.
>
> its part of userland itself so no other package should be needed and
> not required in sysroot
>
> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/package/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/packages-split/userland-dbg/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/khronos/wayland-dispmanx-server-protocol.h
> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
This is odd... what revision of userland are you using? The one on current
meta-rpi master?
--
Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 20:33 ` Andrei Gherzan
@ 2015-10-03 20:40 ` Andrei Gherzan
2015-10-03 20:45 ` Khem Raj
2015-10-03 20:46 ` Andrei Gherzan
0 siblings, 2 replies; 26+ messages in thread
From: Andrei Gherzan @ 2015-10-03 20:40 UTC (permalink / raw)
To: Khem Raj; +Cc: yocto@yoctoproject.org
On Sat, Oct 03, 2015 at 10:33:12PM +0200, Andrei Gherzan wrote:
> On Sat, Oct 03, 2015 at 01:31:24PM -0700, Khem Raj wrote:
> > On Sat, Oct 3, 2015 at 1:11 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> > > On Sat, Oct 03, 2015 at 01:06:55PM -0700, Khem Raj wrote:
> > >> On Sat, Oct 3, 2015 at 12:18 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> > >> > I tested with and without - same result.
> > >> > DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
> > >> > usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
> > >> > libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
> > >> > libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
> > >> > libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm
> > >> > libc-locales libc-locale-code libc-memusage libc-nis
> > >> > libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
> > >> > libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
> > >> > libc-posix-regexp-glibc libc-posix-wchar-io largefile
> > >> > opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
> > >> >
> > >> > No modification to the default poky distro.
> > >>
> > >> hmm I am using angstrom and it works there and for verification I now
> > >> tried with OE-Core ( alone ) it works there too, can you check some
> > >> other parameters that are there in your sandbox ? here is my build
> > >>
> > >> MACHINE=raspberrypi2 bitbake userland
> > >> Parsing recipes: 100%
> > >> |######################################################################################################################################################################################################|
> > >> ETA: 00:00:00
> > >> Parsing of 918 .bb files complete (0 cached, 918 parsed). 1350
> > >> targets, 59 skipped, 0 masked, 0 errors.
> > >> NOTE: Resolving any missing task queue dependencies
> > >>
> > >> Build Configuration:
> > >> BB_VERSION = "1.28.0"
> > >> BUILD_SYS = "x86_64-linux"
> > >> NATIVELSBSTRING = "Ubuntu-14.04"
> > >> TARGET_SYS = "arm-oe-linux-gnueabi"
> > >> MACHINE = "raspberrypi2"
> > >> DISTRO = "nodistro"
> > >> DISTRO_VERSION = "nodistro.0"
> > >> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard
> > >> vfpv4 cortexa7"
> > >> TARGET_FPU = "vfp-vfpv4-neon"
> > >> meta-raspberrypi = "kraj/master:a903a9cd18ae556121265da93ed74f857944a0da"
> > >> meta = "kraj/master:602e512b92bcc78403144fedeb4211bbf56ff1c8"
> > >>
> > >> NOTE: Preparing RunQueue
> > >> NOTE: Executing SetScene Tasks
> > >> NOTE: Executing RunQueue Tasks
> > >> NOTE: Tasks Summary: Attempted 454 tasks of which 315 didn't need to
> > >> be rerun and all succeeded.
> > >
> > > Here is my build configuration.
> > >
> > > Build Configuration:
> > > BB_VERSION = "1.28.0"
> > > BUILD_SYS = "x86_64-linux"
> > > NATIVELSBSTRING = "Arch-rolling"
> > > TARGET_SYS = "arm-poky-linux-gnueabi"
> > > MACHINE = "raspberrypi2"
> > > DISTRO = "poky"
> > > DISTRO_VERSION = "2.0"
> > > TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard vfpv4
> > > cortexa7"
> > > TARGET_FPU = "vfp-vfpv4-neon"
> > > meta
> > > meta-yocto
> > > meta-yocto-bsp = "master:eac61f37e36099f74485dab398b57f3812826d17"
> > > meta-raspberrypi = "master:48da0cdc5fb147a20b41a77b2dfeef4efd483b32"
> > > meta-oe
> > > meta-multimedia = "master:f4533380c8a5c1d229f692222ee0c2ef9d187ef8"
> > >
> > >
> > > But anyway can you please check in your userland install dir for the header I'm
> > > missing? Or in sysroot.
> >
> > its part of userland itself so no other package should be needed and
> > not required in sysroot
> >
> > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/package/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/packages-split/userland-dbg/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/khronos/wayland-dispmanx-server-protocol.h
> > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
>
> This is odd... what revision of userland are you using? The one on current
> meta-rpi master?
>
> --
> Andrei Gherzan
This is not even in the current HEAD of master in userland official repository:
https://github.com/raspberrypi/userland/tree/master/interface/vmcs_host
Are you sure you don't inject the file somehow? I really don't know what's
going on.
--
Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 20:40 ` Andrei Gherzan
@ 2015-10-03 20:45 ` Khem Raj
2015-10-03 20:46 ` Andrei Gherzan
1 sibling, 0 replies; 26+ messages in thread
From: Khem Raj @ 2015-10-03 20:45 UTC (permalink / raw)
To: Andrei Gherzan; +Cc: yocto@yoctoproject.org
On Sat, Oct 3, 2015 at 1:40 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> On Sat, Oct 03, 2015 at 10:33:12PM +0200, Andrei Gherzan wrote:
>> On Sat, Oct 03, 2015 at 01:31:24PM -0700, Khem Raj wrote:
>> > On Sat, Oct 3, 2015 at 1:11 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
>> > > On Sat, Oct 03, 2015 at 01:06:55PM -0700, Khem Raj wrote:
>> > >> On Sat, Oct 3, 2015 at 12:18 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
>> > >> > I tested with and without - same result.
>> > >> > DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
>> > >> > usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
>> > >> > libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
>> > >> > libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
>> > >> > libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm
>> > >> > libc-locales libc-locale-code libc-memusage libc-nis
>> > >> > libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
>> > >> > libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
>> > >> > libc-posix-regexp-glibc libc-posix-wchar-io largefile
>> > >> > opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
>> > >> >
>> > >> > No modification to the default poky distro.
>> > >>
>> > >> hmm I am using angstrom and it works there and for verification I now
>> > >> tried with OE-Core ( alone ) it works there too, can you check some
>> > >> other parameters that are there in your sandbox ? here is my build
>> > >>
>> > >> MACHINE=raspberrypi2 bitbake userland
>> > >> Parsing recipes: 100%
>> > >> |######################################################################################################################################################################################################|
>> > >> ETA: 00:00:00
>> > >> Parsing of 918 .bb files complete (0 cached, 918 parsed). 1350
>> > >> targets, 59 skipped, 0 masked, 0 errors.
>> > >> NOTE: Resolving any missing task queue dependencies
>> > >>
>> > >> Build Configuration:
>> > >> BB_VERSION = "1.28.0"
>> > >> BUILD_SYS = "x86_64-linux"
>> > >> NATIVELSBSTRING = "Ubuntu-14.04"
>> > >> TARGET_SYS = "arm-oe-linux-gnueabi"
>> > >> MACHINE = "raspberrypi2"
>> > >> DISTRO = "nodistro"
>> > >> DISTRO_VERSION = "nodistro.0"
>> > >> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard
>> > >> vfpv4 cortexa7"
>> > >> TARGET_FPU = "vfp-vfpv4-neon"
>> > >> meta-raspberrypi = "kraj/master:a903a9cd18ae556121265da93ed74f857944a0da"
>> > >> meta = "kraj/master:602e512b92bcc78403144fedeb4211bbf56ff1c8"
>> > >>
>> > >> NOTE: Preparing RunQueue
>> > >> NOTE: Executing SetScene Tasks
>> > >> NOTE: Executing RunQueue Tasks
>> > >> NOTE: Tasks Summary: Attempted 454 tasks of which 315 didn't need to
>> > >> be rerun and all succeeded.
>> > >
>> > > Here is my build configuration.
>> > >
>> > > Build Configuration:
>> > > BB_VERSION = "1.28.0"
>> > > BUILD_SYS = "x86_64-linux"
>> > > NATIVELSBSTRING = "Arch-rolling"
>> > > TARGET_SYS = "arm-poky-linux-gnueabi"
>> > > MACHINE = "raspberrypi2"
>> > > DISTRO = "poky"
>> > > DISTRO_VERSION = "2.0"
>> > > TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard vfpv4
>> > > cortexa7"
>> > > TARGET_FPU = "vfp-vfpv4-neon"
>> > > meta
>> > > meta-yocto
>> > > meta-yocto-bsp = "master:eac61f37e36099f74485dab398b57f3812826d17"
>> > > meta-raspberrypi = "master:48da0cdc5fb147a20b41a77b2dfeef4efd483b32"
>> > > meta-oe
>> > > meta-multimedia = "master:f4533380c8a5c1d229f692222ee0c2ef9d187ef8"
>> > >
>> > >
>> > > But anyway can you please check in your userland install dir for the header I'm
>> > > missing? Or in sysroot.
>> >
>> > its part of userland itself so no other package should be needed and
>> > not required in sysroot
>> >
>> > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/package/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
>> > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/packages-split/userland-dbg/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
>> > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/khronos/wayland-dispmanx-server-protocol.h
>> > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
>>
>> This is odd... what revision of userland are you using? The one on current
>> meta-rpi master?
>>
>> --
>> Andrei Gherzan
>
> This is not even in the current HEAD of master in userland official repository:
> https://github.com/raspberrypi/userland/tree/master/interface/vmcs_host
>
> Are you sure you don't inject the file somehow? I really don't know what's
> going on.
Well can you build fresh by deleting tmp/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 20:40 ` Andrei Gherzan
2015-10-03 20:45 ` Khem Raj
@ 2015-10-03 20:46 ` Andrei Gherzan
2015-10-03 21:27 ` Andrei Gherzan
1 sibling, 1 reply; 26+ messages in thread
From: Andrei Gherzan @ 2015-10-03 20:46 UTC (permalink / raw)
To: Khem Raj; +Cc: yocto@yoctoproject.org
On Sat, Oct 03, 2015 at 10:40:50PM +0200, Andrei Gherzan wrote:
> On Sat, Oct 03, 2015 at 10:33:12PM +0200, Andrei Gherzan wrote:
> > On Sat, Oct 03, 2015 at 01:31:24PM -0700, Khem Raj wrote:
> > > On Sat, Oct 3, 2015 at 1:11 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> > > > On Sat, Oct 03, 2015 at 01:06:55PM -0700, Khem Raj wrote:
> > > >> On Sat, Oct 3, 2015 at 12:18 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> > > >> > I tested with and without - same result.
> > > >> > DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
> > > >> > usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
> > > >> > libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
> > > >> > libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
> > > >> > libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm
> > > >> > libc-locales libc-locale-code libc-memusage libc-nis
> > > >> > libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
> > > >> > libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
> > > >> > libc-posix-regexp-glibc libc-posix-wchar-io largefile
> > > >> > opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
> > > >> >
> > > >> > No modification to the default poky distro.
> > > >>
> > > >> hmm I am using angstrom and it works there and for verification I now
> > > >> tried with OE-Core ( alone ) it works there too, can you check some
> > > >> other parameters that are there in your sandbox ? here is my build
> > > >>
> > > >> MACHINE=raspberrypi2 bitbake userland
> > > >> Parsing recipes: 100%
> > > >> |######################################################################################################################################################################################################|
> > > >> ETA: 00:00:00
> > > >> Parsing of 918 .bb files complete (0 cached, 918 parsed). 1350
> > > >> targets, 59 skipped, 0 masked, 0 errors.
> > > >> NOTE: Resolving any missing task queue dependencies
> > > >>
> > > >> Build Configuration:
> > > >> BB_VERSION = "1.28.0"
> > > >> BUILD_SYS = "x86_64-linux"
> > > >> NATIVELSBSTRING = "Ubuntu-14.04"
> > > >> TARGET_SYS = "arm-oe-linux-gnueabi"
> > > >> MACHINE = "raspberrypi2"
> > > >> DISTRO = "nodistro"
> > > >> DISTRO_VERSION = "nodistro.0"
> > > >> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard
> > > >> vfpv4 cortexa7"
> > > >> TARGET_FPU = "vfp-vfpv4-neon"
> > > >> meta-raspberrypi = "kraj/master:a903a9cd18ae556121265da93ed74f857944a0da"
> > > >> meta = "kraj/master:602e512b92bcc78403144fedeb4211bbf56ff1c8"
> > > >>
> > > >> NOTE: Preparing RunQueue
> > > >> NOTE: Executing SetScene Tasks
> > > >> NOTE: Executing RunQueue Tasks
> > > >> NOTE: Tasks Summary: Attempted 454 tasks of which 315 didn't need to
> > > >> be rerun and all succeeded.
> > > >
> > > > Here is my build configuration.
> > > >
> > > > Build Configuration:
> > > > BB_VERSION = "1.28.0"
> > > > BUILD_SYS = "x86_64-linux"
> > > > NATIVELSBSTRING = "Arch-rolling"
> > > > TARGET_SYS = "arm-poky-linux-gnueabi"
> > > > MACHINE = "raspberrypi2"
> > > > DISTRO = "poky"
> > > > DISTRO_VERSION = "2.0"
> > > > TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard vfpv4
> > > > cortexa7"
> > > > TARGET_FPU = "vfp-vfpv4-neon"
> > > > meta
> > > > meta-yocto
> > > > meta-yocto-bsp = "master:eac61f37e36099f74485dab398b57f3812826d17"
> > > > meta-raspberrypi = "master:48da0cdc5fb147a20b41a77b2dfeef4efd483b32"
> > > > meta-oe
> > > > meta-multimedia = "master:f4533380c8a5c1d229f692222ee0c2ef9d187ef8"
> > > >
> > > >
> > > > But anyway can you please check in your userland install dir for the header I'm
> > > > missing? Or in sysroot.
> > >
> > > its part of userland itself so no other package should be needed and
> > > not required in sysroot
> > >
> > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/package/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/packages-split/userland-dbg/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/khronos/wayland-dispmanx-server-protocol.h
> > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> >
> > This is odd... what revision of userland are you using? The one on current
> > meta-rpi master?
> >
> > --
> > Andrei Gherzan
>
> This is not even in the current HEAD of master in userland official repository:
> https://github.com/raspberrypi/userland/tree/master/interface/vmcs_host
>
> Are you sure you don't inject the file somehow? I really don't know what's
> going on.
>
> --
> Andrei Gherzan
I found the mistery. It gets generated in another path:
./build/interface/khronos/wayland-dispmanx-server-protocol.h
Figuring out why.
--
Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 20:46 ` Andrei Gherzan
@ 2015-10-03 21:27 ` Andrei Gherzan
2015-10-03 21:47 ` Khem Raj
0 siblings, 1 reply; 26+ messages in thread
From: Andrei Gherzan @ 2015-10-03 21:27 UTC (permalink / raw)
To: Khem Raj; +Cc: yocto@yoctoproject.org
On Sat, Oct 03, 2015 at 10:46:07PM +0200, Andrei Gherzan wrote:
> On Sat, Oct 03, 2015 at 10:40:50PM +0200, Andrei Gherzan wrote:
> > On Sat, Oct 03, 2015 at 10:33:12PM +0200, Andrei Gherzan wrote:
> > > On Sat, Oct 03, 2015 at 01:31:24PM -0700, Khem Raj wrote:
> > > > On Sat, Oct 3, 2015 at 1:11 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> > > > > On Sat, Oct 03, 2015 at 01:06:55PM -0700, Khem Raj wrote:
> > > > >> On Sat, Oct 3, 2015 at 12:18 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> > > > >> > I tested with and without - same result.
> > > > >> > DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
> > > > >> > usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
> > > > >> > libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
> > > > >> > libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
> > > > >> > libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm
> > > > >> > libc-locales libc-locale-code libc-memusage libc-nis
> > > > >> > libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
> > > > >> > libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
> > > > >> > libc-posix-regexp-glibc libc-posix-wchar-io largefile
> > > > >> > opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
> > > > >> >
> > > > >> > No modification to the default poky distro.
> > > > >>
> > > > >> hmm I am using angstrom and it works there and for verification I now
> > > > >> tried with OE-Core ( alone ) it works there too, can you check some
> > > > >> other parameters that are there in your sandbox ? here is my build
> > > > >>
> > > > >> MACHINE=raspberrypi2 bitbake userland
> > > > >> Parsing recipes: 100%
> > > > >> |######################################################################################################################################################################################################|
> > > > >> ETA: 00:00:00
> > > > >> Parsing of 918 .bb files complete (0 cached, 918 parsed). 1350
> > > > >> targets, 59 skipped, 0 masked, 0 errors.
> > > > >> NOTE: Resolving any missing task queue dependencies
> > > > >>
> > > > >> Build Configuration:
> > > > >> BB_VERSION = "1.28.0"
> > > > >> BUILD_SYS = "x86_64-linux"
> > > > >> NATIVELSBSTRING = "Ubuntu-14.04"
> > > > >> TARGET_SYS = "arm-oe-linux-gnueabi"
> > > > >> MACHINE = "raspberrypi2"
> > > > >> DISTRO = "nodistro"
> > > > >> DISTRO_VERSION = "nodistro.0"
> > > > >> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard
> > > > >> vfpv4 cortexa7"
> > > > >> TARGET_FPU = "vfp-vfpv4-neon"
> > > > >> meta-raspberrypi = "kraj/master:a903a9cd18ae556121265da93ed74f857944a0da"
> > > > >> meta = "kraj/master:602e512b92bcc78403144fedeb4211bbf56ff1c8"
> > > > >>
> > > > >> NOTE: Preparing RunQueue
> > > > >> NOTE: Executing SetScene Tasks
> > > > >> NOTE: Executing RunQueue Tasks
> > > > >> NOTE: Tasks Summary: Attempted 454 tasks of which 315 didn't need to
> > > > >> be rerun and all succeeded.
> > > > >
> > > > > Here is my build configuration.
> > > > >
> > > > > Build Configuration:
> > > > > BB_VERSION = "1.28.0"
> > > > > BUILD_SYS = "x86_64-linux"
> > > > > NATIVELSBSTRING = "Arch-rolling"
> > > > > TARGET_SYS = "arm-poky-linux-gnueabi"
> > > > > MACHINE = "raspberrypi2"
> > > > > DISTRO = "poky"
> > > > > DISTRO_VERSION = "2.0"
> > > > > TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard vfpv4
> > > > > cortexa7"
> > > > > TARGET_FPU = "vfp-vfpv4-neon"
> > > > > meta
> > > > > meta-yocto
> > > > > meta-yocto-bsp = "master:eac61f37e36099f74485dab398b57f3812826d17"
> > > > > meta-raspberrypi = "master:48da0cdc5fb147a20b41a77b2dfeef4efd483b32"
> > > > > meta-oe
> > > > > meta-multimedia = "master:f4533380c8a5c1d229f692222ee0c2ef9d187ef8"
> > > > >
> > > > >
> > > > > But anyway can you please check in your userland install dir for the header I'm
> > > > > missing? Or in sysroot.
> > > >
> > > > its part of userland itself so no other package should be needed and
> > > > not required in sysroot
> > > >
> > > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/package/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> > > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/packages-split/userland-dbg/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> > > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/khronos/wayland-dispmanx-server-protocol.h
> > > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> > >
> > > This is odd... what revision of userland are you using? The one on current
> > > meta-rpi master?
> > >
> > > --
> > > Andrei Gherzan
> >
> > This is not even in the current HEAD of master in userland official repository:
> > https://github.com/raspberrypi/userland/tree/master/interface/vmcs_host
> >
> > Are you sure you don't inject the file somehow? I really don't know what's
> > going on.
> >
> > --
> > Andrei Gherzan
>
> I found the mistery. It gets generated in another path:
> ./build/interface/khronos/wayland-dispmanx-server-protocol.h
>
> Figuring out why.
>
> --
> Andrei Gherzan
I managed to get to the bottom of this. It's a racing issue. Basically, with
MAKE_PARALLEL high enough, the
add_library(EGL ${SHARED} ${EGL_SOURCE})
in git/interface/khronos/CMakeLists.txt gets to run before the header is
generated. No dependency configured for that. And in the sources of EGL there
is egl_wayland.c which includes the generated header by the call:
wayland_add_protocol_server(
EGL_SOURCE
../../interface/wayland/dispmanx.xml
dispmanx
)
Any idea how to define this dependency? What is the value of your PARALLEL_MAKE
?
--
Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 21:27 ` Andrei Gherzan
@ 2015-10-03 21:47 ` Khem Raj
2015-10-03 21:53 ` Andrei Gherzan
0 siblings, 1 reply; 26+ messages in thread
From: Khem Raj @ 2015-10-03 21:47 UTC (permalink / raw)
To: Andrei Gherzan; +Cc: yocto@yoctoproject.org
On Sat, Oct 3, 2015 at 2:27 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> On Sat, Oct 03, 2015 at 10:46:07PM +0200, Andrei Gherzan wrote:
>> On Sat, Oct 03, 2015 at 10:40:50PM +0200, Andrei Gherzan wrote:
>> > On Sat, Oct 03, 2015 at 10:33:12PM +0200, Andrei Gherzan wrote:
>> > > On Sat, Oct 03, 2015 at 01:31:24PM -0700, Khem Raj wrote:
>> > > > On Sat, Oct 3, 2015 at 1:11 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
>> > > > > On Sat, Oct 03, 2015 at 01:06:55PM -0700, Khem Raj wrote:
>> > > > >> On Sat, Oct 3, 2015 at 12:18 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
>> > > > >> > I tested with and without - same result.
>> > > > >> > DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
>> > > > >> > usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
>> > > > >> > libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
>> > > > >> > libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
>> > > > >> > libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm
>> > > > >> > libc-locales libc-locale-code libc-memusage libc-nis
>> > > > >> > libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
>> > > > >> > libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
>> > > > >> > libc-posix-regexp-glibc libc-posix-wchar-io largefile
>> > > > >> > opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
>> > > > >> >
>> > > > >> > No modification to the default poky distro.
>> > > > >>
>> > > > >> hmm I am using angstrom and it works there and for verification I now
>> > > > >> tried with OE-Core ( alone ) it works there too, can you check some
>> > > > >> other parameters that are there in your sandbox ? here is my build
>> > > > >>
>> > > > >> MACHINE=raspberrypi2 bitbake userland
>> > > > >> Parsing recipes: 100%
>> > > > >> |######################################################################################################################################################################################################|
>> > > > >> ETA: 00:00:00
>> > > > >> Parsing of 918 .bb files complete (0 cached, 918 parsed). 1350
>> > > > >> targets, 59 skipped, 0 masked, 0 errors.
>> > > > >> NOTE: Resolving any missing task queue dependencies
>> > > > >>
>> > > > >> Build Configuration:
>> > > > >> BB_VERSION = "1.28.0"
>> > > > >> BUILD_SYS = "x86_64-linux"
>> > > > >> NATIVELSBSTRING = "Ubuntu-14.04"
>> > > > >> TARGET_SYS = "arm-oe-linux-gnueabi"
>> > > > >> MACHINE = "raspberrypi2"
>> > > > >> DISTRO = "nodistro"
>> > > > >> DISTRO_VERSION = "nodistro.0"
>> > > > >> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard
>> > > > >> vfpv4 cortexa7"
>> > > > >> TARGET_FPU = "vfp-vfpv4-neon"
>> > > > >> meta-raspberrypi = "kraj/master:a903a9cd18ae556121265da93ed74f857944a0da"
>> > > > >> meta = "kraj/master:602e512b92bcc78403144fedeb4211bbf56ff1c8"
>> > > > >>
>> > > > >> NOTE: Preparing RunQueue
>> > > > >> NOTE: Executing SetScene Tasks
>> > > > >> NOTE: Executing RunQueue Tasks
>> > > > >> NOTE: Tasks Summary: Attempted 454 tasks of which 315 didn't need to
>> > > > >> be rerun and all succeeded.
>> > > > >
>> > > > > Here is my build configuration.
>> > > > >
>> > > > > Build Configuration:
>> > > > > BB_VERSION = "1.28.0"
>> > > > > BUILD_SYS = "x86_64-linux"
>> > > > > NATIVELSBSTRING = "Arch-rolling"
>> > > > > TARGET_SYS = "arm-poky-linux-gnueabi"
>> > > > > MACHINE = "raspberrypi2"
>> > > > > DISTRO = "poky"
>> > > > > DISTRO_VERSION = "2.0"
>> > > > > TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard vfpv4
>> > > > > cortexa7"
>> > > > > TARGET_FPU = "vfp-vfpv4-neon"
>> > > > > meta
>> > > > > meta-yocto
>> > > > > meta-yocto-bsp = "master:eac61f37e36099f74485dab398b57f3812826d17"
>> > > > > meta-raspberrypi = "master:48da0cdc5fb147a20b41a77b2dfeef4efd483b32"
>> > > > > meta-oe
>> > > > > meta-multimedia = "master:f4533380c8a5c1d229f692222ee0c2ef9d187ef8"
>> > > > >
>> > > > >
>> > > > > But anyway can you please check in your userland install dir for the header I'm
>> > > > > missing? Or in sysroot.
>> > > >
>> > > > its part of userland itself so no other package should be needed and
>> > > > not required in sysroot
>> > > >
>> > > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/package/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
>> > > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/packages-split/userland-dbg/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
>> > > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/khronos/wayland-dispmanx-server-protocol.h
>> > > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
>> > >
>> > > This is odd... what revision of userland are you using? The one on current
>> > > meta-rpi master?
>> > >
>> > > --
>> > > Andrei Gherzan
>> >
>> > This is not even in the current HEAD of master in userland official repository:
>> > https://github.com/raspberrypi/userland/tree/master/interface/vmcs_host
>> >
>> > Are you sure you don't inject the file somehow? I really don't know what's
>> > going on.
>> >
>> > --
>> > Andrei Gherzan
>>
>> I found the mistery. It gets generated in another path:
>> ./build/interface/khronos/wayland-dispmanx-server-protocol.h
>>
>> Figuring out why.
>>
>> --
>> Andrei Gherzan
>
> I managed to get to the bottom of this. It's a racing issue. Basically, with
> MAKE_PARALLEL high enough, the
>
> add_library(EGL ${SHARED} ${EGL_SOURCE})
>
> in git/interface/khronos/CMakeLists.txt gets to run before the header is
> generated. No dependency configured for that. And in the sources of EGL there
> is egl_wayland.c which includes the generated header by the call:
>
> wayland_add_protocol_server(
> EGL_SOURCE
> ../../interface/wayland/dispmanx.xml
> dispmanx
> )
>
> Any idea how to define this dependency? What is the value of your PARALLEL_MAKE
I use -j16, can you add the .h file with path to EGL_SOURCE
> ?
>
> --
> Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 21:47 ` Khem Raj
@ 2015-10-03 21:53 ` Andrei Gherzan
2015-10-13 0:14 ` Joachim Schiele
0 siblings, 1 reply; 26+ messages in thread
From: Andrei Gherzan @ 2015-10-03 21:53 UTC (permalink / raw)
To: Khem Raj; +Cc: yocto@yoctoproject.org
On Sat, Oct 03, 2015 at 02:47:24PM -0700, Khem Raj wrote:
> On Sat, Oct 3, 2015 at 2:27 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> > On Sat, Oct 03, 2015 at 10:46:07PM +0200, Andrei Gherzan wrote:
> >> On Sat, Oct 03, 2015 at 10:40:50PM +0200, Andrei Gherzan wrote:
> >> > On Sat, Oct 03, 2015 at 10:33:12PM +0200, Andrei Gherzan wrote:
> >> > > On Sat, Oct 03, 2015 at 01:31:24PM -0700, Khem Raj wrote:
> >> > > > On Sat, Oct 3, 2015 at 1:11 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> >> > > > > On Sat, Oct 03, 2015 at 01:06:55PM -0700, Khem Raj wrote:
> >> > > > >> On Sat, Oct 3, 2015 at 12:18 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> >> > > > >> > I tested with and without - same result.
> >> > > > >> > DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
> >> > > > >> > usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
> >> > > > >> > libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
> >> > > > >> > libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
> >> > > > >> > libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm
> >> > > > >> > libc-locales libc-locale-code libc-memusage libc-nis
> >> > > > >> > libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
> >> > > > >> > libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
> >> > > > >> > libc-posix-regexp-glibc libc-posix-wchar-io largefile
> >> > > > >> > opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
> >> > > > >> >
> >> > > > >> > No modification to the default poky distro.
> >> > > > >>
> >> > > > >> hmm I am using angstrom and it works there and for verification I now
> >> > > > >> tried with OE-Core ( alone ) it works there too, can you check some
> >> > > > >> other parameters that are there in your sandbox ? here is my build
> >> > > > >>
> >> > > > >> MACHINE=raspberrypi2 bitbake userland
> >> > > > >> Parsing recipes: 100%
> >> > > > >> |######################################################################################################################################################################################################|
> >> > > > >> ETA: 00:00:00
> >> > > > >> Parsing of 918 .bb files complete (0 cached, 918 parsed). 1350
> >> > > > >> targets, 59 skipped, 0 masked, 0 errors.
> >> > > > >> NOTE: Resolving any missing task queue dependencies
> >> > > > >>
> >> > > > >> Build Configuration:
> >> > > > >> BB_VERSION = "1.28.0"
> >> > > > >> BUILD_SYS = "x86_64-linux"
> >> > > > >> NATIVELSBSTRING = "Ubuntu-14.04"
> >> > > > >> TARGET_SYS = "arm-oe-linux-gnueabi"
> >> > > > >> MACHINE = "raspberrypi2"
> >> > > > >> DISTRO = "nodistro"
> >> > > > >> DISTRO_VERSION = "nodistro.0"
> >> > > > >> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard
> >> > > > >> vfpv4 cortexa7"
> >> > > > >> TARGET_FPU = "vfp-vfpv4-neon"
> >> > > > >> meta-raspberrypi = "kraj/master:a903a9cd18ae556121265da93ed74f857944a0da"
> >> > > > >> meta = "kraj/master:602e512b92bcc78403144fedeb4211bbf56ff1c8"
> >> > > > >>
> >> > > > >> NOTE: Preparing RunQueue
> >> > > > >> NOTE: Executing SetScene Tasks
> >> > > > >> NOTE: Executing RunQueue Tasks
> >> > > > >> NOTE: Tasks Summary: Attempted 454 tasks of which 315 didn't need to
> >> > > > >> be rerun and all succeeded.
> >> > > > >
> >> > > > > Here is my build configuration.
> >> > > > >
> >> > > > > Build Configuration:
> >> > > > > BB_VERSION = "1.28.0"
> >> > > > > BUILD_SYS = "x86_64-linux"
> >> > > > > NATIVELSBSTRING = "Arch-rolling"
> >> > > > > TARGET_SYS = "arm-poky-linux-gnueabi"
> >> > > > > MACHINE = "raspberrypi2"
> >> > > > > DISTRO = "poky"
> >> > > > > DISTRO_VERSION = "2.0"
> >> > > > > TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard vfpv4
> >> > > > > cortexa7"
> >> > > > > TARGET_FPU = "vfp-vfpv4-neon"
> >> > > > > meta
> >> > > > > meta-yocto
> >> > > > > meta-yocto-bsp = "master:eac61f37e36099f74485dab398b57f3812826d17"
> >> > > > > meta-raspberrypi = "master:48da0cdc5fb147a20b41a77b2dfeef4efd483b32"
> >> > > > > meta-oe
> >> > > > > meta-multimedia = "master:f4533380c8a5c1d229f692222ee0c2ef9d187ef8"
> >> > > > >
> >> > > > >
> >> > > > > But anyway can you please check in your userland install dir for the header I'm
> >> > > > > missing? Or in sysroot.
> >> > > >
> >> > > > its part of userland itself so no other package should be needed and
> >> > > > not required in sysroot
> >> > > >
> >> > > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/package/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> >> > > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/packages-split/userland-dbg/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> >> > > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/khronos/wayland-dispmanx-server-protocol.h
> >> > > > ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> >> > >
> >> > > This is odd... what revision of userland are you using? The one on current
> >> > > meta-rpi master?
> >> > >
> >> > > --
> >> > > Andrei Gherzan
> >> >
> >> > This is not even in the current HEAD of master in userland official repository:
> >> > https://github.com/raspberrypi/userland/tree/master/interface/vmcs_host
> >> >
> >> > Are you sure you don't inject the file somehow? I really don't know what's
> >> > going on.
> >> >
> >> > --
> >> > Andrei Gherzan
> >>
> >> I found the mistery. It gets generated in another path:
> >> ./build/interface/khronos/wayland-dispmanx-server-protocol.h
> >>
> >> Figuring out why.
> >>
> >> --
> >> Andrei Gherzan
> >
> > I managed to get to the bottom of this. It's a racing issue. Basically, with
> > MAKE_PARALLEL high enough, the
> >
> > add_library(EGL ${SHARED} ${EGL_SOURCE})
> >
> > in git/interface/khronos/CMakeLists.txt gets to run before the header is
> > generated. No dependency configured for that. And in the sources of EGL there
> > is egl_wayland.c which includes the generated header by the call:
> >
> > wayland_add_protocol_server(
> > EGL_SOURCE
> > ../../interface/wayland/dispmanx.xml
> > dispmanx
> > )
> >
> > Any idea how to define this dependency? What is the value of your PARALLEL_MAKE
>
> I use -j16, can you add the .h file with path to EGL_SOURCE
Adding the path to EGL_SOURCE won't work because cmake will complain that the
header is not in place. We need a dependency definition.
--
Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 21:53 ` Andrei Gherzan
@ 2015-10-13 0:14 ` Joachim Schiele
2015-10-13 17:13 ` Andrei Gherzan
0 siblings, 1 reply; 26+ messages in thread
From: Joachim Schiele @ 2015-10-13 0:14 UTC (permalink / raw)
To: yocto
On 03.10.2015 23:53, Andrei Gherzan wrote:
> On Sat, Oct 03, 2015 at 02:47:24PM -0700, Khem Raj wrote:
>> On Sat, Oct 3, 2015 at 2:27 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
>>> On Sat, Oct 03, 2015 at 10:46:07PM +0200, Andrei Gherzan wrote:
>>>> On Sat, Oct 03, 2015 at 10:40:50PM +0200, Andrei Gherzan wrote:
>>>>> On Sat, Oct 03, 2015 at 10:33:12PM +0200, Andrei Gherzan wrote:
>>>>>> On Sat, Oct 03, 2015 at 01:31:24PM -0700, Khem Raj wrote:
>>>>>>> On Sat, Oct 3, 2015 at 1:11 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
>>>>>>>> On Sat, Oct 03, 2015 at 01:06:55PM -0700, Khem Raj wrote:
>>>>>>>>> On Sat, Oct 3, 2015 at 12:18 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
>>>>>>>>>> I tested with and without - same result.
>>>>>>>>>> DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
>>>>>>>>>> usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
>>>>>>>>>> libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
>>>>>>>>>> libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
>>>>>>>>>> libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm
>>>>>>>>>> libc-locales libc-locale-code libc-memusage libc-nis
>>>>>>>>>> libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
>>>>>>>>>> libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
>>>>>>>>>> libc-posix-regexp-glibc libc-posix-wchar-io largefile
>>>>>>>>>> opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
>>>>>>>>>>
>>>>>>>>>> No modification to the default poky distro.
>>>>>>>>>
>>>>>>>>> hmm I am using angstrom and it works there and for verification I now
>>>>>>>>> tried with OE-Core ( alone ) it works there too, can you check some
>>>>>>>>> other parameters that are there in your sandbox ? here is my build
>>>>>>>>>
>>>>>>>>> MACHINE=raspberrypi2 bitbake userland
>>>>>>>>> Parsing recipes: 100%
>>>>>>>>> |######################################################################################################################################################################################################|
>>>>>>>>> ETA: 00:00:00
>>>>>>>>> Parsing of 918 .bb files complete (0 cached, 918 parsed). 1350
>>>>>>>>> targets, 59 skipped, 0 masked, 0 errors.
>>>>>>>>> NOTE: Resolving any missing task queue dependencies
>>>>>>>>>
>>>>>>>>> Build Configuration:
>>>>>>>>> BB_VERSION = "1.28.0"
>>>>>>>>> BUILD_SYS = "x86_64-linux"
>>>>>>>>> NATIVELSBSTRING = "Ubuntu-14.04"
>>>>>>>>> TARGET_SYS = "arm-oe-linux-gnueabi"
>>>>>>>>> MACHINE = "raspberrypi2"
>>>>>>>>> DISTRO = "nodistro"
>>>>>>>>> DISTRO_VERSION = "nodistro.0"
>>>>>>>>> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard
>>>>>>>>> vfpv4 cortexa7"
>>>>>>>>> TARGET_FPU = "vfp-vfpv4-neon"
>>>>>>>>> meta-raspberrypi = "kraj/master:a903a9cd18ae556121265da93ed74f857944a0da"
>>>>>>>>> meta = "kraj/master:602e512b92bcc78403144fedeb4211bbf56ff1c8"
>>>>>>>>>
>>>>>>>>> NOTE: Preparing RunQueue
>>>>>>>>> NOTE: Executing SetScene Tasks
>>>>>>>>> NOTE: Executing RunQueue Tasks
>>>>>>>>> NOTE: Tasks Summary: Attempted 454 tasks of which 315 didn't need to
>>>>>>>>> be rerun and all succeeded.
>>>>>>>>
>>>>>>>> Here is my build configuration.
>>>>>>>>
>>>>>>>> Build Configuration:
>>>>>>>> BB_VERSION = "1.28.0"
>>>>>>>> BUILD_SYS = "x86_64-linux"
>>>>>>>> NATIVELSBSTRING = "Arch-rolling"
>>>>>>>> TARGET_SYS = "arm-poky-linux-gnueabi"
>>>>>>>> MACHINE = "raspberrypi2"
>>>>>>>> DISTRO = "poky"
>>>>>>>> DISTRO_VERSION = "2.0"
>>>>>>>> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard vfpv4
>>>>>>>> cortexa7"
>>>>>>>> TARGET_FPU = "vfp-vfpv4-neon"
>>>>>>>> meta
>>>>>>>> meta-yocto
>>>>>>>> meta-yocto-bsp = "master:eac61f37e36099f74485dab398b57f3812826d17"
>>>>>>>> meta-raspberrypi = "master:48da0cdc5fb147a20b41a77b2dfeef4efd483b32"
>>>>>>>> meta-oe
>>>>>>>> meta-multimedia = "master:f4533380c8a5c1d229f692222ee0c2ef9d187ef8"
>>>>>>>>
>>>>>>>>
>>>>>>>> But anyway can you please check in your userland install dir for the header I'm
>>>>>>>> missing? Or in sysroot.
>>>>>>>
>>>>>>> its part of userland itself so no other package should be needed and
>>>>>>> not required in sysroot
>>>>>>>
>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/package/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/packages-split/userland-dbg/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/khronos/wayland-dispmanx-server-protocol.h
>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
>>>>>>
>>>>>> This is odd... what revision of userland are you using? The one on current
>>>>>> meta-rpi master?
>>>>>>
>>>>>> --
>>>>>> Andrei Gherzan
>>>>>
>>>>> This is not even in the current HEAD of master in userland official repository:
>>>>> https://github.com/raspberrypi/userland/tree/master/interface/vmcs_host
>>>>>
>>>>> Are you sure you don't inject the file somehow? I really don't know what's
>>>>> going on.
>>>>>
>>>>> --
>>>>> Andrei Gherzan
>>>>
>>>> I found the mistery. It gets generated in another path:
>>>> ./build/interface/khronos/wayland-dispmanx-server-protocol.h
>>>>
>>>> Figuring out why.
>>>>
>>>> --
>>>> Andrei Gherzan
>>>
>>> I managed to get to the bottom of this. It's a racing issue. Basically, with
>>> MAKE_PARALLEL high enough, the
>>>
>>> add_library(EGL ${SHARED} ${EGL_SOURCE})
>>>
>>> in git/interface/khronos/CMakeLists.txt gets to run before the header is
>>> generated. No dependency configured for that. And in the sources of EGL there
>>> is egl_wayland.c which includes the generated header by the call:
>>>
>>> wayland_add_protocol_server(
>>> EGL_SOURCE
>>> ../../interface/wayland/dispmanx.xml
>>> dispmanx
>>> )
>>>
>>> Any idea how to define this dependency? What is the value of your PARALLEL_MAKE
>>
>> I use -j16, can you add the .h file with path to EGL_SOURCE
>
> Adding the path to EGL_SOURCE won't work because cmake will complain that the
> header is not in place. We need a dependency definition.
>
> --
> Andrei Gherzan
>
in this file:
./tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/egl.pc"
i replaced
Cflags: -I${includedir}/vc -I${includedir}/interface
-I${includedir}/interface/vcos -I${includedir}/interface/vcos/pthreads
with that
Cflags: -I${includedir}/vc -I${includedir}/interface
-I${includedir}/interface/vcos -I${includedir}/interface/vcos/pthreads
-I../build/interface/khronos/
(basically adding -I../build/interface/khronos/)
IIRC that worked for me. you can give that a try at least ;-)
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-13 0:14 ` Joachim Schiele
@ 2015-10-13 17:13 ` Andrei Gherzan
2015-10-15 14:57 ` Joachim Schiele
0 siblings, 1 reply; 26+ messages in thread
From: Andrei Gherzan @ 2015-10-13 17:13 UTC (permalink / raw)
To: Joachim Schiele; +Cc: yocto
On Tue, Oct 13, 2015 at 02:14:28AM +0200, Joachim Schiele wrote:
> On 03.10.2015 23:53, Andrei Gherzan wrote:
> > On Sat, Oct 03, 2015 at 02:47:24PM -0700, Khem Raj wrote:
> >> On Sat, Oct 3, 2015 at 2:27 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> >>> On Sat, Oct 03, 2015 at 10:46:07PM +0200, Andrei Gherzan wrote:
> >>>> On Sat, Oct 03, 2015 at 10:40:50PM +0200, Andrei Gherzan wrote:
> >>>>> On Sat, Oct 03, 2015 at 10:33:12PM +0200, Andrei Gherzan wrote:
> >>>>>> On Sat, Oct 03, 2015 at 01:31:24PM -0700, Khem Raj wrote:
> >>>>>>> On Sat, Oct 3, 2015 at 1:11 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> >>>>>>>> On Sat, Oct 03, 2015 at 01:06:55PM -0700, Khem Raj wrote:
> >>>>>>>>> On Sat, Oct 3, 2015 at 12:18 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> >>>>>>>>>> I tested with and without - same result.
> >>>>>>>>>> DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
> >>>>>>>>>> usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
> >>>>>>>>>> libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
> >>>>>>>>>> libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
> >>>>>>>>>> libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm
> >>>>>>>>>> libc-locales libc-locale-code libc-memusage libc-nis
> >>>>>>>>>> libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
> >>>>>>>>>> libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
> >>>>>>>>>> libc-posix-regexp-glibc libc-posix-wchar-io largefile
> >>>>>>>>>> opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
> >>>>>>>>>>
> >>>>>>>>>> No modification to the default poky distro.
> >>>>>>>>>
> >>>>>>>>> hmm I am using angstrom and it works there and for verification I now
> >>>>>>>>> tried with OE-Core ( alone ) it works there too, can you check some
> >>>>>>>>> other parameters that are there in your sandbox ? here is my build
> >>>>>>>>>
> >>>>>>>>> MACHINE=raspberrypi2 bitbake userland
> >>>>>>>>> Parsing recipes: 100%
> >>>>>>>>> |######################################################################################################################################################################################################|
> >>>>>>>>> ETA: 00:00:00
> >>>>>>>>> Parsing of 918 .bb files complete (0 cached, 918 parsed). 1350
> >>>>>>>>> targets, 59 skipped, 0 masked, 0 errors.
> >>>>>>>>> NOTE: Resolving any missing task queue dependencies
> >>>>>>>>>
> >>>>>>>>> Build Configuration:
> >>>>>>>>> BB_VERSION = "1.28.0"
> >>>>>>>>> BUILD_SYS = "x86_64-linux"
> >>>>>>>>> NATIVELSBSTRING = "Ubuntu-14.04"
> >>>>>>>>> TARGET_SYS = "arm-oe-linux-gnueabi"
> >>>>>>>>> MACHINE = "raspberrypi2"
> >>>>>>>>> DISTRO = "nodistro"
> >>>>>>>>> DISTRO_VERSION = "nodistro.0"
> >>>>>>>>> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard
> >>>>>>>>> vfpv4 cortexa7"
> >>>>>>>>> TARGET_FPU = "vfp-vfpv4-neon"
> >>>>>>>>> meta-raspberrypi = "kraj/master:a903a9cd18ae556121265da93ed74f857944a0da"
> >>>>>>>>> meta = "kraj/master:602e512b92bcc78403144fedeb4211bbf56ff1c8"
> >>>>>>>>>
> >>>>>>>>> NOTE: Preparing RunQueue
> >>>>>>>>> NOTE: Executing SetScene Tasks
> >>>>>>>>> NOTE: Executing RunQueue Tasks
> >>>>>>>>> NOTE: Tasks Summary: Attempted 454 tasks of which 315 didn't need to
> >>>>>>>>> be rerun and all succeeded.
> >>>>>>>>
> >>>>>>>> Here is my build configuration.
> >>>>>>>>
> >>>>>>>> Build Configuration:
> >>>>>>>> BB_VERSION = "1.28.0"
> >>>>>>>> BUILD_SYS = "x86_64-linux"
> >>>>>>>> NATIVELSBSTRING = "Arch-rolling"
> >>>>>>>> TARGET_SYS = "arm-poky-linux-gnueabi"
> >>>>>>>> MACHINE = "raspberrypi2"
> >>>>>>>> DISTRO = "poky"
> >>>>>>>> DISTRO_VERSION = "2.0"
> >>>>>>>> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard vfpv4
> >>>>>>>> cortexa7"
> >>>>>>>> TARGET_FPU = "vfp-vfpv4-neon"
> >>>>>>>> meta
> >>>>>>>> meta-yocto
> >>>>>>>> meta-yocto-bsp = "master:eac61f37e36099f74485dab398b57f3812826d17"
> >>>>>>>> meta-raspberrypi = "master:48da0cdc5fb147a20b41a77b2dfeef4efd483b32"
> >>>>>>>> meta-oe
> >>>>>>>> meta-multimedia = "master:f4533380c8a5c1d229f692222ee0c2ef9d187ef8"
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> But anyway can you please check in your userland install dir for the header I'm
> >>>>>>>> missing? Or in sysroot.
> >>>>>>>
> >>>>>>> its part of userland itself so no other package should be needed and
> >>>>>>> not required in sysroot
> >>>>>>>
> >>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/package/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> >>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/packages-split/userland-dbg/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> >>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/khronos/wayland-dispmanx-server-protocol.h
> >>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> >>>>>>
> >>>>>> This is odd... what revision of userland are you using? The one on current
> >>>>>> meta-rpi master?
> >>>>>>
> >>>>>> --
> >>>>>> Andrei Gherzan
> >>>>>
> >>>>> This is not even in the current HEAD of master in userland official repository:
> >>>>> https://github.com/raspberrypi/userland/tree/master/interface/vmcs_host
> >>>>>
> >>>>> Are you sure you don't inject the file somehow? I really don't know what's
> >>>>> going on.
> >>>>>
> >>>>> --
> >>>>> Andrei Gherzan
> >>>>
> >>>> I found the mistery. It gets generated in another path:
> >>>> ./build/interface/khronos/wayland-dispmanx-server-protocol.h
> >>>>
> >>>> Figuring out why.
> >>>>
> >>>> --
> >>>> Andrei Gherzan
> >>>
> >>> I managed to get to the bottom of this. It's a racing issue. Basically, with
> >>> MAKE_PARALLEL high enough, the
> >>>
> >>> add_library(EGL ${SHARED} ${EGL_SOURCE})
> >>>
> >>> in git/interface/khronos/CMakeLists.txt gets to run before the header is
> >>> generated. No dependency configured for that. And in the sources of EGL there
> >>> is egl_wayland.c which includes the generated header by the call:
> >>>
> >>> wayland_add_protocol_server(
> >>> EGL_SOURCE
> >>> ../../interface/wayland/dispmanx.xml
> >>> dispmanx
> >>> )
> >>>
> >>> Any idea how to define this dependency? What is the value of your PARALLEL_MAKE
> >>
> >> I use -j16, can you add the .h file with path to EGL_SOURCE
> >
> > Adding the path to EGL_SOURCE won't work because cmake will complain that the
> > header is not in place. We need a dependency definition.
> >
> > --
> > Andrei Gherzan
> >
>
> in this file:
> ./tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/egl.pc"
>
> i replaced
>
> Cflags: -I${includedir}/vc -I${includedir}/interface
> -I${includedir}/interface/vcos -I${includedir}/interface/vcos/pthreads
>
> with that
>
> Cflags: -I${includedir}/vc -I${includedir}/interface
> -I${includedir}/interface/vcos -I${includedir}/interface/vcos/pthreads
> -I../build/interface/khronos/
>
> (basically adding -I../build/interface/khronos/)
>
> IIRC that worked for me. you can give that a try at least ;-)
>
>
> --
> _______________________________________________
> yocto mailing list
> yocto@yoctoproject.org
> https://lists.yoctoproject.org/listinfo/yocto
Hi Joachim,
I'm not sure how would this help as long as the pc file is generated by
userland and the error I'm facing is while compiling userland.
--
Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-13 17:13 ` Andrei Gherzan
@ 2015-10-15 14:57 ` Joachim Schiele
2015-10-21 12:05 ` Andrei Gherzan
0 siblings, 1 reply; 26+ messages in thread
From: Joachim Schiele @ 2015-10-15 14:57 UTC (permalink / raw)
To: yocto
On 13.10.2015 19:13, Andrei Gherzan wrote:
> On Tue, Oct 13, 2015 at 02:14:28AM +0200, Joachim Schiele wrote:
>> On 03.10.2015 23:53, Andrei Gherzan wrote:
>>> On Sat, Oct 03, 2015 at 02:47:24PM -0700, Khem Raj wrote:
>>>> On Sat, Oct 3, 2015 at 2:27 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
>>>>> On Sat, Oct 03, 2015 at 10:46:07PM +0200, Andrei Gherzan wrote:
>>>>>> On Sat, Oct 03, 2015 at 10:40:50PM +0200, Andrei Gherzan wrote:
>>>>>>> On Sat, Oct 03, 2015 at 10:33:12PM +0200, Andrei Gherzan wrote:
>>>>>>>> On Sat, Oct 03, 2015 at 01:31:24PM -0700, Khem Raj wrote:
>>>>>>>>> On Sat, Oct 3, 2015 at 1:11 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
>>>>>>>>>> On Sat, Oct 03, 2015 at 01:06:55PM -0700, Khem Raj wrote:
>>>>>>>>>>> On Sat, Oct 3, 2015 at 12:18 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
>>>>>>>>>>>> I tested with and without - same result.
>>>>>>>>>>>> DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
>>>>>>>>>>>> usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
>>>>>>>>>>>> libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
>>>>>>>>>>>> libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
>>>>>>>>>>>> libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm
>>>>>>>>>>>> libc-locales libc-locale-code libc-memusage libc-nis
>>>>>>>>>>>> libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
>>>>>>>>>>>> libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
>>>>>>>>>>>> libc-posix-regexp-glibc libc-posix-wchar-io largefile
>>>>>>>>>>>> opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
>>>>>>>>>>>>
>>>>>>>>>>>> No modification to the default poky distro.
>>>>>>>>>>>
>>>>>>>>>>> hmm I am using angstrom and it works there and for verification I now
>>>>>>>>>>> tried with OE-Core ( alone ) it works there too, can you check some
>>>>>>>>>>> other parameters that are there in your sandbox ? here is my build
>>>>>>>>>>>
>>>>>>>>>>> MACHINE=raspberrypi2 bitbake userland
>>>>>>>>>>> Parsing recipes: 100%
>>>>>>>>>>> |######################################################################################################################################################################################################|
>>>>>>>>>>> ETA: 00:00:00
>>>>>>>>>>> Parsing of 918 .bb files complete (0 cached, 918 parsed). 1350
>>>>>>>>>>> targets, 59 skipped, 0 masked, 0 errors.
>>>>>>>>>>> NOTE: Resolving any missing task queue dependencies
>>>>>>>>>>>
>>>>>>>>>>> Build Configuration:
>>>>>>>>>>> BB_VERSION = "1.28.0"
>>>>>>>>>>> BUILD_SYS = "x86_64-linux"
>>>>>>>>>>> NATIVELSBSTRING = "Ubuntu-14.04"
>>>>>>>>>>> TARGET_SYS = "arm-oe-linux-gnueabi"
>>>>>>>>>>> MACHINE = "raspberrypi2"
>>>>>>>>>>> DISTRO = "nodistro"
>>>>>>>>>>> DISTRO_VERSION = "nodistro.0"
>>>>>>>>>>> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard
>>>>>>>>>>> vfpv4 cortexa7"
>>>>>>>>>>> TARGET_FPU = "vfp-vfpv4-neon"
>>>>>>>>>>> meta-raspberrypi = "kraj/master:a903a9cd18ae556121265da93ed74f857944a0da"
>>>>>>>>>>> meta = "kraj/master:602e512b92bcc78403144fedeb4211bbf56ff1c8"
>>>>>>>>>>>
>>>>>>>>>>> NOTE: Preparing RunQueue
>>>>>>>>>>> NOTE: Executing SetScene Tasks
>>>>>>>>>>> NOTE: Executing RunQueue Tasks
>>>>>>>>>>> NOTE: Tasks Summary: Attempted 454 tasks of which 315 didn't need to
>>>>>>>>>>> be rerun and all succeeded.
>>>>>>>>>>
>>>>>>>>>> Here is my build configuration.
>>>>>>>>>>
>>>>>>>>>> Build Configuration:
>>>>>>>>>> BB_VERSION = "1.28.0"
>>>>>>>>>> BUILD_SYS = "x86_64-linux"
>>>>>>>>>> NATIVELSBSTRING = "Arch-rolling"
>>>>>>>>>> TARGET_SYS = "arm-poky-linux-gnueabi"
>>>>>>>>>> MACHINE = "raspberrypi2"
>>>>>>>>>> DISTRO = "poky"
>>>>>>>>>> DISTRO_VERSION = "2.0"
>>>>>>>>>> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard vfpv4
>>>>>>>>>> cortexa7"
>>>>>>>>>> TARGET_FPU = "vfp-vfpv4-neon"
>>>>>>>>>> meta
>>>>>>>>>> meta-yocto
>>>>>>>>>> meta-yocto-bsp = "master:eac61f37e36099f74485dab398b57f3812826d17"
>>>>>>>>>> meta-raspberrypi = "master:48da0cdc5fb147a20b41a77b2dfeef4efd483b32"
>>>>>>>>>> meta-oe
>>>>>>>>>> meta-multimedia = "master:f4533380c8a5c1d229f692222ee0c2ef9d187ef8"
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> But anyway can you please check in your userland install dir for the header I'm
>>>>>>>>>> missing? Or in sysroot.
>>>>>>>>>
>>>>>>>>> its part of userland itself so no other package should be needed and
>>>>>>>>> not required in sysroot
>>>>>>>>>
>>>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/package/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
>>>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/packages-split/userland-dbg/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
>>>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/khronos/wayland-dispmanx-server-protocol.h
>>>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
>>>>>>>>
>>>>>>>> This is odd... what revision of userland are you using? The one on current
>>>>>>>> meta-rpi master?
>>>>>>>>
>>>>>>>> --
>>>>>>>> Andrei Gherzan
>>>>>>>
>>>>>>> This is not even in the current HEAD of master in userland official repository:
>>>>>>> https://github.com/raspberrypi/userland/tree/master/interface/vmcs_host
>>>>>>>
>>>>>>> Are you sure you don't inject the file somehow? I really don't know what's
>>>>>>> going on.
>>>>>>>
>>>>>>> --
>>>>>>> Andrei Gherzan
>>>>>>
>>>>>> I found the mistery. It gets generated in another path:
>>>>>> ./build/interface/khronos/wayland-dispmanx-server-protocol.h
>>>>>>
>>>>>> Figuring out why.
>>>>>>
>>>>>> --
>>>>>> Andrei Gherzan
>>>>>
>>>>> I managed to get to the bottom of this. It's a racing issue. Basically, with
>>>>> MAKE_PARALLEL high enough, the
>>>>>
>>>>> add_library(EGL ${SHARED} ${EGL_SOURCE})
>>>>>
>>>>> in git/interface/khronos/CMakeLists.txt gets to run before the header is
>>>>> generated. No dependency configured for that. And in the sources of EGL there
>>>>> is egl_wayland.c which includes the generated header by the call:
>>>>>
>>>>> wayland_add_protocol_server(
>>>>> EGL_SOURCE
>>>>> ../../interface/wayland/dispmanx.xml
>>>>> dispmanx
>>>>> )
>>>>>
>>>>> Any idea how to define this dependency? What is the value of your PARALLEL_MAKE
>>>>
>>>> I use -j16, can you add the .h file with path to EGL_SOURCE
>>>
>>> Adding the path to EGL_SOURCE won't work because cmake will complain that the
>>> header is not in place. We need a dependency definition.
>>>
>>> --
>>> Andrei Gherzan
>>>
>>
>> in this file:
>> ./tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/egl.pc"
>>
>> i replaced
>>
>> Cflags: -I${includedir}/vc -I${includedir}/interface
>> -I${includedir}/interface/vcos -I${includedir}/interface/vcos/pthreads
>>
>> with that
>>
>> Cflags: -I${includedir}/vc -I${includedir}/interface
>> -I${includedir}/interface/vcos -I${includedir}/interface/vcos/pthreads
>> -I../build/interface/khronos/
>>
>> (basically adding -I../build/interface/khronos/)
>>
>> IIRC that worked for me. you can give that a try at least ;-)
>>
>>
>> --
>> _______________________________________________
>> yocto mailing list
>> yocto@yoctoproject.org
>> https://lists.yoctoproject.org/listinfo/yocto
>
> Hi Joachim,
>
> I'm not sure how would this help as long as the pc file is generated by
> userland and the error I'm facing is while compiling userland.
>
> --
> Andrei Gherzan
>
hi andrei,
you are right, my last answer was actually fror a different problem.
after looking into this issue, which is basically finding a way to make
-j n (with n > 1) work:
--- in short ---
so add a custom dependency:
######### interface/vmcs_host/CMakeLists.txt #########
if (BUILD_WAYLAND)
wayland_add_protocol_server(
VCHOSTIF_SOURCE
../../interface/wayland/dispmanx.xml
dispmanx
)
+ add_custom_target (myVmcs_hostTarget DEPENDS
wayland-dispmanx-server-protocol.h)
######### interface/khronos/CMakeLists.txt #########
add_library(wayland-egl ${SHARED} ${WAYLAND_EGL_SOURCE})
+ add_dependencies(wayland-egl myVmcs_hostTarget)
install(TARGETS wayland-egl DESTINATION lib)
note: i consider this a rather hacky solution. it works but assumes the
filename to be wayland-dispmanx-server-protocol.h even though if someone
changes the cmake function called 'wayland_add_protocol_server' (which
comes with the patch) to use a different filename, it will break.
the cmake background is described here:
#
http://stackoverflow.com/questions/4010212/cmake-struggling-with-add-custom-command-dependencies
tested with: conf/local.conf:
BB_NUMBER_THREADS = "4"
PARALLEL_MAKE = "-j 4"
--- in long ---
commands used:
bitbake -c clean userland
bitbake -f -c compile userland
target: userland
problem:
| [ 22%] Building C object
interface/khronos/CMakeFiles/khrn_static.dir/glxx/glxx_client.c.o
| cd
/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build/interface/khronos
&&
/home/linux/yocto/poky/build/tmp/sysroots/x86_64-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc
-DEGL_SERVER_DISPMANX -DHAVE_CMAKE_CONFIG -DHAVE_VMCS_CONFIG
-DOMX_SKIP64BIT -DTV_SUPPORTED_MODE_NO_DEPRECATED -DUSE_VCHIQ_ARM
-DVCHI_BULK_ALIGN=1 -DVCHI_BULK_GRANULARITY=1 -D_FILE_OFFSET_BITS=64
-D_HAVE_SBRK -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_REENTRANT
-D__VIDEOCORE4__ -march=armv6 -mfloat-abi=hard -mtune=arm1176jzf-s
-mfpu=vfp
--sysroot=/home/linux/yocto/poky/build/tmp/sysroots/raspberrypi -O2
-pipe -g -feliminate-unused-debug-types -fPIC -fPIC -DBUILD_WAYLAND
-Wno-multichar -Wall -Wno-unused-but-set-variable -fPIC -O2 -pipe -g
-feliminate-unused-debug-types -O2 -pipe -g
-feliminate-unused-debug-types -fPIC -fPIC -DNDEBUG
-I/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/build/inc
-I/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/host_applications/framework
-I/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git
-I/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/interface/vcos/pthreads
-I/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/interface/vmcs_host/linux
-I/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/interface/vmcs_host
-I/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/interface/vmcs_host/khronos
-I/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/interface/khronos/include
-I/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build
-I/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/interface/vchiq_arm
-I/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/host_support/include
-o CMakeFiles/khrn_static.dir/glxx/glxx_client.c.o -c
/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/interface/khronos/glxx/glxx_client.c
| In file included from
/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/interface/khronos/ext/egl_wayland.c:35:0:
|
/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/interface/vmcs_host/vc_vchi_dispmanx.h:72:66:
fatal error: interface/vmcs_host/wayland-dispmanx-server-protocol.h: No
such file or directory
but requires -> #include
"interface/vmcs_host/wayland-dispmanx-server-protocol.h"
quelle von wayland-dispmanx-server-protocol.h ist:
-I../build/interface/khronos/
also
/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build/interface/khronos/
explanation?:
in
/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/interface/vmcs_host/vc_vchi_dispmanx.h
rewrite:
#include "interface/vmcs_host/wayland-dispmanx-server-protocol.h"
to:
#include "interface/khronos/wayland-dispmanx-server-protocol.h"
and it compiles!
this means either:
- include path is wrong and should be corrected in
interface/vmcs_host/vc_vchi_dispmanx.h or
- someone forgot to add vmcs_host/wayland-dispmanx-server-protocol.h
but
/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build
./interface/khronos/wayland-dispmanx-server-protocol.h
./interface/vmcs_host/wayland-dispmanx-server-protocol.h
so it seems more likely that
'/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build'
must be an include path to make it work! how to do that? turns out, it
is! so why is it not used then?
tested #include <> vs #include "" but then it worked with either??!!
possible new solution:
there is probably a copy operation but it was too late so the next run
it works which explains the odd behavour! so where is the copy command?
the line which borks the include path is from:
git/patches/0001-wayland-support.patch
diff -Narubp a/interface/vmcs_host/vc_vchi_dispmanx.h
b/interface/vmcs_host/vc_vchi_dispmanx.h
--- a/interface/vmcs_host/vc_vchi_dispmanx.h 2015-02-28
08:44:03.332718168 +0900
+++ b/interface/vmcs_host/vc_vchi_dispmanx.h 2015-02-28
10:38:02.820914890 +0900
@@ -66,4 +66,19 @@ typedef struct {
#define ELEMENT_CHANGE_MASK_RESOURCE (1<<4)
#define ELEMENT_CHANGE_TRANSFORM (1<<5)
+#ifdef BUILD_WAYLAND
+/* XXX: This should be in a private header that can be included from
EGL and vc_* */
+#include <wayland-server.h>
+#include "interface/vmcs_host/wayland-dispmanx-server-protocol.h"
+struct wl_dispmanx_server_buffer {
+ struct wl_resource *resource;
+ struct wl_dispmanx *dispmanx;
+ enum wl_dispmanx_format format;
+ DISPMANX_RESOURCE_HANDLE_T handle;
+ int32_t width;
+ int32_t height;
+ int in_use;
+};
+#endif
+
#endif
patch is made from
meta-weston-rpi/recipes-graphics/userland/userland_git.bbappend:
file://0001-wayland-support.patch \
linux@linux-VirtualBox:~/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build/interface/vmcs_host$
grep wayland-dis * -R
...
CMakeFiles/vchostif.dir/build.make: cd
/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build/interface/vmcs_host
&&
/home/linux/yocto/poky/build/tmp/sysroots/x86_64-linux/usr/bin/wayland-scanner
server-header <
/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/interface/wayland/dispmanx.xml
>
/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
found this string also:
Generating wayland-dispmanx-server-protocol.h
linux@linux-VirtualBox:~/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5$
grep Generating * -R
build/interface/khronos/CMakeFiles/EGL.dir/build.make:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold
--progress-dir=/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build/CMakeFiles
--progress-num=$(CMAKE_PROGRESS_1) "Generating
wayland-dispmanx-server-protocol.h"
build/interface/khronos/CMakeFiles/EGL.dir/build.make:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold
--progress-dir=/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build/CMakeFiles
--progress-num=$(CMAKE_PROGRESS_2) "Generating
wayland-dispmanx-client-protocol.h"
build/interface/khronos/CMakeFiles/EGL.dir/build.make:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold
--progress-dir=/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build/CMakeFiles
--progress-num=$(CMAKE_PROGRESS_3) "Generating wayland-dispmanx-protocol.c"
build/interface/khronos/CMakeFiles/EGL_static.dir/build.make:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold
--progress-dir=/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build/CMakeFiles
--progress-num=$(CMAKE_PROGRESS_1) "Generating
wayland-dispmanx-server-protocol.h"
build/interface/khronos/CMakeFiles/EGL_static.dir/build.make:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold
--progress-dir=/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build/CMakeFiles
--progress-num=$(CMAKE_PROGRESS_2) "Generating
wayland-dispmanx-client-protocol.h"
build/interface/khronos/CMakeFiles/EGL_static.dir/build.make:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold
--progress-dir=/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build/CMakeFiles
--progress-num=$(CMAKE_PROGRESS_3) "Generating wayland-dispmanx-protocol.c"
build/interface/khronos/CMakeFiles/khrn_static.dir/build.make:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold
--progress-dir=/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build/CMakeFiles
--progress-num=$(CMAKE_PROGRESS_1) "Generating
wayland-dispmanx-server-protocol.h"
build/interface/khronos/CMakeFiles/khrn_static.dir/build.make:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold
--progress-dir=/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build/CMakeFiles
--progress-num=$(CMAKE_PROGRESS_2) "Generating
wayland-dispmanx-client-protocol.h"
build/interface/khronos/CMakeFiles/khrn_static.dir/build.make:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold
--progress-dir=/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build/CMakeFiles
--progress-num=$(CMAKE_PROGRESS_3) "Generating wayland-dispmanx-protocol.c"
build/interface/vmcs_host/CMakeFiles/vchostif.dir/build.make:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold
--progress-dir=/home/linux/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/build/CMakeFiles
--progress-num=$(CMAKE_PROGRESS_1) "Generating
wayland-dispmanx-server-protocol.h"
+# wayland_add_protocol_server(outfiles inputfile basename)
+function(WAYLAND_ADD_PROTOCOL_SERVER _sources _protocol _basename)
+ if(NOT WAYLAND_SCANNER_EXECUTABLE)
+ message(FATAL "The wayland-scanner executable has nto been
found on your system. You must install it.")
+ endif()
+
+ get_filename_component(_infile ${_protocol} ABSOLUTE)
+ set(_server_header
"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-server-protocol.h")
+
+ add_custom_command(OUTPUT "${_server_header}"
+ COMMAND ${WAYLAND_SCANNER_EXECUTABLE} server-header <
${_infile} > ${_server_header}
+ DEPENDS ${_infile} VERBATIM)
+
+ list(APPEND ${_sources} "${_server_header}")
+ set(${_sources} ${${_sources}} PARENT_SCOPE)
+endfunction()
##### used like this: #####
set(VCHOSTIF_SOURCE
${VMCS_TARGET}/vcfilesys.c ${VMCS_TARGET}/vcmisc.c
vc_vchi_gencmd.c vc_vchi_filesys.c
vc_vchi_tvservice.c vc_vchi_cecservice.c
vc_vchi_dispmanx.c vc_service_common.c)
# generates wayland-dispmanx-server-protocol.h
wayland_add_protocol_server(
VCHOSTIF_SOURCE
../../interface/wayland/dispmanx.xml
dispmanx
)
ansatz:
- rausfinden in welchem der CMakeLists.txt der fehler an welcher stelle
steckt:
~/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/interface/khronos/CMakeLists.txt
und zwar target:
if (BUILD_WAYLAND)
set(EGL_SOURCE
${EGL_SOURCE}
ext/egl_wayland.c <---- hier will es
wayland-dispmanx-server-protocol.h!!
common/linux/khrn_wayland.c)
was ich hab:
~/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/CMakeLists.txt
|- interface/vmcs_host
|- interface/khronos
und interface/khronos soll auf den bau von interface/vmcs_host warten!
~/yocto/poky/build/tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/git/CMakeLists.txt
add_subdirectory(interface/vmcs_host)
add_subdirectory(interface/vchiq_arm)
add_subdirectory(interface/khronos)
so add a custom dependency:
#
http://stackoverflow.com/questions/4010212/cmake-struggling-with-add-custom-command-dependencies
######### interface/vmcs_host/CMakeLists.txt #########
if (BUILD_WAYLAND)
wayland_add_protocol_server(
VCHOSTIF_SOURCE
../../interface/wayland/dispmanx.xml
dispmanx
)
+ add_custom_target (myVmcs_hostTarget DEPENDS
wayland-dispmanx-server-protocol.h)
######### interface/khronos/CMakeLists.txt #########
add_library(wayland-egl ${SHARED} ${WAYLAND_EGL_SOURCE})
+ add_dependencies(wayland-egl myVmcs_hostTarget)
install(TARGETS wayland-egl DESTINATION lib)
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-15 14:57 ` Joachim Schiele
@ 2015-10-21 12:05 ` Andrei Gherzan
0 siblings, 0 replies; 26+ messages in thread
From: Andrei Gherzan @ 2015-10-21 12:05 UTC (permalink / raw)
To: Joachim Schiele; +Cc: yocto
Hello,
On Thu, Oct 15, 2015 at 04:57:13PM +0200, Joachim Schiele wrote:
> On 13.10.2015 19:13, Andrei Gherzan wrote:
> > On Tue, Oct 13, 2015 at 02:14:28AM +0200, Joachim Schiele wrote:
> >> On 03.10.2015 23:53, Andrei Gherzan wrote:
> >>> On Sat, Oct 03, 2015 at 02:47:24PM -0700, Khem Raj wrote:
> >>>> On Sat, Oct 3, 2015 at 2:27 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> >>>>> On Sat, Oct 03, 2015 at 10:46:07PM +0200, Andrei Gherzan wrote:
> >>>>>> On Sat, Oct 03, 2015 at 10:40:50PM +0200, Andrei Gherzan wrote:
> >>>>>>> On Sat, Oct 03, 2015 at 10:33:12PM +0200, Andrei Gherzan wrote:
> >>>>>>>> On Sat, Oct 03, 2015 at 01:31:24PM -0700, Khem Raj wrote:
> >>>>>>>>> On Sat, Oct 3, 2015 at 1:11 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> >>>>>>>>>> On Sat, Oct 03, 2015 at 01:06:55PM -0700, Khem Raj wrote:
> >>>>>>>>>>> On Sat, Oct 3, 2015 at 12:18 PM, Andrei Gherzan <andrei@gherzan.ro> wrote:
> >>>>>>>>>>>> I tested with and without - same result.
> >>>>>>>>>>>> DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
> >>>>>>>>>>>> usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
> >>>>>>>>>>>> libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
> >>>>>>>>>>>> libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
> >>>>>>>>>>>> libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm
> >>>>>>>>>>>> libc-locales libc-locale-code libc-memusage libc-nis
> >>>>>>>>>>>> libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
> >>>>>>>>>>>> libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
> >>>>>>>>>>>> libc-posix-regexp-glibc libc-posix-wchar-io largefile
> >>>>>>>>>>>> opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
> >>>>>>>>>>>>
> >>>>>>>>>>>> No modification to the default poky distro.
> >>>>>>>>>>>
> >>>>>>>>>>> hmm I am using angstrom and it works there and for verification I now
> >>>>>>>>>>> tried with OE-Core ( alone ) it works there too, can you check some
> >>>>>>>>>>> other parameters that are there in your sandbox ? here is my build
> >>>>>>>>>>>
> >>>>>>>>>>> MACHINE=raspberrypi2 bitbake userland
> >>>>>>>>>>> Parsing recipes: 100%
> >>>>>>>>>>> |######################################################################################################################################################################################################|
> >>>>>>>>>>> ETA: 00:00:00
> >>>>>>>>>>> Parsing of 918 .bb files complete (0 cached, 918 parsed). 1350
> >>>>>>>>>>> targets, 59 skipped, 0 masked, 0 errors.
> >>>>>>>>>>> NOTE: Resolving any missing task queue dependencies
> >>>>>>>>>>>
> >>>>>>>>>>> Build Configuration:
> >>>>>>>>>>> BB_VERSION = "1.28.0"
> >>>>>>>>>>> BUILD_SYS = "x86_64-linux"
> >>>>>>>>>>> NATIVELSBSTRING = "Ubuntu-14.04"
> >>>>>>>>>>> TARGET_SYS = "arm-oe-linux-gnueabi"
> >>>>>>>>>>> MACHINE = "raspberrypi2"
> >>>>>>>>>>> DISTRO = "nodistro"
> >>>>>>>>>>> DISTRO_VERSION = "nodistro.0"
> >>>>>>>>>>> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard
> >>>>>>>>>>> vfpv4 cortexa7"
> >>>>>>>>>>> TARGET_FPU = "vfp-vfpv4-neon"
> >>>>>>>>>>> meta-raspberrypi = "kraj/master:a903a9cd18ae556121265da93ed74f857944a0da"
> >>>>>>>>>>> meta = "kraj/master:602e512b92bcc78403144fedeb4211bbf56ff1c8"
> >>>>>>>>>>>
> >>>>>>>>>>> NOTE: Preparing RunQueue
> >>>>>>>>>>> NOTE: Executing SetScene Tasks
> >>>>>>>>>>> NOTE: Executing RunQueue Tasks
> >>>>>>>>>>> NOTE: Tasks Summary: Attempted 454 tasks of which 315 didn't need to
> >>>>>>>>>>> be rerun and all succeeded.
> >>>>>>>>>>
> >>>>>>>>>> Here is my build configuration.
> >>>>>>>>>>
> >>>>>>>>>> Build Configuration:
> >>>>>>>>>> BB_VERSION = "1.28.0"
> >>>>>>>>>> BUILD_SYS = "x86_64-linux"
> >>>>>>>>>> NATIVELSBSTRING = "Arch-rolling"
> >>>>>>>>>> TARGET_SYS = "arm-poky-linux-gnueabi"
> >>>>>>>>>> MACHINE = "raspberrypi2"
> >>>>>>>>>> DISTRO = "poky"
> >>>>>>>>>> DISTRO_VERSION = "2.0"
> >>>>>>>>>> TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard vfpv4
> >>>>>>>>>> cortexa7"
> >>>>>>>>>> TARGET_FPU = "vfp-vfpv4-neon"
> >>>>>>>>>> meta
> >>>>>>>>>> meta-yocto
> >>>>>>>>>> meta-yocto-bsp = "master:eac61f37e36099f74485dab398b57f3812826d17"
> >>>>>>>>>> meta-raspberrypi = "master:48da0cdc5fb147a20b41a77b2dfeef4efd483b32"
> >>>>>>>>>> meta-oe
> >>>>>>>>>> meta-multimedia = "master:f4533380c8a5c1d229f692222ee0c2ef9d187ef8"
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> But anyway can you please check in your userland install dir for the header I'm
> >>>>>>>>>> missing? Or in sysroot.
> >>>>>>>>>
> >>>>>>>>> its part of userland itself so no other package should be needed and
> >>>>>>>>> not required in sysroot
> >>>>>>>>>
> >>>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/package/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> >>>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/packages-split/userland-dbg/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> >>>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/khronos/wayland-dispmanx-server-protocol.h
> >>>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> >>>>>>>>
> >>>>>>>> This is odd... what revision of userland are you using? The one on current
> >>>>>>>> meta-rpi master?
> >>>>>>>>
> >>>>>>>> --
> >>>>>>>> Andrei Gherzan
> >>>>>>>
> >>>>>>> This is not even in the current HEAD of master in userland official repository:
> >>>>>>> https://github.com/raspberrypi/userland/tree/master/interface/vmcs_host
> >>>>>>>
> >>>>>>> Are you sure you don't inject the file somehow? I really don't know what's
> >>>>>>> going on.
> >>>>>>>
> >>>>>>> --
> >>>>>>> Andrei Gherzan
> >>>>>>
> >>>>>> I found the mistery. It gets generated in another path:
> >>>>>> ./build/interface/khronos/wayland-dispmanx-server-protocol.h
> >>>>>>
> >>>>>> Figuring out why.
> >>>>>>
> >>>>>> --
> >>>>>> Andrei Gherzan
> >>>>>
> >>>>> I managed to get to the bottom of this. It's a racing issue. Basically, with
> >>>>> MAKE_PARALLEL high enough, the
> >>>>>
> >>>>> add_library(EGL ${SHARED} ${EGL_SOURCE})
> >>>>>
> >>>>> in git/interface/khronos/CMakeLists.txt gets to run before the header is
> >>>>> generated. No dependency configured for that. And in the sources of EGL there
> >>>>> is egl_wayland.c which includes the generated header by the call:
> >>>>>
> >>>>> wayland_add_protocol_server(
> >>>>> EGL_SOURCE
> >>>>> ../../interface/wayland/dispmanx.xml
> >>>>> dispmanx
> >>>>> )
> >>>>>
> >>>>> Any idea how to define this dependency? What is the value of your PARALLEL_MAKE
> >>>>
> >>>> I use -j16, can you add the .h file with path to EGL_SOURCE
> >>>
> >>> Adding the path to EGL_SOURCE won't work because cmake will complain that the
> >>> header is not in place. We need a dependency definition.
> >>>
> >>> --
> >>> Andrei Gherzan
> >>>
> >>
> >> in this file:
> >> ./tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/egl.pc"
> >>
> >> i replaced
> >>
> >> Cflags: -I${includedir}/vc -I${includedir}/interface
> >> -I${includedir}/interface/vcos -I${includedir}/interface/vcos/pthreads
> >>
> >> with that
> >>
> >> Cflags: -I${includedir}/vc -I${includedir}/interface
> >> -I${includedir}/interface/vcos -I${includedir}/interface/vcos/pthreads
> >> -I../build/interface/khronos/
> >>
> >> (basically adding -I../build/interface/khronos/)
> >>
> >> IIRC that worked for me. you can give that a try at least ;-)
> >>
> >>
> >> --
> >> _______________________________________________
> >> yocto mailing list
> >> yocto@yoctoproject.org
> >> https://lists.yoctoproject.org/listinfo/yocto
> >
> > Hi Joachim,
> >
> > I'm not sure how would this help as long as the pc file is generated by
> > userland and the error I'm facing is while compiling userland.
> >
> > --
> > Andrei Gherzan
> >
>
> hi andrei,
>
> you are right, my last answer was actually fror a different problem.
> after looking into this issue, which is basically finding a way to make
> -j n (with n > 1) work:
>
> --- in short ---
> so add a custom dependency:
>
> ######### interface/vmcs_host/CMakeLists.txt #########
> if (BUILD_WAYLAND)
> wayland_add_protocol_server(
> VCHOSTIF_SOURCE
> ../../interface/wayland/dispmanx.xml
> dispmanx
> )
> + add_custom_target (myVmcs_hostTarget DEPENDS
> wayland-dispmanx-server-protocol.h)
>
> ######### interface/khronos/CMakeLists.txt #########
> add_library(wayland-egl ${SHARED} ${WAYLAND_EGL_SOURCE})
> + add_dependencies(wayland-egl myVmcs_hostTarget)
> install(TARGETS wayland-egl DESTINATION lib)
>
>
> note: i consider this a rather hacky solution. it works but assumes the
> filename to be wayland-dispmanx-server-protocol.h even though if someone
> changes the cmake function called 'wayland_add_protocol_server' (which
> comes with the patch) to use a different filename, it will break.
>
> the cmake background is described here:
> #
> http://stackoverflow.com/questions/4010212/cmake-struggling-with-add-custom-command-dependencies
>
> tested with: conf/local.conf:
> BB_NUMBER_THREADS = "4"
> PARALLEL_MAKE = "-j 4"
>
I tried defining a custom dep too but the error persisted. As well, I recreated
the patch using exactly your changes (for the sake of being on the same code)
Index: git/interface/khronos/CMakeLists.txt
===================================================================
--- git.orig/interface/khronos/CMakeLists.txt
+++ git/interface/khronos/CMakeLists.txt
@@ -95,6 +95,7 @@ if (BUILD_WAYLAND)
)
.
add_library(wayland-egl ${SHARED} ${WAYLAND_EGL_SOURCE})
+ add_dependencies(wayland-egl myVmcs_hostTarget)
install(TARGETS wayland-egl DESTINATION lib)
.
configure_file ("wayland-egl/wayland-egl.pc.in" "wayland-egl/wayland-egl.pc" @ONLY)
Index: git/interface/vmcs_host/CMakeLists.txt
===================================================================
--- git.orig/interface/vmcs_host/CMakeLists.txt
+++ git/interface/vmcs_host/CMakeLists.txt
@@ -23,6 +23,7 @@ wayland_add_protocol_server(
../../interface/wayland/dispmanx.xml
dispmanx
)
+add_custom_target (myVmcs_hostTarget DEPENDS
wayland-dispmanx-server-protocol.h)
endif ()
.
add_library(vchostif ${VCHOSTIF_SOURCE})
Now. Even with this patch, the compile fails sometimes with:
tmp/work/raspberrypi2-poky-linux-gnueabi/userland/git-r
5/git/interface/vmcs_host/vc_vchi_dispmanx.h:72:66: fatal error:
interface/vmcs_host/wayland-dispm
anx-server-protocol.h: No such file or directory
I use autodetection of BB_NUMBER_THREADS and PARALLEL_MAKE. They end up:
BB_NUMBER_THREADS="4"
PARALLEL_MAKEINST="-j 4"
Regards,
--
Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs
2015-10-03 16:37 [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs Khem Raj
` (4 preceding siblings ...)
2015-10-03 18:24 ` [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs Andrei Gherzan
@ 2015-10-24 19:56 ` Andrei Gherzan
5 siblings, 0 replies; 26+ messages in thread
From: Andrei Gherzan @ 2015-10-24 19:56 UTC (permalink / raw)
To: Khem Raj; +Cc: yocto
On Sat, Oct 03, 2015 at 04:37:34PM +0000, Khem Raj wrote:
> several userspace libraries like libepoxy poke for pkgconfigs ( .pc )
> files to detect egl support, and comes out to fail in configure stage,
> one of the patches now adds support to generate .pc files for some known
> cases. it could be further extended if needed for other libraries too
>
> Secondly, the default CMAKE_INSTALL_PREFIX is /opt/vc but in OE we use
> proper /usr so lets make this change as well, it simplifies do_install()
>
> .so are not versioned so we need to grapple with OE's defaults of
> expecting versioned .so files.
>
> Adjust packages for -dev package such that it can automatically package
> pkgconfig files and inherit pkgconfig because in cmake code we are not
> looking for pkgconfig so we need the dependency also put in place for
> consistent builds
>
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
I merged this patch to master. The rest are still pending because of my build
issue.
--
Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [meta-raspberrypi][PATCH V4 3/5] userland: Adjust include location for pthreads-headers
2015-10-03 16:37 ` [meta-raspberrypi][PATCH V4 3/5] userland: Adjust include location for pthreads-headers Khem Raj
@ 2015-10-24 20:05 ` Andrei Gherzan
0 siblings, 0 replies; 26+ messages in thread
From: Andrei Gherzan @ 2015-10-24 20:05 UTC (permalink / raw)
To: Khem Raj; +Cc: yocto
On Sat, Oct 03, 2015 at 04:37:36PM +0000, Khem Raj wrote:
> vcos headers include headers like "vcos_platform.h" "vcos_futex_mutex.h"
> "vcos_platform_types.h" and these headers are different based on
> platform/OSes. e.g. OS targets that support pthreads these headers
> should come from pthreads/ folder but not for others. So one would add
> right -I option for every package that accesses them directly or
> indirectly. so if a software does #include <EGL/egl.h> then it will
> break
>
> | In file included from
> /mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/sysroots/raspberrypi2/usr/include/interface/vcos/vcos_assert.h:149:0,
> | from
> /mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/sysroots/raspberrypi2/usr/include/interface/vcos/vcos.h:114,
> | from
> /mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/sysroots/raspberrypi2/usr/include/interface/vmcs_host/vc_dispmanx.h:33,
> | from
> /mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/sysroots/raspberrypi2/usr/include/EGL/eglplatform.h:110,
> | from
> /mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/sysroots/raspberrypi2/usr/include/EGL/egl.h:36,
> | from
> /mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/armv7at2hf-vfp-neon-angstrom-linux-gnueabi/weston/1.8.0-r0/weston-1.8.0/clients/../shared/platform.h:29,
> | from
> /mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/armv7at2hf-vfp-neon-angstrom-linux-gnueabi/weston/1.8.0-r0/weston-1.8.0/clients/window.h:33,
> | from
> /mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/work/armv7at2hf-vfp-neon-angstrom-linux-gnueabi/weston/1.8.0-r0/weston-1.8.0/clients/eventdemo.c:40:
> |
> /mnt/home/kraj/work/angstrom/build/tmp-angstrom-glibc/sysroots/raspberrypi2/usr/include/interface/vcos/vcos_types.h:38:33:
> fatal error: vcos_platform_types.h: No such file or directory
> | #include "vcos_platform_types.h"
> | ^
> | compilation terminated.
>
> This is wrong, it should not happen since doing simple #include
> <EGL/egl.h> should not demand manual addition of some internal paths
> tobe added to -I flags.
>
> This patch fixes the headers which refer to headers inside pthreads/
> folder to prefix them with pthreads/ so we dont have to specify
> additional paths
>
> This fixes weston on rpi and I believe there are more patches now to
>
> recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend
> recipes-multimedia/omxplayer/omxplayer_git.bb
>
> which can be removed as well
>
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> ---
Merged to master. Thank you Khem.
--
Andrei Gherzan
^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2015-10-24 20:05 UTC | newest]
Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-03 16:37 [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs Khem Raj
2015-10-03 16:37 ` [meta-raspberrypi][PATCH V4 2/5] userland: Add wayland support Khem Raj
2015-10-03 16:37 ` [meta-raspberrypi][PATCH V4 3/5] userland: Adjust include location for pthreads-headers Khem Raj
2015-10-24 20:05 ` Andrei Gherzan
2015-10-03 16:37 ` [meta-raspberrypi][PATCH V4 4/5] weston: Enable rpi compositor backend Khem Raj
2015-10-03 16:37 ` [meta-raspberrypi][PATCH V4 5/5] userland: Fix build with clang compiler Khem Raj
2015-10-03 18:24 ` [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs Andrei Gherzan
2015-10-03 19:00 ` Khem Raj
2015-10-03 19:03 ` Andrei Gherzan
2015-10-03 19:15 ` Khem Raj
2015-10-03 19:18 ` Andrei Gherzan
2015-10-03 20:06 ` Khem Raj
2015-10-03 20:11 ` Andrei Gherzan
2015-10-03 20:31 ` Khem Raj
2015-10-03 20:33 ` Andrei Gherzan
2015-10-03 20:40 ` Andrei Gherzan
2015-10-03 20:45 ` Khem Raj
2015-10-03 20:46 ` Andrei Gherzan
2015-10-03 21:27 ` Andrei Gherzan
2015-10-03 21:47 ` Khem Raj
2015-10-03 21:53 ` Andrei Gherzan
2015-10-13 0:14 ` Joachim Schiele
2015-10-13 17:13 ` Andrei Gherzan
2015-10-15 14:57 ` Joachim Schiele
2015-10-21 12:05 ` Andrei Gherzan
2015-10-24 19:56 ` Andrei Gherzan
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.