From bb8ca0e0ab0653b684c4dcae891dd9361b6cd20a Mon Sep 17 00:00:00 2001 From: "BADIM-PC\\Vadim" Date: Mon, 26 Feb 2018 13:56:54 +0300 Subject: [PATCH] crt shader moved to the COnfig --- Makefile | 2 +- bin/assets/config.tic.dat | 2 +- config.tic | Bin 10805 -> 14487 bytes src/config.c | 31 ++++++++ src/ext/gif.c | 4 +- src/ext/shader/crt-lottes.frag | 133 -------------------------------- src/studio.c | 5 +- src/system.c | 135 ++++++++++++++++++--------------- src/system.h | 5 ++ src/tic.h | 13 +++- 10 files changed, 131 insertions(+), 199 deletions(-) delete mode 100644 src/ext/shader/crt-lottes.frag diff --git a/Makefile b/Makefile index f3d6df5..15f30a7 100644 --- a/Makefile +++ b/Makefile @@ -251,7 +251,7 @@ bin/menu.o: src/menu.c $(TIC80_H) $(TIC_H) bin/surf.o: src/surf.c $(TIC80_H) $(TIC_H) $(CC) $< $(OPT) $(INCLUDES) -c -o $@ -bin/system.o: src/system.c src/keycodes.c src/ext/shader/* $(TIC80_H) $(TIC_H) +bin/system.o: src/system.c src/keycodes.c $(TIC80_H) $(TIC_H) $(CC) $< $(OPT) $(INCLUDES) -c -o $@ bin/chip.o: src/system/chip.c src/keycodes.c $(TIC80_H) $(TIC_H) diff --git a/bin/assets/config.tic.dat b/bin/assets/config.tic.dat index 28079fa..6400ed1 100644 --- a/bin/assets/config.tic.dat +++ b/bin/assets/config.tic.dat @@ -1 +1 @@ -0x78, 0xda, 0xed, 0x59, 0x5d, 0x68, 0x5b, 0xc9, 0x15, 0x1e, 0xe7, 0x67, 0xbb, 0x52, 0xdc, 0x8c, 0x05, 0x65, 0xe9, 0xcf, 0xb6, 0x11, 0xea, 0x3e, 0x38, 0x60, 0x13, 0xc5, 0x72, 0xd3, 0x62, 0x50, 0xa9, 0x22, 0xdd, 0x58, 0xea, 0xda, 0x92, 0xd1, 0xcf, 0xba, 0x21, 0xb0, 0xae, 0xea, 0xe8, 0x26, 0x06, 0xdb, 0xda, 0x5a, 0x4e, 0x43, 0xb7, 0xb8, 0x2c, 0x81, 0x05, 0xf5, 0xc9, 0x7d, 0x48, 0xa1, 0x7a, 0xd2, 0x96, 0xbc, 0xb9, 0x2f, 0x7d, 0xf1, 0x4b, 0xf5, 0x60, 0xba, 0x8f, 0x0b, 0x2d, 0x65, 0x29, 0x7d, 0x28, 0xcb, 0xbe, 0x94, 0xbe, 0x5e, 0xcf, 0x53, 0x68, 0x58, 0xc8, 0xf4, 0xcc, 0xdc, 0xb9, 0xd2, 0xdc, 0xb9, 0x67, 0x64, 0x17, 0xb6, 0x2d, 0x14, 0xcd, 0xcd, 0xf1, 0x99, 0x99, 0x73, 0xcf, 0x99, 0x9f, 0xef, 0x9c, 0x99, 0x7b, 0x94, 0xa9, 0x0f, 0x5e, 0x21, 0x2f, 0x39, 0x94, 0x54, 0x2a, 0x75, 0xd8, 0xed, 0x76, 0x0f, 0x05, 0x87, 0xe6, 0x21, 0x67, 0x43, 0xe2, 0xfc, 0xd4, 0x4b, 0xa5, 0xb8, 0xd7, 0xed, 0x32, 0x2f, 0xf5, 0x84, 0x79, 0xfc, 0x90, 0x71, 0x76, 0xc8, 0x58, 0x40, 0x52, 0x3f, 0x91, 0x48, 0xb4, 0x5d, 0xd7, 0x6d, 0x0b, 0x0e, 0xcd, 0x36, 0xe8, 0x05, 0x24, 0xf4, 0x13, 0x09, 0xee, 0xb9, 0x2e, 0xf3, 0x12, 0x4d, 0xd0, 0x6f, 0x33, 0x8f, 0xf9, 0x74, 0xca, 0xda, 0x84, 0x4b, 0xfd, 0x42, 0xa1, 0xd0, 0xef, 0xf5, 0x7a, 0x7d, 0xc1, 0xa1, 0xd9, 0xa7, 0x40, 0xa0, 0xdb, 0x57, 0xfa, 0x85, 0x02, 0xf7, 0x7a, 0x3d, 0xe6, 0x15, 0x9e, 0x82, 0x7e, 0x9f, 0x79, 0x14, 0x88, 0xf5, 0x41, 0xbf, 0xaf, 0xf4, 0x1b, 0x8d, 0xc6, 0xc9, 0x60, 0x30, 0x38, 0x11, 0x1c, 0x9a, 0x92, 0x28, 0xa1, 0x82, 0x0b, 0xfd, 0x46, 0x83, 0x7b, 0x83, 0x01, 0xf3, 0x1a, 0xc7, 0xa0, 0x7f, 0x02, 0x36, 0x4f, 0x18, 0x23, 0x40, 0x82, 0x7f, 0x70, 0x74, 0x14, 0x3f, 0x12, 0x65, 0xe9, 0xd9, 0xd1, 0x51, 0x26, 0x73, 0xb4, 0x94, 0xc9, 0x3c, 0x13, 0x4d, 0xf8, 0xb3, 0x94, 0xce, 0x64, 0x2e, 0x06, 0x72, 0xd9, 0x0f, 0x72, 0xf9, 0x5e, 0x44, 0xfe, 0x4c, 0xe9, 0x2b, 0x0e, 0xed, 0x90, 0x7c, 0x49, 0xd9, 0x5f, 0x52, 0xfa, 0x4b, 0x23, 0xfd, 0xdf, 0x0d, 0x06, 0x57, 0x06, 0xf7, 0x8e, 0x07, 0x83, 0xe3, 0x7b, 0x3e, 0x35, 0x1a, 0x92, 0x43, 0xcf, 0xbd, 0xb5, 0x46, 0xe3, 0xf2, 0x0f, 0x5d, 0xf7, 0x15, 0x37, 0xd1, 0x74, 0xdd, 0xe6, 0x6b, 0xae, 0xce, 0xa1, 0xf6, 0xda, 0x4c, 0x22, 0x31, 0xf5, 0x5e, 0xb7, 0xfb, 0x6a, 0xf7, 0xc9, 0x6c, 0x57, 0xd2, 0xec, 0x93, 0x6e, 0x50, 0x87, 0xda, 0x6c, 0x32, 0x95, 0xba, 0xf0, 0xcb, 0x5e, 0x2f, 0xd6, 0x7b, 0x5a, 0xea, 0x49, 0x2a, 0x15, 0x60, 0x97, 0x05, 0x7f, 0xda, 0x7b, 0x0a, 0x7f, 0xbf, 0x57, 0x28, 0x5c, 0x92, 0x78, 0x0b, 0xec, 0xe5, 0xf3, 0x4f, 0x59, 0xbf, 0x01, 0x7e, 0xc0, 0x09, 0x13, 0x7b, 0xfb, 0x92, 0x1f, 0x12, 0x0e, 0xd8, 0x9f, 0x1e, 0x02, 0xfe, 0x5d, 0x45, 0xc2, 0x1f, 0x08, 0x3b, 0xf5, 0x38, 0xf7, 0x3c, 0x89, 0xb7, 0xc0, 0xde, 0x7d, 0x0e, 0x5c, 0x3c, 0xae, 0x7b, 0x0d, 0xfc, 0x60, 0xa8, 0xdf, 0x66, 0x0c, 0xb0, 0x97, 0xd4, 0x76, 0x19, 0x97, 0x7e, 0x90, 0x18, 0xe9, 0x4b, 0xbc, 0x05, 0xf6, 0x2f, 0x5e, 0xbc, 0xe8, 0xf7, 0xfa, 0x7d, 0x51, 0xaf, 0x80, 0x1f, 0x0c, 0xf5, 0xfb, 0x8c, 0x01, 0xf6, 0xec, 0x05, 0x50, 0xbf, 0xc7, 0xb8, 0xf4, 0x83, 0xc2, 0x48, 0x5f, 0x62, 0x2d, 0xb0, 0x1f, 0x08, 0xfe, 0x99, 0xac, 0x6f, 0x80, 0x1f, 0x0c, 0xf5, 0x4f, 0x08, 0x07, 0xec, 0x4f, 0x4f, 0x00, 0xff, 0x81, 0x22, 0xe1, 0x0f, 0x81, 0x3e, 0x81, 0x62, 0xf3, 0x01, 0xd1, 0xaf, 0xcb, 0x4d, 0x1f, 0x08, 0xcb, 0xa3, 0x3e, 0x10, 0x92, 0x23, 0x3e, 0x10, 0xc8, 0x6d, 0x3e, 0x20, 0xfa, 0x85, 0xdc, 0xe6, 0x03, 0xa2, 0x5f, 0xc8, 0x6d, 0x3e, 0x20, 0xfa, 0x85, 0xdc, 0xe6, 0x03, 0xa2, 0x1f, 0x8d, 0x5f, 0x59, 0xdc, 0x76, 0x9b, 0x3f, 0x37, 0xe3, 0x97, 0x0b, 0x3c, 0xdb, 0x02, 0x53, 0xa0, 0xe7, 0x40, 0x84, 0xcc, 0x24, 0xe0, 0x5f, 0x82, 0x80, 0xee, 0x8c, 0xa2, 0x50, 0x81, 0xf1, 0xc5, 0x1f, 0x70, 0x55, 0xf1, 0x4a, 0x40, 0x53, 0x01, 0xbd, 0xdd, 0xf0, 0xbc, 0xe3, 0xcf, 0xfe, 0xe1, 0x1d, 0x0f, 0x7c, 0x12, 0x6d, 0xbd, 0x90, 0x49, 0xf9, 0x8f, 0x96, 0x51, 0xfc, 0x0a, 0xfe, 0x9c, 0x47, 0xe3, 0x97, 0x88, 0x98, 0x3d, 0x85, 0xd8, 0x95, 0x3e, 0x60, 0xc6, 0x6f, 0x00, 0x73, 0x80, 0xbd, 0x04, 0x58, 0xf8, 0x83, 0xf0, 0x0b, 0x89, 0xfd, 0x10, 0x6b, 0x85, 0xfd, 0x94, 0xef, 0x0f, 0x6a, 0xfc, 0xef, 0x66, 0x3c, 0xaf, 0xf3, 0xf8, 0xef, 0x43, 0x12, 0x6d, 0xbd, 0x5c, 0xf8, 0xe8, 0xda, 0x04, 0xa4, 0x49, 0x99, 0x94, 0x49, 0xb1, 0x17, 0xae, 0x11, 0xd1, 0xb8, 0x2a, 0xe2, 0x96, 0x12, 0x64, 0x2b, 0x42, 0xc6, 0x39, 0x0d, 0xf1, 0x90, 0x1c, 0xfa, 0x28, 0x15, 0x1c, 0x1a, 0x50, 0xe1, 0x86, 0x7d, 0x90, 0x82, 0x50, 0x56, 0x14, 0xa3, 0x61, 0x7d, 0x5f, 0x8d, 0x30, 0xf8, 0x43, 0x99, 0xcf, 0x0d, 0x03, 0x84, 0x8d, 0x5b, 0x9f, 0x92, 0x07, 0x64, 0x98, 0x1f, 0xf5, 0x51, 0x8b, 0x2d, 0x2a, 0xc6, 0xa7, 0x72, 0xfe, 0x82, 0x9b, 0xfa, 0xc3, 0x31, 0x38, 0xc1, 0x65, 0xfa, 0x58, 0xd4, 0x3e, 0x5f, 0xc6, 0xcf, 0x86, 0x8a, 0x51, 0x65, 0x03, 0x5b, 0xe0, 0x88, 0x45, 0xec, 0x72, 0xe8, 0x0d, 0x28, 0x32, 0x0e, 0x57, 0x63, 0xf3, 0xa0, 0x1e, 0xb6, 0x20, 0xf1, 0x62, 0x54, 0xd9, 0xf1, 0x31, 0x0e, 0xcb, 0xd5, 0xa4, 0xc4, 0xfe, 0x30, 0xbb, 0x7d, 0xce, 0x82, 0x77, 0x49, 0x44, 0x9f, 0x6b, 0xe3, 0x98, 0xfe, 0x31, 0x1a, 0x97, 0xa0, 0xf3, 0xd7, 0xc7, 0x57, 0x0c, 0x5d, 0x3f, 0xb3, 0xe8, 0x8f, 0xfa, 0x7d, 0x70, 0x22, 0x72, 0x6d, 0xcf, 0xb1, 0xfd, 0x37, 0xe5, 0x11, 0x7c, 0x35, 0x6c, 0x24, 0x38, 0xcc, 0x8e, 0x3d, 0xe6, 0x03, 0x21, 0x3d, 0xc4, 0x77, 0x98, 0xb6, 0x7e, 0x34, 0x7e, 0x95, 0xdf, 0x52, 0xee, 0x47, 0x96, 0x6d, 0xfd, 0x92, 0xb8, 0xcf, 0x4d, 0xfc, 0x7d, 0xd9, 0x88, 0xe3, 0xfa, 0x36, 0x7c, 0xc2, 0xfe, 0xc7, 0xb9, 0x1d, 0x7f, 0x9b, 0x7f, 0x85, 0xe4, 0xc8, 0xfa, 0x65, 0x3f, 0xa3, 0x1a, 0x8e, 0xba, 0xfb, 0x85, 0xd7, 0x66, 0xae, 0x4f, 0xbe, 0x3f, 0xd6, 0xff, 0xe9, 0x10, 0x64, 0x8e, 0xf8, 0xb7, 0xb4, 0x29, 0x7c, 0x9b, 0x2a, 0x1f, 0x37, 0xf7, 0xcf, 0x24, 0xd3, 0x3e, 0x53, 0x73, 0x93, 0xe7, 0x24, 0x8d, 0x9c, 0x7f, 0xd2, 0x3e, 0x55, 0xef, 0x30, 0x6c, 0xfe, 0xe3, 0xe3, 0x3b, 0xb4, 0xff, 0xdc, 0x1e, 0x1f, 0x61, 0x7d, 0x3a, 0x46, 0x3f, 0xba, 0x7f, 0x3c, 0x38, 0xff, 0x38, 0xe6, 0x1f, 0x34, 0xba, 0x09, 0x18, 0x3e, 0xb6, 0xf9, 0x9b, 0x32, 0x1a, 0xbd, 0x3f, 0x28, 0x1d, 0xed, 0x21, 0x67, 0x38, 0xfe, 0xfa, 0x3a, 0xc3, 0xf1, 0x4b, 0x7d, 0xd2, 0xe7, 0x69, 0xe2, 0xaf, 0x9d, 0x2d, 0x26, 0x7e, 0xcc, 0xb8, 0x5f, 0x58, 0xf4, 0x7a, 0x32, 0x62, 0x9f, 0xa2, 0x77, 0xc2, 0xf0, 0xfe, 0xa1, 0xc8, 0xf1, 0xce, 0xa2, 0xf7, 0xa2, 0xf5, 0x8e, 0xe0, 0x14, 0x3f, 0x3f, 0xce, 0xd0, 0x11, 0x67, 0xb7, 0x7f, 0x7e, 0x23, 0xfe, 0x6b, 0xf8, 0x00, 0xa6, 0x2f, 0xb7, 0x89, 0x46, 0xc7, 0x27, 0xca, 0xa6, 0xcd, 0xfe, 0xd0, 0x07, 0x99, 0xe6, 0x47, 0xa1, 0x09, 0x50, 0x7f, 0xef, 0x15, 0x67, 0x14, 0x3f, 0x3f, 0xa9, 0x8a, 0x23, 0x62, 0xc4, 0x28, 0x47, 0xce, 0xa0, 0xc8, 0x02, 0xc9, 0xe8, 0x0e, 0xc4, 0xe6, 0xaf, 0x1f, 0xf4, 0x14, 0xb3, 0xaf, 0x9f, 0x8f, 0x08, 0xbe, 0x3a, 0x11, 0x64, 0xfd, 0xc1, 0xdd, 0x28, 0xe3, 0x9f, 0x22, 0xf2, 0x71, 0xf3, 0x37, 0x62, 0x18, 0xbb, 0x43, 0xce, 0x3e, 0x03, 0x0c, 0x7c, 0x98, 0xe5, 0x0e, 0x40, 0xce, 0x5f, 0x1d, 0x7f, 0x34, 0xfe, 0x4d, 0xec, 0x90, 0xf5, 0x07, 0x63, 0xdb, 0xfc, 0x63, 0x38, 0x77, 0x86, 0xaa, 0x87, 0xcf, 0x00, 0x86, 0xed, 0xaf, 0xbf, 0x2f, 0x81, 0x9f, 0xd9, 0xc6, 0x67, 0x88, 0xff, 0x44, 0xce, 0x00, 0x8e, 0xf8, 0x0f, 0xd5, 0xe2, 0x98, 0x47, 0xe3, 0x37, 0x42, 0x58, 0xfc, 0x73, 0x4b, 0xfc, 0x13, 0xff, 0x03, 0x98, 0xb1, 0x49, 0xaa, 0x32, 0x29, 0x93, 0x32, 0x29, 0x9f, 0x73, 0x31, 0xcf, 0x25, 0xfa, 0x7f, 0x96, 0xff, 0x33, 0x63, 0x8d, 0xec, 0x73, 0xce, 0xff, 0x95, 0x9e, 0xbc, 0x17, 0xe8, 0x19, 0xdf, 0x5a, 0x63, 0xe6, 0xca, 0x39, 0x3d, 0x3f, 0x5e, 0xff, 0x66, 0xfe, 0x2f, 0xef, 0x37, 0x6a, 0xf9, 0x3e, 0xa0, 0xe1, 0x6f, 0x50, 0x2c, 0x7f, 0x08, 0xf2, 0x62, 0x6a, 0xcb, 0xff, 0x89, 0xca, 0xff, 0x31, 0xfb, 0x4c, 0x7d, 0x57, 0x8d, 0xc9, 0xff, 0xa9, 0x36, 0x0e, 0x96, 0x5f, 0x06, 0x72, 0x6a, 0xcb, 0xff, 0x8d, 0x3d, 0x88, 0xea, 0xd3, 0x10, 0xc7, 0xe5, 0x78, 0xfe, 0x1f, 0xda, 0x73, 0x7a, 0x06, 0x26, 0x18, 0xbe, 0xe7, 0xc8, 0xff, 0x83, 0x3d, 0xc5, 0x7c, 0xe0, 0xec, 0xfc, 0x9f, 0x0c, 0xf7, 0x1f, 0x8d, 0xdf, 0x73, 0xe4, 0xff, 0x54, 0x3d, 0x3e, 0x16, 0xd1, 0x6f, 0x3f, 0xaa, 0x70, 0xa1, 0x04, 0xcf, 0xef, 0x42, 0xe1, 0xc5, 0x71, 0xfd, 0xd1, 0x18, 0x76, 0xfc, 0x6d, 0xfe, 0xa5, 0xcb, 0x29, 0xb1, 0x8c, 0xcf, 0xa8, 0x86, 0xa3, 0xf1, 0x6d, 0xa8, 0xad, 0x2d, 0xba, 0x3e, 0x1a, 0x8a, 0x7f, 0xab, 0x7f, 0x2b, 0xc2, 0xce, 0x2f, 0xaa, 0xbe, 0x4b, 0x29, 0x92, 0xa7, 0x99, 0x9f, 0x7e, 0x1c, 0x99, 0x1f, 0x67, 0xa3, 0xdc, 0x3f, 0xaa, 0xef, 0xc7, 0xad, 0x94, 0xb3, 0xa8, 0x9c, 0x19, 0xfb, 0x8b, 0xc5, 0xaf, 0xbe, 0xf7, 0x94, 0xd8, 0xf1, 0x47, 0xf3, 0xbf, 0x88, 0x3e, 0x45, 0xf7, 0x9f, 0x59, 0xe2, 0xd7, 0xdc, 0x5f, 0x34, 0x7f, 0x1f, 0x33, 0xff, 0x90, 0x8c, 0x8d, 0xd1, 0x57, 0xb9, 0x93, 0x79, 0xff, 0xe8, 0x7a, 0x0c, 0xc5, 0xc7, 0xb0, 0x4d, 0xb1, 0xdf, 0x17, 0x47, 0xb1, 0x67, 0xfb, 0xfe, 0x27, 0x96, 0xef, 0xff, 0xff, 0x76, 0xfe, 0x1f, 0x99, 0x9f, 0xe5, 0xcc, 0x89, 0xe4, 0xd8, 0xc4, 0x27, 0x82, 0xfc, 0x7e, 0x20, 0x73, 0x27, 0x25, 0x47, 0xcf, 0x47, 0xa9, 0xaf, 0x86, 0xe1, 0xc8, 0x02, 0xc6, 0xd8, 0x1f, 0xfd, 0x46, 0x4c, 0x95, 0x3e, 0xf2, 0xa3, 0x77, 0xf0, 0xbb, 0x82, 0xed, 0x7e, 0x55, 0xf3, 0x23, 0xda, 0x5d, 0x64, 0x9d, 0x3f, 0xfa, 0x1f, 0x00, 0x6a, 0x5c, 0x86, 0xec, 0x15, 0xd3, 0x0d, 0xf9, 0xa4, 0x63, 0xe4, 0x77, 0xd1, 0xd0, 0x18, 0x63, 0x0f, 0x00, 0x86, 0xe7, 0xff, 0x81, 0xff, 0x62, 0xf9, 0xff, 0xd8, 0xf9, 0x6b, 0xeb, 0x67, 0x84, 0xa2, 0x09, 0xba, 0x89, 0x1f, 0x3b, 0x13, 0x7f, 0x6a, 0xd1, 0xb7, 0xb8, 0x92, 0xca, 0xef, 0xb1, 0xdc, 0x39, 0x82, 0x1d, 0xc3, 0xee, 0xb8, 0xf1, 0xfe, 0x31, 0x94, 0x33, 0x1c, 0x7f, 0xfd, 0x0c, 0xc0, 0xbe, 0x55, 0x87, 0xfb, 0x12, 0xf8, 0x89, 0xc5, 0x3e, 0xe6, 0x3f, 0xa3, 0xdf, 0xd8, 0xb5, 0xb5, 0xfc, 0x4f, 0xf2, 0xff, 0x4b, 0x33, 0x84, 0xbc, 0x1a, 0x8b, 0x5f, 0x99, 0xfe, 0xe2, 0x55, 0xfa, 0xe5, 0xaf, 0x7c, 0xf5, 0x6b, 0xaf, 0x7f, 0xfd, 0x1b, 0xd7, 0x2e, 0xff, 0xfc, 0x02, 0xa9, 0x17, 0x9d, 0x55, 0x27, 0x1b, 0xff, 0x59, 0x3c, 0x96, 0x6f, 0x54, 0x6b, 0x95, 0x6a, 0x36, 0x1e, 0x83, 0x7a, 0x2c, 0x57, 0xad, 0x56, 0xd6, 0xb3, 0xf3, 0x37, 0xe7, 0xa0, 0x5e, 0xcc, 0x95, 0x0b, 0xaa, 0x5a, 0xba, 0xed, 0xe4, 0x56, 0x55, 0x7d, 0xad, 0xf4, 0x03, 0x67, 0x65, 0x63, 0xcd, 0xa9, 0xde, 0x71, 0xf2, 0xf5, 0xec, 0xfe, 0xde, 0xa3, 0x16, 0xf4, 0x1e, 0xcc, 0xc5, 0xc1, 0x52, 0xa5, 0xe0, 0x24, 0x95, 0xa1, 0xdb, 0xcb, 0x49, 0x51, 0xb2, 0x52, 0xa5, 0x56, 0xaf, 0x96, 0xca, 0xcb, 0xd0, 0x58, 0x14, 0xad, 0x72, 0x63, 0xf5, 0xb6, 0x53, 0x85, 0x56, 0x46, 0xb4, 0xde, 0x74, 0xee, 0xae, 0x57, 0xaa, 0x85, 0xec, 0x2d, 0xd1, 0xc8, 0xad, 0x95, 0x7c, 0x2d, 0xa9, 0x96, 0xaf, 0xac, 0xae, 0x3a, 0xe5, 0x7a, 0xf6, 0xdb, 0xd2, 0x46, 0x69, 0xb9, 0x2c, 0x45, 0x69, 0xd1, 0x7a, 0x2b, 0x57, 0xf5, 0x5f, 0xfc, 0x96, 0x68, 0x55, 0x60, 0x35, 0xd0, 0xce, 0x4a, 0x51, 0xcd, 0x59, 0x81, 0x89, 0x25, 0xb3, 0xd2, 0xba, 0xbf, 0xb8, 0xa4, 0x6f, 0xbd, 0x56, 0xcc, 0x15, 0x2a, 0xeb, 0xc9, 0xd0, 0x9c, 0x97, 0x73, 0xab, 0xce, 0x5a, 0xae, 0xa0, 0x66, 0x5d, 0xaf, 0x34, 0xf2, 0x45, 0xa8, 0xcb, 0x46, 0x2c, 0xb7, 0xb2, 0x56, 0xcc, 0x65, 0x6f, 0x7e, 0x47, 0x9a, 0x3d, 0xf0, 0x35, 0x0e, 0xe2, 0xf1, 0x7c, 0xd1, 0xc9, 0xbf, 0xb9, 0x51, 0x76, 0xd6, 0x37, 0xde, 0x72, 0xaa, 0xb5, 0x52, 0xa5, 0x9c, 0x75, 0x9b, 0xdb, 0x9d, 0x56, 0xbc, 0x5c, 0xd9, 0xa8, 0x55, 0x1a, 0xb0, 0x67, 0x7e, 0x73, 0xb9, 0x74, 0x67, 0x63, 0xc5, 0x29, 0x2f, 0xd7, 0x8b, 0xd9, 0x85, 0x74, 0x72, 0x7e, 0x3e, 0xb9, 0xb5, 0x9b, 0xec, 0xb4, 0x36, 0xdb, 0xbb, 0xf7, 0x3b, 0x52, 0x56, 0xcb, 0xe7, 0x56, 0x9c, 0xec, 0x42, 0x3c, 0x0e, 0xa2, 0xce, 0xc3, 0xf6, 0xe3, 0x64, 0xed, 0x6e, 0x39, 0x9f, 0xdc, 0x6e, 0xfe, 0xa8, 0xb5, 0x9d, 0x14, 0x7d, 0x8f, 0x1f, 0xb6, 0x76, 0x93, 0xf5, 0x52, 0x3e, 0x79, 0x7f, 0xaf, 0xfd, 0x4e, 0x27, 0x79, 0x2b, 0x5d, 0x7c, 0x37, 0xe9, 0xee, 0x35, 0x77, 0x5a, 0x9d, 0x78, 0xad, 0x58, 0x59, 0xdf, 0x10, 0xaf, 0xab, 0xa1, 0xe0, 0x75, 0x6b, 0x89, 0xbb, 0x8f, 0x76, 0x37, 0xf7, 0xb7, 0xda, 0xd2, 0xd6, 0xec, 0xf5, 0x78, 0x6c, 0x73, 0xbb, 0x23, 0xd8, 0x76, 0x7b, 0xb3, 0xb9, 0xed, 0x0f, 0x97, 0x4d, 0xd5, 0x1f, 0x6e, 0x75, 0x92, 0xf0, 0xaf, 0xf3, 0xd3, 0xce, 0x7e, 0x6b, 0x27, 0x09, 0x93, 0x74, 0xb7, 0x1e, 0x3c, 0xda, 0x6b, 0x4a, 0xbd, 0xcd, 0xe6, 0xde, 0xfe, 0xde, 0xd6, 0xfd, 0x07, 0xad, 0x54, 0xa0, 0xd5, 0xd9, 0x7a, 0xb7, 0x95, 0x7d, 0x67, 0x6f, 0x6b, 0x77, 0x7f, 0x56, 0x1a, 0x98, 0x4b, 0xcf, 0xcd, 0xdf, 0x02, 0x9b, 0x7a, 0xd7, 0xec, 0xc2, 0x62, 0x7a, 0x5e, 0xbc, 0x78, 0xfd, 0xc6, 0x8d, 0x85, 0xb9, 0xd9, 0x9b, 0x99, 0x5b, 0xf0, 0x0a, 0x54, 0xaf, 0xc7, 0x5b, 0xbb, 0xf7, 0x63, 0x7f, 0x20, 0xe4, 0xb2, 0x7c, 0x68, 0x4c, 0x3c, 0x57, 0xe4, 0x23, 0xeb, 0xe4, 0x3c, 0xcf, 0x05, 0xe9, 0xe0, 0x17, 0xc5, 0x73, 0x09, 0x9e, 0x2f, 0xc0, 0x33, 0x7d, 0x71, 0x3a, 0x46, 0xc2, 0xcf, 0xb4, 0xf1, 0xe8, 0x16, 0x2e, 0x82, 0x89, 0xf7, 0xc8, 0x55, 0x72, 0x75, 0xea, 0xea, 0xd4, 0xf9, 0xc6, 0x34, 0x9f, 0x4b, 0xf1, 0x74, 0x70, 0x79, 0xfa, 0x9f, 0x2f, 0x82, 0xcf, 0x2c, 0xd4, 0x7f, 0xf2, 0xeb, 0xdf, 0x7f, 0xf2, 0xf2, 0xf4, 0x8f, 0xbf, 0xfd, 0xc5, 0x03, 0xe7, 0x9b, 0x53, 0x41, 0x3b, 0xe0, 0xd3, 0xa0, 0xf3, 0xa5, 0xe9, 0xd7, 0x0b, 0x6f, 0x2c, 0xa6, 0x17, 0x77, 0xca, 0xdf, 0x2f, 0xbf, 0xbf, 0x92, 0x5e, 0x6c, 0xbd, 0xf1, 0xe7, 0x3b, 0xc5, 0x47, 0x3f, 0x6e, 0xde, 0x3d, 0xf8, 0xd3, 0xc7, 0x07, 0x73, 0xef, 0xff, 0xea, 0x37, 0x3b, 0x47, 0x73, 0x1f, 0x1f, 0xf5, 0x76, 0x3e, 0xfc, 0xe8, 0x6f, 0x7f, 0x79, 0xfb, 0x53, 0xef, 0xaf, 0xff, 0x02, 0x45, 0xb0, 0x13, 0xb5, \ No newline at end of file +0x78, 0xda, 0xed, 0x19, 0x4b, 0x6c, 0x1b, 0xc7, 0x75, 0xfd, 0x49, 0x1a, 0x6e, 0x5c, 0x8f, 0x05, 0x14, 0x41, 0x3f, 0x69, 0xb3, 0x50, 0x52, 0x94, 0x94, 0x48, 0x8a, 0x22, 0x25, 0xd5, 0xb5, 0xba, 0x4d, 0x65, 0x91, 0x96, 0xd4, 0xe8, 0x63, 0xe8, 0x13, 0x37, 0x30, 0x12, 0x75, 0x45, 0x2e, 0x25, 0x22, 0x14, 0x57, 0xdd, 0x25, 0x2d, 0xc9, 0x81, 0x80, 0x20, 0x40, 0x00, 0xf5, 0xe4, 0x1c, 0x5c, 0xa0, 0x3a, 0x29, 0x41, 0x6e, 0xea, 0xa5, 0x17, 0x5f, 0xaa, 0x83, 0xd1, 0x1e, 0x03, 0xb4, 0x28, 0x82, 0xa2, 0x87, 0xa2, 0xe8, 0xa5, 0xe8, 0x95, 0x9e, 0x93, 0x51, 0x23, 0x40, 0xb6, 0xef, 0xcd, 0xcc, 0x2e, 0xf7, 0x33, 0x2b, 0x3b, 0x80, 0x93, 0x02, 0x85, 0x66, 0x3d, 0x9c, 0xcf, 0x9b, 0xf7, 0xe6, 0xfd, 0x67, 0x46, 0x3e, 0xf3, 0xe1, 0xb3, 0xca, 0xe7, 0x2e, 0x94, 0xfe, 0xfe, 0xfe, 0x3b, 0xfb, 0xfb, 0xfb, 0x77, 0xb0, 0x85, 0xe1, 0x1d, 0x97, 0xfa, 0xd5, 0x75, 0x1f, 0x74, 0xfb, 0xfb, 0xdd, 0xee, 0xfe, 0x3e, 0xed, 0xf6, 0xbf, 0x47, 0xbb, 0xee, 0x1d, 0xea, 0xd2, 0x3b, 0x94, 0x7a, 0x95, 0xe1, 0xf7, 0xf5, 0xf5, 0x59, 0xf5, 0x7a, 0xdd, 0xc2, 0x16, 0x86, 0x16, 0xe0, 0x79, 0x15, 0xf1, 0xfb, 0xfa, 0xdc, 0x6e, 0xbd, 0x4e, 0xbb, 0x7d, 0x06, 0xe0, 0x5b, 0xb4, 0x4b, 0x79, 0x7d, 0x40, 0x2d, 0xc5, 0x65, 0xf8, 0xe5, 0x72, 0xf9, 0xf0, 0xe0, 0xe0, 0xe0, 0x10, 0x5b, 0x18, 0x1e, 0x12, 0xa8, 0x80, 0x7b, 0x28, 0xf0, 0xcb, 0x65, 0xb7, 0x7b, 0x70, 0x40, 0xbb, 0xe5, 0xbb, 0x80, 0x7f, 0x48, 0xbb, 0x04, 0x2a, 0x3d, 0x04, 0xfc, 0x43, 0x81, 0xbf, 0xb2, 0xb2, 0x72, 0xff, 0xf8, 0xf8, 0xf8, 0x3e, 0xb6, 0x30, 0x64, 0x95, 0x28, 0x04, 0x5b, 0xc4, 0x5f, 0x59, 0x71, 0xbb, 0xc7, 0xc7, 0xb4, 0xbb, 0x72, 0x0f, 0xf0, 0xef, 0x03, 0xcd, 0xfb, 0x94, 0x2a, 0x50, 0xb1, 0xfd, 0xf0, 0xe8, 0x48, 0x3d, 0xc2, 0x72, 0xe5, 0xe3, 0xa3, 0xa3, 0x52, 0xe9, 0xe8, 0x4a, 0xa9, 0xf4, 0x31, 0x0e, 0xe1, 0xe7, 0x4a, 0xa1, 0x54, 0x3a, 0xe7, 0xc1, 0xd9, 0x3c, 0xc0, 0xd9, 0xba, 0x18, 0xfc, 0x63, 0x81, 0x2f, 0x5a, 0x18, 0x87, 0xe0, 0x57, 0x04, 0xfd, 0x2b, 0x02, 0xff, 0x4a, 0x0f, 0xff, 0x77, 0xc7, 0xc7, 0xcf, 0x1f, 0xdf, 0xbc, 0x77, 0x7c, 0x7c, 0xef, 0x26, 0xaf, 0x2b, 0x2b, 0xac, 0x85, 0x99, 0x9b, 0xd7, 0x57, 0x56, 0x9e, 0xf9, 0x45, 0xbd, 0xfe, 0x6c, 0xbd, 0xcf, 0xa8, 0xd7, 0x8d, 0x17, 0xea, 0xc1, 0x16, 0x7a, 0x2f, 0x5c, 0xea, 0xeb, 0x3b, 0xf3, 0xee, 0xfe, 0xfe, 0x73, 0xfb, 0xef, 0xa5, 0xf7, 0x59, 0x4d, 0xbf, 0xb7, 0xef, 0xf5, 0xa1, 0x97, 0xd6, 0xfa, 0xfb, 0xcf, 0x7e, 0x70, 0x70, 0x90, 0x3a, 0xb8, 0x3b, 0x73, 0xc0, 0xea, 0x4c, 0x19, 0xb4, 0x8c, 0xed, 0xdd, 0x83, 0xbb, 0xf0, 0xfb, 0xd3, 0x72, 0xf9, 0x3c, 0xb3, 0x37, 0xda, 0x9e, 0x7d, 0xff, 0x61, 0xfd, 0x21, 0xf0, 0x03, 0x57, 0xa1, 0xa8, 0xdb, 0xcf, 0xdd, 0x3b, 0x8a, 0x0b, 0xb6, 0x7f, 0x70, 0x07, 0xec, 0xbf, 0x2f, 0x2a, 0xfa, 0x83, 0x42, 0x1f, 0x74, 0x5d, 0xb7, 0xdb, 0x65, 0xf6, 0x46, 0xdb, 0xd7, 0x1f, 0x42, 0x8b, 0x5f, 0xbd, 0xfe, 0x12, 0xf8, 0x81, 0x8f, 0x6f, 0x51, 0x0a, 0xb6, 0x67, 0xd5, 0xaa, 0x53, 0x97, 0xf9, 0x41, 0x5f, 0x0f, 0x9f, 0xd9, 0x1b, 0x6d, 0xff, 0xe8, 0xd1, 0xa3, 0xc3, 0x83, 0xc3, 0x43, 0xec, 0x2f, 0x80, 0x1f, 0xf8, 0xf8, 0x87, 0x94, 0x82, 0xed, 0xe9, 0x23, 0xa8, 0x87, 0x07, 0xd4, 0x65, 0x7e, 0x50, 0xee, 0xe1, 0x33, 0x5b, 0xa3, 0xed, 0x8f, 0xb1, 0xfd, 0x8c, 0xf5, 0x57, 0xc1, 0x0f, 0x7c, 0xfc, 0xfb, 0x8a, 0x0b, 0xb6, 0x7f, 0x70, 0x1f, 0xec, 0x7f, 0x2c, 0x2a, 0xfa, 0x83, 0x87, 0xaf, 0x40, 0x49, 0xf2, 0x01, 0x9c, 0x0f, 0xc2, 0xa3, 0x3e, 0x10, 0x86, 0xc7, 0x7d, 0x20, 0x04, 0x97, 0xf8, 0x80, 0x07, 0x4f, 0xf2, 0x01, 0x9c, 0x47, 0x78, 0x92, 0x0f, 0xe0, 0x3c, 0xc2, 0x93, 0x7c, 0x00, 0xe7, 0x11, 0x9e, 0xe4, 0x03, 0x38, 0x2f, 0x8d, 0x5f, 0x56, 0xea, 0x96, 0xe5, 0x3e, 0x8c, 0xc6, 0xaf, 0x8b, 0xf6, 0xb4, 0xd0, 0xa6, 0x50, 0x1f, 0x42, 0x55, 0x94, 0x4b, 0x7d, 0xf0, 0xaf, 0x4f, 0x01, 0xdc, 0x4b, 0xa2, 0x86, 0x0a, 0xec, 0x8f, 0x3f, 0xe0, 0xaa, 0xb8, 0xc4, 0xab, 0x67, 0xbc, 0xfa, 0xd6, 0x4a, 0xb7, 0x7b, 0xef, 0xb3, 0x7f, 0x77, 0xef, 0x1d, 0xf3, 0x8a, 0xe3, 0x60, 0x51, 0x4e, 0xcb, 0x97, 0x5a, 0x7a, 0xf1, 0x8b, 0xed, 0x43, 0x37, 0x1e, 0xbf, 0x0a, 0xc6, 0xec, 0x03, 0x88, 0x5d, 0xe6, 0x03, 0xd1, 0xf8, 0xf5, 0xcc, 0xec, 0xd9, 0x9e, 0x19, 0x18, 0xfd, 0x01, 0xfd, 0x82, 0xd9, 0xde, 0xb7, 0xb5, 0xb0, 0xfd, 0x19, 0xee, 0x0f, 0x62, 0xff, 0x9f, 0x94, 0xba, 0x5d, 0x67, 0xfb, 0x5f, 0x7e, 0xc5, 0x71, 0xb0, 0x9c, 0xfd, 0xe4, 0xa5, 0x53, 0x23, 0x9d, 0x96, 0xd3, 0x72, 0x5a, 0x92, 0x8b, 0x1b, 0xa8, 0x4a, 0xa0, 0x15, 0x05, 0x4f, 0x29, 0xac, 0x49, 0x05, 0x61, 0xae, 0x4b, 0x42, 0x6d, 0x08, 0x0e, 0x73, 0x84, 0x60, 0x0b, 0x03, 0xe8, 0xb8, 0x11, 0xfa, 0x00, 0x05, 0x20, 0xeb, 0x88, 0x86, 0x84, 0xf1, 0x39, 0x9a, 0x42, 0xe1, 0x87, 0x50, 0xde, 0x46, 0x08, 0x28, 0xf4, 0x24, 0xf9, 0x04, 0xdc, 0xab, 0x11, 0xf2, 0xbd, 0x39, 0x92, 0x40, 0x8b, 0xe0, 0xfe, 0x84, 0xf1, 0x8f, 0x6d, 0x14, 0xdf, 0xdf, 0xc3, 0x55, 0xe4, 0xb0, 0xe0, 0x5e, 0x24, 0x99, 0x5f, 0xea, 0x3e, 0xde, 0x54, 0x94, 0x08, 0x1a, 0x32, 0x01, 0x7b, 0x4d, 0x8c, 0xae, 0x0b, 0xb3, 0x5e, 0x8d, 0xed, 0xe3, 0x8a, 0xbd, 0x5d, 0xaf, 0x1f, 0xa6, 0xc0, 0xec, 0x45, 0x89, 0xa0, 0xc3, 0x6d, 0x1c, 0x86, 0x0b, 0xa6, 0x50, 0x3f, 0x34, 0x99, 0xbe, 0x4b, 0xbd, 0xb5, 0x4a, 0x0c, 0xdf, 0x0d, 0xec, 0x13, 0xf5, 0x8f, 0xde, 0xbe, 0x8a, 0x94, 0xff, 0xe0, 0xfe, 0xa2, 0x91, 0xca, 0x4f, 0x13, 0xf0, 0x7b, 0xf3, 0xdc, 0x38, 0x31, 0x78, 0x40, 0xe7, 0x32, 0xfd, 0x47, 0xe1, 0x31, 0xfb, 0x06, 0x6c, 0xc3, 0x8c, 0x43, 0x93, 0x6d, 0x2f, 0xf3, 0x81, 0x10, 0x9e, 0xc4, 0x77, 0x68, 0x40, 0x7e, 0x69, 0xfc, 0x0a, 0xbf, 0x25, 0x2e, 0x8f, 0xac, 0x24, 0xf9, 0x59, 0x75, 0x79, 0x1b, 0xb5, 0x3f, 0x87, 0xf5, 0x5a, 0x39, 0x7e, 0x92, 0x7d, 0xc2, 0xfe, 0xe7, 0xba, 0xc9, 0xf6, 0x4f, 0xf2, 0xaf, 0x10, 0x5c, 0x22, 0x3f, 0x9b, 0xa7, 0x24, 0x60, 0xc7, 0xa0, 0xfb, 0x85, 0x65, 0x8b, 0xca, 0xc7, 0xd6, 0x9f, 0xe8, 0xff, 0xc4, 0x37, 0xb2, 0x2b, 0xf1, 0x6f, 0x46, 0x13, 0x7d, 0x9b, 0x08, 0x1f, 0x8f, 0xea, 0x2f, 0x5a, 0xa3, 0xf4, 0xa9, 0xe0, 0x8d, 0xe5, 0x49, 0x12, 0xcb, 0x7f, 0x8c, 0x3e, 0x11, 0x6b, 0xa8, 0x8c, 0xff, 0x93, 0xe3, 0x3b, 0xa4, 0x7f, 0x37, 0x39, 0x3e, 0xc2, 0xf8, 0xe4, 0x04, 0xfc, 0xb8, 0xfe, 0x5c, 0x2f, 0xff, 0xb9, 0x32, 0xff, 0x20, 0x71, 0x25, 0xc8, 0xec, 0x93, 0xc4, 0x7f, 0x14, 0x46, 0xe2, 0xe7, 0x07, 0x21, 0x3d, 0x1d, 0xba, 0x54, 0x6e, 0xff, 0xa0, 0x9c, 0xe1, 0xf8, 0x25, 0xbc, 0x06, 0xf9, 0x8c, 0xda, 0x3f, 0x90, 0x5b, 0xa2, 0xf6, 0xa3, 0x91, 0xf3, 0x85, 0xc6, 0x8f, 0xa7, 0x48, 0xec, 0x13, 0xe9, 0x99, 0xe0, 0x9f, 0x3f, 0x44, 0x92, 0xde, 0x69, 0xfc, 0x5c, 0x4c, 0x3c, 0x23, 0x5c, 0x22, 0xcf, 0x1f, 0x8f, 0xc1, 0xc1, 0xdc, 0xcd, 0xf3, 0xb7, 0xc4, 0x7f, 0x23, 0x3e, 0x20, 0xc3, 0x67, 0x6a, 0x22, 0xf1, 0xfd, 0x15, 0x41, 0x33, 0x89, 0xbe, 0xef, 0x83, 0x34, 0xe0, 0x47, 0x21, 0x06, 0x08, 0xd7, 0xbd, 0x68, 0x29, 0x91, 0xe7, 0x4f, 0x22, 0xe2, 0x48, 0x89, 0xc4, 0xa8, 0x2b, 0xc9, 0x41, 0x31, 0x01, 0x95, 0xde, 0x19, 0x28, 0xe3, 0x3f, 0x98, 0xe8, 0x89, 0x8c, 0x7e, 0x30, 0x3f, 0x4a, 0xec, 0x1b, 0xac, 0x8a, 0x44, 0x7e, 0xef, 0x6c, 0x64, 0xf1, 0x4f, 0x24, 0xf0, 0x93, 0xf8, 0x8f, 0xc4, 0xb0, 0xec, 0x0c, 0x79, 0x7c, 0x0e, 0x88, 0xd8, 0x87, 0x26, 0x9c, 0x01, 0x92, 0xfc, 0x1b, 0xb4, 0xbf, 0x34, 0xfe, 0xa3, 0xb6, 0x93, 0xc8, 0xef, 0xed, 0x9d, 0xe4, 0x1f, 0x3e, 0xef, 0x54, 0x8a, 0x1e, 0xce, 0x01, 0x54, 0xa6, 0x5f, 0xae, 0x17, 0xcf, 0xcf, 0x92, 0xf6, 0xa7, 0x12, 0xff, 0x89, 0xe5, 0x00, 0x57, 0xe2, 0x3f, 0x24, 0x10, 0xc7, 0x6e, 0x3c, 0x7e, 0x63, 0x55, 0x16, 0xff, 0x6e, 0x42, 0xfc, 0x2b, 0xfc, 0x02, 0x4c, 0xe9, 0xe9, 0x53, 0xe5, 0xb4, 0x9c, 0x96, 0xd3, 0xf2, 0x94, 0x4b, 0x34, 0x2f, 0x91, 0xff, 0xb3, 0xf7, 0x3f, 0x8d, 0xc8, 0x48, 0x9f, 0xf2, 0xfb, 0x5f, 0xe0, 0xb1, 0x73, 0x81, 0x3c, 0xe6, 0xae, 0x75, 0x02, 0xaf, 0xae, 0x4b, 0x9e, 0xdc, 0x5e, 0x5f, 0xf0, 0xfd, 0xcf, 0xce, 0x37, 0x92, 0x70, 0x3f, 0x20, 0xe1, 0x3b, 0xa8, 0xec, 0xfd, 0xe0, 0xbd, 0x8b, 0x49, 0xd2, 0xfb, 0x5f, 0x11, 0xef, 0x7f, 0x19, 0x7d, 0x2a, 0xee, 0x55, 0x27, 0xbc, 0xff, 0x49, 0x60, 0x1f, 0xd9, 0xfb, 0xd2, 0x83, 0x93, 0xa4, 0xf7, 0x7f, 0x44, 0x07, 0x71, 0x7c, 0x12, 0x6a, 0xe5, 0x70, 0xf9, 0xfb, 0x3f, 0xa4, 0x73, 0xf2, 0x18, 0x9b, 0xc8, 0xec, 0xfb, 0x04, 0xef, 0x7f, 0x4f, 0xa7, 0x32, 0x1f, 0x78, 0xfc, 0xfb, 0x5f, 0xf1, 0xf5, 0x2f, 0x8d, 0xdf, 0x27, 0x78, 0xff, 0x13, 0xf1, 0x71, 0x5b, 0xc4, 0xef, 0x7e, 0x44, 0xd8, 0x85, 0x28, 0xf2, 0xf7, 0x5d, 0x28, 0xbc, 0x5c, 0x39, 0x7e, 0x6f, 0x8f, 0x64, 0xfb, 0x27, 0xf9, 0x57, 0x10, 0x4e, 0x94, 0x84, 0xfd, 0x29, 0x09, 0xd8, 0x31, 0x72, 0x37, 0x0c, 0xc8, 0x16, 0x97, 0x8f, 0x84, 0xe2, 0x3f, 0xd1, 0xbf, 0x45, 0x95, 0xe5, 0x2f, 0x22, 0xee, 0xa5, 0x44, 0xf2, 0x4e, 0x8b, 0x5e, 0xfd, 0x5c, 0x09, 0x7f, 0x2e, 0xed, 0xbd, 0xfd, 0xe3, 0xf8, 0x3c, 0x6e, 0x19, 0x9c, 0xc6, 0xe1, 0x34, 0xa2, 0x5f, 0x59, 0xfc, 0x06, 0x75, 0x4f, 0x94, 0x64, 0xfb, 0x4b, 0xdf, 0x7f, 0x31, 0x7c, 0x22, 0xd5, 0x3f, 0x4d, 0x88, 0xdf, 0xa8, 0x7e, 0xa5, 0xef, 0xf7, 0x13, 0xf8, 0x0f, 0xc1, 0xe8, 0x09, 0xf8, 0xe2, 0xed, 0x14, 0x3d, 0x7f, 0x82, 0x78, 0x54, 0x6a, 0x9f, 0x08, 0x6d, 0x22, 0xfb, 0xfb, 0x62, 0x2f, 0xf6, 0x92, 0xee, 0xff, 0x4a, 0xc2, 0xfd, 0xff, 0xab, 0x7e, 0xff, 0xc7, 0xf8, 0x4b, 0xc8, 0x39, 0xb1, 0x37, 0xb6, 0xc2, 0xab, 0x22, 0xf9, 0xfb, 0x01, 0x7b, 0x3b, 0x09, 0xb8, 0x34, 0x3f, 0x32, 0x7c, 0xb1, 0x8d, 0x2b, 0x11, 0xe0, 0x04, 0xfa, 0xbd, 0xbf, 0x11, 0x13, 0x81, 0x2f, 0xf9, 0xa3, 0xb7, 0xf7, 0x77, 0x85, 0xa4, 0xf3, 0x55, 0xf0, 0xa7, 0x04, 0xce, 0xa2, 0x44, 0xfe, 0xa5, 0xff, 0x01, 0x20, 0xf6, 0xa5, 0x12, 0x5d, 0xd1, 0x20, 0x21, 0x5e, 0x83, 0x36, 0xe2, 0x53, 0x24, 0xb4, 0xc7, 0x89, 0x09, 0x80, 0xca, 0xdf, 0xff, 0x9e, 0xff, 0xca, 0xde, 0xff, 0x27, 0xf2, 0x1f, 0x90, 0x9f, 0x2a, 0x44, 0xfa, 0x40, 0x8f, 0xda, 0x8f, 0x3e, 0xd6, 0xfe, 0x24, 0x01, 0x3f, 0xc1, 0x95, 0xc4, 0xfb, 0x5e, 0xf6, 0x76, 0x8e, 0xd9, 0x8e, 0xca, 0xce, 0xb8, 0x93, 0xfd, 0xc3, 0x87, 0x53, 0xb9, 0xfd, 0x83, 0x39, 0x40, 0x76, 0x57, 0xf5, 0xf5, 0xe2, 0xf9, 0x49, 0x02, 0x7d, 0x99, 0xff, 0xf4, 0xfe, 0xc6, 0x1e, 0x90, 0xe5, 0x7f, 0xf2, 0xfe, 0x3f, 0x7f, 0x49, 0x51, 0x9e, 0x4b, 0xa9, 0xcf, 0x5f, 0xf8, 0xfa, 0x45, 0xf2, 0xcd, 0x6f, 0x7d, 0xfb, 0x3b, 0x2f, 0x7e, 0xf7, 0x7b, 0x2f, 0x3d, 0xf3, 0xc1, 0x59, 0x65, 0x79, 0xba, 0x32, 0x57, 0xd1, 0xd5, 0x77, 0xd4, 0xd4, 0xe4, 0xca, 0xe2, 0xd2, 0xc2, 0xa2, 0xae, 0xa6, 0xa0, 0x9f, 0x9a, 0x58, 0x5c, 0x5c, 0xb8, 0xa1, 0xe7, 0x86, 0xb3, 0xd0, 0x9f, 0x9e, 0x98, 0x2f, 0x8b, 0xee, 0xcc, 0xd5, 0xca, 0xc4, 0x9c, 0xe8, 0x5f, 0x9f, 0xf9, 0x79, 0x65, 0x76, 0xf5, 0x7a, 0x65, 0xf1, 0x5a, 0x65, 0x72, 0x59, 0x6f, 0xdb, 0x1d, 0x13, 0x66, 0xf7, 0xb2, 0x2a, 0x50, 0x5a, 0x28, 0x57, 0x34, 0x41, 0xe8, 0xea, 0x94, 0x86, 0x45, 0x67, 0x28, 0x4b, 0xcb, 0x8b, 0x33, 0xf3, 0x53, 0x30, 0x18, 0xc1, 0xd1, 0xfc, 0xca, 0xdc, 0xd5, 0xca, 0x22, 0x8c, 0x4a, 0x38, 0x7a, 0xad, 0xf2, 0xc6, 0x8d, 0x85, 0xc5, 0xb2, 0x3e, 0x86, 0x83, 0x89, 0xeb, 0x33, 0x1c, 0x8b, 0xa1, 0x4d, 0x2e, 0xcc, 0xcd, 0x55, 0xe6, 0x97, 0xf5, 0x1f, 0x32, 0x1a, 0x33, 0x53, 0xf3, 0x0c, 0x54, 0xc0, 0xd1, 0xeb, 0x13, 0x8b, 0x7c, 0xe1, 0x28, 0x8e, 0x16, 0x40, 0x1a, 0x18, 0xeb, 0x0c, 0xb4, 0x54, 0x99, 0x05, 0xc6, 0x34, 0x9d, 0x51, 0xe7, 0xc2, 0x69, 0x9c, 0xfa, 0xd2, 0xf4, 0x44, 0x79, 0xe1, 0x86, 0x16, 0xe2, 0x79, 0x6a, 0x62, 0xae, 0x72, 0x7d, 0xa2, 0x2c, 0xb8, 0x5e, 0x5e, 0x58, 0x99, 0x9c, 0x86, 0x3e, 0x1b, 0xa4, 0x26, 0x66, 0xaf, 0x4f, 0x4f, 0xe8, 0xc3, 0x97, 0x19, 0xd9, 0x3d, 0x8e, 0xb1, 0xa7, 0xaa, 0x93, 0xd3, 0x95, 0xc9, 0xd7, 0x56, 0xe7, 0x2b, 0x37, 0x56, 0x5f, 0xaf, 0x2c, 0x2e, 0xcd, 0x2c, 0xcc, 0xeb, 0x75, 0xa3, 0xe9, 0x98, 0xea, 0xfc, 0xc2, 0xea, 0xd2, 0xc2, 0x0a, 0xe8, 0x8c, 0x0f, 0xa7, 0x66, 0xae, 0xad, 0xce, 0x56, 0xe6, 0xa7, 0x96, 0xa7, 0xf5, 0x62, 0x41, 0xcb, 0xe5, 0xb4, 0x46, 0x4b, 0x73, 0xcc, 0xaa, 0xd5, 0xaa, 0x39, 0x0c, 0xb6, 0x34, 0x39, 0x31, 0x5b, 0xd1, 0x8b, 0xaa, 0x0a, 0x20, 0x67, 0xc3, 0xda, 0xd6, 0x96, 0xde, 0x98, 0x9f, 0xd4, 0x9a, 0xc6, 0x9a, 0xd9, 0xd4, 0x70, 0x6e, 0x7b, 0xc3, 0x6c, 0x69, 0xcb, 0x33, 0x93, 0x5a, 0xcd, 0xb6, 0xb6, 0x1c, 0x6d, 0xac, 0x30, 0x7d, 0x5b, 0xab, 0xdb, 0xc6, 0xa6, 0xe9, 0xa8, 0x4b, 0xd3, 0x0b, 0x37, 0x56, 0x71, 0xb9, 0xd8, 0x4a, 0x9d, 0x5c, 0x5c, 0x5e, 0x9d, 0x5b, 0x98, 0x9f, 0x59, 0x06, 0x43, 0xa2, 0x74, 0x48, 0x34, 0xb1, 0xa8, 0xf5, 0x4e, 0xab, 0xda, 0x6e, 0x58, 0x8c, 0x7a, 0x3a, 0xa3, 0xa6, 0xaa, 0x4d, 0x07, 0x9b, 0xa6, 0x55, 0x35, 0x9a, 0x9c, 0x01, 0xbd, 0x7f, 0x79, 0xa3, 0xe1, 0x68, 0xf0, 0xcf, 0xd9, 0x75, 0xda, 0xe6, 0xa6, 0x06, 0x6c, 0xd7, 0x1b, 0xeb, 0x1d, 0xdb, 0x60, 0x78, 0x55, 0xc3, 0x6e, 0xdb, 0x8d, 0xda, 0xba, 0xd9, 0xef, 0x61, 0x39, 0x8d, 0xdb, 0xa6, 0xbe, 0x65, 0x37, 0x5a, 0xed, 0x34, 0x23, 0x90, 0x2d, 0x64, 0x73, 0x63, 0x40, 0x33, 0x38, 0x95, 0x2e, 0x8e, 0x14, 0x72, 0xb8, 0x30, 0x33, 0x34, 0x54, 0xcc, 0xa6, 0x87, 0x4b, 0x63, 0xb0, 0x04, 0xba, 0x19, 0xd5, 0x6c, 0xd5, 0x52, 0x7f, 0x50, 0x94, 0x67, 0xd8, 0x47, 0x52, 0xf8, 0x3d, 0xcf, 0x3e, 0xd6, 0x57, 0x9e, 0xe4, 0x3b, 0xcb, 0x5c, 0xfe, 0x1c, 0x7e, 0xe7, 0xe1, 0xfb, 0x1a, 0x7c, 0x17, 0xce, 0x5d, 0x48, 0x29, 0xe1, 0xef, 0x42, 0xe4, 0x0b, 0x52, 0x38, 0x07, 0x24, 0xde, 0x55, 0x2e, 0x2a, 0x17, 0xcf, 0x5c, 0x3c, 0xf3, 0x64, 0x7b, 0x46, 0xbf, 0xf3, 0x6a, 0xc1, 0x3b, 0x4e, 0xf9, 0x85, 0x06, 0xdb, 0x4b, 0xc5, 0xe5, 0x5b, 0xbf, 0xf9, 0xfd, 0x3f, 0x3e, 0x7f, 0xf0, 0xa7, 0xdf, 0xfe, 0x6a, 0xbd, 0xf2, 0xf2, 0x19, 0x6f, 0xec, 0xb5, 0xdf, 0x9f, 0xbd, 0xa8, 0xa0, 0xf9, 0xd0, 0x39, 0x2b, 0x8b, 0xfa, 0xcd, 0x9b, 0xea, 0xcb, 0xb7, 0x4c, 0xdb, 0x41, 0x35, 0x0f, 0x17, 0x0a, 0xaa, 0xba, 0x65, 0x9b, 0xd5, 0x06, 0x1b, 0x6e, 0x34, 0xd6, 0x37, 0xb6, 0xb4, 0x7a, 0xd3, 0x32, 0xda, 0xe3, 0xaa, 0x7a, 0xcb, 0xb0, 0x77, 0x1b, 0xad, 0x75, 0xed, 0x96, 0x59, 0x2d, 0x6a, 0x6d, 0x73, 0x67, 0xd2, 0xb2, 0xec, 0xda, 0xb8, 0xda, 0x69, 0x35, 0xea, 0x96, 0xbd, 0xa9, 0x39, 0xc6, 0xe6, 0x56, 0xd3, 0xb4, 0x8b, 0x65, 0xcd, 0xb1, 0x3a, 0x76, 0xd5, 0xec, 0x41, 0x18, 0x01, 0xad, 0x6d, 0xaf, 0xaf, 0xee, 0xc8, 0x26, 0x77, 0x65, 0x93, 0xdb, 0xb2, 0xc9, 0x8d, 0xe8, 0xa4, 0x53, 0xb5, 0xe3, 0x2b, 0x71, 0x12, 0x56, 0xaa, 0x43, 0x43, 0x5a, 0x65, 0xb3, 0xd3, 0x34, 0xda, 0x66, 0x0d, 0x22, 0x61, 0xab, 0xd3, 0xd6, 0x6c, 0xd3, 0xb1, 0x9a, 0x1d, 0x74, 0xa8, 0xbc, 0xca, 0xa4, 0x80, 0x09, 0x1d, 0x3b, 0xe9, 0xe2, 0xe8, 0x58, 0xbe, 0x90, 0x1d, 0x1e, 0x19, 0xc9, 0x17, 0x32, 0x1c, 0x75, 0xda, 0xb0, 0x6b, 0x2d, 0xd3, 0x71, 0x34, 0xab, 0x0e, 0x14, 0x8d, 0x56, 0xb3, 0xd1, 0x32, 0xf3, 0x08, 0xd0, 0x72, 0x97, 0xf3, 0x05, 0x4d, 0x07, 0x29, 0xeb, 0x6d, 0x1c, 0xe7, 0x86, 0xc7, 0xd8, 0x78, 0xd3, 0xac, 0x35, 0x3a, 0x9b, 0x2a, 0xe7, 0x61, 0x03, 0xb0, 0x97, 0x00, 0x4b, 0xc7, 0xc5, 0x71, 0x82, 0x5b, 0x8d, 0x1d, 0xb3, 0xe9, 0xb0, 0xf8, 0x0c, 0x92, 0xce, 0x15, 0xc3, 0x94, 0x47, 0xd8, 0x10, 0x69, 0x05, 0xc8, 0x5e, 0x6f, 0xec, 0xe8, 0xb9, 0x92, 0x47, 0xb5, 0xdc, 0x70, 0xb6, 0x9a, 0xc6, 0xae, 0xb6, 0x6d, 0xd8, 0x5b, 0x8c, 0x46, 0x81, 0xe1, 0xb4, 0xac, 0x96, 0x89, 0xa3, 0xe1, 0x7c, 0x61, 0x88, 0xb3, 0x6b, 0xee, 0xb4, 0x6d, 0x73, 0xd3, 0xe4, 0x72, 0xe3, 0x6a, 0x2e, 0x38, 0x2e, 0x18, 0x1b, 0x41, 0xd9, 0xa1, 0x33, 0x72, 0x19, 0xc5, 0xd7, 0x18, 0xe1, 0x89, 0x4d, 0xab, 0xd3, 0x6a, 0x33, 0xe9, 0x37, 0x8c, 0x1a, 0x24, 0x8b, 0x4d, 0xc3, 0x79, 0x3b, 0x2f, 0xf8, 0xc0, 0x7e, 0xd9, 0xb0, 0xdf, 0xd6, 0x0b, 0xf9, 0xd1, 0xf1, 0xc0, 0xdc, 0x2c, 0x38, 0x4c, 0x5b, 0x1f, 0xc6, 0x49, 0xa0, 0x91, 0x7b, 0x4a, 0x85, 0xf1, 0xe3, 0x2c, 0x4e, 0x5d, 0xd5, 0xda, 0x96, 0x36, 0x0b, 0xca, 0x32, 0x6c, 0x26, 0xea, 0x84, 0xe3, 0x74, 0xd0, 0x21, 0x3b, 0x0e, 0xfe, 0xf2, 0x05, 0xbb, 0x5b, 0x60, 0x6d, 0x70, 0xce, 0x76, 0x07, 0x6c, 0xab, 0xb5, 0x31, 0xa7, 0x40, 0xaa, 0xeb, 0x34, 0x6b, 0xa0, 0x92, 0xb6, 0xb6, 0x66, 0x6a, 0x2d, 0xd3, 0xac, 0x99, 0x35, 0x4f, 0x90, 0x65, 0x8b, 0xd3, 0x1b, 0x4e, 0xf3, 0x71, 0x35, 0xf3, 0x8e, 0x6d, 0x02, 0x6e, 0x2b, 0x5d, 0xfd, 0x31, 0x08, 0x57, 0x18, 0x29, 0x8c, 0x8c, 0x66, 0x5e, 0xad, 0x0e, 0x0d, 0x17, 0xf3, 0x3f, 0x2a, 0x5e, 0xd9, 0xb2, 0xb6, 0xd3, 0xe9, 0xea, 0x20, 0xcc, 0x8f, 0x8e, 0x66, 0x86, 0x86, 0xb1, 0xc9, 0x16, 0xf3, 0x23, 0x99, 0xf1, 0x3d, 0x54, 0x6b, 0xc9, 0xa7, 0x96, 0x66, 0x23, 0x9f, 0x16, 0x46, 0x4c, 0x29, 0xdd, 0xdb, 0xaa, 0x9a, 0xb7, 0x33, 0xd9, 0xe0, 0x70, 0x3d, 0x3c, 0x5c, 0xcb, 0x20, 0x45, 0x94, 0x90, 0xcf, 0xa1, 0xd8, 0x28, 0xdd, 0xd3, 0x13, 0x7a, 0xc9, 0x5e, 0x5f, 0x93, 0x89, 0x0c, 0x92, 0x15, 0x4a, 0xc3, 0xa5, 0xc2, 0xe5, 0x57, 0xab, 0x03, 0x5c, 0x64, 0x26, 0xe4, 0x00, 0x0a, 0x5e, 0xcd, 0x16, 0xf2, 0x23, 0xc3, 0x63, 0x63, 0x63, 0x99, 0x1c, 0x57, 0x40, 0x4f, 0x6a, 0x24, 0x97, 0x20, 0x33, 0xdf, 0x49, 0x48, 0xec, 0x0d, 0xd6, 0x83, 0x83, 0x9e, 0xb4, 0xf3, 0x20, 0xab, 0xe9, 0xb4, 0x35, 0xd3, 0x8b, 0x5a, 0x9e, 0x52, 0xb4, 0xf5, 0xc6, 0x2d, 0x38, 0x98, 0x18, 0xb7, 0x28, 0xf3, 0x96, 0x05, 0x19, 0x1e, 0x7e, 0x9d, 0x06, 0x3b, 0x1a, 0x8c, 0x16, 0x93, 0x1d, 0xce, 0x30, 0xab, 0x5e, 0x77, 0xcc, 0x36, 0xd7, 0x52, 0xd3, 0xb1, 0xb4, 0xdb, 0xa6, 0x6d, 0xfd, 0x00, 0xe3, 0x0d, 0x23, 0xd8, 0x36, 0x4d, 0x1e, 0xf5, 0x25, 0xed, 0x9a, 0xd9, 0xae, 0x6e, 0xa4, 0x59, 0x20, 0x00, 0x95, 0x2c, 0xeb, 0xc0, 0xa2, 0x0c, 0x1c, 0xc1, 0x30, 0xd6, 0x51, 0x2f, 0x96, 0x9d, 0x86, 0xee, 0x00, 0xb0, 0x33, 0x88, 0x90, 0x41, 0x16, 0x2b, 0xe0, 0xec, 0xa0, 0x83, 0xd1, 0x4c, 0x66, 0x08, 0xe6, 0xc7, 0xd5, 0x94, 0x90, 0xd4, 0xb7, 0xfa, 0x70, 0xbe, 0xa8, 0x0d, 0x78, 0x76, 0x28, 0x96, 0xd3, 0x3c, 0x0f, 0x66, 0x81, 0x50, 0x7e, 0x67, 0x37, 0xcb, 0xf2, 0x44, 0x26, 0x0f, 0x52, 0x7b, 0xf2, 0x42, 0xec, 0xb6, 0x8d, 0x56, 0xd5, 0xc4, 0x3c, 0xe0, 0xcb, 0x2c, 0x52, 0x03, 0x98, 0xbc, 0x25, 0xd4, 0xc1, 0x84, 0x13, 0x09, 0x0b, 0x51, 0x7c, 0xce, 0x33, 0xef, 0x20, 0xbb, 0x82, 0xcf, 0x71, 0xc1, 0x4d, 0x2e, 0x8d, 0x9c, 0xe7, 0x7c, 0x19, 0x32, 0x99, 0x9c, 0xc7, 0x3c, 0x53, 0x74, 0x2a, 0xc5, 0xf2, 0x42, 0x59, 0x9b, 0x32, 0x3a, 0x8e, 0xd3, 0x30, 0x5a, 0x9e, 0x57, 0xe0, 0x58, 0xb8, 0x04, 0x6a, 0xc5, 0xcb, 0xa5, 0x46, 0xd3, 0xf4, 0x6d, 0x6a, 0xee, 0x6c, 0x15, 0xd3, 0x6c, 0x6a, 0x00, 0x77, 0x45, 0xea, 0x42, 0x94, 0x52, 0xae, 0x6d, 0x6c, 0xf9, 0x24, 0xb5, 0x7a, 0xa3, 0xd9, 0x36, 0x6d, 0xcd, 0x68, 0x5a, 0x60, 0xaf, 0x0d, 0xcb, 0xbe, 0xad, 0xf1, 0x1c, 0xc7, 0xd4, 0x3f, 0x0d, 0xe3, 0x52, 0x4f, 0xfd, 0x7c, 0x23, 0xa1, 0x7f, 0xb6, 0x60, 0x4d, 0xe7, 0x16, 0xf2, 0x8c, 0x93, 0xce, 0x81, 0x17, 0x66, 0x71, 0x05, 0xe4, 0x66, 0xbe, 0xa4, 0x1a, 0x5d, 0x82, 0x79, 0x2f, 0xbc, 0xa4, 0x16, 0x5b, 0x12, 0xa4, 0xc2, 0x77, 0xad, 0x39, 0x6d, 0x9d, 0xa9, 0x14, 0x45, 0xc9, 0xc3, 0xe9, 0x94, 0x02, 0x59, 0x26, 0xad, 0x16, 0x9c, 0x87, 0x00, 0xf4, 0xcc, 0x03, 0xb6, 0xd8, 0x36, 0x31, 0xb3, 0xe5, 0x3d, 0x3c, 0xa6, 0x03, 0x5d, 0x64, 0x63, 0x9f, 0xda, 0xf6, 0x9a, 0xce, 0x94, 0x08, 0x54, 0x19, 0xc7, 0x5c, 0x79, 0x3d, 0x70, 0xd5, 0x07, 0x63, 0x0a, 0x89, 0x81, 0x6b, 0x3d, 0x70, 0x08, 0x1b, 0x58, 0x5a, 0xe4, 0xfa, 0xe7, 0x6a, 0xf5, 0x03, 0x23, 0xef, 0xbb, 0x60, 0x7a, 0x6d, 0x60, 0x7b, 0x6d, 0xb0, 0x3a, 0xb0, 0x5d, 0x1d, 0xac, 0x0d, 0x6c, 0xd7, 0x32, 0x43, 0x69, 0x18, 0xc2, 0x00, 0xba, 0xc2, 0x40, 0xa3, 0x5f, 0xd0, 0x40, 0xa3, 0x27, 0x19, 0xc8, 0x88, 0x19, 0xa8, 0x18, 0xd5, 0xfe, 0x57, 0x61, 0x43, 0xb6, 0xc4, 0x8c, 0x2d, 0x29, 0x7e, 0xd9, 0x66, 0x36, 0x7a, 0x66, 0x2e, 0x4a, 0xec, 0xf8, 0xe5, 0x78, 0x81, 0x00, 0x9b, 0x3d, 0x70, 0xf1, 0x8b, 0x3a, 0x89, 0x31, 0xb0, 0x6d, 0x0c, 0x86, 0x3d, 0x65, 0xd0, 0x1c, 0xd8, 0x36, 0xd1, 0x5d, 0x8c, 0x41, 0xcf, 0x63, 0x06, 0x61, 0x42, 0x38, 0x8d, 0xa0, 0xe8, 0xdd, 0x51, 0x7c, 0xf5, 0x70, 0x5e, 0xf0, 0x7e, 0x93, 0xe0, 0x25, 0x32, 0xb5, 0xef, 0xf6, 0x32, 0xa6, 0x2f, 0x02, 0x2c, 0xcf, 0x7a, 0x57, 0x25, 0x6f, 0xd3, 0x89, 0x66, 0x13, 0x6e, 0x1b, 0x7e, 0xf2, 0xdb, 0x80, 0xc4, 0xcd, 0x9c, 0x93, 0xe5, 0x44, 0xb3, 0x5e, 0x37, 0xab, 0x6d, 0x9e, 0x24, 0x85, 0xb7, 0x2e, 0xdb, 0x8d, 0x40, 0x46, 0xf4, 0x3d, 0x94, 0x67, 0x19, 0xe4, 0x0c, 0xad, 0x10, 0xf0, 0x4b, 0xee, 0xdd, 0x08, 0x40, 0x7f, 0x0b, 0x78, 0x63, 0x0f, 0x43, 0x13, 0x18, 0xbe, 0xbd, 0x99, 0xa8, 0x41, 0x5a, 0xbe, 0xa9, 0x7d, 0x88, 0x47, 0xcc, 0xb7, 0x72, 0x0f, 0x22, 0x70, 0x84, 0xf0, 0x61, 0x2b, 0x04, 0x8e, 0x02, 0xcb, 0x66, 0xe7, 0x59, 0xe0, 0xbe, 0x09, 0xb8, 0x78, 0xba, 0xc1, 0x63, 0x85, 0xcf, 0xe2, 0x19, 0x06, 0x31, 0xbb, 0xb5, 0x61, 0x88, 0xe3, 0xe0, 0x06, 0xdc, 0xe3, 0x42, 0xc2, 0x7b, 0x07, 0x02, 0xf8, 0x06, 0xb2, 0x3a, 0x8e, 0x4f, 0x56, 0x36, 0x3b, 0xe0, 0x5f, 0xf7, 0x06, 0x91, 0xa9, 0xfc, 0xee, 0x00, 0xfb, 0xcd, 0x0c, 0xb0, 0x8b, 0xe3, 0x4e, 0xd6, 0x07, 0xec, 0x30, 0xc0, 0x8e, 0x00, 0xec, 0x06, 0x18, 0x47, 0x2a, 0x70, 0x8a, 0x0c, 0xe2, 0x9d, 0x8f, 0x73, 0xbd, 0x14, 0xbc, 0x19, 0x32, 0x2d, 0xce, 0x41, 0x37, 0xca, 0x50, 0x7e, 0x67, 0x50, 0xe7, 0x5b, 0xb2, 0x5b, 0x2b, 0x57, 0x37, 0xe2, 0xe8, 0xec, 0x8e, 0xe0, 0xdd, 0x25, 0xb3, 0xb1, 0x0e, 0xee, 0xcd, 0xf0, 0x75, 0x78, 0x85, 0x56, 0xdb, 0x9c, 0xbd, 0xa1, 0x31, 0xae, 0xcd, 0x46, 0x9d, 0x8f, 0xe1, 0xce, 0x52, 0x2a, 0x95, 0x32, 0x8c, 0x07, 0x5b, 0xf7, 0x2f, 0xa1, 0xb0, 0x02, 0x8e, 0x51, 0x38, 0x5a, 0x7b, 0xcb, 0xf0, 0xea, 0xc2, 0x96, 0xad, 0xc7, 0x97, 0xb1, 0xf9, 0xb5, 0xd0, 0xbc, 0x90, 0x1a, 0xa7, 0xc6, 0xf7, 0x98, 0x1e, 0xd5, 0x5b, 0x56, 0xa3, 0x06, 0x13, 0x8d, 0x56, 0x3a, 0xa3, 0x81, 0x6c, 0xbd, 0x4b, 0x3e, 0xdc, 0x95, 0x0a, 0x2c, 0x08, 0xfd, 0x8b, 0x71, 0x90, 0x12, 0xd3, 0x07, 0x24, 0x19, 0xbb, 0xad, 0xaf, 0x37, 0x57, 0xaf, 0xd9, 0xc6, 0x3a, 0x7b, 0x3a, 0xc1, 0xa5, 0x80, 0x1f, 0xcd, 0xec, 0x65, 0x94, 0xe5, 0x6f, 0x21, 0x14, 0x8d, 0x2d, 0xcd, 0xef, 0xea, 0xec, 0x21, 0x93, 0x13, 0x23, 0xb8, 0x51, 0xa7, 0x3c, 0xc5, 0xea, 0xcc, 0xee, 0x0c, 0x30, 0xe4, 0x53, 0xd8, 0xe6, 0x14, 0x36, 0x30, 0xef, 0xa9, 0x29, 0x7f, 0xa3, 0xa6, 0x65, 0xe3, 0x9d, 0x43, 0xc7, 0x30, 0x41, 0x9b, 0x0c, 0x30, 0x13, 0x45, 0xf8, 0xc0, 0x5d, 0x83, 0x18, 0xf0, 0x5e, 0x00, 0xba, 0x23, 0xe2, 0xfe, 0x96, 0x8e, 0x12, 0xcb, 0x78, 0x3e, 0xbd, 0xa7, 0xbe, 0xf9, 0xa6, 0x7a, 0x01, 0xde, 0xa0, 0xdf, 0xb8, 0xf0, 0x62, 0xf9, 0x15, 0xb8, 0x2c, 0x6f, 0xce, 0xff, 0x6c, 0xfe, 0xfd, 0xd9, 0xc2, 0x88, 0xf9, 0xca, 0x5f, 0xae, 0x4d, 0x77, 0x7e, 0x69, 0xbc, 0xb1, 0xf7, 0xe7, 0x4f, 0xf7, 0xb2, 0xef, 0xff, 0xfa, 0xa3, 0xcd, 0xa3, 0xec, 0xa7, 0x47, 0x07, 0x9b, 0x7f, 0xfc, 0xe4, 0xef, 0x7f, 0x7d, 0xeb, 0x9f, 0xdd, 0xbf, 0xfd, 0x17, 0xd4, 0x8f, 0x98, 0x0e, \ No newline at end of file diff --git a/config.tic b/config.tic index f9a84cf5064af4ca40206bad9c7474824139fea5..e037711b5b6042c85b10dafaf34d87202ccd57d7 100644 GIT binary patch delta 3709 zcmb_f&2HO95U!8np?!e%ut3q2lqiZ4C8MoE1a6$40{JOy7cCG321TwU!W5U?r7S5% zz+-zXkV9XhhXO(0qmR^?*(D{}PTK%6V0(9Gc6Pq`=U->P|NQ4KcMg7g`|F**4?ekn za(4do`LplNo}YxJT)zFm{^Owf;>pJ!A>s7#(eZXGyX5hJm3)0)2$_tnWu8ujTrd?aij2#_F;ikGW4@)309MM` z`5F!@!@oV<+{U`P?QnkmP{s261}7c@r`7AR2a9DEl{{f-UMx!{xe`^jECH)$5e_&B zabXWeho0~DheOYI^xemiOmeOi6H}(*D9_TIdnlB3zw&$*0?uiP`)(hu!hXS%bh)rJ zusPg5gkxPr>e-J4O>OBApLy0 zlZ%|Ac74z9X?^*+lzdTfjU3rEbmTaMhg@6?f!7%`vfj}`Ec24^&!a@F*dkIFo>2tX z$C11UeQz}0IeP*@Q-*y!gy*|Aem=c%vORe7ll@tRN~@Dc-?CD$Ct&kP5~?GmmKc6Z zg?}}}rU2JMD3(j`BP-{rVrnjyS;BHrvI%E7=Lt`0mCuBh*SEEgV&_V7xSQMYU4Y>a z{o%-|?!~?S!25deO(9mc9e02*8aX{M&S>NgyrDCGjTQ`8EzYK0BMcKHuxn!9jy>tP zyW83RcH*E!L`~XN5`iPW4+r~H&L+2k255fJ5B#t0#chqb?^OV^jnHG)_lEt$!$YU5 zO|Zp{^4@`3KV>l28$w)fws@a`Z@DTNud@_uNR@FmOD}n@3lBQG5GjOVAykT)%c7i| z&NGP2sp6%!Q>Fxa#ijTX6BaX8a;~#HU=Mj2&r#t4N^xlcOwN_nf_;eLAfye;w&a!S zAgO~)HpDhqVdOYHP;_jybhvCi-}eTrT}R;H*w&@b1xem|<5FR8JTO-6VaU}o%43ds z-=H?70KAUDUZF)Grg>&c6y9lccdk%jt*IItb-Fg{-fd7gPPf*cVyo4nLU7C;MN6g9 z2+X1r0QV*rK!8h!6&9q7*Qvqyx)|7W1W}>zw+0h*%cy8%vT2%?T(T$=;Ig@pub8fw zpi00V!#-$G=$Ft>=mKJxgxX0(WgKL8A>&+RfqJZY;+m&sVGx-6EXfU)T`3xMqRNnr zida18NiE2|`yz)fShA$5T?GDEaV%z@)zTNq3LzF_sK9VdpROh$*%8E&%G!Kea@>%y zl(^T)$(D?&s*0?yl{%s7WGoA%PWM>Q$2i`ev{#c(++M|tL_%dlAay7d>PRqg#+%1Gh_rbeqW3=oC2Fst&VICXczeY$WTH+TH61vp zOyn4m@Cr>nO)h93o~zVZ^Irw$2r-vTi*k)!}-SWfjaBSO=*L&Y_4?8G-ID z7@tmg42=LsCn}E6gJs&N(bSSC)a3?i8irp}Kqf>OVYPIzb~J=|d!ur3WI~EDdlVAb zU15eY*-~n0h7#{kj5L$7`;IWS#%d%aH8)Xhr%g~2dmV>gnnAInL47Uek!cM-!VI?u zAC#o#0P%sq#|(a`$F-YLuY>5l4Hj~5<3L!z)VRjcPZQP^QPzgCK|>hT;YJ&pAyl!E z(ff3FETp7-3RB^Ajl6XSm4Y{EX4SPE$4AsDu24>i7-2Fh0SU51jj{Pg-Kpv0$fa+j zicC(t-X^4PnXcKvM2*Iy>Ku~qiO|C{8%3DF;{Jy8{FdVUneBuVFXRoH|clTQ6T)Zw}hSe*l=|mv{gG delta 27 jcmbPUxHV)$yBcHN<_@(BjFTI6q&K%}^f69OwlDzzq_Yal diff --git a/src/config.c b/src/config.c index 236ef08..7ffb691 100644 --- a/src/config.c +++ b/src/config.c @@ -76,6 +76,31 @@ static void readConfigShowSync(Config* config, lua_State* lua) lua_pop(lua, 1); } +static void readConfigCrtMonitor(Config* config, lua_State* lua) +{ + lua_getglobal(lua, "CRT_MONITOR"); + + if(lua_isboolean(lua, -1)) + config->data.crtMonitor = lua_toboolean(lua, -1); + + lua_pop(lua, 1); +} + +static void readConfigCrtShader(Config* config, lua_State* lua) +{ + lua_getglobal(lua, "CRT_SHADER"); + + if(lua_isstring(lua, -1)) + { + if(!config->data.crtShader) + config->data.crtShader = calloc(1, sizeof(tic_code)); + + strcpy((char*)config->data.crtShader, lua_tostring(lua, -1)); + } + + lua_pop(lua, 1); +} + static void readCursorTheme(Config* config, lua_State* lua) { lua_getfield(lua, -1, "CURSOR"); @@ -222,9 +247,15 @@ static void readConfig(Config* config) readConfigCheckNewVersion(config, lua); readConfigNoSound(config, lua); readConfigShowSync(config, lua); + readConfigCrtMonitor(config, lua); readTheme(config, lua); } + if(luaL_loadstring(lua, config->tic->config.bank1.code.data) == LUA_OK && lua_pcall(lua, 0, LUA_MULTRET, 0) == LUA_OK) + { + readConfigCrtShader(config, lua); + } + lua_close(lua); } } diff --git a/src/ext/gif.c b/src/ext/gif.c index 19d613e..944f1ec 100644 --- a/src/ext/gif.c +++ b/src/ext/gif.c @@ -277,9 +277,9 @@ static bool AddLoop(GifFileType *gif) static const u8* toColor(const u8* ptr, gif_color* color) { - color->b = *ptr++; - color->g = *ptr++; color->r = *ptr++; + color->g = *ptr++; + color->b = *ptr++; ptr++; return ptr; diff --git a/src/ext/shader/crt-lottes.frag b/src/ext/shader/crt-lottes.frag deleted file mode 100644 index 76a4708..0000000 --- a/src/ext/shader/crt-lottes.frag +++ /dev/null @@ -1,133 +0,0 @@ -SHADER(#version 100\n - -precision highp float; - -varying vec2 texCoord; -uniform sampler2D source; -uniform float trg_x; -uniform float trg_y; -uniform float trg_w; -uniform float trg_h; -uniform float scr_w; -uniform float scr_h; - -// Emulated input resolution. -vec2 res=vec2(256.0,144.0); - -// Hardness of scanline. -// -8.0 = soft -// -16.0 = medium -float hardScan=-8.0; - -// Hardness of pixels in scanline. -// -2.0 = soft -// -4.0 = hard -float hardPix=-3.0; - -// Display warp. -// 0.0 = none -// 1.0/8.0 = extreme -vec2 warp=vec2(1.0/32.0,1.0/24.0); - -// Amount of shadow mask. -float maskDark=0.5; -float maskLight=1.5; - -//------------------------------------------------------------------------ - -// sRGB to Linear. -// Assuing using sRGB typed textures this should not be needed. -float ToLinear1(float c){return(c<=0.04045)?c/12.92:pow((c+0.055)/1.055,2.4);} -vec3 ToLinear(vec3 c){return vec3(ToLinear1(c.r),ToLinear1(c.g),ToLinear1(c.b));} - -// Linear to sRGB. -// Assuing using sRGB typed textures this should not be needed. -float ToSrgb1(float c){return(c<0.0031308?c*12.92:1.055*pow(c,0.41666)-0.055);} -vec3 ToSrgb(vec3 c){return vec3(ToSrgb1(c.r),ToSrgb1(c.g),ToSrgb1(c.b));} - -// Nearest emulated sample given floating point position and texel offset. -// Also zero's off screen. -vec3 Fetch(vec2 pos,vec2 off){ - pos=(floor(pos*res+off)+vec2(0.5,0.5))/res; - return ToLinear(1.2 * texture2D(source,pos.xy,-16.0).rgb);} - -// Distance in emulated pixels to nearest texel. -vec2 Dist(vec2 pos){pos=pos*res;return -((pos-floor(pos))-vec2(0.5));} - -// 1D Gaussian. -float Gaus(float pos,float scale){return exp2(scale*pos*pos);} - -// 3-tap Gaussian filter along horz line. -vec3 Horz3(vec2 pos,float off){ - vec3 b=Fetch(pos,vec2(-1.0,off)); - vec3 c=Fetch(pos,vec2( 0.0,off)); - vec3 d=Fetch(pos,vec2( 1.0,off)); - float dst=Dist(pos).x; - // Convert distance to weight. - float scale=hardPix; - float wb=Gaus(dst-1.0,scale); - float wc=Gaus(dst+0.0,scale); - float wd=Gaus(dst+1.0,scale); - // Return filtered sample. - return (b*wb+c*wc+d*wd)/(wb+wc+wd);} - -// 5-tap Gaussian filter along horz line. -vec3 Horz5(vec2 pos,float off){ - vec3 a=Fetch(pos,vec2(-2.0,off)); - vec3 b=Fetch(pos,vec2(-1.0,off)); - vec3 c=Fetch(pos,vec2( 0.0,off)); - vec3 d=Fetch(pos,vec2( 1.0,off)); - vec3 e=Fetch(pos,vec2( 2.0,off)); - float dst=Dist(pos).x; - // Convert distance to weight. - float scale=hardPix; - float wa=Gaus(dst-2.0,scale); - float wb=Gaus(dst-1.0,scale); - float wc=Gaus(dst+0.0,scale); - float wd=Gaus(dst+1.0,scale); - float we=Gaus(dst+2.0,scale); - // Return filtered sample. - return (a*wa+b*wb+c*wc+d*wd+e*we)/(wa+wb+wc+wd+we);} - -// Return scanline weight. -float Scan(vec2 pos,float off){ - float dst=Dist(pos).y; - return Gaus(dst+off,hardScan);} - -// Allow nearest three lines to effect pixel. -vec3 Tri(vec2 pos){ - vec3 a=Horz3(pos,-1.0); - vec3 b=Horz5(pos, 0.0); - vec3 c=Horz3(pos, 1.0); - float wa=Scan(pos,-1.0); - float wb=Scan(pos, 0.0); - float wc=Scan(pos, 1.0); - return a*wa+b*wb+c*wc;} - -// Distortion of scanlines, and end of screen alpha. -vec2 Warp(vec2 pos){ - pos=pos*2.0-1.0; - pos*=vec2(1.0+(pos.y*pos.y)*warp.x,1.0+(pos.x*pos.x)*warp.y); - return pos*0.5+0.5;} - -// Shadow mask. -vec3 Mask(vec2 pos){ - pos.x+=pos.y*3.0; - vec3 mask=vec3(maskDark,maskDark,maskDark); - pos.x=fract(pos.x/6.0); - if(pos.x<0.333)mask.r=maskLight; - else if(pos.x<0.666)mask.g=maskLight; - else mask.b=maskLight; - return mask;} - -void main() { - hardScan=-12.0; -// maskDark=maskLight; - vec2 start=gl_FragCoord.xy-vec2(trg_x, trg_y); - start.y=scr_h-start.y; - - vec2 pos=Warp(start/vec2(trg_w, trg_h)); - - gl_FragColor.rgb=Tri(pos)*Mask(gl_FragCoord.xy); - gl_FragColor = vec4(ToSrgb(gl_FragColor.rgb), 1.0); -}) \ No newline at end of file diff --git a/src/studio.c b/src/studio.c index 3c59722..b0ab165 100644 --- a/src/studio.c +++ b/src/studio.c @@ -1637,8 +1637,9 @@ void studioConfigChanged() if(code->update) code->update(code); - // initTouchGamepad(); updateSystemFont(); + + getSystem()->updateConfig(); } u32 unzip(u8** dest, const u8* source, size_t size) @@ -1764,6 +1765,8 @@ static void studioTick() static void studioClose() { + free((void*)getConfig()->crtShader); + { for(s32 i = 0; i < TIC_EDITOR_BANKS; i++) { diff --git a/src/system.c b/src/system.c index 397f8fc..e28a307 100644 --- a/src/system.c +++ b/src/system.c @@ -12,7 +12,7 @@ #include #endif -#define STUDIO_UI_SCALE 4 +#define STUDIO_UI_SCALE 3 #define STUDIO_PIXEL_FORMAT GPU_FORMAT_RGBA #define TEXTURE_SIZE (TIC80_FULLWIDTH) #define OFFSET_LEFT ((TIC80_FULLWIDTH-TIC80_WIDTH)/2) @@ -30,7 +30,6 @@ static struct GPU_Image* texture; u32 shader; GPU_ShaderBlock block; - bool useShader; } gpu; struct @@ -212,7 +211,7 @@ static void calcTextureRect(SDL_Rect* rect) { SDL_GetWindowSize(platform.window, &rect->w, &rect->h); - if(platform.gpu.useShader) + if(platform.studio->config()->crtMonitor) { enum{Width = TIC80_FULLWIDTH, Height = TIC80_FULLHEIGHT}; @@ -279,7 +278,7 @@ static void processMouse() SDL_Rect rect = {0, 0, 0, 0}; calcTextureRect(&rect); - if(platform.gpu.useShader) + if(platform.studio->config()->crtMonitor) { if(rect.w) input->mouse.x = (mx - rect.x) * TIC80_FULLWIDTH / rect.w - OFFSET_LEFT; if(rect.h) input->mouse.y = (my - rect.y) * TIC80_FULLHEIGHT / rect.h - OFFSET_TOP; @@ -946,6 +945,73 @@ static void preseed() #endif } +static void loadCrtShader() +{ + static const char* VertexShader = "#version 100\n\ + precision highp float;\n\ + precision mediump int;\n\ + attribute vec2 gpu_Vertex;\n\ + attribute vec2 gpu_TexCoord;\n\ + attribute mediump vec4 gpu_Color;\n\ + uniform mat4 gpu_ModelViewProjectionMatrix;\n\ + varying mediump vec4 color;\n\ + varying vec2 texCoord;\n\ + void main(void)\n\ + {\n\ + color = gpu_Color;\n\ + texCoord = vec2(gpu_TexCoord);\n\ + gl_Position = gpu_ModelViewProjectionMatrix * vec4(gpu_Vertex, 0.0, 1.0);\n\ + }"; + + u32 vertex = GPU_CompileShader(GPU_VERTEX_SHADER, VertexShader); + + if(!vertex) + { + char msg[1024]; + sprintf(msg, "Failed to load vertex shader: %s\n", GPU_GetShaderMessage()); + showMessageBox("Error", msg); + return; + } + + u32 fragment = GPU_CompileShader(GPU_PIXEL_SHADER, platform.studio->config()->crtShader); + + if(!fragment) + { + char msg[1024]; + sprintf(msg, "Failed to load fragment shader: %s\n", GPU_GetShaderMessage()); + showMessageBox("Error", msg); + return; + } + + if(platform.gpu.shader) + GPU_FreeShaderProgram(platform.gpu.shader); + + platform.gpu.shader = GPU_LinkShaders(vertex, fragment); + + if(platform.gpu.shader) + { + platform.gpu.block = GPU_LoadShaderBlock(platform.gpu.shader, "gpu_Vertex", "gpu_TexCoord", "gpu_Color", "gpu_ModelViewProjectionMatrix"); + GPU_ActivateShaderProgram(platform.gpu.shader, &platform.gpu.block); + } + else + { + char msg[1024]; + sprintf(msg, "Failed to link shader program: %s\n", GPU_GetShaderMessage()); + showMessageBox("Error", msg); + } +} + +static void updateConfig() +{ + if(platform.gpu.screen) + { + initTouchGamepad(); + + if(platform.studio->config()->crtMonitor) + loadCrtShader(); + } +} + static System systemInterface = { .setClipboardText = setClipboardText, @@ -966,6 +1032,7 @@ static System systemInterface = .openSystemPath = openSystemPath, .preseed = preseed, .poll = pollEvent, + .updateConfig = updateConfig, }; static void gpuTick() @@ -990,7 +1057,7 @@ static void gpuTick() GPU_UpdateImageBytes(platform.gpu.texture, NULL, (const u8*)tic->screen, TIC80_FULLWIDTH * sizeof(u32)); { - if(platform.gpu.useShader) + if(platform.studio->config()->crtMonitor && platform.gpu.shader) { SDL_Rect rect = {0, 0, 0, 0}; calcTextureRect(&rect); @@ -1012,10 +1079,11 @@ static void gpuTick() GPU_BlitScale(platform.gpu.texture, NULL, platform.gpu.screen, rect.x, rect.y, (float)rect.w / TIC80_FULLWIDTH, (float)rect.h / TIC80_FULLHEIGHT); - GPU_ActivateShaderProgram(0, NULL); + GPU_DeactivateShaderProgram(); } else { + GPU_DeactivateShaderProgram(); blitGpuTexture(platform.gpu.screen, platform.gpu.texture); } } @@ -1077,57 +1145,6 @@ static void emsGpuTick() #endif -#define SHADER(...) #__VA_ARGS__ - -static void loadCrtShader() -{ - static const char* VertexShader = "#version 100\n\ - precision highp float;\n\ - precision mediump int;\n\ - attribute vec2 gpu_Vertex;\n\ - attribute vec2 gpu_TexCoord;\n\ - attribute mediump vec4 gpu_Color;\n\ - uniform mat4 gpu_ModelViewProjectionMatrix;\n\ - varying mediump vec4 color;\n\ - varying vec2 texCoord;\n\ - void main(void)\n\ - {\n\ - color = gpu_Color;\n\ - texCoord = vec2(gpu_TexCoord);\n\ - gl_Position = gpu_ModelViewProjectionMatrix * vec4(gpu_Vertex, 0.0, 1.0);\n\ - }"; - - u32 vertex = GPU_CompileShader(GPU_VERTEX_SHADER, VertexShader); - - if(!vertex) - { - GPU_LogError("Failed to load vertex shader: %s\n", GPU_GetShaderMessage()); - return; - } - - static const char* PixelShader = - #include "ext/shader/crt-lottes.frag" - ; - - u32 fragment = GPU_CompileShader(GPU_PIXEL_SHADER, PixelShader); - - if(!fragment) - { - GPU_LogError("Failed to load fragment shader: %s\n", GPU_GetShaderMessage()); - return; - } - - platform.gpu.shader = GPU_LinkShaders(vertex, fragment); - - if(platform.gpu.shader) - { - platform.gpu.block = GPU_LoadShaderBlock(platform.gpu.shader, "gpu_Vertex", "gpu_TexCoord", "gpu_Color", "gpu_ModelViewProjectionMatrix"); - GPU_ActivateShaderProgram(platform.gpu.shader, &platform.gpu.block); - } - else - GPU_LogError("Failed to link shader program: %s\n", GPU_GetShaderMessage()); -} - static s32 start(s32 argc, char **argv, const char* folder) { SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK); @@ -1155,9 +1172,7 @@ static s32 start(s32 argc, char **argv, const char* folder) GPU_SetAnchor(platform.gpu.texture, 0, 0); GPU_SetImageFilter(platform.gpu.texture, GPU_FILTER_NEAREST); - platform.gpu.useShader = true; - - if(platform.gpu.useShader) + if(platform.studio->config()->crtMonitor) loadCrtShader(); #if defined(__EMSCRIPTEN__) diff --git a/src/system.h b/src/system.h index 6e56ad7..c08768d 100644 --- a/src/system.h +++ b/src/system.h @@ -25,6 +25,8 @@ typedef struct void (*preseed)(); void (*poll)(); + void (*updateConfig)(); + } System; typedef struct @@ -67,6 +69,9 @@ typedef struct bool checkNewVersion; bool noSound; bool showSync; + bool crtMonitor; + + const char* crtShader; } StudioConfig; diff --git a/src/tic.h b/src/tic.h index bbfa76d..7e779fa 100644 --- a/src/tic.h +++ b/src/tic.h @@ -340,7 +340,18 @@ typedef struct { union { - tic_bank bank0; + struct + { + tic_bank bank0; + tic_bank bank1; + tic_bank bank2; + tic_bank bank3; + tic_bank bank4; + tic_bank bank5; + tic_bank bank6; + tic_bank bank7; + }; + tic_bank banks[TIC_BANKS]; };