Merge branch 'imagelist-scale-factor'

Scale factor-related fixes to wxImageList and Mac wxDataViewCtrl.

See #22211.
This commit is contained in:
Vadim Zeitlin
2022-03-23 13:59:46 +01:00
8 changed files with 646 additions and 261 deletions

View File

@@ -0,0 +1,542 @@
/* application_exit.svg - 8602 bytes */
static const unsigned char application_exit_svg_data[] = {
0x3c, 0x73, 0x76, 0x67, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x32, 0x30,
0x30, 0x30, 0x2f, 0x73, 0x76, 0x67, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6c,
0x69, 0x6e, 0x6b, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e,
0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x78, 0x6c, 0x69, 0x6e,
0x6b, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x34, 0x38, 0x22, 0x20, 0x68, 0x65,
0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x34, 0x38, 0x22, 0x3e, 0x3c, 0x64, 0x65, 0x66, 0x73, 0x3e,
0x3c, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x20,
0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x3d, 0x22, 0x75,
0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x6e, 0x55, 0x73, 0x65, 0x22, 0x20, 0x79,
0x32, 0x3d, 0x22, 0x32, 0x37, 0x2e, 0x37, 0x35, 0x39, 0x22, 0x20, 0x78, 0x32, 0x3d, 0x22, 0x31,
0x38, 0x2e, 0x30, 0x33, 0x31, 0x22, 0x20, 0x79, 0x31, 0x3d, 0x22, 0x31, 0x39, 0x2e, 0x38, 0x30,
0x34, 0x22, 0x20, 0x78, 0x31, 0x3d, 0x22, 0x34, 0x36, 0x2e, 0x38, 0x34, 0x36, 0x22, 0x20, 0x69,
0x64, 0x3d, 0x22, 0x6c, 0x22, 0x20, 0x78, 0x6c, 0x69, 0x6e, 0x6b, 0x3a, 0x68, 0x72, 0x65, 0x66,
0x3d, 0x22, 0x23, 0x63, 0x22, 0x20, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x72,
0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x3d, 0x22, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61,
0x74, 0x65, 0x28, 0x2d, 0x31, 0x32, 0x2e, 0x30, 0x32, 0x29, 0x22, 0x2f, 0x3e, 0x3c, 0x6c, 0x69,
0x6e, 0x65, 0x61, 0x72, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x3d,
0x22, 0x69, 0x22, 0x3e, 0x3c, 0x73, 0x74, 0x6f, 0x70, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d,
0x22, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x62, 0x61, 0x62,
0x64, 0x62, 0x36, 0x3b, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79,
0x3a, 0x31, 0x22, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x30, 0x22, 0x2f, 0x3e,
0x3c, 0x73, 0x74, 0x6f, 0x70, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x6f,
0x70, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x62, 0x61, 0x62, 0x64, 0x62, 0x36, 0x3b,
0x73, 0x74, 0x6f, 0x70, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x30, 0x22, 0x20,
0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x31, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x6c, 0x69,
0x6e, 0x65, 0x61, 0x72, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x3e, 0x3c, 0x6c, 0x69,
0x6e, 0x65, 0x61, 0x72, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x3d,
0x22, 0x67, 0x22, 0x3e, 0x3c, 0x73, 0x74, 0x6f, 0x70, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74,
0x3d, 0x22, 0x30, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x6f, 0x70,
0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x63, 0x65, 0x63, 0x65, 0x63, 0x65, 0x3b, 0x73,
0x74, 0x6f, 0x70, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x22, 0x2f, 0x3e,
0x3c, 0x73, 0x74, 0x6f, 0x70, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x31, 0x22,
0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x63, 0x6f, 0x6c,
0x6f, 0x72, 0x3a, 0x23, 0x39, 0x65, 0x39, 0x65, 0x39, 0x65, 0x3b, 0x73, 0x74, 0x6f, 0x70, 0x2d,
0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x6c, 0x69,
0x6e, 0x65, 0x61, 0x72, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x3e, 0x3c, 0x6c, 0x69,
0x6e, 0x65, 0x61, 0x72, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x3d,
0x22, 0x66, 0x22, 0x3e, 0x3c, 0x73, 0x74, 0x6f, 0x70, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74,
0x3d, 0x22, 0x30, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x6f, 0x70,
0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x66, 0x66, 0x66, 0x3b, 0x73, 0x74, 0x6f, 0x70,
0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x22, 0x2f, 0x3e, 0x3c, 0x73, 0x74,
0x6f, 0x70, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x73, 0x74,
0x79, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a,
0x23, 0x66, 0x66, 0x66, 0x3b, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74,
0x79, 0x3a, 0x30, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72,
0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x3e, 0x3c, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72,
0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x65, 0x22, 0x3e, 0x3c, 0x73,
0x74, 0x6f, 0x70, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x73,
0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72,
0x3a, 0x23, 0x35, 0x32, 0x35, 0x32, 0x35, 0x32, 0x3b, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x6f, 0x70,
0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x22, 0x2f, 0x3e, 0x3c, 0x73, 0x74, 0x6f, 0x70, 0x20,
0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65,
0x3d, 0x22, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x35, 0x32,
0x35, 0x32, 0x35, 0x32, 0x3b, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74,
0x79, 0x3a, 0x30, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72,
0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x3e, 0x3c, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72,
0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x22, 0x3e, 0x3c, 0x73,
0x74, 0x6f, 0x70, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x6f, 0x70, 0x2d,
0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x34, 0x65, 0x34, 0x65, 0x34, 0x65, 0x3b, 0x73, 0x74,
0x6f, 0x70, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x22, 0x20, 0x6f, 0x66,
0x66, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x30, 0x22, 0x2f, 0x3e, 0x3c, 0x73, 0x74, 0x6f, 0x70, 0x20,
0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x63, 0x6f, 0x6c, 0x6f,
0x72, 0x3a, 0x23, 0x36, 0x31, 0x36, 0x31, 0x36, 0x31, 0x3b, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x6f,
0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x30, 0x22, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74,
0x3d, 0x22, 0x31, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72,
0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x3e, 0x3c, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72,
0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x63, 0x22, 0x3e, 0x3c, 0x73,
0x74, 0x6f, 0x70, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x73,
0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72,
0x3a, 0x23, 0x34, 0x65, 0x34, 0x65, 0x34, 0x65, 0x3b, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x6f, 0x70,
0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x22, 0x2f, 0x3e, 0x3c, 0x73, 0x74, 0x6f, 0x70, 0x20,
0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65,
0x3d, 0x22, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x61, 0x62,
0x61, 0x62, 0x61, 0x62, 0x3b, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74,
0x79, 0x3a, 0x31, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72,
0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x3e, 0x3c, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72,
0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x62, 0x22, 0x3e, 0x3c, 0x73,
0x74, 0x6f, 0x70, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x6f, 0x70, 0x2d,
0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30, 0x30, 0x30, 0x3b, 0x73, 0x74, 0x6f, 0x70, 0x2d,
0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x22, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65,
0x74, 0x3d, 0x22, 0x30, 0x22, 0x2f, 0x3e, 0x3c, 0x73, 0x74, 0x6f, 0x70, 0x20, 0x73, 0x74, 0x79,
0x6c, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23,
0x30, 0x30, 0x30, 0x3b, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79,
0x3a, 0x30, 0x22, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x31, 0x22, 0x2f, 0x3e,
0x3c, 0x2f, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74,
0x3e, 0x3c, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74,
0x20, 0x69, 0x64, 0x3d, 0x22, 0x61, 0x22, 0x3e, 0x3c, 0x73, 0x74, 0x6f, 0x70, 0x20, 0x73, 0x74,
0x79, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a,
0x23, 0x66, 0x66, 0x66, 0x3b, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74,
0x79, 0x3a, 0x31, 0x22, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x30, 0x22, 0x2f,
0x3e, 0x3c, 0x73, 0x74, 0x6f, 0x70, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x74,
0x6f, 0x70, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x66, 0x66, 0x66, 0x3b, 0x73, 0x74,
0x6f, 0x70, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x30, 0x22, 0x20, 0x6f, 0x66,
0x66, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x31, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x6e, 0x65,
0x61, 0x72, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x3e, 0x3c, 0x6c, 0x69, 0x6e, 0x65,
0x61, 0x72, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68,
0x22, 0x3e, 0x3c, 0x73, 0x74, 0x6f, 0x70, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x73,
0x74, 0x6f, 0x70, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x66, 0x66, 0x66, 0x3b, 0x73,
0x74, 0x6f, 0x70, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x22, 0x20, 0x6f,
0x66, 0x66, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x30, 0x22, 0x2f, 0x3e, 0x3c, 0x73, 0x74, 0x6f, 0x70,
0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x63, 0x6f, 0x6c,
0x6f, 0x72, 0x3a, 0x23, 0x66, 0x66, 0x66, 0x3b, 0x73, 0x74, 0x6f, 0x70, 0x2d, 0x6f, 0x70, 0x61,
0x63, 0x69, 0x74, 0x79, 0x3a, 0x30, 0x22, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3d, 0x22,
0x31, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72, 0x61, 0x64,
0x69, 0x65, 0x6e, 0x74, 0x3e, 0x3c, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72, 0x61, 0x64,
0x69, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x69, 0x6e, 0x6b, 0x3a, 0x68, 0x72, 0x65, 0x66, 0x3d,
0x22, 0x23, 0x66, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x22, 0x20, 0x67, 0x72, 0x61, 0x64,
0x69, 0x65, 0x6e, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x3d, 0x22, 0x75, 0x73, 0x65, 0x72, 0x53,
0x70, 0x61, 0x63, 0x65, 0x4f, 0x6e, 0x55, 0x73, 0x65, 0x22, 0x20, 0x78, 0x31, 0x3d, 0x22, 0x38,
0x2e, 0x37, 0x36, 0x22, 0x20, 0x79, 0x31, 0x3d, 0x22, 0x31, 0x33, 0x2e, 0x36, 0x36, 0x33, 0x22,
0x20, 0x78, 0x32, 0x3d, 0x22, 0x31, 0x39, 0x2e, 0x37, 0x35, 0x36, 0x22, 0x20, 0x79, 0x32, 0x3d,
0x22, 0x34, 0x33, 0x2e, 0x34, 0x35, 0x22, 0x20, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74,
0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x3d, 0x22, 0x6d, 0x61, 0x74, 0x72, 0x69,
0x78, 0x28, 0x2e, 0x39, 0x36, 0x38, 0x37, 0x32, 0x20, 0x30, 0x20, 0x30, 0x20, 0x2e, 0x39, 0x36,
0x38, 0x39, 0x32, 0x20, 0x2e, 0x33, 0x36, 0x32, 0x20, 0x2e, 0x37, 0x33, 0x38, 0x29, 0x22, 0x2f,
0x3e, 0x3c, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74,
0x20, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f,
0x72, 0x6d, 0x3d, 0x22, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x2d, 0x31,
0x33, 0x2e, 0x31, 0x33, 0x37, 0x29, 0x22, 0x20, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74,
0x55, 0x6e, 0x69, 0x74, 0x73, 0x3d, 0x22, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65,
0x4f, 0x6e, 0x55, 0x73, 0x65, 0x22, 0x20, 0x79, 0x32, 0x3d, 0x22, 0x32, 0x34, 0x2e, 0x37, 0x36,
0x35, 0x22, 0x20, 0x78, 0x32, 0x3d, 0x22, 0x33, 0x34, 0x2e, 0x30, 0x30, 0x37, 0x22, 0x20, 0x79,
0x31, 0x3d, 0x22, 0x31, 0x39, 0x2e, 0x31, 0x30, 0x38, 0x22, 0x20, 0x78, 0x31, 0x3d, 0x22, 0x33,
0x31, 0x2e, 0x38, 0x35, 0x33, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6e, 0x22, 0x20, 0x78, 0x6c,
0x69, 0x6e, 0x6b, 0x3a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x65, 0x22, 0x2f, 0x3e, 0x3c,
0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x67,
0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x3d, 0x22, 0x75, 0x73,
0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x6e, 0x55, 0x73, 0x65, 0x22, 0x20, 0x79, 0x32,
0x3d, 0x22, 0x31, 0x38, 0x2e, 0x30, 0x36, 0x34, 0x22, 0x20, 0x78, 0x32, 0x3d, 0x22, 0x33, 0x33,
0x2e, 0x37, 0x31, 0x31, 0x22, 0x20, 0x79, 0x31, 0x3d, 0x22, 0x32, 0x31, 0x2e, 0x35, 0x31, 0x31,
0x22, 0x20, 0x78, 0x31, 0x3d, 0x22, 0x33, 0x31, 0x2e, 0x30, 0x37, 0x39, 0x22, 0x20, 0x69, 0x64,
0x3d, 0x22, 0x6f, 0x22, 0x20, 0x78, 0x6c, 0x69, 0x6e, 0x6b, 0x3a, 0x68, 0x72, 0x65, 0x66, 0x3d,
0x22, 0x23, 0x67, 0x22, 0x20, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x61,
0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x3d, 0x22, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74,
0x65, 0x28, 0x2d, 0x31, 0x32, 0x2e, 0x30, 0x32, 0x29, 0x22, 0x2f, 0x3e, 0x3c, 0x6c, 0x69, 0x6e,
0x65, 0x61, 0x72, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x69, 0x6e,
0x6b, 0x3a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x68, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
0x70, 0x22, 0x20, 0x78, 0x31, 0x3d, 0x22, 0x34, 0x30, 0x2e, 0x32, 0x35, 0x22, 0x20, 0x79, 0x31,
0x3d, 0x22, 0x33, 0x31, 0x2e, 0x36, 0x32, 0x35, 0x22, 0x20, 0x78, 0x32, 0x3d, 0x22, 0x34, 0x30,
0x2e, 0x32, 0x35, 0x22, 0x20, 0x79, 0x32, 0x3d, 0x22, 0x34, 0x33, 0x2e, 0x32, 0x35, 0x22, 0x20,
0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x3d, 0x22, 0x75,
0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x6e, 0x55, 0x73, 0x65, 0x22, 0x20, 0x67,
0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d,
0x3d, 0x22, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x2d, 0x31, 0x32, 0x2e,
0x30, 0x32, 0x29, 0x22, 0x2f, 0x3e, 0x3c, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x47, 0x72, 0x61,
0x64, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x69, 0x6e, 0x6b, 0x3a, 0x68, 0x72, 0x65, 0x66,
0x3d, 0x22, 0x23, 0x69, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6a, 0x22, 0x20, 0x78, 0x31, 0x3d,
0x22, 0x31, 0x38, 0x2e, 0x37, 0x32, 0x39, 0x22, 0x20, 0x79, 0x31, 0x3d, 0x22, 0x34, 0x34, 0x22,
0x20, 0x78, 0x32, 0x3d, 0x22, 0x31, 0x38, 0x2e, 0x37, 0x32, 0x39, 0x22, 0x20, 0x79, 0x32, 0x3d,
0x22, 0x32, 0x39, 0x2e, 0x30, 0x36, 0x38, 0x22, 0x20, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e,
0x74, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x3d, 0x22, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63,
0x65, 0x4f, 0x6e, 0x55, 0x73, 0x65, 0x22, 0x2f, 0x3e, 0x3c, 0x72, 0x61, 0x64, 0x69, 0x61, 0x6c,
0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x69, 0x6e, 0x6b, 0x3a, 0x68,
0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x62, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x71, 0x22, 0x20,
0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x3d, 0x22, 0x75,
0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x6e, 0x55, 0x73, 0x65, 0x22, 0x20, 0x67,
0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d,
0x3d, 0x22, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x28, 0x31, 0x20, 0x30, 0x20, 0x30, 0x20, 0x2e,
0x35, 0x33, 0x36, 0x37, 0x32, 0x20, 0x30, 0x20, 0x31, 0x36, 0x2e, 0x38, 0x37, 0x33, 0x29, 0x22,
0x20, 0x63, 0x78, 0x3d, 0x22, 0x32, 0x34, 0x2e, 0x38, 0x33, 0x37, 0x22, 0x20, 0x63, 0x79, 0x3d,
0x22, 0x33, 0x36, 0x2e, 0x34, 0x32, 0x31, 0x22, 0x20, 0x66, 0x78, 0x3d, 0x22, 0x32, 0x34, 0x2e,
0x38, 0x33, 0x37, 0x22, 0x20, 0x66, 0x79, 0x3d, 0x22, 0x33, 0x36, 0x2e, 0x34, 0x32, 0x31, 0x22,
0x20, 0x72, 0x3d, 0x22, 0x31, 0x35, 0x2e, 0x36, 0x34, 0x35, 0x22, 0x2f, 0x3e, 0x3c, 0x72, 0x61,
0x64, 0x69, 0x61, 0x6c, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x69,
0x6e, 0x6b, 0x3a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x61, 0x22, 0x20, 0x69, 0x64, 0x3d,
0x22, 0x72, 0x22, 0x20, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x55, 0x6e, 0x69, 0x74,
0x73, 0x3d, 0x22, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x6e, 0x55, 0x73,
0x65, 0x22, 0x20, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73,
0x66, 0x6f, 0x72, 0x6d, 0x3d, 0x22, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x28, 0x31, 0x2e, 0x32,
0x35, 0x33, 0x34, 0x34, 0x20, 0x30, 0x20, 0x30, 0x20, 0x2e, 0x39, 0x35, 0x33, 0x39, 0x20, 0x2d,
0x31, 0x35, 0x2e, 0x34, 0x38, 0x20, 0x31, 0x31, 0x2e, 0x32, 0x37, 0x37, 0x29, 0x22, 0x20, 0x63,
0x78, 0x3d, 0x22, 0x31, 0x39, 0x2e, 0x37, 0x30, 0x31, 0x22, 0x20, 0x63, 0x79, 0x3d, 0x22, 0x32,
0x2e, 0x38, 0x39, 0x37, 0x22, 0x20, 0x66, 0x78, 0x3d, 0x22, 0x31, 0x39, 0x2e, 0x37, 0x30, 0x31,
0x22, 0x20, 0x66, 0x79, 0x3d, 0x22, 0x32, 0x2e, 0x38, 0x39, 0x37, 0x22, 0x20, 0x72, 0x3d, 0x22,
0x31, 0x37, 0x2e, 0x31, 0x37, 0x31, 0x22, 0x2f, 0x3e, 0x3c, 0x72, 0x61, 0x64, 0x69, 0x61, 0x6c,
0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e,
0x74, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x3d, 0x22, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63,
0x65, 0x4f, 0x6e, 0x55, 0x73, 0x65, 0x22, 0x20, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74,
0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x3d, 0x22, 0x6d, 0x61, 0x74, 0x72, 0x69,
0x78, 0x28, 0x32, 0x2e, 0x35, 0x36, 0x35, 0x38, 0x32, 0x20, 0x30, 0x20, 0x30, 0x20, 0x31, 0x2e,
0x34, 0x30, 0x33, 0x32, 0x36, 0x20, 0x2d, 0x34, 0x39, 0x2e, 0x38, 0x30, 0x34, 0x20, 0x2d, 0x39,
0x2e, 0x34, 0x38, 0x33, 0x29, 0x22, 0x20, 0x72, 0x3d, 0x22, 0x39, 0x2e, 0x37, 0x32, 0x33, 0x22,
0x20, 0x66, 0x79, 0x3d, 0x22, 0x37, 0x2e, 0x31, 0x34, 0x22, 0x20, 0x66, 0x78, 0x3d, 0x22, 0x32,
0x37, 0x2e, 0x38, 0x38, 0x34, 0x22, 0x20, 0x63, 0x79, 0x3d, 0x22, 0x37, 0x2e, 0x31, 0x34, 0x22,
0x20, 0x63, 0x78, 0x3d, 0x22, 0x32, 0x37, 0x2e, 0x38, 0x38, 0x34, 0x22, 0x20, 0x69, 0x64, 0x3d,
0x22, 0x6d, 0x22, 0x20, 0x78, 0x6c, 0x69, 0x6e, 0x6b, 0x3a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
0x23, 0x64, 0x22, 0x2f, 0x3e, 0x3c, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x78, 0x3d, 0x22,
0x2d, 0x2e, 0x30, 0x36, 0x37, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x2e,
0x31, 0x33, 0x34, 0x22, 0x20, 0x79, 0x3d, 0x22, 0x2d, 0x2e, 0x31, 0x32, 0x22, 0x20, 0x68, 0x65,
0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x31, 0x2e, 0x32, 0x33, 0x39, 0x22, 0x20, 0x69, 0x64, 0x3d,
0x22, 0x6b, 0x22, 0x3e, 0x3c, 0x66, 0x65, 0x47, 0x61, 0x75, 0x73, 0x73, 0x69, 0x61, 0x6e, 0x42,
0x6c, 0x75, 0x72, 0x20, 0x73, 0x74, 0x64, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x3d, 0x22, 0x2e, 0x37, 0x36, 0x39, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x66, 0x69, 0x6c, 0x74, 0x65,
0x72, 0x3e, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x73, 0x3e, 0x3c, 0x72, 0x65, 0x63, 0x74, 0x20, 0x72,
0x79, 0x3d, 0x22, 0x2e, 0x37, 0x30, 0x37, 0x22, 0x20, 0x72, 0x78, 0x3d, 0x22, 0x2e, 0x37, 0x30,
0x37, 0x22, 0x20, 0x79, 0x3d, 0x22, 0x32, 0x2e, 0x35, 0x36, 0x39, 0x22, 0x20, 0x78, 0x3d, 0x22,
0x31, 0x2e, 0x34, 0x38, 0x31, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x34,
0x31, 0x2e, 0x39, 0x34, 0x32, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x33, 0x31,
0x2e, 0x39, 0x39, 0x36, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6f, 0x70, 0x61,
0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30, 0x30,
0x30, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x3a, 0x23, 0x65, 0x65, 0x65, 0x65, 0x65, 0x63, 0x3b, 0x66,
0x69, 0x6c, 0x6c, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x66, 0x69,
0x6c, 0x6c, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x3a, 0x65, 0x76, 0x65, 0x6e, 0x6f, 0x64, 0x64, 0x3b,
0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x3a, 0x23, 0x35, 0x35, 0x35, 0x37, 0x35, 0x33, 0x3b, 0x73,
0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x2e, 0x30, 0x30,
0x30, 0x30, 0x30, 0x30, 0x34, 0x38, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69,
0x6e, 0x65, 0x63, 0x61, 0x70, 0x3a, 0x62, 0x75, 0x74, 0x74, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b,
0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x3a, 0x6d, 0x69, 0x74, 0x65, 0x72,
0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72,
0x6b, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d,
0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x6d, 0x69, 0x64, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d,
0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x64, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73,
0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74,
0x3a, 0x31, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x64, 0x61, 0x73, 0x68, 0x61,
0x72, 0x72, 0x61, 0x79, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65,
0x2d, 0x64, 0x61, 0x73, 0x68, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3a, 0x30, 0x3b, 0x73, 0x74,
0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x76,
0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
0x65, 0x3b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65,
0x3b, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
0x65, 0x22, 0x2f, 0x3e, 0x3c, 0x70, 0x61, 0x74, 0x68, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d,
0x22, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72,
0x3a, 0x23, 0x30, 0x30, 0x30, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x3a, 0x75, 0x72, 0x6c, 0x28, 0x23,
0x6a, 0x29, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a,
0x31, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x3a, 0x65, 0x76, 0x65, 0x6e,
0x6f, 0x64, 0x64, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b,
0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x3b, 0x73,
0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x63, 0x61, 0x70, 0x3a, 0x62, 0x75,
0x74, 0x74, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x6a, 0x6f,
0x69, 0x6e, 0x3a, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x3a,
0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x72,
0x74, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x6d, 0x69,
0x64, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x65, 0x6e,
0x64, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6d, 0x69,
0x74, 0x65, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x3a, 0x31, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f,
0x6b, 0x65, 0x2d, 0x64, 0x61, 0x73, 0x68, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x6e, 0x6f, 0x6e,
0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x64, 0x61, 0x73, 0x68, 0x6f, 0x66, 0x66,
0x73, 0x65, 0x74, 0x3a, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6f, 0x70, 0x61,
0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74,
0x79, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x3b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61,
0x79, 0x3a, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x3b, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f,
0x77, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x20, 0x64, 0x3d, 0x22, 0x4d, 0x31,
0x2e, 0x39, 0x37, 0x39, 0x20, 0x31, 0x37, 0x2e, 0x32, 0x34, 0x31, 0x68, 0x33, 0x31, 0x56, 0x34,
0x34, 0x68, 0x2d, 0x33, 0x31, 0x7a, 0x22, 0x2f, 0x3e, 0x3c, 0x70, 0x61, 0x74, 0x68, 0x20, 0x73,
0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x2e, 0x35,
0x35, 0x34, 0x32, 0x38, 0x35, 0x36, 0x39, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x3a, 0x23, 0x30, 0x30,
0x30, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31,
0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x3a, 0x65, 0x76, 0x65, 0x6e, 0x6f,
0x64, 0x64, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73,
0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x70, 0x78, 0x3b,
0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x63, 0x61, 0x70, 0x3a, 0x62,
0x75, 0x74, 0x74, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x6a,
0x6f, 0x69, 0x6e, 0x3a, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65,
0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x66, 0x69, 0x6c, 0x74, 0x65,
0x72, 0x3a, 0x75, 0x72, 0x6c, 0x28, 0x23, 0x6b, 0x29, 0x22, 0x20, 0x64, 0x3d, 0x22, 0x4d, 0x32,
0x2e, 0x31, 0x30, 0x34, 0x20, 0x34, 0x33, 0x2e, 0x38, 0x37, 0x35, 0x20, 0x32, 0x33, 0x2e, 0x34,
0x38, 0x20, 0x33, 0x35, 0x73, 0x33, 0x2e, 0x35, 0x31, 0x34, 0x2d, 0x32, 0x2e, 0x32, 0x32, 0x2e,
0x32, 0x35, 0x2d, 0x33, 0x2e, 0x35, 0x63, 0x2d, 0x33, 0x2e, 0x34, 0x31, 0x35, 0x2d, 0x31, 0x2e,
0x33, 0x34, 0x2d, 0x37, 0x20, 0x2e, 0x35, 0x2d, 0x37, 0x20, 0x2e, 0x35, 0x4c, 0x32, 0x2e, 0x31,
0x30, 0x34, 0x20, 0x34, 0x33, 0x2e, 0x38, 0x37, 0x35, 0x7a, 0x22, 0x2f, 0x3e, 0x3c, 0x70, 0x61,
0x74, 0x68, 0x20, 0x64, 0x3d, 0x22, 0x6d, 0x32, 0x2e, 0x30, 0x31, 0x37, 0x20, 0x34, 0x33, 0x2e,
0x39, 0x34, 0x35, 0x2d, 0x2e, 0x30, 0x33, 0x39, 0x2d, 0x34, 0x30, 0x2e, 0x38, 0x39, 0x20, 0x31,
0x39, 0x2e, 0x39, 0x34, 0x32, 0x2e, 0x30, 0x34, 0x34, 0x2e, 0x30, 0x34, 0x35, 0x20, 0x32, 0x39,
0x2e, 0x39, 0x32, 0x4c, 0x32, 0x2e, 0x30, 0x31, 0x37, 0x20, 0x34, 0x33, 0x2e, 0x39, 0x34, 0x34,
0x7a, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74,
0x79, 0x3a, 0x31, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30, 0x30, 0x30, 0x3b, 0x66,
0x69, 0x6c, 0x6c, 0x3a, 0x75, 0x72, 0x6c, 0x28, 0x23, 0x6c, 0x29, 0x3b, 0x66, 0x69, 0x6c, 0x6c,
0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d,
0x72, 0x75, 0x6c, 0x65, 0x3a, 0x65, 0x76, 0x65, 0x6e, 0x6f, 0x64, 0x64, 0x3b, 0x73, 0x74, 0x72,
0x6f, 0x6b, 0x65, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d,
0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c,
0x69, 0x6e, 0x65, 0x63, 0x61, 0x70, 0x3a, 0x62, 0x75, 0x74, 0x74, 0x3b, 0x73, 0x74, 0x72, 0x6f,
0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x3a, 0x6d, 0x69, 0x74, 0x65,
0x72, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61,
0x72, 0x6b, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b,
0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x6d, 0x69, 0x64, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b,
0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x64, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b,
0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x6c, 0x69, 0x6d, 0x69,
0x74, 0x3a, 0x31, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x64, 0x61, 0x73, 0x68,
0x61, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b,
0x65, 0x2d, 0x64, 0x61, 0x73, 0x68, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3a, 0x30, 0x3b, 0x73,
0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b,
0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x62,
0x6c, 0x65, 0x3b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x69, 0x6e, 0x6c, 0x69, 0x6e,
0x65, 0x3b, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x62,
0x6c, 0x65, 0x22, 0x2f, 0x3e, 0x3c, 0x70, 0x61, 0x74, 0x68, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65,
0x3d, 0x22, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x2e, 0x34, 0x32, 0x32, 0x32, 0x32,
0x32, 0x32, 0x34, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30, 0x30, 0x30, 0x3b, 0x66,
0x69, 0x6c, 0x6c, 0x3a, 0x23, 0x66, 0x66, 0x66, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x6f, 0x70,
0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x72, 0x75, 0x6c,
0x65, 0x3a, 0x6e, 0x6f, 0x6e, 0x7a, 0x65, 0x72, 0x6f, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65,
0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x77, 0x69, 0x64,
0x74, 0x68, 0x3a, 0x33, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65,
0x63, 0x61, 0x70, 0x3a, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65,
0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x3a, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3b,
0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b,
0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61,
0x72, 0x6b, 0x65, 0x72, 0x2d, 0x6d, 0x69, 0x64, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61,
0x72, 0x6b, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x64, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74,
0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x3a,
0x34, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x64, 0x61, 0x73, 0x68, 0x61, 0x72, 0x72,
0x61, 0x79, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x64,
0x61, 0x73, 0x68, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3a, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f,
0x6b, 0x65, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x76, 0x69, 0x73,
0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x3b,
0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x6f, 0x76,
0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x20,
0x64, 0x3d, 0x22, 0x6d, 0x31, 0x2e, 0x39, 0x34, 0x39, 0x20, 0x34, 0x33, 0x2e, 0x39, 0x34, 0x35,
0x20, 0x32, 0x30, 0x2e, 0x31, 0x34, 0x38, 0x2d, 0x31, 0x30, 0x2e, 0x38, 0x38, 0x33, 0x4c, 0x33,
0x2e, 0x35, 0x33, 0x36, 0x20, 0x34, 0x31, 0x2e, 0x39, 0x39, 0x56, 0x33, 0x2e, 0x30, 0x31, 0x68,
0x2d, 0x31, 0x2e, 0x35, 0x37, 0x6c, 0x2d, 0x2e, 0x30, 0x31, 0x37, 0x20, 0x34, 0x30, 0x2e, 0x39,
0x33, 0x35, 0x7a, 0x22, 0x2f, 0x3e, 0x3c, 0x70, 0x61, 0x74, 0x68, 0x20, 0x73, 0x74, 0x79, 0x6c,
0x65, 0x3d, 0x22, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x63, 0x6f, 0x6c,
0x6f, 0x72, 0x3a, 0x23, 0x30, 0x30, 0x30, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x3a, 0x75, 0x72, 0x6c,
0x28, 0x23, 0x6d, 0x29, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74,
0x79, 0x3a, 0x31, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x3a, 0x65, 0x76,
0x65, 0x6e, 0x6f, 0x64, 0x64, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x3a, 0x6e, 0x6f, 0x6e,
0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31,
0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x63, 0x61, 0x70, 0x3a,
0x62, 0x75, 0x74, 0x74, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65,
0x6a, 0x6f, 0x69, 0x6e, 0x3a, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65,
0x72, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x73, 0x74,
0x61, 0x72, 0x74, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d,
0x6d, 0x69, 0x64, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d,
0x65, 0x6e, 0x64, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d,
0x6d, 0x69, 0x74, 0x65, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x3a, 0x31, 0x30, 0x3b, 0x73, 0x74,
0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x64, 0x61, 0x73, 0x68, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x6e,
0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x64, 0x61, 0x73, 0x68, 0x6f,
0x66, 0x66, 0x73, 0x65, 0x74, 0x3a, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6f,
0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c,
0x69, 0x74, 0x79, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x3b, 0x64, 0x69, 0x73, 0x70,
0x6c, 0x61, 0x79, 0x3a, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x3b, 0x6f, 0x76, 0x65, 0x72, 0x66,
0x6c, 0x6f, 0x77, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x20, 0x64, 0x3d, 0x22,
0x4d, 0x32, 0x2e, 0x30, 0x32, 0x34, 0x20, 0x34, 0x33, 0x2e, 0x37, 0x35, 0x37, 0x20, 0x31, 0x2e,
0x39, 0x37, 0x39, 0x20, 0x33, 0x2e, 0x30, 0x35, 0x35, 0x48, 0x32, 0x31, 0x2e, 0x39, 0x32, 0x6c,
0x2d, 0x2e, 0x31, 0x37, 0x39, 0x20, 0x33, 0x30, 0x2e, 0x36, 0x32, 0x36, 0x4c, 0x32, 0x2e, 0x30,
0x32, 0x34, 0x20, 0x34, 0x33, 0x2e, 0x37, 0x35, 0x37, 0x7a, 0x22, 0x2f, 0x3e, 0x3c, 0x70, 0x61,
0x74, 0x68, 0x20, 0x64, 0x3d, 0x22, 0x6d, 0x31, 0x37, 0x2e, 0x36, 0x32, 0x32, 0x20, 0x31, 0x38,
0x2e, 0x34, 0x35, 0x36, 0x20, 0x31, 0x2e, 0x39, 0x32, 0x33, 0x20, 0x32, 0x2e, 0x34, 0x35, 0x33,
0x2d, 0x31, 0x2e, 0x34, 0x35, 0x39, 0x20, 0x34, 0x2e, 0x38, 0x31, 0x37, 0x73, 0x2e, 0x32, 0x36,
0x35, 0x20, 0x31, 0x2e, 0x35, 0x30, 0x33, 0x20, 0x31, 0x2e, 0x30, 0x33, 0x39, 0x2e, 0x34, 0x38,
0x36, 0x63, 0x2e, 0x37, 0x37, 0x33, 0x2d, 0x31, 0x2e, 0x30, 0x31, 0x36, 0x20, 0x32, 0x2e, 0x39,
0x37, 0x32, 0x2d, 0x33, 0x2e, 0x35, 0x38, 0x32, 0x20, 0x32, 0x2e, 0x35, 0x38, 0x35, 0x2d, 0x35,
0x2e, 0x34, 0x35, 0x38, 0x2d, 0x2e, 0x32, 0x38, 0x37, 0x2d, 0x31, 0x2e, 0x33, 0x39, 0x32, 0x2d,
0x31, 0x2e, 0x30, 0x38, 0x33, 0x2d, 0x32, 0x2e, 0x30, 0x35, 0x35, 0x2d, 0x31, 0x2e, 0x30, 0x38,
0x33, 0x2d, 0x32, 0x2e, 0x30, 0x35, 0x35, 0x6c, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x35, 0x2d, 0x2e,
0x32, 0x34, 0x33, 0x7a, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6f, 0x70, 0x61,
0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30, 0x30,
0x30, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x3a, 0x75, 0x72, 0x6c, 0x28, 0x23, 0x6e, 0x29, 0x3b, 0x66,
0x69, 0x6c, 0x6c, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x66, 0x69,
0x6c, 0x6c, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x3a, 0x65, 0x76, 0x65, 0x6e, 0x6f, 0x64, 0x64, 0x3b,
0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f,
0x6b, 0x65, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b,
0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x63, 0x61, 0x70, 0x3a, 0x62, 0x75, 0x74, 0x74, 0x3b, 0x73,
0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x3a, 0x6d,
0x69, 0x74, 0x65, 0x72, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x3a, 0x6e, 0x6f, 0x6e, 0x65,
0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x6e, 0x6f,
0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x6d, 0x69, 0x64, 0x3a, 0x6e, 0x6f,
0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x64, 0x3a, 0x6e, 0x6f,
0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x6c,
0x69, 0x6d, 0x69, 0x74, 0x3a, 0x31, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x64,
0x61, 0x73, 0x68, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74,
0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x64, 0x61, 0x73, 0x68, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3a,
0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79,
0x3a, 0x31, 0x3b, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3a, 0x76, 0x69,
0x73, 0x69, 0x62, 0x6c, 0x65, 0x3b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x69, 0x6e,
0x6c, 0x69, 0x6e, 0x65, 0x3b, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x76, 0x69,
0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x2f, 0x3e, 0x3c, 0x70, 0x61, 0x74, 0x68, 0x20, 0x64, 0x3d,
0x22, 0x4d, 0x31, 0x39, 0x2e, 0x34, 0x35, 0x36, 0x20, 0x31, 0x37, 0x2e, 0x33, 0x35, 0x31, 0x73,
0x32, 0x2e, 0x31, 0x36, 0x34, 0x20, 0x31, 0x2e, 0x30, 0x30, 0x32, 0x20, 0x32, 0x2e, 0x32, 0x33,
0x32, 0x20, 0x31, 0x2e, 0x38, 0x37, 0x39, 0x63, 0x2e, 0x31, 0x30, 0x32, 0x20, 0x31, 0x2e, 0x33,
0x30, 0x31, 0x2d, 0x34, 0x2e, 0x32, 0x34, 0x33, 0x20, 0x35, 0x2e, 0x34, 0x33, 0x35, 0x2d, 0x34,
0x2e, 0x32, 0x34, 0x33, 0x20, 0x35, 0x2e, 0x34, 0x33, 0x35, 0x2d, 0x2e, 0x35, 0x30, 0x38, 0x2e,
0x36, 0x32, 0x2d, 0x31, 0x2e, 0x33, 0x34, 0x37, 0x2e, 0x30, 0x36, 0x37, 0x2d, 0x2e, 0x38, 0x38,
0x33, 0x2d, 0x2e, 0x35, 0x33, 0x20, 0x30, 0x20, 0x30, 0x20, 0x33, 0x2e, 0x34, 0x36, 0x36, 0x2d,
0x34, 0x2e, 0x31, 0x31, 0x38, 0x20, 0x33, 0x2e, 0x32, 0x34, 0x38, 0x2d, 0x34, 0x2e, 0x34, 0x34,
0x31, 0x2d, 0x2e, 0x32, 0x37, 0x34, 0x2d, 0x2e, 0x34, 0x30, 0x36, 0x2d, 0x31, 0x2e, 0x39, 0x36,
0x37, 0x2d, 0x31, 0x2e, 0x30, 0x33, 0x39, 0x2d, 0x31, 0x2e, 0x39, 0x36, 0x37, 0x2d, 0x31, 0x2e,
0x30, 0x33, 0x39, 0x2d, 0x31, 0x2e, 0x30, 0x31, 0x36, 0x2d, 0x2e, 0x37, 0x35, 0x31, 0x2e, 0x32,
0x36, 0x38, 0x2d, 0x32, 0x2e, 0x33, 0x30, 0x35, 0x20, 0x31, 0x2e, 0x36, 0x31, 0x33, 0x2d, 0x31,
0x2e, 0x33, 0x30, 0x34, 0x7a, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6f, 0x70,
0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30,
0x30, 0x30, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x3a, 0x75, 0x72, 0x6c, 0x28, 0x23, 0x6f, 0x29, 0x3b,
0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x66,
0x69, 0x6c, 0x6c, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x3a, 0x65, 0x76, 0x65, 0x6e, 0x6f, 0x64, 0x64,
0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72,
0x6f, 0x6b, 0x65, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x3b, 0x73, 0x74, 0x72, 0x6f,
0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x63, 0x61, 0x70, 0x3a, 0x62, 0x75, 0x74, 0x74, 0x3b,
0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x3a,
0x6d, 0x69, 0x74, 0x65, 0x72, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x3a, 0x6e, 0x6f, 0x6e,
0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x6e,
0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x6d, 0x69, 0x64, 0x3a, 0x6e,
0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x64, 0x3a, 0x6e,
0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6d, 0x69, 0x74, 0x65, 0x72,
0x6c, 0x69, 0x6d, 0x69, 0x74, 0x3a, 0x31, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d,
0x64, 0x61, 0x73, 0x68, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73,
0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x64, 0x61, 0x73, 0x68, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74,
0x3a, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74,
0x79, 0x3a, 0x31, 0x3b, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3a, 0x76,
0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x3b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x69,
0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x3b, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x76,
0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x2f, 0x3e, 0x3c, 0x70, 0x61, 0x74, 0x68, 0x20, 0x73,
0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x3a, 0x75, 0x72, 0x6c, 0x28, 0x23,
0x70, 0x29, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a,
0x31, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x3a, 0x65, 0x76, 0x65, 0x6e,
0x6f, 0x64, 0x64, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b,
0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x70, 0x78,
0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x63, 0x61, 0x70, 0x3a,
0x62, 0x75, 0x74, 0x74, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65,
0x6a, 0x6f, 0x69, 0x6e, 0x3a, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b,
0x65, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x66, 0x69, 0x6c, 0x74,
0x65, 0x72, 0x3a, 0x75, 0x72, 0x6c, 0x28, 0x23, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x36, 0x34,
0x32, 0x31, 0x29, 0x3b, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x2e, 0x38, 0x37, 0x34,
0x32, 0x38, 0x35, 0x37, 0x31, 0x22, 0x20, 0x64, 0x3d, 0x22, 0x6d, 0x32, 0x32, 0x2e, 0x32, 0x33,
0x20, 0x33, 0x2e, 0x35, 0x2d, 0x2e, 0x35, 0x20, 0x32, 0x39, 0x2e, 0x37, 0x35, 0x2d, 0x31, 0x38,
0x20, 0x39, 0x2e, 0x37, 0x35, 0x20, 0x32, 0x39, 0x2e, 0x32, 0x35, 0x2e, 0x32, 0x35, 0x2d, 0x2e,
0x32, 0x35, 0x2d, 0x33, 0x39, 0x2e, 0x37, 0x35, 0x68, 0x2d, 0x31, 0x30, 0x2e, 0x35, 0x7a, 0x22,
0x2f, 0x3e, 0x3c, 0x70, 0x61, 0x74, 0x68, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72,
0x6d, 0x3d, 0x22, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x28, 0x2d, 0x2e, 0x37, 0x37, 0x38, 0x34,
0x39, 0x20, 0x30, 0x20, 0x30, 0x20, 0x2e, 0x37, 0x37, 0x38, 0x34, 0x39, 0x20, 0x35, 0x35, 0x2e,
0x37, 0x38, 0x31, 0x20, 0x31, 0x2e, 0x35, 0x35, 0x29, 0x22, 0x20, 0x64, 0x3d, 0x22, 0x4d, 0x34,
0x30, 0x2e, 0x34, 0x38, 0x32, 0x20, 0x33, 0x36, 0x2e, 0x34, 0x32, 0x31, 0x61, 0x31, 0x35, 0x2e,
0x36, 0x34, 0x35, 0x20, 0x38, 0x2e, 0x33, 0x39, 0x37, 0x20, 0x30, 0x20, 0x31, 0x20, 0x31, 0x2d,
0x33, 0x31, 0x2e, 0x32, 0x39, 0x20, 0x30, 0x20, 0x31, 0x35, 0x2e, 0x36, 0x34, 0x35, 0x20, 0x38,
0x2e, 0x33, 0x39, 0x37, 0x20, 0x30, 0x20, 0x31, 0x20, 0x31, 0x20, 0x33, 0x31, 0x2e, 0x32, 0x39,
0x20, 0x30, 0x7a, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6f, 0x70, 0x61, 0x63,
0x69, 0x74, 0x79, 0x3a, 0x2e, 0x32, 0x39, 0x39, 0x34, 0x36, 0x35, 0x32, 0x32, 0x3b, 0x63, 0x6f,
0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30, 0x30, 0x30, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x3a, 0x75, 0x72,
0x6c, 0x28, 0x23, 0x71, 0x29, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69,
0x74, 0x79, 0x3a, 0x31, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x3a, 0x65,
0x76, 0x65, 0x6e, 0x6f, 0x64, 0x64, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x3a, 0x6e, 0x6f,
0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a,
0x31, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x63, 0x61, 0x70,
0x3a, 0x62, 0x75, 0x74, 0x74, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e,
0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x3a, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x3b, 0x6d, 0x61, 0x72, 0x6b,
0x65, 0x72, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x73,
0x74, 0x61, 0x72, 0x74, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72,
0x2d, 0x6d, 0x69, 0x64, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72,
0x2d, 0x65, 0x6e, 0x64, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65,
0x2d, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x3a, 0x31, 0x30, 0x3b, 0x73,
0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x64, 0x61, 0x73, 0x68, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3a,
0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x64, 0x61, 0x73, 0x68,
0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3a, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d,
0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69,
0x6c, 0x69, 0x74, 0x79, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x3b, 0x64, 0x69, 0x73,
0x70, 0x6c, 0x61, 0x79, 0x3a, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x3b, 0x6f, 0x76, 0x65, 0x72,
0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x2f, 0x3e, 0x3c,
0x70, 0x61, 0x74, 0x68, 0x20, 0x64, 0x3d, 0x22, 0x4d, 0x31, 0x2e, 0x37, 0x33, 0x32, 0x20, 0x31,
0x37, 0x2e, 0x35, 0x39, 0x34, 0x76, 0x31, 0x32, 0x2e, 0x37, 0x36, 0x31, 0x68, 0x37, 0x2e, 0x39,
0x33, 0x32, 0x76, 0x35, 0x2e, 0x38, 0x32, 0x31, 0x6c, 0x31, 0x32, 0x2e, 0x32, 0x32, 0x34, 0x2d,
0x31, 0x32, 0x2e, 0x32, 0x32, 0x33, 0x4c, 0x39, 0x2e, 0x35, 0x39, 0x20, 0x31, 0x31, 0x2e, 0x36,
0x35, 0x36, 0x76, 0x35, 0x2e, 0x39, 0x34, 0x31, 0x6c, 0x2d, 0x37, 0x2e, 0x38, 0x36, 0x2d, 0x2e,
0x30, 0x30, 0x33, 0x7a, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6f, 0x70, 0x61,
0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30, 0x30,
0x30, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x3a, 0x23, 0x63, 0x30, 0x30, 0x3b, 0x66, 0x69, 0x6c, 0x6c,
0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d,
0x72, 0x75, 0x6c, 0x65, 0x3a, 0x65, 0x76, 0x65, 0x6e, 0x6f, 0x64, 0x64, 0x3b, 0x73, 0x74, 0x72,
0x6f, 0x6b, 0x65, 0x3a, 0x23, 0x61, 0x34, 0x30, 0x30, 0x30, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f,
0x6b, 0x65, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b,
0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x63, 0x61, 0x70, 0x3a, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3b,
0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x3a,
0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x3a, 0x6e, 0x6f, 0x6e,
0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x6e,
0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x6d, 0x69, 0x64, 0x3a, 0x6e,
0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x64, 0x3a, 0x6e,
0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6d, 0x69, 0x74, 0x65, 0x72,
0x6c, 0x69, 0x6d, 0x69, 0x74, 0x3a, 0x31, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d,
0x64, 0x61, 0x73, 0x68, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73,
0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x64, 0x61, 0x73, 0x68, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74,
0x3a, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74,
0x79, 0x3a, 0x31, 0x3b, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3a, 0x76,
0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x3b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x69,
0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x3b, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x76,
0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72,
0x6d, 0x3d, 0x22, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x28, 0x2d, 0x31, 0x20, 0x30, 0x20, 0x30,
0x20, 0x31, 0x20, 0x34, 0x38, 0x2e, 0x32, 0x30, 0x31, 0x20, 0x2d, 0x2e, 0x30, 0x34, 0x37, 0x29,
0x22, 0x2f, 0x3e, 0x3c, 0x70, 0x61, 0x74, 0x68, 0x20, 0x64, 0x3d, 0x22, 0x4d, 0x39, 0x2e, 0x39,
0x32, 0x34, 0x20, 0x31, 0x32, 0x2e, 0x34, 0x37, 0x38, 0x76, 0x35, 0x2e, 0x36, 0x33, 0x38, 0x68,
0x2d, 0x37, 0x2e, 0x38, 0x35, 0x76, 0x36, 0x2e, 0x34, 0x31, 0x35, 0x63, 0x31, 0x30, 0x2e, 0x32,
0x35, 0x39, 0x2d, 0x33, 0x2e, 0x38, 0x32, 0x37, 0x20, 0x39, 0x2e, 0x38, 0x38, 0x31, 0x20, 0x33,
0x2e, 0x32, 0x34, 0x33, 0x20, 0x31, 0x39, 0x2e, 0x32, 0x32, 0x2d, 0x2e, 0x35, 0x38, 0x35, 0x4c,
0x39, 0x2e, 0x39, 0x32, 0x34, 0x20, 0x31, 0x32, 0x2e, 0x34, 0x37, 0x38, 0x7a, 0x22, 0x20, 0x73,
0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x2e, 0x35,
0x30, 0x38, 0x30, 0x32, 0x31, 0x34, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30, 0x30,
0x30, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x3a, 0x75, 0x72, 0x6c, 0x28, 0x23, 0x72, 0x29, 0x3b, 0x66,
0x69, 0x6c, 0x6c, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x66, 0x69,
0x6c, 0x6c, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x3a, 0x65, 0x76, 0x65, 0x6e, 0x6f, 0x64, 0x64, 0x3b,
0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f,
0x6b, 0x65, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b,
0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x63, 0x61, 0x70, 0x3a, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3b,
0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x3a,
0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x3a, 0x6e, 0x6f, 0x6e,
0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x6e,
0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x6d, 0x69, 0x64, 0x3a, 0x6e,
0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x64, 0x3a, 0x6e,
0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6d, 0x69, 0x74, 0x65, 0x72,
0x6c, 0x69, 0x6d, 0x69, 0x74, 0x3a, 0x31, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d,
0x64, 0x61, 0x73, 0x68, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73,
0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x64, 0x61, 0x73, 0x68, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74,
0x3a, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74,
0x79, 0x3a, 0x31, 0x3b, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3a, 0x76,
0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x3b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x69,
0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x3b, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x76,
0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72,
0x6d, 0x3d, 0x22, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x28, 0x2d, 0x31, 0x20, 0x30, 0x20, 0x30,
0x20, 0x31, 0x20, 0x34, 0x38, 0x2e, 0x32, 0x30, 0x31, 0x20, 0x2d, 0x2e, 0x30, 0x34, 0x37, 0x29,
0x22, 0x2f, 0x3e, 0x3c, 0x70, 0x61, 0x74, 0x68, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22,
0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x2e, 0x34, 0x38, 0x31, 0x32, 0x38, 0x33, 0x33,
0x39, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30, 0x30, 0x30, 0x3b, 0x66, 0x69, 0x6c,
0x6c, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x6f, 0x70, 0x61, 0x63,
0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x3a,
0x65, 0x76, 0x65, 0x6e, 0x6f, 0x64, 0x64, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x3a, 0x75,
0x72, 0x6c, 0x28, 0x23, 0x73, 0x29, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x77, 0x69,
0x64, 0x74, 0x68, 0x3a, 0x31, 0x2e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x32, 0x3b, 0x73,
0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x63, 0x61, 0x70, 0x3a, 0x62, 0x75,
0x74, 0x74, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x6a, 0x6f,
0x69, 0x6e, 0x3a, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x3a,
0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x72,
0x74, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x6d, 0x69,
0x64, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x65, 0x6e,
0x64, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6d, 0x69,
0x74, 0x65, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x3a, 0x31, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f,
0x6b, 0x65, 0x2d, 0x64, 0x61, 0x73, 0x68, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3a, 0x6e, 0x6f, 0x6e,
0x65, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x64, 0x61, 0x73, 0x68, 0x6f, 0x66, 0x66,
0x73, 0x65, 0x74, 0x3a, 0x30, 0x3b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2d, 0x6f, 0x70, 0x61,
0x63, 0x69, 0x74, 0x79, 0x3a, 0x31, 0x3b, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74,
0x79, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x3b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61,
0x79, 0x3a, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x3b, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f,
0x77, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x20, 0x64, 0x3d, 0x22, 0x4d, 0x32,
0x2e, 0x36, 0x38, 0x33, 0x20, 0x31, 0x38, 0x2e, 0x35, 0x36, 0x36, 0x76, 0x31, 0x30, 0x2e, 0x37,
0x39, 0x68, 0x37, 0x2e, 0x39, 0x30, 0x32, 0x76, 0x34, 0x2e, 0x31, 0x32, 0x35, 0x6c, 0x39, 0x2e,
0x35, 0x34, 0x33, 0x2d, 0x39, 0x2e, 0x35, 0x34, 0x2d, 0x39, 0x2e, 0x36, 0x30, 0x36, 0x2d, 0x39,
0x2e, 0x39, 0x34, 0x34, 0x76, 0x34, 0x2e, 0x35, 0x37, 0x32, 0x6c, 0x2d, 0x37, 0x2e, 0x38, 0x33,
0x39, 0x2d, 0x2e, 0x30, 0x30, 0x33, 0x7a, 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f,
0x72, 0x6d, 0x3d, 0x22, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x28, 0x2d, 0x31, 0x20, 0x30, 0x20,
0x30, 0x20, 0x31, 0x20, 0x34, 0x38, 0x2e, 0x32, 0x30, 0x31, 0x20, 0x2d, 0x2e, 0x30, 0x34, 0x37,
0x29, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x76, 0x67, 0x3e
};

View File

@@ -63,8 +63,6 @@ private:
// Size of a single bitmap in the list.
wxSize m_size;
// Images in the list should have the same scale factor.
double m_scaleFactor;
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxGenericImageList);
};

View File

@@ -34,6 +34,10 @@ enum
wxImageList is used principally in conjunction with wxTreeCtrl and
wxListCtrl classes.
Use of this class is not recommended in the new code as it doesn't support
showing DPI-dependent bitmaps. Please use wxWithImages::SetImages() instead
of wxWithImages::SetImageList().
@library{wxcore}
@category{gdi}
@@ -51,6 +55,8 @@ public:
Constructor specifying the image size, whether image masks should be created,
and the initial size of the list.
Note that the size is specified in logical pixels.
@param width
Width of the images in the list.
@param height
@@ -68,19 +74,17 @@ public:
/**
Adds a new image or images using a bitmap and optional mask bitmap.
The logical size of the bitmap should be the same as the size specified
when constructing wxImageList. If the logical width of the bitmap is
greater than the image list width, bitmap is split into smaller images
of the required width.
@param bitmap
Bitmap representing the opaque areas of the image.
@param mask
Monochrome mask bitmap, representing the transparent areas of the image.
@return The new zero-based image index.
@remarks The original bitmap or icon is not affected by the Add()
operation, and can be deleted afterwards.
If the bitmap is wider than the images in the list, then the
bitmap will automatically be split into smaller images, each
matching the dimensions of the image list.
This does not apply when adding icons.
*/
int Add(const wxBitmap& bitmap,
const wxBitmap& mask = wxNullBitmap);
@@ -88,37 +92,31 @@ public:
/**
Adds a new image or images using a bitmap and mask colour.
The logical size of the bitmap should be the same as the size specified
when constructing wxImageList. If the logical width of the bitmap is
greater than the image list width, bitmap is split into smaller images
of the required width.
@param bitmap
Bitmap representing the opaque areas of the image.
@param maskColour
Colour indicating which parts of the image are transparent.
@return The new zero-based image index.
@remarks The original bitmap or icon is not affected by the Add()
operation, and can be deleted afterwards.
If the bitmap is wider than the images in the list, then the
bitmap will automatically be split into smaller images, each
matching the dimensions of the image list.
This does not apply when adding icons.
*/
int Add(const wxBitmap& bitmap, const wxColour& maskColour);
/**
Adds a new image using an icon.
The logical size of the icon should be the same as the size specified
when constructing wxImageList.
@param icon
Icon to use as the image.
@return The new zero-based image index.
@remarks The original bitmap or icon is not affected by the Add()
operation, and can be deleted afterwards.
If the bitmap is wider than the images in the list, then the
bitmap will automatically be split into smaller images, each
matching the dimensions of the image list.
This does not apply when adding icons.
@onlyfor{wxmsw,wxosx}
*/
int Add(const wxIcon& icon);

View File

@@ -35,6 +35,7 @@
// ----------------------------------------------------------------------------
// All files in art/tango in alphabetical order:
#include "../../art/tango/application_exit.h"
#include "../../art/tango/application_x_executable.h"
#include "../../art/tango/dialog_error.h"
#include "../../art/tango/dialog_information.h"
@@ -185,9 +186,9 @@ wxTangoArtProvider::CreateBitmapBundle(const wxArtID& id,
{ wxART_PLUS, BITMAP_DATA(list_add) },
{ wxART_MINUS, BITMAP_DATA(list_remove) },
// Surprisingly Tango doesn't seem to have neither wxART_CLOSE nor
// wxART_QUIT. We could use system-log-out for the latter but it
// doesn't seem quite right.
// Surprisingly Tango doesn't seem to have wxART_CLOSE.
{ wxART_QUIT, BITMAP_DATA(application_exit) },
{ wxART_FIND, BITMAP_DATA(edit_find) },
{ wxART_FIND_AND_REPLACE, BITMAP_DATA(edit_find_replace) },
@@ -208,8 +209,12 @@ wxTangoArtProvider::CreateBitmapBundle(const wxArtID& id,
wxSize sizeDef = size != wxDefaultSize ? size : GetSizeHint(client);
if (sizeDef == wxDefaultSize)
{
// We really need some default size here.
sizeDef = wxSize(16, 16);
// We really need some default size here, so keep using the same
// sizes we used for PNG-based implementation we had before.
if ( client == wxART_MENU || client == wxART_BUTTON )
sizeDef = wxSize(16, 16);
else
sizeDef = wxSize(24, 24);
}
return wxBitmapBundle::FromSVG(entry.data, entry.len, sizeDef);
}

View File

@@ -63,7 +63,6 @@ bool wxGenericImageList::Create( int width, int height, bool mask, int WXUNUSED(
// Prevent from storing negative dimensions
m_size = wxSize(wxMax(width, 0), wxMax(height, 0));
m_useMask = mask;
m_scaleFactor = 1.0;
// Images must have proper size
return m_size != wxSize(0, 0);
@@ -71,7 +70,7 @@ bool wxGenericImageList::Create( int width, int height, bool mask, int WXUNUSED(
namespace
{
wxBitmap GetImageListBitmap(const wxBitmap& bitmap, bool useMask, const wxSize& imgSize, double scaleFactor)
wxBitmap GetImageListBitmap(const wxBitmap& bitmap, bool useMask, const wxSize& imgSize)
{
wxBitmap bmp(bitmap);
if ( useMask )
@@ -86,7 +85,7 @@ wxBitmap GetImageListBitmap(const wxBitmap& bitmap, bool useMask, const wxSize&
#if wxUSE_IMAGE
wxImage img = bmp.ConvertToImage();
img.ClearAlpha();
bmp = wxBitmap(img, -1, scaleFactor);
bmp = wxBitmap(img, -1, bmp.GetScaleFactor());
#endif // wxUSE_IMAGE
}
}
@@ -98,7 +97,7 @@ wxBitmap GetImageListBitmap(const wxBitmap& bitmap, bool useMask, const wxSize&
#if wxUSE_IMAGE
wxImage img = bmp.ConvertToImage();
img.ConvertAlphaToMask();
bmp = wxBitmap(img, -1, scaleFactor);
bmp = wxBitmap(img, -1, bmp.GetScaleFactor());
#endif // wxUSE_IMAGE
}
else
@@ -124,7 +123,7 @@ wxBitmap GetImageListBitmap(const wxBitmap& bitmap, bool useMask, const wxSize&
#if wxUSE_IMAGE
wxImage img = bmp.ConvertToImage();
img.InitAlpha();
bmp = wxBitmap(img, -1, scaleFactor);
bmp = wxBitmap(img, -1, bmp.GetScaleFactor());
#else
bmp.SetMask(NULL);
#endif // wxUSE_IMAGE
@@ -149,6 +148,7 @@ wxBitmap GetImageListBitmap(const wxBitmap& bitmap, bool useMask, const wxSize&
#if wxUSE_IMAGE
wxImage img = bmp.ConvertToImage();
// We need image with new physical size
const double scaleFactor = bmp.GetScaleFactor();
wxImage imgResized = img.Size(scaleFactor * imgSize, wxPoint(0, 0), 0, 0, 0);
bmpResized = wxBitmap(imgResized, -1, scaleFactor);
#else
@@ -166,18 +166,6 @@ int wxGenericImageList::Add( const wxBitmap &bitmap )
if ( m_size == wxSize(0, 0) )
return -1;
if ( m_images.empty() )
{
// This is the first time Add() is called so we should save
// scale factor to check if further images will have the same scaling
m_scaleFactor = bitmap.GetScaleFactor();
}
else if ( bitmap.GetScaleFactor() != m_scaleFactor )
{
// All images in the list should have the same scale factor
return -1;
}
// We use the logical size here as image list images size is specified in
// logical pixels, just as window coordinates and sizes are.
const wxSize bitmapSize = bitmap.GetLogicalSize();
@@ -187,7 +175,7 @@ int wxGenericImageList::Add( const wxBitmap &bitmap )
// ImageList_Add() does.
if ( bitmapSize.x == m_size.x )
{
m_images.push_back(GetImageListBitmap(bitmap, m_useMask, m_size, m_scaleFactor));
m_images.push_back(GetImageListBitmap(bitmap, m_useMask, m_size));
}
else if ( bitmapSize.x > m_size.x )
{
@@ -195,7 +183,7 @@ int wxGenericImageList::Add( const wxBitmap &bitmap )
for (int subIndex = 0; subIndex < numImages; subIndex++)
{
wxRect rect(m_size.x * subIndex, 0, m_size.x, m_size.y);
m_images.push_back(GetImageListBitmap(bitmap.GetSubBitmap(rect), m_useMask, m_size, m_scaleFactor));
m_images.push_back(GetImageListBitmap(bitmap.GetSubBitmap(rect), m_useMask, m_size));
}
}
else
@@ -260,17 +248,11 @@ wxGenericImageList::Replace(int index,
if ( !DoGetPtr(index) )
return false;
if ( bitmap.GetScaleFactor() != m_scaleFactor )
{
// All images in the list should have the same scale factor
return false;
}
wxBitmap bmp(bitmap);
if ( mask.IsOk() )
bmp.SetMask(new wxMask(mask));
m_images[index] = GetImageListBitmap(bmp, m_useMask, m_size, m_scaleFactor);
m_images[index] = GetImageListBitmap(bmp, m_useMask, m_size);
return true;
}

View File

@@ -3215,7 +3215,8 @@ bool wxDataViewIconTextRenderer::MacRender()
cell = (wxImageTextCell*) GetNativeData()->GetItemCell();
iconText << GetValue();
[cell setImage:iconText.GetIcon().GetNSImage()];
const wxDataViewCtrl* const dvc = GetOwner()->GetOwner();
[cell setImage:iconText.GetBitmapBundle().GetBitmapFor(dvc).GetNSImage()];
[cell setStringValue:wxCFStringRef(iconText.GetText()).AsNSString()];
return true;
}
@@ -3324,11 +3325,12 @@ bool wxDataViewCheckIconTextRenderer::MacRender()
const wxCFStringRef textString(checkIconText.GetText());
const wxIcon& icon = checkIconText.GetIcon();
const wxBitmapBundle& icon = checkIconText.GetBitmapBundle();
if ( icon.IsOk() )
{
wxNSTextAttachmentCellWithBaseline* const attachmentCell =
[[wxNSTextAttachmentCellWithBaseline alloc] initImageCell: icon.GetNSImage()];
[[wxNSTextAttachmentCellWithBaseline alloc]
initImageCell: icon.GetBitmapFor(GetOwner()->GetOwner()).GetNSImage()];
NSTextAttachment* const attachment = [NSTextAttachment new];
[attachment setAttachmentCell: attachmentCell];

View File

@@ -162,6 +162,30 @@ TEST_CASE("BitmapBundle::ArtProvider", "[bmpbundle][art]")
b = wxArtProvider::GetBitmapBundle(wxART_INFORMATION, wxART_MENU, size);
CHECK( b.IsOk() );
CHECK( b.GetDefaultSize() == size );
#if wxUSE_ARTPROVIDER_TANGO
// Tango art provider is supposed to use 16px for the default size of the
// menu and button images and 24px for all the other ones, but we need to
// choose the client kind for which the current platform doesn't define its
// own default/fallback size to be able to test for it, i.e. this is the
// client for which GetNativeSizeHint() of the native art provider returns
// wxDefaultSize.
const wxArtClient artClient =
#ifdef __WXMSW__
wxART_TOOLBAR
#else
wxART_LIST
#endif
;
// We also need to use an image provided by Tango but not by the native art
// provider, but here we can at least avoid the platform checks by using an
// image not provided by any native providers.
b = wxArtProvider::GetBitmapBundle(wxART_REFRESH, artClient);
CHECK( b.IsOk() );
CHECK( b.GetDefaultSize() == wxSize(24, 24) );
#endif // wxUSE_ARTPROVIDER_TANGO
}
// This test only makes sense for the ports that actually support scaled

View File

@@ -751,224 +751,58 @@ TEST_CASE("ImageList:NegativeTests", "[imagelist][negative]")
}
}
// This test relies on logical pixels being different from physical ones.
#ifdef wxHAS_DPI_INDEPENDENT_PIXELS
TEST_CASE("ImageList:HiDPI", "[imagelist][hidpi]")
{
#if defined(__WXMSW__) || ( defined(__WXGTK20__) && !defined(__WXGTK3__) )
wxImage img1(8, 4);
img1.SetRGB(wxRect(0, 0, 8, 4), 0, 63, 127);
REQUIRE(img1.IsOk());
WARN("Skipping HiDPI image tests known not to work in wxMSW and wxGTK2.");
#else
wxImage img(16, 8);
img.SetRGB(wxRect(0, 0, 16, 8), 255, 128, 64);
REQUIRE(img.IsOk());
wxImage img2(16, 8);
img2.SetRGB(wxRect(0, 0, 16, 8), 255, 128, 64);
REQUIRE(img2.IsOk());
wxBitmap bmp1x(img, -1, 1.0);
wxBitmap bmp1x(img1, -1, 1.0);
REQUIRE(bmp1x.IsOk());
CHECK(bmp1x.GetWidth() == 16);
CHECK(bmp1x.GetHeight() == 8);
CHECK(bmp1x.GetLogicalWidth() == 16);
CHECK(bmp1x.GetLogicalHeight() == 8);
CHECK(bmp1x.GetSize() == wxSize(8, 4));
CHECK(bmp1x.GetLogicalSize() == wxSize(8, 4));
CHECK_FALSE(bmp1x.HasAlpha());
CHECK(bmp1x.GetMask() == NULL);
wxBitmap bmp2x(img, -1, 2.0);
wxBitmap bmp2x(img2, -1, 2.0);
REQUIRE(bmp2x.IsOk());
CHECK(bmp2x.GetWidth() == 16);
CHECK(bmp2x.GetHeight() == 8);
CHECK(bmp2x.GetLogicalWidth() == 8);
CHECK(bmp2x.GetLogicalHeight() == 4);
CHECK(bmp2x.GetSize() == wxSize(16, 8));
CHECK(bmp2x.GetLogicalSize() == wxSize(8, 4));
CHECK_FALSE(bmp2x.HasAlpha());
CHECK(bmp2x.GetMask() == NULL);
SECTION("Add images 2x to the list 2x")
{
// Logical image size
wxImageList il(8, 4, false);
// Logical image size
wxImageList il(8, 4, false);
int idx = il.Add(bmp2x);
CHECK(idx == 0);
CHECK(il.GetImageCount() == 1);
int idx = il.Add(bmp2x);
REQUIRE(idx == 0);
REQUIRE(il.GetImageCount() == 1);
idx = il.Add(bmp1x);
CHECK(idx == -1);
CHECK(il.GetImageCount() == 1);
idx = il.Add(bmp1x);
REQUIRE(idx == 1);
REQUIRE(il.GetImageCount() == 2);
idx = il.Add(bmp2x);
CHECK(idx == 1);
CHECK(il.GetImageCount() == 2);
wxBitmap bmp = il.GetBitmap(0);
REQUIRE(bmp.IsOk() == true);
CHECK(bmp.GetScaleFactor() == 2.0);
CHECK(bmp.GetSize() == wxSize(16, 8));
CHECK(bmp.GetLogicalSize() == wxSize(8, 4));
CHECK_FALSE(bmp.HasAlpha());
CHECK(bmp.GetMask() == NULL);
idx = il.Add(bmp1x);
CHECK(idx == -1);
CHECK(il.GetImageCount() == 2);
wxBitmap bmp = il.GetBitmap(1);
CHECK(bmp.IsOk() == true);
CHECK(bmp.GetScaleFactor() == 2.0);
CHECK(bmp.GetLogicalWidth() == 8);
CHECK(bmp.GetLogicalHeight() == 4);
CHECK(bmp.GetWidth() == 16);
CHECK(bmp.GetHeight() == 8);
CHECK_FALSE(bmp.HasAlpha());
CHECK(bmp.GetMask() == NULL);
}
SECTION("Add images 2x to the list 1x")
{
// Logical image size
wxImageList il(16, 8, false);
int idx = il.Add(bmp1x);
CHECK(idx == 0);
CHECK(il.GetImageCount() == 1);
idx = il.Add(bmp2x);
CHECK(idx == -1);
CHECK(il.GetImageCount() == 1);
idx = il.Add(bmp1x);
CHECK(idx == 1);
CHECK(il.GetImageCount() == 2);
idx = il.Add(bmp2x);
CHECK(idx == -1);
CHECK(il.GetImageCount() == 2);
wxBitmap bmp = il.GetBitmap(1);
CHECK(bmp.IsOk() == true);
CHECK(bmp.GetScaleFactor() == 1.0);
CHECK(bmp.GetLogicalWidth() == 16);
CHECK(bmp.GetLogicalHeight() == 8);
CHECK(bmp.GetWidth() == 16);
CHECK(bmp.GetHeight() == 8);
CHECK_FALSE(bmp.HasAlpha());
CHECK(bmp.GetMask() == NULL);
}
SECTION("Replaces images in the list 2x")
{
// Logical image size
wxImageList il(8, 4, false);
int idx = il.Add(bmp2x);
CHECK(idx == 0);
CHECK(il.GetImageCount() == 1);
idx = il.Add(bmp2x);
CHECK(idx == 1);
CHECK(il.GetImageCount() == 2);
bool ok = il.Replace(1, bmp1x);
CHECK_FALSE(ok);
CHECK(il.GetImageCount() == 2);
ok = il.Replace(0, bmp2x);
CHECK(ok == true);
CHECK(il.GetImageCount() == 2);
wxBitmap bmp = il.GetBitmap(0);
CHECK(bmp.IsOk() == true);
CHECK(bmp.GetScaleFactor() == 2.0);
CHECK(bmp.GetLogicalWidth() == 8);
CHECK(bmp.GetLogicalHeight() == 4);
CHECK(bmp.GetWidth() == 16);
CHECK(bmp.GetHeight() == 8);
CHECK_FALSE(bmp.HasAlpha());
CHECK(bmp.GetMask() == NULL);
}
SECTION("Replaces images in the list 1x")
{
// Logical image size
wxImageList il(16, 8, false);
int idx = il.Add(bmp1x);
CHECK(idx == 0);
CHECK(il.GetImageCount() == 1);
idx = il.Add(bmp1x);
CHECK(idx == 1);
CHECK(il.GetImageCount() == 2);
bool ok = il.Replace(1, bmp2x);
CHECK_FALSE(ok);
CHECK(il.GetImageCount() == 2);
ok = il.Replace(0, bmp1x);
CHECK(ok == true);
CHECK(il.GetImageCount() == 2);
wxBitmap bmp = il.GetBitmap(0);
CHECK(bmp.GetScaleFactor() == 1.0);
CHECK(bmp.GetLogicalWidth() == 16);
CHECK(bmp.GetLogicalHeight() == 8);
CHECK(bmp.GetWidth() == 16);
CHECK(bmp.GetHeight() == 8);
CHECK_FALSE(bmp.HasAlpha());
CHECK(bmp.GetMask() == NULL);
}
SECTION("Changes list 1x to 2x")
{
wxImage img2(32, 16);
img2.SetRGB(wxRect(0, 0, 32, 16), 255, 128, 64);
REQUIRE(img2.IsOk());
wxBitmap bmp2x2(img2, -1, 2.0);
REQUIRE(bmp2x2.IsOk());
CHECK(bmp2x2.GetWidth() == 32);
CHECK(bmp2x2.GetHeight() == 16);
CHECK(bmp2x2.GetLogicalWidth() == 16);
CHECK(bmp2x2.GetLogicalHeight() == 8);
CHECK(bmp2x2.HasAlpha() == false);
CHECK(bmp2x2.GetMask() == NULL);
// Logical image size
wxImageList il(16, 8, false);
// Now it should be the list with 1x images
int idx = il.Add(bmp1x);
CHECK(idx == 0);
CHECK(il.GetImageCount() == 1);
idx = il.Add(bmp1x);
CHECK(idx == 1);
CHECK(il.GetImageCount() == 2);
idx = il.Add(bmp2x2);
CHECK(idx == -1);
CHECK(il.GetImageCount() == 2);
wxBitmap bmp = il.GetBitmap(0);
CHECK(bmp.GetScaleFactor() == 1.0);
CHECK(bmp.GetLogicalWidth() == 16);
CHECK(bmp.GetLogicalHeight() == 8);
CHECK(bmp.GetWidth() == 16);
CHECK(bmp.GetHeight() == 8);
CHECK_FALSE(bmp.HasAlpha());
CHECK(bmp.GetMask() == NULL);
il.RemoveAll();
// Now it should be the list with 2x images (the same logical size 16x8)
idx = il.Add(bmp2x2);
CHECK(idx == 0);
CHECK(il.GetImageCount() == 1);
idx = il.Add(bmp2x2);
CHECK(idx == 1);
CHECK(il.GetImageCount() == 2);
idx = il.Add(bmp1x);
CHECK(idx == -1);
CHECK(il.GetImageCount() == 2);
bmp = il.GetBitmap(0);
CHECK(bmp.GetScaleFactor() == 2.0);
CHECK(bmp.GetLogicalWidth() == 16);
CHECK(bmp.GetLogicalHeight() == 8);
CHECK(bmp.GetWidth() == 32);
CHECK(bmp.GetHeight() == 16);
CHECK_FALSE(bmp.HasAlpha());
CHECK(bmp.GetMask() == NULL);
}
#endif // !__WXMSW__
bmp = il.GetBitmap(1);
REQUIRE(bmp.IsOk() == true);
CHECK(bmp.GetScaleFactor() == 1.0);
CHECK(bmp.GetSize() == wxSize(8, 4));
CHECK(bmp.GetLogicalSize() == wxSize(8, 4));
CHECK_FALSE(bmp.HasAlpha());
CHECK(bmp.GetMask() == NULL);
}
#endif // wxHAS_DPI_INDEPENDENT_PIXELS