From 6ff8fb8738a0595e040388523b1817ae6b6a05be Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jean-Philippe=20Bruy=C3=A8re?= Date: Sat, 18 Jul 2020 15:54:24 +0200 Subject: [PATCH] source, gradient, clipping ok --- include/vkvg.h | 3 - shaders/vkvg_main.vert | 2 +- src/shaders.h | 512 +++++++++++++++++------------------- src/vkvg_context.c | 23 +- src/vkvg_context_internal.c | 98 +++---- src/vkvg_pattern.c | 145 ++++------ tests/clip.c | 92 ++++++- tests/img_surf.c | 3 +- tests/paint_surf.c | 109 ++++++++ tests/test1.c | 2 +- 10 files changed, 566 insertions(+), 423 deletions(-) create mode 100644 tests/paint_surf.c diff --git a/include/vkvg.h b/include/vkvg.h index 81a73f4..5caad66 100644 --- a/include/vkvg.h +++ b/include/vkvg.h @@ -309,11 +309,8 @@ void vkvg_show_text_run (VkvgContext ctx, VkvgText textRun); void vkvg_text_run_get_extents(VkvgText textRun, vkvg_text_extents_t* extents); //pattern -VkvgPattern vkvg_pattern_create (); VkvgPattern vkvg_pattern_reference (VkvgPattern pat); uint32_t vkvg_pattern_get_reference_count(VkvgPattern pat); -VkvgPattern vkvg_pattern_create_rgba (float r, float g, float b, float a); -VkvgPattern vkvg_pattern_create_rgb (float r, float g, float b); VkvgPattern vkvg_pattern_create_for_surface (VkvgSurface surf); VkvgPattern vkvg_pattern_create_linear (float x0, float y0, float x1, float y1); VkvgPattern vkvg_pattern_create_radial (float cx0, float cy0, float radius0, diff --git a/shaders/vkvg_main.vert b/shaders/vkvg_main.vert index bdc8a0d..f012a75 100644 --- a/shaders/vkvg_main.vert +++ b/shaders/vkvg_main.vert @@ -59,7 +59,7 @@ void main() outSrc = pc.srcType == SOLID ? inColor : pc.source; if (pc.fullScreenQuad != 0) { - gl_Position = vec4(vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2) * 2.0f - 1.0f, 0.0f, 1.0f); + gl_Position = vec4(inPos, 0.0f, 1.0f); return; } diff --git a/src/shaders.h b/src/shaders.h index 4ac78fe..8d10d36 100644 --- a/src/shaders.h +++ b/src/shaders.h @@ -1454,286 +1454,264 @@ unsigned char vkvg_main_frag_spv[] = { unsigned int vkvg_main_frag_spv_len = 5320; unsigned char vkvg_main_vert_spv[] = { 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x0d, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, - 0xc2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, - 0x52, 0x42, 0x5f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, - 0x52, 0x42, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x5f, 0x34, 0x32, 0x30, 0x70, - 0x61, 0x63, 0x6b, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x47, 0x4c, 0x5f, 0x47, - 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, 0x63, 0x70, 0x70, 0x5f, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, - 0x47, 0x4c, 0x5f, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x00, 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x50, 0x61, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x73, 0x00, 0x00, - 0x06, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x73, 0x69, 0x7a, 0x65, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x54, 0x79, 0x70, 0x65, 0x00, - 0x06, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x66, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x51, 0x75, - 0x61, 0x64, 0x00, 0x00, 0x06, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x74, 0x00, 0x06, 0x00, 0x05, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x74, 0x49, - 0x6e, 0x76, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x70, 0x63, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x6f, 0x75, 0x74, 0x4d, 0x61, 0x74, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, - 0x1b, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x53, 0x72, 0x63, 0x00, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x43, 0x6f, - 0x6c, 0x6f, 0x72, 0x00, 0x05, 0x00, 0x06, 0x00, 0x33, 0x00, 0x00, 0x00, - 0x67, 0x6c, 0x5f, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x33, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x00, 0x05, 0x00, 0x03, 0x00, 0x35, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x37, 0x00, 0x00, 0x00, - 0x67, 0x6c, 0x5f, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x4d, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x55, 0x00, 0x00, 0x00, - 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x26, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x05, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, - 0x33, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x37, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x55, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x08, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x1a, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x02, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x25, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x2d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, - 0x33, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x36, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, + 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x64, + 0x65, 0x72, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x00, 0x00, + 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, + 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, + 0x61, 0x67, 0x65, 0x5f, 0x34, 0x32, 0x30, 0x70, 0x61, 0x63, 0x6b, 0x00, + 0x04, 0x00, 0x0a, 0x00, 0x47, 0x4c, 0x5f, 0x47, 0x4f, 0x4f, 0x47, 0x4c, + 0x45, 0x5f, 0x63, 0x70, 0x70, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x5f, + 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x47, 0x4c, 0x5f, 0x47, + 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, + 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x6f, 0x75, 0x74, 0x50, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, + 0x05, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x50, 0x75, 0x73, 0x68, + 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x73, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x73, 0x69, 0x7a, 0x65, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x73, 0x72, 0x63, 0x54, 0x79, 0x70, 0x65, 0x00, 0x06, 0x00, 0x07, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x66, 0x75, 0x6c, 0x6c, + 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x51, 0x75, 0x61, 0x64, 0x00, 0x00, + 0x06, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x6d, 0x61, 0x74, 0x00, 0x06, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x74, 0x49, 0x6e, 0x76, 0x00, 0x00, + 0x05, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x70, 0x63, 0x00, 0x00, + 0x05, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x4d, + 0x61, 0x74, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x6f, 0x75, 0x74, 0x53, 0x72, 0x63, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, + 0x26, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, + 0x05, 0x00, 0x06, 0x00, 0x33, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, + 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x06, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, + 0x05, 0x00, 0x03, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x04, 0x00, 0x37, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x50, 0x6f, + 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x41, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x48, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x48, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x48, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, + 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x33, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x37, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x08, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x02, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x25, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x03, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x33, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x35, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x36, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x2b, 0x00, 0x04, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x2b, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x04, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x4f, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x51, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x54, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x56, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x76, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x7a, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x4c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x17, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x15, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0xaa, 0x00, 0x05, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, - 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x23, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x22, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, + 0x20, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x42, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, + 0x43, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x04, 0x00, 0x43, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x43, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x2c, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, + 0x67, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x6a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x2c, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x05, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x27, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, + 0x24, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x29, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x24, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x2a, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, - 0x2a, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x24, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, - 0xab, 0x00, 0x05, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x2f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, - 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x31, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, - 0xc4, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, - 0xc7, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x04, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x44, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, - 0x83, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0xab, 0x00, 0x05, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x32, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x31, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, - 0x43, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x4a, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x32, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x07, 0x00, 0x51, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x53, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x56, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x58, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, - 0x58, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x51, 0x00, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x39, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x56, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, - 0x5b, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, - 0x5f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x51, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, - 0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, - 0x51, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x4e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x56, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x68, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x07, 0x00, 0x51, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, - 0x5c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x6a, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x56, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, - 0x5c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x6c, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, - 0x6c, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x07, 0x00, 0x51, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x5c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, - 0x4d, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x75, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x76, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x75, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x7a, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x7c, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, - 0x7b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, - 0x7d, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x07, 0x00, 0x45, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x48, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x4a, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, + 0x4a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, + 0x4c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x48, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, + 0x4e, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, + 0x52, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x54, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, + 0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, + 0x53, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, + 0x45, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x42, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, + 0x57, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x48, 0x00, 0x00, 0x00, + 0x59, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x59, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x5b, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x07, 0x00, 0x45, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x5d, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x48, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x5f, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0x5f, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x07, 0x00, 0x45, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, + 0x63, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x65, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x41, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x69, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, + 0x69, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, + 0x6f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x71, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x7f, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, + 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 }; -unsigned int vkvg_main_vert_spv_len = 3340; +unsigned int vkvg_main_vert_spv_len = 3076; unsigned char vkvg_main_lcd_frag_spv[] = { 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x0d, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, diff --git a/src/vkvg_context.c b/src/vkvg_context.c index 751b0b6..d7214c3 100644 --- a/src/vkvg_context.c +++ b/src/vkvg_context.c @@ -572,7 +572,7 @@ void vkvg_fill (VkvgContext ctx){ _clear_path(ctx); } void vkvg_clip_preserve (VkvgContext ctx){ - if (!(ctx->pathPtr || ctx->segmentPtr))//nothing to fill + if (ctx->pathPtr == 0 && _current_path_is_empty(ctx))//nothing to clip return; _flush_undrawn_vertices(ctx); @@ -592,6 +592,7 @@ void vkvg_clip_preserve (VkvgContext ctx){ CmdSetStencilCompareMask(ctx->cmd, VK_STENCIL_FRONT_AND_BACK, STENCIL_CLIP_BIT); CmdSetStencilWriteMask (ctx->cmd, VK_STENCIL_FRONT_AND_BACK, STENCIL_FILL_BIT); _fill_ec(ctx); + _flush_undrawn_vertices(ctx); } CmdSetStencilReference (ctx->cmd, VK_STENCIL_FRONT_AND_BACK, STENCIL_CLIP_BIT); CmdSetStencilCompareMask(ctx->cmd, VK_STENCIL_FRONT_AND_BACK, STENCIL_FILL_BIT); @@ -603,7 +604,7 @@ void vkvg_clip_preserve (VkvgContext ctx){ CmdSetStencilCompareMask (ctx->cmd, VK_STENCIL_FRONT_AND_BACK, STENCIL_CLIP_BIT); } void vkvg_fill_preserve (VkvgContext ctx){ - if (!(ctx->pathPtr || ctx->segmentPtr)) //nothing to fill + if (ctx->pathPtr == 0 && _current_path_is_empty(ctx))//nothing to fill return; _finish_path(ctx); @@ -620,6 +621,8 @@ void vkvg_fill_preserve (VkvgContext ctx){ return; } + if (ctx->pattern)//if not solid color, source img of gradient has to be bound + _ensure_renderpass_is_started(ctx); _fill_ec(ctx); } @@ -859,10 +862,18 @@ void vkvg_paint (VkvgContext ctx){ void vkvg_set_source_rgb (VkvgContext ctx, float r, float g, float b) { vkvg_set_source_rgba (ctx, r, g, b, 1); } +/** + * @brief Set current pattern to solid color defined by arguments + * @param vkvg context + * @param red component + * @param green component + * @param blue component + * @param alpha value + */ void vkvg_set_source_rgba (VkvgContext ctx, float r, float g, float b, float a) { ctx->curColor = CreateRgbaf(r,g,b,a); - //_update_cur_pattern (ctx, vkvg_pattern_create_rgba (r,g,b,a)); + _update_cur_pattern (ctx, NULL); } void vkvg_set_source_surface(VkvgContext ctx, VkvgSurface surf, float x, float y){ _update_cur_pattern (ctx, vkvg_pattern_create_for_surface(surf)); @@ -1176,29 +1187,35 @@ void vkvg_restore (VkvgContext ctx){ } void vkvg_translate (VkvgContext ctx, float dx, float dy){ + _flush_undrawn_vertices(ctx); vkvg_matrix_translate (&ctx->pushConsts.mat, dx, dy); _set_mat_inv_and_vkCmdPush (ctx); } void vkvg_scale (VkvgContext ctx, float sx, float sy){ + _flush_undrawn_vertices(ctx); vkvg_matrix_scale (&ctx->pushConsts.mat, sx, sy); _set_mat_inv_and_vkCmdPush (ctx); } void vkvg_rotate (VkvgContext ctx, float radians){ + _flush_undrawn_vertices(ctx); vkvg_matrix_rotate (&ctx->pushConsts.mat, radians); _set_mat_inv_and_vkCmdPush (ctx); } void vkvg_transform (VkvgContext ctx, const vkvg_matrix_t* matrix) { + _flush_undrawn_vertices(ctx); vkvg_matrix_t res; vkvg_matrix_multiply (&res, &ctx->pushConsts.mat, matrix); ctx->pushConsts.mat = res; _set_mat_inv_and_vkCmdPush (ctx); } void vkvg_identity_matrix (VkvgContext ctx) { + _flush_undrawn_vertices(ctx); vkvg_matrix_t im = VKVG_IDENTITY_MATRIX; ctx->pushConsts.mat = im; _set_mat_inv_and_vkCmdPush (ctx); } void vkvg_set_matrix (VkvgContext ctx, const vkvg_matrix_t* matrix){ + _flush_undrawn_vertices(ctx); ctx->pushConsts.mat = (*matrix); _set_mat_inv_and_vkCmdPush (ctx); } diff --git a/src/vkvg_context_internal.c b/src/vkvg_context_internal.c index f1c6a17..1458e35 100644 --- a/src/vkvg_context_internal.c +++ b/src/vkvg_context_internal.c @@ -543,28 +543,30 @@ void _update_cur_pattern (VkvgContext ctx, VkvgPattern pat) { VkvgPattern lastPat = ctx->pattern; ctx->pattern = pat; - ctx->pushConsts.patternType = pat->type; - ctx->pushCstDirty = true; + if (pat == NULL) {//solid color + if (lastPat == NULL)//solid + return;//solid to solid transition, no extra action requested + ctx->pushConsts.patternType = VKVG_PATTERN_TYPE_SOLID; + }else + ctx->pushConsts.patternType = pat->type; - switch (pat->type) { + switch (ctx->pushConsts.patternType) { case VKVG_PATTERN_TYPE_SOLID: - memcpy (&ctx->pushConsts.source, ctx->pattern->data, sizeof(vkvg_color_t)); - - if (lastPat && lastPat->type == VKVG_PATTERN_TYPE_SURFACE){ + if (lastPat->type == VKVG_PATTERN_TYPE_SURFACE){ + //unbind current source surface by replacing it with empty texture _flush_cmd_buff (ctx); _update_descriptor_set (ctx, ctx->pSurf->dev->emptyImg, ctx->dsSrc); - //_init_cmd_buff (ctx);//push csts updated by init - }//else - //_update_push_constants (ctx); - + } break; case VKVG_PATTERN_TYPE_SURFACE: { + _flush_undrawn_vertices(ctx); + VkvgSurface surf = (VkvgSurface)pat->data; //flush ctx in two steps to add the src transitioning in the cmd buff if (ctx->cmdStarted){//transition of img without appropriate dependencies in subpass must be done outside renderpass. - _flush_undrawn_vertices (ctx);//ensure all vertices are flushed + //_flush_undrawn_vertices (ctx);//ensure all vertices are flushed _end_render_pass (ctx); _flush_vertices_caches (ctx); }else { @@ -582,45 +584,33 @@ void _update_cur_pattern (VkvgContext ctx, VkvgPattern pat) { ctx->source = surf->img; - //if (vkh_image_get_sampler (ctx->source) == VK_NULL_HANDLE){ - VkSamplerAddressMode addrMode = 0; - VkFilter filter = VK_FILTER_NEAREST; - switch (pat->extend) { - case VKVG_EXTEND_NONE: - addrMode = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER; - break; - case VKVG_EXTEND_PAD: - addrMode = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; - break; - case VKVG_EXTEND_REPEAT: - addrMode = VK_SAMPLER_ADDRESS_MODE_REPEAT; - break; - case VKVG_EXTEND_REFLECT: - addrMode = VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT; - break; - } - switch (pat->filter) { - case VKVG_FILTER_BILINEAR: - case VKVG_FILTER_BEST: - filter = VK_FILTER_LINEAR; - break; - default: - filter = VK_FILTER_NEAREST; - break; - } - vkh_image_create_sampler(ctx->source, filter, filter, + VkSamplerAddressMode addrMode = 0; + VkFilter filter = VK_FILTER_NEAREST; + switch (pat->extend) { + case VKVG_EXTEND_NONE: + addrMode = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER; + break; + case VKVG_EXTEND_PAD: + addrMode = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + break; + case VKVG_EXTEND_REPEAT: + addrMode = VK_SAMPLER_ADDRESS_MODE_REPEAT; + break; + case VKVG_EXTEND_REFLECT: + addrMode = VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT; + break; + } + switch (pat->filter) { + case VKVG_FILTER_BILINEAR: + case VKVG_FILTER_BEST: + filter = VK_FILTER_LINEAR; + break; + default: + filter = VK_FILTER_NEAREST; + break; + } + vkh_image_create_sampler(ctx->source, filter, filter, VK_SAMPLER_MIPMAP_MODE_NEAREST, addrMode); - //} - /*if (vkh_image_get_layout (ctx->source) != VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL){ - vkh_cmd_begin (ctx->cmd,VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); - - vkh_image_set_layout (ctx->cmd, ctx->source, VK_IMAGE_ASPECT_COLOR_BIT, - VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, - VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT); - vkh_cmd_end (ctx->cmd); - - _submit_wait_and_reset_cmd (ctx); - }*/ _update_descriptor_set (ctx, ctx->source, ctx->dsSrc); @@ -648,11 +638,9 @@ void _update_cur_pattern (VkvgContext ctx, VkvgPattern pat) { //to do, scale radial radiuses in cp[2] memcpy(ctx->uboGrad.allocInfo.pMappedData , &grad, sizeof(vkvg_gradient_t)); - - //_init_cmd_buff (ctx); break; } - + ctx->pushCstDirty = true; if (lastPat) vkvg_pattern_destroy (lastPat); } @@ -1189,9 +1177,9 @@ void _draw_full_screen_quad (VkvgContext ctx, bool useScissor) { CmdSetScissor(ctx->cmd, 0, 1, &r); } VKVG_IBO_INDEX_TYPE firstVertIdx = (VKVG_IBO_INDEX_TYPE)ctx->vertCount; - Vertex v = {{0,0},ctx->curColor}; - for(int i=0; i<3; i++) - _add_vertex(ctx, v); + _add_vertexf(ctx, -1, -1); + _add_vertexf(ctx, 3, -1); + _add_vertexf(ctx, -1, 3); CmdPushConstants(ctx->cmd, ctx->pSurf->dev->pipelineLayout, VK_SHADER_STAGE_VERTEX_BIT, 28, 4,&one); diff --git a/src/vkvg_pattern.c b/src/vkvg_pattern.c index 0f4ebd3..92634e4 100644 --- a/src/vkvg_pattern.c +++ b/src/vkvg_pattern.c @@ -25,137 +25,100 @@ #include "vkvg_device_internal.h" #include "vkvg_pattern.h" -VkvgPattern vkvg_pattern_create(){ - VkvgPattern pat = (vkvg_pattern_t*)calloc(1, sizeof(vkvg_pattern_t)); - pat->type = VKVG_PATTERN_TYPE_SOLID; - pat->extend = VKVG_EXTEND_NONE; - pat->data = (vkvg_color_t*)calloc(1,sizeof(vkvg_color_t)); - - pat->references = 1; - - return pat; -} -VkvgPattern vkvg_pattern_create_rgba (float r, float g, float b, float a){ - VkvgPattern pat = (vkvg_pattern_t*)calloc(1, sizeof(vkvg_pattern_t)); - pat->type = VKVG_PATTERN_TYPE_SOLID; - pat->extend = VKVG_EXTEND_NONE; - vkvg_color_t* c = (vkvg_color_t*)calloc(1,sizeof(vkvg_color_t)); - -#ifdef VKVG_PREMULT_ALPHA - c->r = r * a; - c->g = g * a; - c->b = b * a; - c->a = a; -#else - c->r = r; - c->g = g; - c->b = b; - c->a = a; -#endif - - pat->data = c; - - pat->references = 1; - - return pat; -} -VkvgPattern vkvg_pattern_create_rgb (float r, float g, float b){ - return vkvg_pattern_create_rgba (r,g,b,1.f); -} VkvgPattern vkvg_pattern_create_for_surface (VkvgSurface surf){ - VkvgPattern pat = (vkvg_pattern_t*)calloc(1, sizeof(vkvg_pattern_t)); - pat->type = VKVG_PATTERN_TYPE_SURFACE; - pat->extend = VKVG_EXTEND_NONE; - pat->data = surf; + VkvgPattern pat = (vkvg_pattern_t*)calloc(1, sizeof(vkvg_pattern_t)); + pat->type = VKVG_PATTERN_TYPE_SURFACE; + pat->extend = VKVG_EXTEND_NONE; + pat->data = surf; - pat->references = 1; - vkvg_surface_reference (surf); + pat->references = 1; + vkvg_surface_reference (surf); - return pat; + return pat; } VkvgPattern vkvg_pattern_create_linear (float x0, float y0, float x1, float y1){ - VkvgPattern pat = (vkvg_pattern_t*)calloc(1, sizeof(vkvg_pattern_t)); - pat->type = VKVG_PATTERN_TYPE_LINEAR; - pat->extend = VKVG_EXTEND_PAD; - vkvg_gradient_t* grad = (vkvg_gradient_t*)calloc(1,sizeof(vkvg_gradient_t)); + VkvgPattern pat = (vkvg_pattern_t*)calloc(1, sizeof(vkvg_pattern_t)); + pat->type = VKVG_PATTERN_TYPE_LINEAR; + pat->extend = VKVG_EXTEND_PAD; + vkvg_gradient_t* grad = (vkvg_gradient_t*)calloc(1,sizeof(vkvg_gradient_t)); - vec4 cp0 = {x0, y0}, cp1 = {x1, y1}; - grad->cp[0] = cp0; - grad->cp[1] = cp1; + vec4 cp0 = {x0, y0}, cp1 = {x1, y1}; + grad->cp[0] = cp0; + grad->cp[1] = cp1; - pat->data = grad; + pat->data = grad; - pat->references = 1; + pat->references = 1; - return pat; + return pat; } VkvgPattern vkvg_pattern_create_radial (float cx0, float cy0, float radius0, - float cx1, float cy1, float radius1){ - VkvgPattern pat = (vkvg_pattern_t*)calloc(1, sizeof(vkvg_pattern_t)); - pat->type = VKVG_PATTERN_TYPE_RADIAL; - pat->extend = VKVG_EXTEND_PAD; + float cx1, float cy1, float radius1){ + VkvgPattern pat = (vkvg_pattern_t*)calloc(1, sizeof(vkvg_pattern_t)); + pat->type = VKVG_PATTERN_TYPE_RADIAL; + pat->extend = VKVG_EXTEND_PAD; - vkvg_gradient_t* grad = (vkvg_gradient_t*)calloc(1,sizeof(vkvg_gradient_t)); + vkvg_gradient_t* grad = (vkvg_gradient_t*)calloc(1,sizeof(vkvg_gradient_t)); - vec4 cp0 = {cx0, cy0}, cp1 = {cx1, cy1}, rads = {radius0, radius1}; - grad->cp[0] = cp0; - grad->cp[1] = cp1; - grad->cp[2] = rads; + vec4 cp0 = {cx0, cy0}, cp1 = {cx1, cy1}, rads = {radius0, radius1}; + grad->cp[0] = cp0; + grad->cp[1] = cp1; + grad->cp[2] = rads; - pat->data = grad; + pat->data = grad; - pat->references = 1; + pat->references = 1; - return pat; + return pat; } VkvgPattern vkvg_pattern_reference (VkvgPattern pat) { - pat->references++; - return pat; + pat->references++; + return pat; } uint32_t vkvg_pattern_get_reference_count (VkvgPattern pat) { - return pat->references; + return pat->references; } void vkvg_pattern_add_color_stop (VkvgPattern pat, float offset, float r, float g, float b, float a) { - if (pat->type == VKVG_PATTERN_TYPE_SURFACE || pat->type == VKVG_PATTERN_TYPE_SOLID){ + if (pat->type == VKVG_PATTERN_TYPE_SURFACE || pat->type == VKVG_PATTERN_TYPE_SOLID){ - return; - } + return; + } - vkvg_gradient_t* grad = (vkvg_gradient_t*)pat->data; - vkvg_color_t c = {r,g,b,a}; - grad->colors[grad->count] = c; - grad->stops[grad->count].r = offset; - grad->count++; + vkvg_gradient_t* grad = (vkvg_gradient_t*)pat->data; + vkvg_color_t c = {r,g,b,a}; + grad->colors[grad->count] = c; + grad->stops[grad->count].r = offset; + grad->count++; } void vkvg_pattern_set_extend (VkvgPattern pat, vkvg_extend_t extend){ - pat->extend = extend; + pat->extend = extend; } void vkvg_pattern_set_filter (VkvgPattern pat, vkvg_filter_t filter){ - pat->filter = filter; + pat->filter = filter; } vkvg_extend_t vkvg_pattern_get_extend (VkvgPattern pat){ - return pat->extend; + return pat->extend; } vkvg_filter_t vkvg_pattern_get_filter (VkvgPattern pat){ - return pat->filter; + return pat->filter; } vkvg_pattern_type_t vkvg_pattern_get_type (VkvgPattern pat){ - return pat->type; + return pat->type; } void vkvg_pattern_destroy(VkvgPattern pat) { - pat->references--; - if (pat->references > 0) - return; + pat->references--; + if (pat->references > 0) + return; - if (pat->type == VKVG_PATTERN_TYPE_SURFACE) { - VkvgSurface surf = (VkvgSurface)pat->data; - vkvg_surface_destroy (surf); - }else - free (pat->data); + if (pat->type == VKVG_PATTERN_TYPE_SURFACE) { + VkvgSurface surf = (VkvgSurface)pat->data; + vkvg_surface_destroy (surf); + }else + free (pat->data); - free(pat); + free(pat); } diff --git a/tests/clip.c b/tests/clip.c index 8a5efbd..3eb6fbe 100644 --- a/tests/clip.c +++ b/tests/clip.c @@ -1,9 +1,91 @@ #include "test.h" +void clipped_paint_ec () { + VkvgContext ctx = vkvg_create(surf); + vkvg_set_fill_rule(ctx, VKVG_FILL_RULE_NON_ZERO); + vkvg_set_source_rgb(ctx,1,0,0); + vkvg_paint(ctx); + vkvg_set_source_rgb(ctx,0,1,0); + vkvg_rectangle(ctx, 100,100,300,200); + vkvg_clip(ctx); + vkvg_paint(ctx); + vkvg_destroy(ctx); +} +void clipped_paint_eo () { + VkvgContext ctx = vkvg_create(surf); + vkvg_set_fill_rule(ctx, VKVG_FILL_RULE_EVEN_ODD); + vkvg_set_source_rgb(ctx,1,0,0); + vkvg_paint(ctx); + vkvg_set_source_rgb(ctx,0,1,0); + vkvg_rectangle(ctx, 100,100,300,200); + vkvg_clip(ctx); + vkvg_paint(ctx); + + vkvg_destroy(ctx); +} +void clipped_paint2_ec () { + VkvgContext ctx = vkvg_create(surf); + vkvg_set_fill_rule(ctx, VKVG_FILL_RULE_NON_ZERO); + vkvg_set_source_rgb(ctx,1,0,0); + vkvg_paint(ctx); + vkvg_set_source_rgb(ctx,0,1,0); + vkvg_rectangle(ctx, 100,100,300,200); + vkvg_clip(ctx); + vkvg_paint(ctx); + + vkvg_reset_clip(ctx); + vkvg_rectangle(ctx, 200,200,300,200); + vkvg_set_source_rgb(ctx,0,0,1); + vkvg_paint(ctx); + + vkvg_destroy(ctx); +} +void clipped_paint2_eo () { + VkvgContext ctx = vkvg_create(surf); + vkvg_set_fill_rule(ctx, VKVG_FILL_RULE_EVEN_ODD); + vkvg_set_source_rgb(ctx,1,0,0); + vkvg_paint(ctx); + vkvg_set_source_rgb(ctx,0,1,0); + vkvg_rectangle(ctx, 100,100,300,200); + vkvg_clip(ctx); + vkvg_paint(ctx); + vkvg_reset_clip(ctx); + vkvg_rectangle(ctx, 200,200,300,200); + vkvg_set_source_rgb(ctx,0,0,1); + vkvg_paint(ctx); + + vkvg_destroy(ctx); +} +void clipped_transformed_ec () { + VkvgContext ctx = vkvg_create(surf); + vkvg_set_fill_rule(ctx, VKVG_FILL_RULE_NON_ZERO); + vkvg_set_source_rgb(ctx,1,0,0); + vkvg_paint(ctx); + vkvg_rotate(ctx,0.2f); + vkvg_set_source_rgb(ctx,0,1,0); + vkvg_rectangle(ctx, 100,100,300,200); + vkvg_clip(ctx); + vkvg_paint(ctx); + vkvg_destroy(ctx); +} +void clipped_transformed_eo () { + VkvgContext ctx = vkvg_create(surf); + vkvg_set_fill_rule(ctx, VKVG_FILL_RULE_EVEN_ODD); + vkvg_set_source_rgb(ctx,1,0,0); + vkvg_paint(ctx); + vkvg_rotate(ctx,0.2f); + vkvg_set_source_rgb(ctx,0,1,0); + vkvg_rectangle(ctx, 100,100,300,200); + vkvg_clip(ctx); + vkvg_paint(ctx); + + vkvg_destroy(ctx); +} + void test_clip(){ VkvgContext ctx = vkvg_create(surf); vkvg_clear(ctx); - + vkvg_set_fill_rule(ctx, VKVG_FILL_RULE_EVEN_ODD); vkvg_move_to(ctx,10,10); vkvg_line_to(ctx,400,150); vkvg_line_to(ctx,900,10); @@ -19,6 +101,8 @@ void test_clip(){ vkvg_set_operator(ctx, VKVG_OPERATOR_OVER); vkvg_set_source_rgb(ctx,1,0,0); + //vkvg_set_line_width(ctx,10); + //vkvg_stroke(ctx); vkvg_paint(ctx); vkvg_destroy(ctx); @@ -75,6 +159,12 @@ void test_clip2(){ vkvg_destroy(ctx); } int main(int argc, char *argv[]) { + PERFORM_TEST (clipped_paint_ec, argc, argv); + PERFORM_TEST (clipped_paint_eo, argc, argv); + PERFORM_TEST (clipped_transformed_ec, argc, argv); + PERFORM_TEST (clipped_transformed_eo, argc, argv); + PERFORM_TEST (clipped_paint2_ec, argc, argv); + PERFORM_TEST (clipped_paint2_eo, argc, argv); PERFORM_TEST (test_clip, argc, argv); PERFORM_TEST (test_clip2, argc, argv); return 0; diff --git a/tests/img_surf.c b/tests/img_surf.c index ad0abc4..fe9e9df 100644 --- a/tests/img_surf.c +++ b/tests/img_surf.c @@ -2,6 +2,7 @@ void paint () { VkvgContext ctx = vkvg_create(surf); VkvgSurface imgSurf = vkvg_surface_create_from_image(device, "data/miroir.jpg"); + //vkvg_surface_write_to_png(imgSurf, "/tmp/test.png"); vkvg_set_source_surface(ctx, imgSurf, 0, 0); vkvg_paint(ctx); @@ -85,7 +86,7 @@ void test(){ //vkvg_rotate(ctx,M_PI_4); vkvg_set_line_width(ctx,20.f); - vkvg_set_source_rgba(ctx,1,0,0,1); + //vkvg_set_source_rgba(ctx,1,0,0,1); vkvg_arc(ctx,200,200,200,0,2.f*M_PIF); vkvg_new_sub_path(ctx); vkvg_arc(ctx,200,200,100,0,2.f*M_PIF); diff --git a/tests/paint_surf.c b/tests/paint_surf.c new file mode 100644 index 0000000..31bad57 --- /dev/null +++ b/tests/paint_surf.c @@ -0,0 +1,109 @@ +#include "test.h" + +vkvg_fill_rule_t fillrule = VKVG_FILL_RULE_NON_ZERO; +float lineWidth = 20.f; + +VkvgSurface createSurf (uint32_t width, uint32_t height) { + VkvgSurface s = vkvg_surface_create(device, width, height); + VkvgContext ctx = vkvg_create(s); + vkvg_set_fill_rule(ctx,fillrule); + vkvg_set_line_width(ctx,lineWidth); + float hlw = lineWidth/2.f; + vkvg_rectangle(ctx,hlw,hlw,(float)width-hlw,(float)height-hlw); + vkvg_set_source_rgba(ctx,0,1,0,0.5); + vkvg_fill_preserve(ctx); + vkvg_set_source_rgba(ctx,0,0,1,0.5); + vkvg_stroke(ctx); + vkvg_destroy(ctx); + return s; +} + +void paint(){ + VkvgSurface src = createSurf(256,256); + VkvgContext ctx = vkvg_create(surf); + vkvg_set_fill_rule(ctx,fillrule); + vkvg_set_source_surface(ctx, src, 0, 0); + vkvg_paint(ctx); + vkvg_destroy(ctx); + vkvg_surface_destroy(src); +} +void paint_with_offset(){ + VkvgSurface src = createSurf(256,256); + VkvgContext ctx = vkvg_create(surf); + vkvg_set_fill_rule(ctx,fillrule); + vkvg_set_source_surface(ctx, src, 100, 100); + vkvg_paint(ctx); + vkvg_destroy(ctx); + vkvg_surface_destroy(src); +} +void paint_multiple(){ + VkvgSurface src = createSurf(256,256); + VkvgContext ctx = vkvg_create(surf); + vkvg_set_fill_rule(ctx,fillrule); + for(int i=0;i<10;i++) { + vkvg_set_source_surface(ctx, src, i * 20, i * 20); + vkvg_paint(ctx); + } + vkvg_destroy(ctx); + vkvg_surface_destroy(src); +} +void paint_with_rotation(){ + VkvgSurface src = createSurf(256,256); + VkvgContext ctx = vkvg_create(surf); + vkvg_set_fill_rule(ctx,fillrule); + vkvg_set_source_surface(ctx, src, 0, 0); + vkvg_rotate(ctx, 45); + vkvg_paint(ctx); + vkvg_destroy(ctx); + vkvg_surface_destroy(src); +} +void paint_with_scale(){ + VkvgSurface src = createSurf(256,256); + VkvgContext ctx = vkvg_create(surf); + vkvg_set_fill_rule(ctx,fillrule); + vkvg_set_source_surface(ctx, src, 0, 0); + vkvg_scale (ctx, 0.2f,0.2f); + vkvg_paint(ctx); + vkvg_destroy(ctx); + vkvg_surface_destroy(src); +} +void paint_rect(){ + VkvgSurface src = createSurf(256,256); + VkvgContext ctx = vkvg_create(surf); + vkvg_set_fill_rule(ctx,fillrule); + vkvg_set_source_surface(ctx, src, 0, 0); + vkvg_rectangle(ctx,100,100,300,200); + vkvg_paint(ctx); + vkvg_destroy(ctx); + vkvg_surface_destroy(src); +} +//TODO:test failed: full screen paint instead of rotated rect +void paint_rect_with_rotation(){ + VkvgContext ctx = vkvg_create(surf); + vkvg_set_fill_rule(ctx,fillrule); + vkvg_rotate(ctx, 45); + vkvg_set_source_rgba(ctx,1,0,0,1); + vkvg_rectangle(ctx,100,100,300,200); + vkvg_paint(ctx); + vkvg_destroy(ctx); +} +void paint_rect_with_scale(){ + VkvgContext ctx = vkvg_create(surf); + vkvg_set_fill_rule(ctx,fillrule); + vkvg_scale (ctx, 0.2f,0.2f); + vkvg_set_source_rgba(ctx,1,0,0,1); + vkvg_rectangle(ctx,100,100,300,200); + vkvg_paint(ctx); + vkvg_destroy(ctx); +} +int main(int argc, char *argv[]) { + PERFORM_TEST (paint, argc, argv); + PERFORM_TEST (paint_with_offset, argc, argv); + PERFORM_TEST (paint_multiple, argc, argv); + PERFORM_TEST (paint_with_rotation, argc, argv); + PERFORM_TEST (paint_with_scale, argc, argv); + PERFORM_TEST (paint_rect, argc, argv); + /*PERFORM_TEST (paint_rect_with_rotation, argc, argv); + PERFORM_TEST (paint_rect_with_scale, argc, argv);*/ + return 0; +} diff --git a/tests/test1.c b/tests/test1.c index 5fb17bf..097d51e 100644 --- a/tests/test1.c +++ b/tests/test1.c @@ -356,7 +356,7 @@ void cairo_tests () { cairo_print_arc_neg(ctx); vkvg_translate(ctx,250,0); - cairo_test_text(ctx); + //cairo_test_text(ctx); vkvg_translate(ctx,-500,250); cairo_test_curves(ctx); -- 2.47.3