diff --git a/palette_ntsc.py b/palette_ntsc.py index 0440133..3361b4e 100644 --- a/palette_ntsc.py +++ b/palette_ntsc.py @@ -3,1028 +3,1028 @@ import numpy as np # Indexed by (trailing 8-bit dot pattern, x % 4) SRGB = { (0, 0): np.array((0, 0, 0)), - (1, 0): np.array((0, 20, 0)), - (2, 0): np.array((0, 0, 52)), - (3, 0): np.array((0, 17, 25)), - (4, 0): np.array((29, 0, 26)), + (1, 0): np.array((0, 37, 0)), + (2, 0): np.array((13, 15, 0)), + (3, 0): np.array((0, 53, 0)), + (4, 0): np.array((64, 0, 24)), (5, 0): np.array((0, 0, 0)), - (6, 0): np.array((14, 0, 79)), - (7, 0): np.array((0, 0, 52)), - (8, 0): np.array((15, 2, 0)), - (9, 0): np.array((0, 22, 0)), + (6, 0): np.array((78, 0, 0)), + (7, 0): np.array((13, 15, 0)), + (8, 0): np.array((0, 0, 115)), + (9, 0): np.array((0, 22, 90)), (10, 0): np.array((0, 0, 0)), - (11, 0): np.array((0, 20, 0)), - (12, 0): np.array((44, 0, 0)), - (13, 0): np.array((15, 2, 0)), - (14, 0): np.array((29, 0, 26)), + (11, 0): np.array((0, 37, 0)), + (12, 0): np.array((50, 0, 139)), + (13, 0): np.array((0, 0, 115)), + (14, 0): np.array((64, 0, 24)), (15, 0): np.array((0, 0, 0)), - (16, 0): np.array((34, 83, 36)), - (17, 0): np.array((4, 104, 10)), - (18, 0): np.array((19, 81, 89)), - (19, 0): np.array((0, 101, 62)), + (16, 0): np.array((0, 101, 39)), + (17, 0): np.array((0, 139, 14)), + (18, 0): np.array((12, 116, 0)), + (19, 0): np.array((0, 154, 0)), (20, 0): np.array((63, 63, 63)), - (21, 0): np.array((34, 83, 36)), - (22, 0): np.array((48, 61, 116)), - (23, 0): np.array((19, 81, 89)), - (24, 0): np.array((49, 86, 0)), - (25, 0): np.array((19, 106, 0)), - (26, 0): np.array((34, 83, 36)), - (27, 0): np.array((4, 104, 10)), - (28, 0): np.array((78, 66, 11)), - (29, 0): np.array((49, 86, 0)), + (21, 0): np.array((0, 101, 39)), + (22, 0): np.array((77, 79, 0)), + (23, 0): np.array((12, 116, 0)), + (24, 0): np.array((0, 86, 154)), + (25, 0): np.array((0, 123, 130)), + (26, 0): np.array((0, 101, 39)), + (27, 0): np.array((0, 139, 14)), + (28, 0): np.array((49, 48, 179)), + (29, 0): np.array((0, 86, 154)), (30, 0): np.array((63, 63, 63)), - (31, 0): np.array((34, 83, 36)), - (32, 0): np.array((48, 61, 116)), - (33, 0): np.array((19, 81, 89)), - (34, 0): np.array((33, 58, 168)), - (35, 0): np.array((4, 78, 142)), - (36, 0): np.array((78, 40, 143)), - (37, 0): np.array((48, 61, 116)), - (38, 0): np.array((63, 38, 195)), - (39, 0): np.array((33, 58, 168)), + (31, 0): np.array((0, 101, 39)), + (32, 0): np.array((77, 79, 0)), + (33, 0): np.array((12, 116, 0)), + (34, 0): np.array((91, 94, 0)), + (35, 0): np.array((26, 132, 0)), + (36, 0): np.array((142, 41, 0)), + (37, 0): np.array((77, 79, 0)), + (38, 0): np.array((155, 56, 0)), + (39, 0): np.array((91, 94, 0)), (40, 0): np.array((63, 63, 63)), - (41, 0): np.array((34, 83, 36)), - (42, 0): np.array((48, 61, 116)), - (43, 0): np.array((19, 81, 89)), - (44, 0): np.array((93, 43, 90)), + (41, 0): np.array((0, 101, 39)), + (42, 0): np.array((77, 79, 0)), + (43, 0): np.array((12, 116, 0)), + (44, 0): np.array((128, 26, 88)), (45, 0): np.array((63, 63, 63)), - (46, 0): np.array((78, 40, 143)), - (47, 0): np.array((48, 61, 116)), - (48, 0): np.array((82, 145, 153)), - (49, 0): np.array((53, 165, 126)), - (50, 0): np.array((67, 142, 205)), - (51, 0): np.array((38, 162, 179)), - (52, 0): np.array((112, 124, 180)), - (53, 0): np.array((82, 145, 153)), - (54, 0): np.array((97, 122, 232)), - (55, 0): np.array((67, 142, 205)), - (56, 0): np.array((98, 147, 100)), - (57, 0): np.array((68, 167, 73)), - (58, 0): np.array((82, 145, 153)), - (59, 0): np.array((53, 165, 126)), + (46, 0): np.array((142, 41, 0)), + (47, 0): np.array((77, 79, 0)), + (48, 0): np.array((76, 180, 0)), + (49, 0): np.array((11, 218, 0)), + (50, 0): np.array((90, 196, 0)), + (51, 0): np.array((25, 233, 0)), + (52, 0): np.array((141, 142, 12)), + (53, 0): np.array((76, 180, 0)), + (54, 0): np.array((155, 158, 0)), + (55, 0): np.array((90, 196, 0)), + (56, 0): np.array((62, 165, 102)), + (57, 0): np.array((0, 202, 78)), + (58, 0): np.array((76, 180, 0)), + (59, 0): np.array((11, 218, 0)), (60, 0): np.array((127, 127, 127)), - (61, 0): np.array((98, 147, 100)), - (62, 0): np.array((112, 124, 180)), - (63, 0): np.array((82, 145, 153)), - (64, 0): np.array((93, 43, 90)), + (61, 0): np.array((62, 165, 102)), + (62, 0): np.array((141, 142, 12)), + (63, 0): np.array((76, 180, 0)), + (64, 0): np.array((128, 26, 88)), (65, 0): np.array((63, 63, 63)), - (66, 0): np.array((78, 40, 143)), - (67, 0): np.array((48, 61, 116)), - (68, 0): np.array((122, 23, 117)), - (69, 0): np.array((93, 43, 90)), - (70, 0): np.array((107, 20, 169)), - (71, 0): np.array((78, 40, 143)), - (72, 0): np.array((108, 46, 37)), - (73, 0): np.array((78, 66, 11)), - (74, 0): np.array((93, 43, 90)), + (66, 0): np.array((142, 41, 0)), + (67, 0): np.array((77, 79, 0)), + (68, 0): np.array((193, 0, 112)), + (69, 0): np.array((128, 26, 88)), + (70, 0): np.array((206, 3, 0)), + (71, 0): np.array((142, 41, 0)), + (72, 0): np.array((114, 10, 203)), + (73, 0): np.array((49, 48, 179)), + (74, 0): np.array((128, 26, 88)), (75, 0): np.array((63, 63, 63)), - (76, 0): np.array((137, 25, 64)), - (77, 0): np.array((108, 46, 37)), - (78, 0): np.array((122, 23, 117)), - (79, 0): np.array((93, 43, 90)), + (76, 0): np.array((179, 0, 228)), + (77, 0): np.array((114, 10, 203)), + (78, 0): np.array((193, 0, 112)), + (79, 0): np.array((128, 26, 88)), (80, 0): np.array((127, 127, 127)), - (81, 0): np.array((98, 147, 100)), - (82, 0): np.array((112, 124, 180)), - (83, 0): np.array((82, 145, 153)), - (84, 0): np.array((156, 107, 154)), + (81, 0): np.array((62, 165, 102)), + (82, 0): np.array((141, 142, 12)), + (83, 0): np.array((76, 180, 0)), + (84, 0): np.array((192, 89, 152)), (85, 0): np.array((127, 127, 127)), - (86, 0): np.array((141, 104, 206)), - (87, 0): np.array((112, 124, 180)), - (88, 0): np.array((142, 130, 74)), - (89, 0): np.array((113, 150, 48)), + (86, 0): np.array((205, 105, 36)), + (87, 0): np.array((141, 142, 12)), + (88, 0): np.array((113, 112, 242)), + (89, 0): np.array((49, 149, 218)), (90, 0): np.array((127, 127, 127)), - (91, 0): np.array((98, 147, 100)), - (92, 0): np.array((172, 109, 101)), - (93, 0): np.array((142, 130, 74)), - (94, 0): np.array((156, 107, 154)), + (91, 0): np.array((62, 165, 102)), + (92, 0): np.array((178, 74, 255)), + (93, 0): np.array((113, 112, 242)), + (94, 0): np.array((192, 89, 152)), (95, 0): np.array((127, 127, 127)), - (96, 0): np.array((141, 104, 206)), - (97, 0): np.array((112, 124, 180)), - (98, 0): np.array((126, 102, 255)), - (99, 0): np.array((97, 122, 232)), - (100, 0): np.array((171, 84, 233)), - (101, 0): np.array((141, 104, 206)), - (102, 0): np.array((156, 81, 255)), - (103, 0): np.array((126, 102, 255)), - (104, 0): np.array((156, 107, 154)), + (96, 0): np.array((205, 105, 36)), + (97, 0): np.array((141, 142, 12)), + (98, 0): np.array((219, 120, 0)), + (99, 0): np.array((155, 158, 0)), + (100, 0): np.array((255, 67, 61)), + (101, 0): np.array((205, 105, 36)), + (102, 0): np.array((255, 82, 0)), + (103, 0): np.array((219, 120, 0)), + (104, 0): np.array((192, 89, 152)), (105, 0): np.array((127, 127, 127)), - (106, 0): np.array((141, 104, 206)), - (107, 0): np.array((112, 124, 180)), - (108, 0): np.array((186, 87, 181)), - (109, 0): np.array((156, 107, 154)), - (110, 0): np.array((171, 84, 233)), - (111, 0): np.array((141, 104, 206)), - (112, 0): np.array((176, 188, 243)), - (113, 0): np.array((146, 208, 217)), - (114, 0): np.array((161, 186, 255)), - (115, 0): np.array((131, 206, 255)), - (116, 0): np.array((205, 168, 255)), - (117, 0): np.array((176, 188, 243)), - (118, 0): np.array((190, 165, 255)), - (119, 0): np.array((161, 186, 255)), + (106, 0): np.array((205, 105, 36)), + (107, 0): np.array((141, 142, 12)), + (108, 0): np.array((255, 52, 176)), + (109, 0): np.array((192, 89, 152)), + (110, 0): np.array((255, 67, 61)), + (111, 0): np.array((205, 105, 36)), + (112, 0): np.array((205, 206, 75)), + (113, 0): np.array((140, 244, 51)), + (114, 0): np.array((218, 222, 0)), + (115, 0): np.array((154, 255, 0)), + (116, 0): np.array((255, 168, 100)), + (117, 0): np.array((205, 206, 75)), + (118, 0): np.array((255, 184, 0)), + (119, 0): np.array((218, 222, 0)), (120, 0): np.array((191, 191, 191)), - (121, 0): np.array((161, 211, 164)), - (122, 0): np.array((176, 188, 243)), - (123, 0): np.array((146, 208, 217)), - (124, 0): np.array((220, 171, 218)), + (121, 0): np.array((126, 228, 166)), + (122, 0): np.array((205, 206, 75)), + (123, 0): np.array((140, 244, 51)), + (124, 0): np.array((255, 153, 215)), (125, 0): np.array((191, 191, 191)), - (126, 0): np.array((205, 168, 255)), - (127, 0): np.array((176, 188, 243)), - (128, 0): np.array((78, 66, 11)), - (129, 0): np.array((49, 86, 0)), + (126, 0): np.array((255, 168, 100)), + (127, 0): np.array((205, 206, 75)), + (128, 0): np.array((49, 48, 179)), + (129, 0): np.array((0, 86, 154)), (130, 0): np.array((63, 63, 63)), - (131, 0): np.array((34, 83, 36)), - (132, 0): np.array((108, 46, 37)), - (133, 0): np.array((78, 66, 11)), - (134, 0): np.array((93, 43, 90)), + (131, 0): np.array((0, 101, 39)), + (132, 0): np.array((114, 10, 203)), + (133, 0): np.array((49, 48, 179)), + (134, 0): np.array((128, 26, 88)), (135, 0): np.array((63, 63, 63)), - (136, 0): np.array((93, 68, 0)), - (137, 0): np.array((64, 89, 0)), - (138, 0): np.array((78, 66, 11)), - (139, 0): np.array((49, 86, 0)), - (140, 0): np.array((123, 48, 0)), - (141, 0): np.array((93, 68, 0)), - (142, 0): np.array((108, 46, 37)), - (143, 0): np.array((78, 66, 11)), - (144, 0): np.array((113, 150, 48)), - (145, 0): np.array((83, 170, 21)), - (146, 0): np.array((98, 147, 100)), - (147, 0): np.array((68, 167, 73)), - (148, 0): np.array((142, 130, 74)), - (149, 0): np.array((113, 150, 48)), + (136, 0): np.array((36, 32, 255)), + (137, 0): np.array((0, 70, 255)), + (138, 0): np.array((49, 48, 179)), + (139, 0): np.array((0, 86, 154)), + (140, 0): np.array((100, 0, 255)), + (141, 0): np.array((36, 32, 255)), + (142, 0): np.array((114, 10, 203)), + (143, 0): np.array((49, 48, 179)), + (144, 0): np.array((49, 149, 218)), + (145, 0): np.array((0, 187, 193)), + (146, 0): np.array((62, 165, 102)), + (147, 0): np.array((0, 202, 78)), + (148, 0): np.array((113, 112, 242)), + (149, 0): np.array((49, 149, 218)), (150, 0): np.array((127, 127, 127)), - (151, 0): np.array((98, 147, 100)), - (152, 0): np.array((128, 152, 0)), - (153, 0): np.array((98, 173, 0)), - (154, 0): np.array((113, 150, 48)), - (155, 0): np.array((83, 170, 21)), - (156, 0): np.array((157, 132, 22)), - (157, 0): np.array((128, 152, 0)), - (158, 0): np.array((142, 130, 74)), - (159, 0): np.array((113, 150, 48)), + (151, 0): np.array((62, 165, 102)), + (152, 0): np.array((35, 134, 255)), + (153, 0): np.array((0, 172, 255)), + (154, 0): np.array((49, 149, 218)), + (155, 0): np.array((0, 187, 193)), + (156, 0): np.array((99, 96, 255)), + (157, 0): np.array((35, 134, 255)), + (158, 0): np.array((113, 112, 242)), + (159, 0): np.array((49, 149, 218)), (160, 0): np.array((127, 127, 127)), - (161, 0): np.array((98, 147, 100)), - (162, 0): np.array((112, 124, 180)), - (163, 0): np.array((82, 145, 153)), - (164, 0): np.array((156, 107, 154)), + (161, 0): np.array((62, 165, 102)), + (162, 0): np.array((141, 142, 12)), + (163, 0): np.array((76, 180, 0)), + (164, 0): np.array((192, 89, 152)), (165, 0): np.array((127, 127, 127)), - (166, 0): np.array((141, 104, 206)), - (167, 0): np.array((112, 124, 180)), - (168, 0): np.array((142, 130, 74)), - (169, 0): np.array((113, 150, 48)), + (166, 0): np.array((205, 105, 36)), + (167, 0): np.array((141, 142, 12)), + (168, 0): np.array((113, 112, 242)), + (169, 0): np.array((49, 149, 218)), (170, 0): np.array((127, 127, 127)), - (171, 0): np.array((98, 147, 100)), - (172, 0): np.array((172, 109, 101)), - (173, 0): np.array((142, 130, 74)), - (174, 0): np.array((156, 107, 154)), + (171, 0): np.array((62, 165, 102)), + (172, 0): np.array((178, 74, 255)), + (173, 0): np.array((113, 112, 242)), + (174, 0): np.array((192, 89, 152)), (175, 0): np.array((127, 127, 127)), - (176, 0): np.array((161, 211, 164)), - (177, 0): np.array((132, 231, 137)), - (178, 0): np.array((146, 208, 217)), - (179, 0): np.array((117, 229, 190)), + (176, 0): np.array((126, 228, 166)), + (177, 0): np.array((61, 255, 142)), + (178, 0): np.array((140, 244, 51)), + (179, 0): np.array((75, 255, 26)), (180, 0): np.array((191, 191, 191)), - (181, 0): np.array((161, 211, 164)), - (182, 0): np.array((176, 188, 243)), - (183, 0): np.array((146, 208, 217)), - (184, 0): np.array((176, 214, 111)), - (185, 0): np.array((147, 234, 85)), - (186, 0): np.array((161, 211, 164)), - (187, 0): np.array((132, 231, 137)), - (188, 0): np.array((206, 193, 138)), - (189, 0): np.array((176, 214, 111)), + (181, 0): np.array((126, 228, 166)), + (182, 0): np.array((205, 206, 75)), + (183, 0): np.array((140, 244, 51)), + (184, 0): np.array((112, 213, 255)), + (185, 0): np.array((48, 251, 255)), + (186, 0): np.array((126, 228, 166)), + (187, 0): np.array((61, 255, 142)), + (188, 0): np.array((177, 175, 255)), + (189, 0): np.array((112, 213, 255)), (190, 0): np.array((191, 191, 191)), - (191, 0): np.array((161, 211, 164)), - (192, 0): np.array((172, 109, 101)), - (193, 0): np.array((142, 130, 74)), - (194, 0): np.array((156, 107, 154)), + (191, 0): np.array((126, 228, 166)), + (192, 0): np.array((178, 74, 255)), + (193, 0): np.array((113, 112, 242)), + (194, 0): np.array((192, 89, 152)), (195, 0): np.array((127, 127, 127)), - (196, 0): np.array((201, 89, 128)), - (197, 0): np.array((172, 109, 101)), - (198, 0): np.array((186, 87, 181)), - (199, 0): np.array((156, 107, 154)), - (200, 0): np.array((187, 112, 49)), - (201, 0): np.array((157, 132, 22)), - (202, 0): np.array((172, 109, 101)), - (203, 0): np.array((142, 130, 74)), - (204, 0): np.array((216, 92, 75)), - (205, 0): np.array((187, 112, 49)), - (206, 0): np.array((201, 89, 128)), - (207, 0): np.array((172, 109, 101)), - (208, 0): np.array((206, 193, 138)), - (209, 0): np.array((176, 214, 111)), + (196, 0): np.array((243, 36, 255)), + (197, 0): np.array((178, 74, 255)), + (198, 0): np.array((255, 52, 176)), + (199, 0): np.array((192, 89, 152)), + (200, 0): np.array((164, 58, 255)), + (201, 0): np.array((99, 96, 255)), + (202, 0): np.array((178, 74, 255)), + (203, 0): np.array((113, 112, 242)), + (204, 0): np.array((229, 21, 255)), + (205, 0): np.array((164, 58, 255)), + (206, 0): np.array((243, 36, 255)), + (207, 0): np.array((178, 74, 255)), + (208, 0): np.array((177, 175, 255)), + (209, 0): np.array((112, 213, 255)), (210, 0): np.array((191, 191, 191)), - (211, 0): np.array((161, 211, 164)), - (212, 0): np.array((235, 173, 165)), - (213, 0): np.array((206, 193, 138)), - (214, 0): np.array((220, 171, 218)), + (211, 0): np.array((126, 228, 166)), + (212, 0): np.array((242, 138, 255)), + (213, 0): np.array((177, 175, 255)), + (214, 0): np.array((255, 153, 215)), (215, 0): np.array((191, 191, 191)), - (216, 0): np.array((221, 196, 86)), - (217, 0): np.array((191, 216, 59)), - (218, 0): np.array((206, 193, 138)), - (219, 0): np.array((176, 214, 111)), - (220, 0): np.array((250, 176, 112)), - (221, 0): np.array((221, 196, 86)), - (222, 0): np.array((235, 173, 165)), - (223, 0): np.array((206, 193, 138)), - (224, 0): np.array((220, 171, 218)), + (216, 0): np.array((163, 160, 255)), + (217, 0): np.array((99, 198, 255)), + (218, 0): np.array((177, 175, 255)), + (219, 0): np.array((112, 213, 255)), + (220, 0): np.array((228, 122, 255)), + (221, 0): np.array((163, 160, 255)), + (222, 0): np.array((242, 138, 255)), + (223, 0): np.array((177, 175, 255)), + (224, 0): np.array((255, 153, 215)), (225, 0): np.array((191, 191, 191)), - (226, 0): np.array((205, 168, 255)), - (227, 0): np.array((176, 188, 243)), - (228, 0): np.array((250, 150, 244)), - (229, 0): np.array((220, 171, 218)), - (230, 0): np.array((235, 148, 255)), - (231, 0): np.array((205, 168, 255)), - (232, 0): np.array((235, 173, 165)), - (233, 0): np.array((206, 193, 138)), - (234, 0): np.array((220, 171, 218)), + (226, 0): np.array((255, 168, 100)), + (227, 0): np.array((205, 206, 75)), + (228, 0): np.array((255, 115, 240)), + (229, 0): np.array((255, 153, 215)), + (230, 0): np.array((255, 131, 124)), + (231, 0): np.array((255, 168, 100)), + (232, 0): np.array((242, 138, 255)), + (233, 0): np.array((177, 175, 255)), + (234, 0): np.array((255, 153, 215)), (235, 0): np.array((191, 191, 191)), - (236, 0): np.array((255, 153, 192)), - (237, 0): np.array((235, 173, 165)), - (238, 0): np.array((250, 150, 244)), - (239, 0): np.array((220, 171, 218)), - (240, 0): np.array((255, 255, 255)), - (241, 0): np.array((225, 255, 228)), - (242, 0): np.array((239, 252, 255)), - (243, 0): np.array((210, 255, 255)), - (244, 0): np.array((255, 234, 255)), - (245, 0): np.array((255, 255, 255)), - (246, 0): np.array((255, 232, 255)), - (247, 0): np.array((239, 252, 255)), - (248, 0): np.array((255, 255, 202)), - (249, 0): np.array((240, 255, 175)), - (250, 0): np.array((255, 255, 255)), - (251, 0): np.array((225, 255, 228)), - (252, 0): np.array((255, 237, 229)), - (253, 0): np.array((255, 255, 202)), - (254, 0): np.array((255, 234, 255)), - (255, 0): np.array((255, 255, 255)), + (236, 0): np.array((255, 100, 255)), + (237, 0): np.array((242, 138, 255)), + (238, 0): np.array((255, 115, 240)), + (239, 0): np.array((255, 153, 215)), + (240, 0): np.array((255, 255, 254)), + (241, 0): np.array((190, 255, 230)), + (242, 0): np.array((255, 255, 139)), + (243, 0): np.array((204, 255, 115)), + (244, 0): np.array((255, 217, 255)), + (245, 0): np.array((255, 255, 254)), + (246, 0): np.array((255, 232, 164)), + (247, 0): np.array((255, 255, 139)), + (248, 0): np.array((241, 239, 255)), + (249, 0): np.array((176, 255, 255)), + (250, 0): np.array((254, 255, 254)), + (251, 0): np.array((190, 255, 230)), + (252, 0): np.array((255, 201, 255)), + (253, 0): np.array((241, 239, 255)), + (254, 0): np.array((255, 217, 255)), + (255, 0): np.array((255, 255, 254)), (0, 1): np.array((0, 0, 0)), - (1, 1): np.array((0, 0, 52)), - (2, 1): np.array((29, 0, 26)), - (3, 1): np.array((14, 0, 79)), - (4, 1): np.array((15, 2, 0)), + (1, 1): np.array((13, 15, 0)), + (2, 1): np.array((64, 0, 24)), + (3, 1): np.array((78, 0, 0)), + (4, 1): np.array((0, 0, 115)), (5, 1): np.array((0, 0, 0)), - (6, 1): np.array((44, 0, 0)), - (7, 1): np.array((29, 0, 26)), - (8, 1): np.array((0, 20, 0)), - (9, 1): np.array((0, 17, 25)), + (6, 1): np.array((50, 0, 139)), + (7, 1): np.array((64, 0, 24)), + (8, 1): np.array((0, 37, 0)), + (9, 1): np.array((0, 53, 0)), (10, 1): np.array((0, 0, 0)), - (11, 1): np.array((0, 0, 52)), - (12, 1): np.array((0, 22, 0)), - (13, 1): np.array((0, 20, 0)), - (14, 1): np.array((15, 2, 0)), + (11, 1): np.array((13, 15, 0)), + (12, 1): np.array((0, 22, 90)), + (13, 1): np.array((0, 37, 0)), + (14, 1): np.array((0, 0, 115)), (15, 1): np.array((0, 0, 0)), - (16, 1): np.array((48, 61, 116)), - (17, 1): np.array((33, 58, 168)), - (18, 1): np.array((78, 40, 143)), - (19, 1): np.array((63, 38, 195)), + (16, 1): np.array((77, 79, 0)), + (17, 1): np.array((91, 94, 0)), + (18, 1): np.array((142, 41, 0)), + (19, 1): np.array((155, 56, 0)), (20, 1): np.array((63, 63, 63)), - (21, 1): np.array((48, 61, 116)), - (22, 1): np.array((93, 43, 90)), - (23, 1): np.array((78, 40, 143)), - (24, 1): np.array((19, 81, 89)), - (25, 1): np.array((4, 78, 142)), - (26, 1): np.array((48, 61, 116)), - (27, 1): np.array((33, 58, 168)), - (28, 1): np.array((34, 83, 36)), - (29, 1): np.array((19, 81, 89)), + (21, 1): np.array((77, 79, 0)), + (22, 1): np.array((128, 26, 88)), + (23, 1): np.array((142, 41, 0)), + (24, 1): np.array((12, 116, 0)), + (25, 1): np.array((26, 132, 0)), + (26, 1): np.array((77, 79, 0)), + (27, 1): np.array((91, 94, 0)), + (28, 1): np.array((0, 101, 39)), + (29, 1): np.array((12, 116, 0)), (30, 1): np.array((63, 63, 63)), - (31, 1): np.array((48, 61, 116)), - (32, 1): np.array((93, 43, 90)), - (33, 1): np.array((78, 40, 143)), - (34, 1): np.array((122, 23, 117)), - (35, 1): np.array((107, 20, 169)), - (36, 1): np.array((108, 46, 37)), - (37, 1): np.array((93, 43, 90)), - (38, 1): np.array((137, 25, 64)), - (39, 1): np.array((122, 23, 117)), + (31, 1): np.array((77, 79, 0)), + (32, 1): np.array((128, 26, 88)), + (33, 1): np.array((142, 41, 0)), + (34, 1): np.array((193, 0, 112)), + (35, 1): np.array((206, 3, 0)), + (36, 1): np.array((114, 10, 203)), + (37, 1): np.array((128, 26, 88)), + (38, 1): np.array((179, 0, 228)), + (39, 1): np.array((193, 0, 112)), (40, 1): np.array((63, 63, 63)), - (41, 1): np.array((48, 61, 116)), - (42, 1): np.array((93, 43, 90)), - (43, 1): np.array((78, 40, 143)), - (44, 1): np.array((78, 66, 11)), + (41, 1): np.array((77, 79, 0)), + (42, 1): np.array((128, 26, 88)), + (43, 1): np.array((142, 41, 0)), + (44, 1): np.array((49, 48, 179)), (45, 1): np.array((63, 63, 63)), - (46, 1): np.array((108, 46, 37)), - (47, 1): np.array((93, 43, 90)), - (48, 1): np.array((141, 104, 206)), - (49, 1): np.array((126, 102, 255)), - (50, 1): np.array((171, 84, 233)), - (51, 1): np.array((156, 81, 255)), - (52, 1): np.array((156, 107, 154)), - (53, 1): np.array((141, 104, 206)), - (54, 1): np.array((186, 87, 181)), - (55, 1): np.array((171, 84, 233)), - (56, 1): np.array((112, 124, 180)), - (57, 1): np.array((97, 122, 232)), - (58, 1): np.array((141, 104, 206)), - (59, 1): np.array((126, 102, 255)), + (46, 1): np.array((114, 10, 203)), + (47, 1): np.array((128, 26, 88)), + (48, 1): np.array((205, 105, 36)), + (49, 1): np.array((219, 120, 0)), + (50, 1): np.array((255, 67, 61)), + (51, 1): np.array((255, 82, 0)), + (52, 1): np.array((192, 89, 152)), + (53, 1): np.array((205, 105, 36)), + (54, 1): np.array((255, 52, 176)), + (55, 1): np.array((255, 67, 61)), + (56, 1): np.array((141, 142, 12)), + (57, 1): np.array((155, 158, 0)), + (58, 1): np.array((205, 105, 36)), + (59, 1): np.array((219, 120, 0)), (60, 1): np.array((127, 127, 127)), - (61, 1): np.array((112, 124, 180)), - (62, 1): np.array((156, 107, 154)), - (63, 1): np.array((141, 104, 206)), - (64, 1): np.array((78, 66, 11)), + (61, 1): np.array((141, 142, 12)), + (62, 1): np.array((192, 89, 152)), + (63, 1): np.array((205, 105, 36)), + (64, 1): np.array((49, 48, 179)), (65, 1): np.array((63, 63, 63)), - (66, 1): np.array((108, 46, 37)), - (67, 1): np.array((93, 43, 90)), - (68, 1): np.array((93, 68, 0)), - (69, 1): np.array((78, 66, 11)), - (70, 1): np.array((123, 48, 0)), - (71, 1): np.array((108, 46, 37)), - (72, 1): np.array((49, 86, 0)), - (73, 1): np.array((34, 83, 36)), - (74, 1): np.array((78, 66, 11)), + (66, 1): np.array((114, 10, 203)), + (67, 1): np.array((128, 26, 88)), + (68, 1): np.array((36, 32, 255)), + (69, 1): np.array((49, 48, 179)), + (70, 1): np.array((100, 0, 255)), + (71, 1): np.array((114, 10, 203)), + (72, 1): np.array((0, 86, 154)), + (73, 1): np.array((0, 101, 39)), + (74, 1): np.array((49, 48, 179)), (75, 1): np.array((63, 63, 63)), - (76, 1): np.array((64, 89, 0)), - (77, 1): np.array((49, 86, 0)), - (78, 1): np.array((93, 68, 0)), - (79, 1): np.array((78, 66, 11)), + (76, 1): np.array((0, 70, 255)), + (77, 1): np.array((0, 86, 154)), + (78, 1): np.array((36, 32, 255)), + (79, 1): np.array((49, 48, 179)), (80, 1): np.array((127, 127, 127)), - (81, 1): np.array((112, 124, 180)), - (82, 1): np.array((156, 107, 154)), - (83, 1): np.array((141, 104, 206)), - (84, 1): np.array((142, 130, 74)), + (81, 1): np.array((141, 142, 12)), + (82, 1): np.array((192, 89, 152)), + (83, 1): np.array((205, 105, 36)), + (84, 1): np.array((113, 112, 242)), (85, 1): np.array((127, 127, 127)), - (86, 1): np.array((172, 109, 101)), - (87, 1): np.array((156, 107, 154)), - (88, 1): np.array((98, 147, 100)), - (89, 1): np.array((82, 145, 153)), + (86, 1): np.array((178, 74, 255)), + (87, 1): np.array((192, 89, 152)), + (88, 1): np.array((62, 165, 102)), + (89, 1): np.array((76, 180, 0)), (90, 1): np.array((127, 127, 127)), - (91, 1): np.array((112, 124, 180)), - (92, 1): np.array((113, 150, 48)), - (93, 1): np.array((98, 147, 100)), - (94, 1): np.array((142, 130, 74)), + (91, 1): np.array((141, 142, 12)), + (92, 1): np.array((49, 149, 218)), + (93, 1): np.array((62, 165, 102)), + (94, 1): np.array((113, 112, 242)), (95, 1): np.array((127, 127, 127)), - (96, 1): np.array((172, 109, 101)), - (97, 1): np.array((156, 107, 154)), - (98, 1): np.array((201, 89, 128)), - (99, 1): np.array((186, 87, 181)), - (100, 1): np.array((187, 112, 49)), - (101, 1): np.array((172, 109, 101)), - (102, 1): np.array((216, 92, 75)), - (103, 1): np.array((201, 89, 128)), - (104, 1): np.array((142, 130, 74)), + (96, 1): np.array((178, 74, 255)), + (97, 1): np.array((192, 89, 152)), + (98, 1): np.array((243, 36, 255)), + (99, 1): np.array((255, 52, 176)), + (100, 1): np.array((164, 58, 255)), + (101, 1): np.array((178, 74, 255)), + (102, 1): np.array((229, 21, 255)), + (103, 1): np.array((243, 36, 255)), + (104, 1): np.array((113, 112, 242)), (105, 1): np.array((127, 127, 127)), - (106, 1): np.array((172, 109, 101)), - (107, 1): np.array((156, 107, 154)), - (108, 1): np.array((157, 132, 22)), - (109, 1): np.array((142, 130, 74)), - (110, 1): np.array((187, 112, 49)), - (111, 1): np.array((172, 109, 101)), - (112, 1): np.array((220, 171, 218)), - (113, 1): np.array((205, 168, 255)), - (114, 1): np.array((250, 150, 244)), - (115, 1): np.array((235, 148, 255)), - (116, 1): np.array((235, 173, 165)), - (117, 1): np.array((220, 171, 218)), - (118, 1): np.array((255, 153, 192)), - (119, 1): np.array((250, 150, 244)), + (106, 1): np.array((178, 74, 255)), + (107, 1): np.array((192, 89, 152)), + (108, 1): np.array((99, 96, 255)), + (109, 1): np.array((113, 112, 242)), + (110, 1): np.array((164, 58, 255)), + (111, 1): np.array((178, 74, 255)), + (112, 1): np.array((255, 153, 215)), + (113, 1): np.array((255, 168, 100)), + (114, 1): np.array((255, 115, 240)), + (115, 1): np.array((255, 131, 124)), + (116, 1): np.array((242, 138, 255)), + (117, 1): np.array((255, 153, 215)), + (118, 1): np.array((255, 100, 255)), + (119, 1): np.array((255, 115, 240)), (120, 1): np.array((191, 191, 191)), - (121, 1): np.array((176, 188, 243)), - (122, 1): np.array((220, 171, 218)), - (123, 1): np.array((205, 168, 255)), - (124, 1): np.array((206, 193, 138)), + (121, 1): np.array((205, 206, 75)), + (122, 1): np.array((255, 153, 215)), + (123, 1): np.array((255, 168, 100)), + (124, 1): np.array((177, 175, 255)), (125, 1): np.array((191, 191, 191)), - (126, 1): np.array((235, 173, 165)), - (127, 1): np.array((220, 171, 218)), - (128, 1): np.array((34, 83, 36)), - (129, 1): np.array((19, 81, 89)), + (126, 1): np.array((242, 138, 255)), + (127, 1): np.array((255, 153, 215)), + (128, 1): np.array((0, 101, 39)), + (129, 1): np.array((12, 116, 0)), (130, 1): np.array((63, 63, 63)), - (131, 1): np.array((48, 61, 116)), - (132, 1): np.array((49, 86, 0)), - (133, 1): np.array((34, 83, 36)), - (134, 1): np.array((78, 66, 11)), + (131, 1): np.array((77, 79, 0)), + (132, 1): np.array((0, 86, 154)), + (133, 1): np.array((0, 101, 39)), + (134, 1): np.array((49, 48, 179)), (135, 1): np.array((63, 63, 63)), - (136, 1): np.array((4, 104, 10)), - (137, 1): np.array((0, 101, 62)), - (138, 1): np.array((34, 83, 36)), - (139, 1): np.array((19, 81, 89)), - (140, 1): np.array((19, 106, 0)), - (141, 1): np.array((4, 104, 10)), - (142, 1): np.array((49, 86, 0)), - (143, 1): np.array((34, 83, 36)), - (144, 1): np.array((82, 145, 153)), - (145, 1): np.array((67, 142, 205)), - (146, 1): np.array((112, 124, 180)), - (147, 1): np.array((97, 122, 232)), - (148, 1): np.array((98, 147, 100)), - (149, 1): np.array((82, 145, 153)), + (136, 1): np.array((0, 139, 14)), + (137, 1): np.array((0, 154, 0)), + (138, 1): np.array((0, 101, 39)), + (139, 1): np.array((12, 116, 0)), + (140, 1): np.array((0, 123, 130)), + (141, 1): np.array((0, 139, 14)), + (142, 1): np.array((0, 86, 154)), + (143, 1): np.array((0, 101, 39)), + (144, 1): np.array((76, 180, 0)), + (145, 1): np.array((90, 196, 0)), + (146, 1): np.array((141, 142, 12)), + (147, 1): np.array((155, 158, 0)), + (148, 1): np.array((62, 165, 102)), + (149, 1): np.array((76, 180, 0)), (150, 1): np.array((127, 127, 127)), - (151, 1): np.array((112, 124, 180)), - (152, 1): np.array((53, 165, 126)), - (153, 1): np.array((38, 162, 179)), - (154, 1): np.array((82, 145, 153)), - (155, 1): np.array((67, 142, 205)), - (156, 1): np.array((68, 167, 73)), - (157, 1): np.array((53, 165, 126)), - (158, 1): np.array((98, 147, 100)), - (159, 1): np.array((82, 145, 153)), + (151, 1): np.array((141, 142, 12)), + (152, 1): np.array((11, 218, 0)), + (153, 1): np.array((25, 233, 0)), + (154, 1): np.array((76, 180, 0)), + (155, 1): np.array((90, 196, 0)), + (156, 1): np.array((0, 202, 78)), + (157, 1): np.array((11, 218, 0)), + (158, 1): np.array((62, 165, 102)), + (159, 1): np.array((76, 180, 0)), (160, 1): np.array((127, 127, 127)), - (161, 1): np.array((112, 124, 180)), - (162, 1): np.array((156, 107, 154)), - (163, 1): np.array((141, 104, 206)), - (164, 1): np.array((142, 130, 74)), + (161, 1): np.array((141, 142, 12)), + (162, 1): np.array((192, 89, 152)), + (163, 1): np.array((205, 105, 36)), + (164, 1): np.array((113, 112, 242)), (165, 1): np.array((127, 127, 127)), - (166, 1): np.array((172, 109, 101)), - (167, 1): np.array((156, 107, 154)), - (168, 1): np.array((98, 147, 100)), - (169, 1): np.array((82, 145, 153)), + (166, 1): np.array((178, 74, 255)), + (167, 1): np.array((192, 89, 152)), + (168, 1): np.array((62, 165, 102)), + (169, 1): np.array((76, 180, 0)), (170, 1): np.array((127, 127, 127)), - (171, 1): np.array((112, 124, 180)), - (172, 1): np.array((113, 150, 48)), - (173, 1): np.array((98, 147, 100)), - (174, 1): np.array((142, 130, 74)), + (171, 1): np.array((141, 142, 12)), + (172, 1): np.array((49, 149, 218)), + (173, 1): np.array((62, 165, 102)), + (174, 1): np.array((113, 112, 242)), (175, 1): np.array((127, 127, 127)), - (176, 1): np.array((176, 188, 243)), - (177, 1): np.array((161, 186, 255)), - (178, 1): np.array((205, 168, 255)), - (179, 1): np.array((190, 165, 255)), + (176, 1): np.array((205, 206, 75)), + (177, 1): np.array((218, 222, 0)), + (178, 1): np.array((255, 168, 100)), + (179, 1): np.array((255, 184, 0)), (180, 1): np.array((191, 191, 191)), - (181, 1): np.array((176, 188, 243)), - (182, 1): np.array((220, 171, 218)), - (183, 1): np.array((205, 168, 255)), - (184, 1): np.array((146, 208, 217)), - (185, 1): np.array((131, 206, 255)), - (186, 1): np.array((176, 188, 243)), - (187, 1): np.array((161, 186, 255)), - (188, 1): np.array((161, 211, 164)), - (189, 1): np.array((146, 208, 217)), + (181, 1): np.array((205, 206, 75)), + (182, 1): np.array((255, 153, 215)), + (183, 1): np.array((255, 168, 100)), + (184, 1): np.array((140, 244, 51)), + (185, 1): np.array((154, 255, 0)), + (186, 1): np.array((205, 206, 75)), + (187, 1): np.array((218, 222, 0)), + (188, 1): np.array((126, 228, 166)), + (189, 1): np.array((140, 244, 51)), (190, 1): np.array((191, 191, 191)), - (191, 1): np.array((176, 188, 243)), - (192, 1): np.array((113, 150, 48)), - (193, 1): np.array((98, 147, 100)), - (194, 1): np.array((142, 130, 74)), + (191, 1): np.array((205, 206, 75)), + (192, 1): np.array((49, 149, 218)), + (193, 1): np.array((62, 165, 102)), + (194, 1): np.array((113, 112, 242)), (195, 1): np.array((127, 127, 127)), - (196, 1): np.array((128, 152, 0)), - (197, 1): np.array((113, 150, 48)), - (198, 1): np.array((157, 132, 22)), - (199, 1): np.array((142, 130, 74)), - (200, 1): np.array((83, 170, 21)), - (201, 1): np.array((68, 167, 73)), - (202, 1): np.array((113, 150, 48)), - (203, 1): np.array((98, 147, 100)), - (204, 1): np.array((98, 173, 0)), - (205, 1): np.array((83, 170, 21)), - (206, 1): np.array((128, 152, 0)), - (207, 1): np.array((113, 150, 48)), - (208, 1): np.array((161, 211, 164)), - (209, 1): np.array((146, 208, 217)), + (196, 1): np.array((35, 134, 255)), + (197, 1): np.array((49, 149, 218)), + (198, 1): np.array((99, 96, 255)), + (199, 1): np.array((113, 112, 242)), + (200, 1): np.array((0, 187, 193)), + (201, 1): np.array((0, 202, 78)), + (202, 1): np.array((49, 149, 218)), + (203, 1): np.array((62, 165, 102)), + (204, 1): np.array((0, 172, 255)), + (205, 1): np.array((0, 187, 193)), + (206, 1): np.array((35, 134, 255)), + (207, 1): np.array((49, 149, 218)), + (208, 1): np.array((126, 228, 166)), + (209, 1): np.array((140, 244, 51)), (210, 1): np.array((191, 191, 191)), - (211, 1): np.array((176, 188, 243)), - (212, 1): np.array((176, 214, 111)), - (213, 1): np.array((161, 211, 164)), - (214, 1): np.array((206, 193, 138)), + (211, 1): np.array((205, 206, 75)), + (212, 1): np.array((112, 213, 255)), + (213, 1): np.array((126, 228, 166)), + (214, 1): np.array((177, 175, 255)), (215, 1): np.array((191, 191, 191)), - (216, 1): np.array((132, 231, 137)), - (217, 1): np.array((117, 229, 190)), - (218, 1): np.array((161, 211, 164)), - (219, 1): np.array((146, 208, 217)), - (220, 1): np.array((147, 234, 85)), - (221, 1): np.array((132, 231, 137)), - (222, 1): np.array((176, 214, 111)), - (223, 1): np.array((161, 211, 164)), - (224, 1): np.array((206, 193, 138)), + (216, 1): np.array((61, 255, 142)), + (217, 1): np.array((75, 255, 26)), + (218, 1): np.array((126, 228, 166)), + (219, 1): np.array((140, 244, 51)), + (220, 1): np.array((48, 251, 255)), + (221, 1): np.array((61, 255, 142)), + (222, 1): np.array((112, 213, 255)), + (223, 1): np.array((126, 228, 166)), + (224, 1): np.array((177, 175, 255)), (225, 1): np.array((191, 191, 191)), - (226, 1): np.array((235, 173, 165)), - (227, 1): np.array((220, 171, 218)), - (228, 1): np.array((221, 196, 86)), - (229, 1): np.array((206, 193, 138)), - (230, 1): np.array((250, 176, 112)), - (231, 1): np.array((235, 173, 165)), - (232, 1): np.array((176, 214, 111)), - (233, 1): np.array((161, 211, 164)), - (234, 1): np.array((206, 193, 138)), + (226, 1): np.array((242, 138, 255)), + (227, 1): np.array((255, 153, 215)), + (228, 1): np.array((163, 160, 255)), + (229, 1): np.array((177, 175, 255)), + (230, 1): np.array((228, 122, 255)), + (231, 1): np.array((242, 138, 255)), + (232, 1): np.array((112, 213, 255)), + (233, 1): np.array((126, 228, 166)), + (234, 1): np.array((177, 175, 255)), (235, 1): np.array((191, 191, 191)), - (236, 1): np.array((191, 216, 59)), - (237, 1): np.array((176, 214, 111)), - (238, 1): np.array((221, 196, 86)), - (239, 1): np.array((206, 193, 138)), - (240, 1): np.array((255, 255, 255)), - (241, 1): np.array((239, 252, 255)), - (242, 1): np.array((255, 234, 255)), - (243, 1): np.array((255, 232, 255)), - (244, 1): np.array((255, 255, 202)), - (245, 1): np.array((255, 255, 254)), - (246, 1): np.array((255, 237, 229)), - (247, 1): np.array((255, 234, 255)), - (248, 1): np.array((225, 255, 228)), - (249, 1): np.array((210, 255, 255)), - (250, 1): np.array((255, 255, 255)), - (251, 1): np.array((239, 252, 255)), - (252, 1): np.array((240, 255, 175)), - (253, 1): np.array((225, 255, 228)), - (254, 1): np.array((255, 255, 202)), - (255, 1): np.array((255, 255, 254)), + (236, 1): np.array((99, 198, 255)), + (237, 1): np.array((112, 213, 255)), + (238, 1): np.array((163, 160, 255)), + (239, 1): np.array((177, 175, 255)), + (240, 1): np.array((255, 255, 254)), + (241, 1): np.array((255, 255, 139)), + (242, 1): np.array((255, 217, 255)), + (243, 1): np.array((255, 232, 164)), + (244, 1): np.array((241, 239, 255)), + (245, 1): np.array((254, 255, 254)), + (246, 1): np.array((255, 201, 255)), + (247, 1): np.array((255, 217, 255)), + (248, 1): np.array((190, 255, 230)), + (249, 1): np.array((204, 255, 115)), + (250, 1): np.array((255, 255, 254)), + (251, 1): np.array((255, 255, 139)), + (252, 1): np.array((176, 255, 255)), + (253, 1): np.array((190, 255, 230)), + (254, 1): np.array((241, 239, 255)), + (255, 1): np.array((254, 255, 254)), (0, 2): np.array((0, 0, 0)), - (1, 2): np.array((29, 0, 26)), - (2, 2): np.array((15, 2, 0)), - (3, 2): np.array((44, 0, 0)), - (4, 2): np.array((0, 20, 0)), + (1, 2): np.array((64, 0, 24)), + (2, 2): np.array((0, 0, 115)), + (3, 2): np.array((50, 0, 139)), + (4, 2): np.array((0, 37, 0)), (5, 2): np.array((0, 0, 0)), - (6, 2): np.array((0, 22, 0)), - (7, 2): np.array((15, 2, 0)), - (8, 2): np.array((0, 0, 52)), - (9, 2): np.array((14, 0, 79)), + (6, 2): np.array((0, 22, 90)), + (7, 2): np.array((0, 0, 115)), + (8, 2): np.array((13, 15, 0)), + (9, 2): np.array((78, 0, 0)), (10, 2): np.array((0, 0, 0)), - (11, 2): np.array((29, 0, 26)), - (12, 2): np.array((0, 17, 25)), - (13, 2): np.array((0, 0, 52)), - (14, 2): np.array((0, 20, 0)), + (11, 2): np.array((64, 0, 24)), + (12, 2): np.array((0, 53, 0)), + (13, 2): np.array((13, 15, 0)), + (14, 2): np.array((0, 37, 0)), (15, 2): np.array((0, 0, 0)), - (16, 2): np.array((93, 43, 90)), - (17, 2): np.array((122, 23, 117)), - (18, 2): np.array((108, 46, 37)), - (19, 2): np.array((137, 25, 64)), + (16, 2): np.array((128, 26, 88)), + (17, 2): np.array((193, 0, 112)), + (18, 2): np.array((114, 10, 203)), + (19, 2): np.array((179, 0, 228)), (20, 2): np.array((63, 63, 63)), - (21, 2): np.array((93, 43, 90)), - (22, 2): np.array((78, 66, 11)), - (23, 2): np.array((108, 46, 37)), - (24, 2): np.array((78, 40, 143)), - (25, 2): np.array((107, 20, 169)), - (26, 2): np.array((93, 43, 90)), - (27, 2): np.array((122, 23, 117)), - (28, 2): np.array((48, 61, 116)), - (29, 2): np.array((78, 40, 143)), + (21, 2): np.array((128, 26, 88)), + (22, 2): np.array((49, 48, 179)), + (23, 2): np.array((114, 10, 203)), + (24, 2): np.array((142, 41, 0)), + (25, 2): np.array((206, 3, 0)), + (26, 2): np.array((128, 26, 88)), + (27, 2): np.array((193, 0, 112)), + (28, 2): np.array((77, 79, 0)), + (29, 2): np.array((142, 41, 0)), (30, 2): np.array((63, 63, 63)), - (31, 2): np.array((93, 43, 90)), - (32, 2): np.array((78, 66, 11)), - (33, 2): np.array((108, 46, 37)), - (34, 2): np.array((93, 68, 0)), - (35, 2): np.array((123, 48, 0)), - (36, 2): np.array((49, 86, 0)), - (37, 2): np.array((78, 66, 11)), - (38, 2): np.array((64, 89, 0)), - (39, 2): np.array((93, 68, 0)), + (31, 2): np.array((128, 26, 88)), + (32, 2): np.array((49, 48, 179)), + (33, 2): np.array((114, 10, 203)), + (34, 2): np.array((36, 32, 255)), + (35, 2): np.array((100, 0, 255)), + (36, 2): np.array((0, 86, 154)), + (37, 2): np.array((49, 48, 179)), + (38, 2): np.array((0, 70, 255)), + (39, 2): np.array((36, 32, 255)), (40, 2): np.array((63, 63, 63)), - (41, 2): np.array((93, 43, 90)), - (42, 2): np.array((78, 66, 11)), - (43, 2): np.array((108, 46, 37)), - (44, 2): np.array((34, 83, 36)), + (41, 2): np.array((128, 26, 88)), + (42, 2): np.array((49, 48, 179)), + (43, 2): np.array((114, 10, 203)), + (44, 2): np.array((0, 101, 39)), (45, 2): np.array((63, 63, 63)), - (46, 2): np.array((49, 86, 0)), - (47, 2): np.array((78, 66, 11)), - (48, 2): np.array((172, 109, 101)), - (49, 2): np.array((201, 89, 128)), - (50, 2): np.array((187, 112, 49)), - (51, 2): np.array((216, 92, 75)), - (52, 2): np.array((142, 130, 74)), - (53, 2): np.array((172, 109, 101)), - (54, 2): np.array((157, 132, 22)), - (55, 2): np.array((187, 112, 49)), - (56, 2): np.array((156, 107, 154)), - (57, 2): np.array((186, 87, 181)), - (58, 2): np.array((172, 109, 101)), - (59, 2): np.array((201, 89, 128)), + (46, 2): np.array((0, 86, 154)), + (47, 2): np.array((49, 48, 179)), + (48, 2): np.array((178, 74, 255)), + (49, 2): np.array((243, 36, 255)), + (50, 2): np.array((164, 58, 255)), + (51, 2): np.array((229, 21, 255)), + (52, 2): np.array((113, 112, 242)), + (53, 2): np.array((178, 74, 255)), + (54, 2): np.array((99, 96, 255)), + (55, 2): np.array((164, 58, 255)), + (56, 2): np.array((192, 89, 152)), + (57, 2): np.array((255, 52, 176)), + (58, 2): np.array((178, 74, 255)), + (59, 2): np.array((243, 36, 255)), (60, 2): np.array((127, 127, 127)), - (61, 2): np.array((156, 107, 154)), - (62, 2): np.array((142, 130, 74)), - (63, 2): np.array((172, 109, 101)), - (64, 2): np.array((34, 83, 36)), + (61, 2): np.array((192, 89, 152)), + (62, 2): np.array((113, 112, 242)), + (63, 2): np.array((178, 74, 255)), + (64, 2): np.array((0, 101, 39)), (65, 2): np.array((63, 63, 63)), - (66, 2): np.array((49, 86, 0)), - (67, 2): np.array((78, 66, 11)), - (68, 2): np.array((4, 104, 10)), - (69, 2): np.array((34, 83, 36)), - (70, 2): np.array((19, 106, 0)), - (71, 2): np.array((49, 86, 0)), - (72, 2): np.array((19, 81, 89)), - (73, 2): np.array((48, 61, 116)), - (74, 2): np.array((34, 83, 36)), + (66, 2): np.array((0, 86, 154)), + (67, 2): np.array((49, 48, 179)), + (68, 2): np.array((0, 139, 14)), + (69, 2): np.array((0, 101, 39)), + (70, 2): np.array((0, 123, 130)), + (71, 2): np.array((0, 86, 154)), + (72, 2): np.array((12, 116, 0)), + (73, 2): np.array((77, 79, 0)), + (74, 2): np.array((0, 101, 39)), (75, 2): np.array((63, 63, 63)), - (76, 2): np.array((0, 101, 62)), - (77, 2): np.array((19, 81, 89)), - (78, 2): np.array((4, 104, 10)), - (79, 2): np.array((34, 83, 36)), + (76, 2): np.array((0, 154, 0)), + (77, 2): np.array((12, 116, 0)), + (78, 2): np.array((0, 139, 14)), + (79, 2): np.array((0, 101, 39)), (80, 2): np.array((127, 127, 127)), - (81, 2): np.array((156, 107, 154)), - (82, 2): np.array((142, 130, 74)), - (83, 2): np.array((172, 109, 101)), - (84, 2): np.array((98, 147, 100)), + (81, 2): np.array((192, 89, 152)), + (82, 2): np.array((113, 112, 242)), + (83, 2): np.array((178, 74, 255)), + (84, 2): np.array((62, 165, 102)), (85, 2): np.array((127, 127, 127)), - (86, 2): np.array((113, 150, 48)), - (87, 2): np.array((142, 130, 74)), - (88, 2): np.array((112, 124, 180)), - (89, 2): np.array((141, 104, 206)), + (86, 2): np.array((49, 149, 218)), + (87, 2): np.array((113, 112, 242)), + (88, 2): np.array((141, 142, 12)), + (89, 2): np.array((205, 105, 36)), (90, 2): np.array((127, 127, 127)), - (91, 2): np.array((156, 107, 154)), - (92, 2): np.array((82, 145, 153)), - (93, 2): np.array((112, 124, 180)), - (94, 2): np.array((98, 147, 100)), + (91, 2): np.array((192, 89, 152)), + (92, 2): np.array((76, 180, 0)), + (93, 2): np.array((141, 142, 12)), + (94, 2): np.array((62, 165, 102)), (95, 2): np.array((127, 127, 127)), - (96, 2): np.array((113, 150, 48)), - (97, 2): np.array((142, 130, 74)), - (98, 2): np.array((128, 152, 0)), - (99, 2): np.array((157, 132, 22)), - (100, 2): np.array((83, 170, 21)), - (101, 2): np.array((113, 150, 48)), - (102, 2): np.array((98, 173, 0)), - (103, 2): np.array((128, 152, 0)), - (104, 2): np.array((98, 147, 100)), + (96, 2): np.array((49, 149, 218)), + (97, 2): np.array((113, 112, 242)), + (98, 2): np.array((35, 134, 255)), + (99, 2): np.array((99, 96, 255)), + (100, 2): np.array((0, 187, 193)), + (101, 2): np.array((49, 149, 218)), + (102, 2): np.array((0, 172, 255)), + (103, 2): np.array((35, 134, 255)), + (104, 2): np.array((62, 165, 102)), (105, 2): np.array((127, 127, 127)), - (106, 2): np.array((113, 150, 48)), - (107, 2): np.array((142, 130, 74)), - (108, 2): np.array((68, 167, 73)), - (109, 2): np.array((98, 147, 100)), - (110, 2): np.array((83, 170, 21)), - (111, 2): np.array((113, 150, 48)), - (112, 2): np.array((206, 193, 138)), - (113, 2): np.array((235, 173, 165)), - (114, 2): np.array((221, 196, 86)), - (115, 2): np.array((250, 176, 112)), - (116, 2): np.array((176, 214, 111)), - (117, 2): np.array((206, 193, 138)), - (118, 2): np.array((191, 216, 59)), - (119, 2): np.array((221, 196, 86)), + (106, 2): np.array((49, 149, 218)), + (107, 2): np.array((113, 112, 242)), + (108, 2): np.array((0, 202, 78)), + (109, 2): np.array((62, 165, 102)), + (110, 2): np.array((0, 187, 193)), + (111, 2): np.array((49, 149, 218)), + (112, 2): np.array((177, 175, 255)), + (113, 2): np.array((242, 138, 255)), + (114, 2): np.array((163, 160, 255)), + (115, 2): np.array((228, 122, 255)), + (116, 2): np.array((112, 213, 255)), + (117, 2): np.array((177, 175, 255)), + (118, 2): np.array((99, 198, 255)), + (119, 2): np.array((163, 160, 255)), (120, 2): np.array((191, 191, 191)), - (121, 2): np.array((220, 171, 218)), - (122, 2): np.array((206, 193, 138)), - (123, 2): np.array((235, 173, 165)), - (124, 2): np.array((161, 211, 164)), + (121, 2): np.array((255, 153, 215)), + (122, 2): np.array((177, 175, 255)), + (123, 2): np.array((242, 138, 255)), + (124, 2): np.array((126, 228, 166)), (125, 2): np.array((191, 191, 191)), - (126, 2): np.array((176, 214, 111)), - (127, 2): np.array((206, 193, 138)), - (128, 2): np.array((48, 61, 116)), - (129, 2): np.array((78, 40, 143)), + (126, 2): np.array((112, 213, 255)), + (127, 2): np.array((177, 175, 255)), + (128, 2): np.array((77, 79, 0)), + (129, 2): np.array((142, 41, 0)), (130, 2): np.array((63, 63, 63)), - (131, 2): np.array((93, 43, 90)), - (132, 2): np.array((19, 81, 89)), - (133, 2): np.array((48, 61, 116)), - (134, 2): np.array((34, 83, 36)), + (131, 2): np.array((128, 26, 88)), + (132, 2): np.array((12, 116, 0)), + (133, 2): np.array((77, 79, 0)), + (134, 2): np.array((0, 101, 39)), (135, 2): np.array((63, 63, 63)), - (136, 2): np.array((33, 58, 168)), - (137, 2): np.array((63, 38, 195)), - (138, 2): np.array((48, 61, 116)), - (139, 2): np.array((78, 40, 143)), - (140, 2): np.array((4, 78, 142)), - (141, 2): np.array((33, 58, 168)), - (142, 2): np.array((19, 81, 89)), - (143, 2): np.array((48, 61, 116)), - (144, 2): np.array((141, 104, 206)), - (145, 2): np.array((171, 84, 233)), - (146, 2): np.array((156, 107, 154)), - (147, 2): np.array((186, 87, 181)), - (148, 2): np.array((112, 124, 180)), - (149, 2): np.array((141, 104, 206)), + (136, 2): np.array((91, 94, 0)), + (137, 2): np.array((155, 56, 0)), + (138, 2): np.array((77, 79, 0)), + (139, 2): np.array((142, 41, 0)), + (140, 2): np.array((26, 132, 0)), + (141, 2): np.array((91, 94, 0)), + (142, 2): np.array((12, 116, 0)), + (143, 2): np.array((77, 79, 0)), + (144, 2): np.array((205, 105, 36)), + (145, 2): np.array((255, 67, 61)), + (146, 2): np.array((192, 89, 152)), + (147, 2): np.array((255, 52, 176)), + (148, 2): np.array((141, 142, 12)), + (149, 2): np.array((205, 105, 36)), (150, 2): np.array((127, 127, 127)), - (151, 2): np.array((156, 107, 154)), - (152, 2): np.array((126, 102, 255)), - (153, 2): np.array((156, 81, 255)), - (154, 2): np.array((141, 104, 206)), - (155, 2): np.array((171, 84, 233)), - (156, 2): np.array((97, 122, 232)), - (157, 2): np.array((126, 102, 255)), - (158, 2): np.array((112, 124, 180)), - (159, 2): np.array((141, 104, 206)), + (151, 2): np.array((192, 89, 152)), + (152, 2): np.array((219, 120, 0)), + (153, 2): np.array((255, 82, 0)), + (154, 2): np.array((205, 105, 36)), + (155, 2): np.array((255, 67, 61)), + (156, 2): np.array((155, 158, 0)), + (157, 2): np.array((219, 120, 0)), + (158, 2): np.array((141, 142, 12)), + (159, 2): np.array((205, 105, 36)), (160, 2): np.array((127, 127, 127)), - (161, 2): np.array((156, 107, 154)), - (162, 2): np.array((142, 130, 74)), - (163, 2): np.array((172, 109, 101)), - (164, 2): np.array((98, 147, 100)), + (161, 2): np.array((192, 89, 152)), + (162, 2): np.array((113, 112, 242)), + (163, 2): np.array((178, 74, 255)), + (164, 2): np.array((62, 165, 102)), (165, 2): np.array((127, 127, 127)), - (166, 2): np.array((113, 150, 48)), - (167, 2): np.array((142, 130, 74)), - (168, 2): np.array((112, 124, 180)), - (169, 2): np.array((141, 104, 206)), + (166, 2): np.array((49, 149, 218)), + (167, 2): np.array((113, 112, 242)), + (168, 2): np.array((141, 142, 12)), + (169, 2): np.array((205, 105, 36)), (170, 2): np.array((127, 127, 127)), - (171, 2): np.array((156, 107, 154)), - (172, 2): np.array((82, 145, 153)), - (173, 2): np.array((112, 124, 180)), - (174, 2): np.array((98, 147, 100)), + (171, 2): np.array((192, 89, 152)), + (172, 2): np.array((76, 180, 0)), + (173, 2): np.array((141, 142, 12)), + (174, 2): np.array((62, 165, 102)), (175, 2): np.array((127, 127, 127)), - (176, 2): np.array((220, 171, 218)), - (177, 2): np.array((250, 150, 244)), - (178, 2): np.array((235, 173, 165)), - (179, 2): np.array((255, 153, 192)), + (176, 2): np.array((255, 153, 215)), + (177, 2): np.array((255, 115, 240)), + (178, 2): np.array((242, 138, 255)), + (179, 2): np.array((255, 100, 255)), (180, 2): np.array((191, 191, 191)), - (181, 2): np.array((220, 171, 218)), - (182, 2): np.array((206, 193, 138)), - (183, 2): np.array((235, 173, 165)), - (184, 2): np.array((205, 168, 255)), - (185, 2): np.array((235, 148, 255)), - (186, 2): np.array((220, 171, 218)), - (187, 2): np.array((250, 150, 244)), - (188, 2): np.array((176, 188, 243)), - (189, 2): np.array((205, 168, 255)), + (181, 2): np.array((255, 153, 215)), + (182, 2): np.array((177, 175, 255)), + (183, 2): np.array((242, 138, 255)), + (184, 2): np.array((255, 168, 100)), + (185, 2): np.array((255, 131, 124)), + (186, 2): np.array((255, 153, 215)), + (187, 2): np.array((255, 115, 240)), + (188, 2): np.array((205, 206, 75)), + (189, 2): np.array((255, 168, 100)), (190, 2): np.array((191, 191, 191)), - (191, 2): np.array((220, 171, 218)), - (192, 2): np.array((82, 145, 153)), - (193, 2): np.array((112, 124, 180)), - (194, 2): np.array((98, 147, 100)), + (191, 2): np.array((255, 153, 215)), + (192, 2): np.array((76, 180, 0)), + (193, 2): np.array((141, 142, 12)), + (194, 2): np.array((62, 165, 102)), (195, 2): np.array((127, 127, 127)), - (196, 2): np.array((53, 165, 126)), - (197, 2): np.array((82, 145, 153)), - (198, 2): np.array((68, 167, 73)), - (199, 2): np.array((98, 147, 100)), - (200, 2): np.array((67, 142, 205)), - (201, 2): np.array((97, 122, 232)), - (202, 2): np.array((82, 145, 153)), - (203, 2): np.array((112, 124, 180)), - (204, 2): np.array((38, 162, 179)), - (205, 2): np.array((67, 142, 205)), - (206, 2): np.array((53, 165, 126)), - (207, 2): np.array((82, 145, 153)), - (208, 2): np.array((176, 188, 243)), - (209, 2): np.array((205, 168, 255)), + (196, 2): np.array((11, 218, 0)), + (197, 2): np.array((76, 180, 0)), + (198, 2): np.array((0, 202, 78)), + (199, 2): np.array((62, 165, 102)), + (200, 2): np.array((90, 196, 0)), + (201, 2): np.array((155, 158, 0)), + (202, 2): np.array((76, 180, 0)), + (203, 2): np.array((141, 142, 12)), + (204, 2): np.array((25, 233, 0)), + (205, 2): np.array((90, 196, 0)), + (206, 2): np.array((11, 218, 0)), + (207, 2): np.array((76, 180, 0)), + (208, 2): np.array((205, 206, 75)), + (209, 2): np.array((255, 168, 100)), (210, 2): np.array((191, 191, 191)), - (211, 2): np.array((220, 171, 218)), - (212, 2): np.array((146, 208, 217)), - (213, 2): np.array((176, 188, 243)), - (214, 2): np.array((161, 211, 164)), + (211, 2): np.array((255, 153, 215)), + (212, 2): np.array((140, 244, 51)), + (213, 2): np.array((205, 206, 75)), + (214, 2): np.array((126, 228, 166)), (215, 2): np.array((191, 191, 191)), - (216, 2): np.array((161, 186, 255)), - (217, 2): np.array((190, 165, 255)), - (218, 2): np.array((176, 188, 243)), - (219, 2): np.array((205, 168, 255)), - (220, 2): np.array((131, 206, 255)), - (221, 2): np.array((161, 186, 255)), - (222, 2): np.array((146, 208, 217)), - (223, 2): np.array((176, 188, 243)), - (224, 2): np.array((161, 211, 164)), + (216, 2): np.array((218, 222, 0)), + (217, 2): np.array((255, 184, 0)), + (218, 2): np.array((205, 206, 75)), + (219, 2): np.array((255, 168, 100)), + (220, 2): np.array((154, 255, 0)), + (221, 2): np.array((218, 222, 0)), + (222, 2): np.array((140, 244, 51)), + (223, 2): np.array((205, 206, 75)), + (224, 2): np.array((126, 228, 166)), (225, 2): np.array((191, 191, 191)), - (226, 2): np.array((176, 214, 111)), - (227, 2): np.array((206, 193, 138)), - (228, 2): np.array((132, 231, 137)), - (229, 2): np.array((161, 211, 164)), - (230, 2): np.array((147, 234, 85)), - (231, 2): np.array((176, 214, 111)), - (232, 2): np.array((146, 208, 217)), - (233, 2): np.array((176, 188, 243)), - (234, 2): np.array((161, 211, 164)), + (226, 2): np.array((112, 213, 255)), + (227, 2): np.array((177, 175, 255)), + (228, 2): np.array((61, 255, 142)), + (229, 2): np.array((126, 228, 166)), + (230, 2): np.array((48, 251, 255)), + (231, 2): np.array((112, 213, 255)), + (232, 2): np.array((140, 244, 51)), + (233, 2): np.array((205, 206, 75)), + (234, 2): np.array((126, 228, 166)), (235, 2): np.array((191, 191, 191)), - (236, 2): np.array((117, 229, 190)), - (237, 2): np.array((146, 208, 217)), - (238, 2): np.array((132, 231, 137)), - (239, 2): np.array((161, 211, 164)), - (240, 2): np.array((255, 255, 255)), - (241, 2): np.array((255, 234, 255)), - (242, 2): np.array((255, 255, 202)), - (243, 2): np.array((255, 237, 229)), - (244, 2): np.array((225, 255, 228)), - (245, 2): np.array((255, 255, 255)), - (246, 2): np.array((240, 255, 175)), - (247, 2): np.array((255, 255, 202)), - (248, 2): np.array((239, 252, 255)), - (249, 2): np.array((255, 232, 255)), - (250, 2): np.array((255, 255, 255)), - (251, 2): np.array((255, 234, 255)), - (252, 2): np.array((210, 255, 255)), - (253, 2): np.array((239, 252, 255)), - (254, 2): np.array((225, 255, 228)), - (255, 2): np.array((255, 255, 255)), + (236, 2): np.array((75, 255, 26)), + (237, 2): np.array((140, 244, 51)), + (238, 2): np.array((61, 255, 142)), + (239, 2): np.array((126, 228, 166)), + (240, 2): np.array((255, 255, 254)), + (241, 2): np.array((255, 217, 255)), + (242, 2): np.array((241, 239, 255)), + (243, 2): np.array((255, 201, 255)), + (244, 2): np.array((190, 255, 230)), + (245, 2): np.array((255, 255, 254)), + (246, 2): np.array((176, 255, 255)), + (247, 2): np.array((241, 239, 255)), + (248, 2): np.array((255, 255, 139)), + (249, 2): np.array((255, 232, 164)), + (250, 2): np.array((254, 255, 254)), + (251, 2): np.array((255, 217, 255)), + (252, 2): np.array((204, 255, 115)), + (253, 2): np.array((255, 255, 139)), + (254, 2): np.array((190, 255, 230)), + (255, 2): np.array((254, 255, 254)), (0, 3): np.array((0, 0, 0)), - (1, 3): np.array((15, 2, 0)), - (2, 3): np.array((0, 20, 0)), - (3, 3): np.array((0, 22, 0)), - (4, 3): np.array((0, 0, 52)), + (1, 3): np.array((0, 0, 115)), + (2, 3): np.array((0, 37, 0)), + (3, 3): np.array((0, 22, 90)), + (4, 3): np.array((13, 15, 0)), (5, 3): np.array((0, 0, 0)), - (6, 3): np.array((0, 17, 25)), - (7, 3): np.array((0, 20, 0)), - (8, 3): np.array((29, 0, 26)), - (9, 3): np.array((44, 0, 0)), + (6, 3): np.array((0, 53, 0)), + (7, 3): np.array((0, 37, 0)), + (8, 3): np.array((64, 0, 24)), + (9, 3): np.array((50, 0, 139)), (10, 3): np.array((0, 0, 0)), - (11, 3): np.array((15, 2, 0)), - (12, 3): np.array((14, 0, 79)), - (13, 3): np.array((29, 0, 26)), - (14, 3): np.array((0, 0, 52)), + (11, 3): np.array((0, 0, 115)), + (12, 3): np.array((78, 0, 0)), + (13, 3): np.array((64, 0, 24)), + (14, 3): np.array((13, 15, 0)), (15, 3): np.array((0, 0, 0)), - (16, 3): np.array((78, 66, 11)), - (17, 3): np.array((93, 68, 0)), - (18, 3): np.array((49, 86, 0)), - (19, 3): np.array((64, 89, 0)), + (16, 3): np.array((49, 48, 179)), + (17, 3): np.array((36, 32, 255)), + (18, 3): np.array((0, 86, 154)), + (19, 3): np.array((0, 70, 255)), (20, 3): np.array((63, 63, 63)), - (21, 3): np.array((78, 66, 11)), - (22, 3): np.array((34, 83, 36)), - (23, 3): np.array((49, 86, 0)), - (24, 3): np.array((108, 46, 37)), - (25, 3): np.array((123, 48, 0)), - (26, 3): np.array((78, 66, 11)), - (27, 3): np.array((93, 68, 0)), - (28, 3): np.array((93, 43, 90)), - (29, 3): np.array((108, 46, 37)), + (21, 3): np.array((49, 48, 179)), + (22, 3): np.array((0, 101, 39)), + (23, 3): np.array((0, 86, 154)), + (24, 3): np.array((114, 10, 203)), + (25, 3): np.array((100, 0, 255)), + (26, 3): np.array((49, 48, 179)), + (27, 3): np.array((36, 32, 255)), + (28, 3): np.array((128, 26, 88)), + (29, 3): np.array((114, 10, 203)), (30, 3): np.array((63, 63, 63)), - (31, 3): np.array((78, 66, 11)), - (32, 3): np.array((34, 83, 36)), - (33, 3): np.array((49, 86, 0)), - (34, 3): np.array((4, 104, 10)), - (35, 3): np.array((19, 106, 0)), - (36, 3): np.array((19, 81, 89)), - (37, 3): np.array((34, 83, 36)), - (38, 3): np.array((0, 101, 62)), - (39, 3): np.array((4, 104, 10)), + (31, 3): np.array((49, 48, 179)), + (32, 3): np.array((0, 101, 39)), + (33, 3): np.array((0, 86, 154)), + (34, 3): np.array((0, 139, 14)), + (35, 3): np.array((0, 123, 130)), + (36, 3): np.array((12, 116, 0)), + (37, 3): np.array((0, 101, 39)), + (38, 3): np.array((0, 154, 0)), + (39, 3): np.array((0, 139, 14)), (40, 3): np.array((63, 63, 63)), - (41, 3): np.array((78, 66, 11)), - (42, 3): np.array((34, 83, 36)), - (43, 3): np.array((49, 86, 0)), - (44, 3): np.array((48, 61, 116)), + (41, 3): np.array((49, 48, 179)), + (42, 3): np.array((0, 101, 39)), + (43, 3): np.array((0, 86, 154)), + (44, 3): np.array((77, 79, 0)), (45, 3): np.array((63, 63, 63)), - (46, 3): np.array((19, 81, 89)), - (47, 3): np.array((34, 83, 36)), - (48, 3): np.array((113, 150, 48)), - (49, 3): np.array((128, 152, 0)), - (50, 3): np.array((83, 170, 21)), - (51, 3): np.array((98, 173, 0)), - (52, 3): np.array((98, 147, 100)), - (53, 3): np.array((113, 150, 48)), - (54, 3): np.array((68, 167, 73)), - (55, 3): np.array((83, 170, 21)), - (56, 3): np.array((142, 130, 74)), - (57, 3): np.array((157, 132, 22)), - (58, 3): np.array((113, 150, 48)), - (59, 3): np.array((128, 152, 0)), + (46, 3): np.array((12, 116, 0)), + (47, 3): np.array((0, 101, 39)), + (48, 3): np.array((49, 149, 218)), + (49, 3): np.array((35, 134, 255)), + (50, 3): np.array((0, 187, 193)), + (51, 3): np.array((0, 172, 255)), + (52, 3): np.array((62, 165, 102)), + (53, 3): np.array((49, 149, 218)), + (54, 3): np.array((0, 202, 78)), + (55, 3): np.array((0, 187, 193)), + (56, 3): np.array((113, 112, 242)), + (57, 3): np.array((99, 96, 255)), + (58, 3): np.array((49, 149, 218)), + (59, 3): np.array((35, 134, 255)), (60, 3): np.array((127, 127, 127)), - (61, 3): np.array((142, 130, 74)), - (62, 3): np.array((98, 147, 100)), - (63, 3): np.array((113, 150, 48)), - (64, 3): np.array((48, 61, 116)), + (61, 3): np.array((113, 112, 242)), + (62, 3): np.array((62, 165, 102)), + (63, 3): np.array((49, 149, 218)), + (64, 3): np.array((77, 79, 0)), (65, 3): np.array((63, 63, 63)), - (66, 3): np.array((19, 81, 89)), - (67, 3): np.array((34, 83, 36)), - (68, 3): np.array((33, 58, 168)), - (69, 3): np.array((48, 61, 116)), - (70, 3): np.array((4, 78, 142)), - (71, 3): np.array((19, 81, 89)), - (72, 3): np.array((78, 40, 143)), - (73, 3): np.array((93, 43, 90)), - (74, 3): np.array((48, 61, 116)), + (66, 3): np.array((12, 116, 0)), + (67, 3): np.array((0, 101, 39)), + (68, 3): np.array((91, 94, 0)), + (69, 3): np.array((77, 79, 0)), + (70, 3): np.array((26, 132, 0)), + (71, 3): np.array((12, 116, 0)), + (72, 3): np.array((142, 41, 0)), + (73, 3): np.array((128, 26, 88)), + (74, 3): np.array((77, 79, 0)), (75, 3): np.array((63, 63, 63)), - (76, 3): np.array((63, 38, 195)), - (77, 3): np.array((78, 40, 143)), - (78, 3): np.array((33, 58, 168)), - (79, 3): np.array((48, 61, 116)), + (76, 3): np.array((155, 56, 0)), + (77, 3): np.array((142, 41, 0)), + (78, 3): np.array((91, 94, 0)), + (79, 3): np.array((77, 79, 0)), (80, 3): np.array((127, 127, 127)), - (81, 3): np.array((142, 130, 74)), - (82, 3): np.array((98, 147, 100)), - (83, 3): np.array((113, 150, 48)), - (84, 3): np.array((112, 124, 180)), + (81, 3): np.array((113, 112, 242)), + (82, 3): np.array((62, 165, 102)), + (83, 3): np.array((49, 149, 218)), + (84, 3): np.array((141, 142, 12)), (85, 3): np.array((127, 127, 127)), - (86, 3): np.array((82, 145, 153)), - (87, 3): np.array((98, 147, 100)), - (88, 3): np.array((156, 107, 154)), - (89, 3): np.array((172, 109, 101)), + (86, 3): np.array((76, 180, 0)), + (87, 3): np.array((62, 165, 102)), + (88, 3): np.array((192, 89, 152)), + (89, 3): np.array((178, 74, 255)), (90, 3): np.array((127, 127, 127)), - (91, 3): np.array((142, 130, 74)), - (92, 3): np.array((141, 104, 206)), - (93, 3): np.array((156, 107, 154)), - (94, 3): np.array((112, 124, 180)), + (91, 3): np.array((113, 112, 242)), + (92, 3): np.array((205, 105, 36)), + (93, 3): np.array((192, 89, 152)), + (94, 3): np.array((141, 142, 12)), (95, 3): np.array((127, 127, 127)), - (96, 3): np.array((82, 145, 153)), - (97, 3): np.array((98, 147, 100)), - (98, 3): np.array((53, 165, 126)), - (99, 3): np.array((68, 167, 73)), - (100, 3): np.array((67, 142, 205)), - (101, 3): np.array((82, 145, 153)), - (102, 3): np.array((38, 162, 179)), - (103, 3): np.array((53, 165, 126)), - (104, 3): np.array((112, 124, 180)), + (96, 3): np.array((76, 180, 0)), + (97, 3): np.array((62, 165, 102)), + (98, 3): np.array((11, 218, 0)), + (99, 3): np.array((0, 202, 78)), + (100, 3): np.array((90, 196, 0)), + (101, 3): np.array((76, 180, 0)), + (102, 3): np.array((25, 233, 0)), + (103, 3): np.array((11, 218, 0)), + (104, 3): np.array((141, 142, 12)), (105, 3): np.array((127, 127, 127)), - (106, 3): np.array((82, 145, 153)), - (107, 3): np.array((98, 147, 100)), - (108, 3): np.array((97, 122, 232)), - (109, 3): np.array((112, 124, 180)), - (110, 3): np.array((67, 142, 205)), - (111, 3): np.array((82, 145, 153)), - (112, 3): np.array((161, 211, 164)), - (113, 3): np.array((176, 214, 111)), - (114, 3): np.array((132, 231, 137)), - (115, 3): np.array((147, 234, 85)), - (116, 3): np.array((146, 208, 217)), - (117, 3): np.array((161, 211, 164)), - (118, 3): np.array((117, 229, 190)), - (119, 3): np.array((132, 231, 137)), + (106, 3): np.array((76, 180, 0)), + (107, 3): np.array((62, 165, 102)), + (108, 3): np.array((155, 158, 0)), + (109, 3): np.array((141, 142, 12)), + (110, 3): np.array((90, 196, 0)), + (111, 3): np.array((76, 180, 0)), + (112, 3): np.array((126, 228, 166)), + (113, 3): np.array((112, 213, 255)), + (114, 3): np.array((61, 255, 142)), + (115, 3): np.array((48, 251, 255)), + (116, 3): np.array((140, 244, 51)), + (117, 3): np.array((126, 228, 166)), + (118, 3): np.array((75, 255, 26)), + (119, 3): np.array((61, 255, 142)), (120, 3): np.array((191, 191, 191)), - (121, 3): np.array((206, 193, 138)), - (122, 3): np.array((161, 211, 164)), - (123, 3): np.array((176, 214, 111)), - (124, 3): np.array((176, 188, 243)), + (121, 3): np.array((177, 175, 255)), + (122, 3): np.array((126, 228, 166)), + (123, 3): np.array((112, 213, 255)), + (124, 3): np.array((205, 206, 75)), (125, 3): np.array((191, 191, 191)), - (126, 3): np.array((146, 208, 217)), - (127, 3): np.array((161, 211, 164)), - (128, 3): np.array((93, 43, 90)), - (129, 3): np.array((108, 46, 37)), + (126, 3): np.array((140, 244, 51)), + (127, 3): np.array((126, 228, 166)), + (128, 3): np.array((128, 26, 88)), + (129, 3): np.array((114, 10, 203)), (130, 3): np.array((63, 63, 63)), - (131, 3): np.array((78, 66, 11)), - (132, 3): np.array((78, 40, 143)), - (133, 3): np.array((93, 43, 90)), - (134, 3): np.array((48, 61, 116)), + (131, 3): np.array((49, 48, 179)), + (132, 3): np.array((142, 41, 0)), + (133, 3): np.array((128, 26, 88)), + (134, 3): np.array((77, 79, 0)), (135, 3): np.array((63, 63, 63)), - (136, 3): np.array((122, 23, 117)), - (137, 3): np.array((137, 25, 64)), - (138, 3): np.array((93, 43, 90)), - (139, 3): np.array((108, 46, 37)), - (140, 3): np.array((107, 20, 169)), - (141, 3): np.array((122, 23, 117)), - (142, 3): np.array((78, 40, 143)), - (143, 3): np.array((93, 43, 90)), - (144, 3): np.array((172, 109, 101)), - (145, 3): np.array((187, 112, 49)), - (146, 3): np.array((142, 130, 74)), - (147, 3): np.array((157, 132, 22)), - (148, 3): np.array((156, 107, 154)), - (149, 3): np.array((172, 109, 101)), + (136, 3): np.array((193, 0, 112)), + (137, 3): np.array((179, 0, 228)), + (138, 3): np.array((128, 26, 88)), + (139, 3): np.array((114, 10, 203)), + (140, 3): np.array((206, 3, 0)), + (141, 3): np.array((193, 0, 112)), + (142, 3): np.array((142, 41, 0)), + (143, 3): np.array((128, 26, 88)), + (144, 3): np.array((178, 74, 255)), + (145, 3): np.array((164, 58, 255)), + (146, 3): np.array((113, 112, 242)), + (147, 3): np.array((99, 96, 255)), + (148, 3): np.array((192, 89, 152)), + (149, 3): np.array((178, 74, 255)), (150, 3): np.array((127, 127, 127)), - (151, 3): np.array((142, 130, 74)), - (152, 3): np.array((201, 89, 128)), - (153, 3): np.array((216, 92, 75)), - (154, 3): np.array((172, 109, 101)), - (155, 3): np.array((187, 112, 49)), - (156, 3): np.array((186, 87, 181)), - (157, 3): np.array((201, 89, 128)), - (158, 3): np.array((156, 107, 154)), - (159, 3): np.array((172, 109, 101)), + (151, 3): np.array((113, 112, 242)), + (152, 3): np.array((243, 36, 255)), + (153, 3): np.array((229, 21, 255)), + (154, 3): np.array((178, 74, 255)), + (155, 3): np.array((164, 58, 255)), + (156, 3): np.array((255, 52, 176)), + (157, 3): np.array((243, 36, 255)), + (158, 3): np.array((192, 89, 152)), + (159, 3): np.array((178, 74, 255)), (160, 3): np.array((127, 127, 127)), - (161, 3): np.array((142, 130, 74)), - (162, 3): np.array((98, 147, 100)), - (163, 3): np.array((113, 150, 48)), - (164, 3): np.array((112, 124, 180)), + (161, 3): np.array((113, 112, 242)), + (162, 3): np.array((62, 165, 102)), + (163, 3): np.array((49, 149, 218)), + (164, 3): np.array((141, 142, 12)), (165, 3): np.array((127, 127, 127)), - (166, 3): np.array((82, 145, 153)), - (167, 3): np.array((98, 147, 100)), - (168, 3): np.array((156, 107, 154)), - (169, 3): np.array((172, 109, 101)), + (166, 3): np.array((76, 180, 0)), + (167, 3): np.array((62, 165, 102)), + (168, 3): np.array((192, 89, 152)), + (169, 3): np.array((178, 74, 255)), (170, 3): np.array((127, 127, 127)), - (171, 3): np.array((142, 130, 74)), - (172, 3): np.array((141, 104, 206)), - (173, 3): np.array((156, 107, 154)), - (174, 3): np.array((112, 124, 180)), + (171, 3): np.array((113, 112, 242)), + (172, 3): np.array((205, 105, 36)), + (173, 3): np.array((192, 89, 152)), + (174, 3): np.array((141, 142, 12)), (175, 3): np.array((127, 127, 127)), - (176, 3): np.array((206, 193, 138)), - (177, 3): np.array((221, 196, 86)), - (178, 3): np.array((176, 214, 111)), - (179, 3): np.array((191, 216, 59)), + (176, 3): np.array((177, 175, 255)), + (177, 3): np.array((163, 160, 255)), + (178, 3): np.array((112, 213, 255)), + (179, 3): np.array((99, 198, 255)), (180, 3): np.array((191, 191, 191)), - (181, 3): np.array((206, 193, 138)), - (182, 3): np.array((161, 211, 164)), - (183, 3): np.array((176, 214, 111)), - (184, 3): np.array((235, 173, 165)), - (185, 3): np.array((250, 176, 112)), - (186, 3): np.array((206, 193, 138)), - (187, 3): np.array((221, 196, 86)), - (188, 3): np.array((220, 171, 218)), - (189, 3): np.array((235, 173, 165)), + (181, 3): np.array((177, 175, 255)), + (182, 3): np.array((126, 228, 166)), + (183, 3): np.array((112, 213, 255)), + (184, 3): np.array((242, 138, 255)), + (185, 3): np.array((228, 122, 255)), + (186, 3): np.array((177, 175, 255)), + (187, 3): np.array((163, 160, 255)), + (188, 3): np.array((255, 153, 215)), + (189, 3): np.array((242, 138, 255)), (190, 3): np.array((191, 191, 191)), - (191, 3): np.array((206, 193, 138)), - (192, 3): np.array((141, 104, 206)), - (193, 3): np.array((156, 107, 154)), - (194, 3): np.array((112, 124, 180)), + (191, 3): np.array((177, 175, 255)), + (192, 3): np.array((205, 105, 36)), + (193, 3): np.array((192, 89, 152)), + (194, 3): np.array((141, 142, 12)), (195, 3): np.array((127, 127, 127)), - (196, 3): np.array((126, 102, 255)), - (197, 3): np.array((141, 104, 206)), - (198, 3): np.array((97, 122, 232)), - (199, 3): np.array((112, 124, 180)), - (200, 3): np.array((171, 84, 233)), - (201, 3): np.array((186, 87, 181)), - (202, 3): np.array((141, 104, 206)), - (203, 3): np.array((156, 107, 154)), - (204, 3): np.array((156, 81, 255)), - (205, 3): np.array((171, 84, 233)), - (206, 3): np.array((126, 102, 255)), - (207, 3): np.array((141, 104, 206)), - (208, 3): np.array((220, 171, 218)), - (209, 3): np.array((235, 173, 165)), + (196, 3): np.array((219, 120, 0)), + (197, 3): np.array((205, 105, 36)), + (198, 3): np.array((155, 158, 0)), + (199, 3): np.array((141, 142, 12)), + (200, 3): np.array((255, 67, 61)), + (201, 3): np.array((255, 52, 176)), + (202, 3): np.array((205, 105, 36)), + (203, 3): np.array((192, 89, 152)), + (204, 3): np.array((255, 82, 0)), + (205, 3): np.array((255, 67, 61)), + (206, 3): np.array((219, 120, 0)), + (207, 3): np.array((205, 105, 36)), + (208, 3): np.array((255, 153, 215)), + (209, 3): np.array((242, 138, 255)), (210, 3): np.array((191, 191, 191)), - (211, 3): np.array((206, 193, 138)), - (212, 3): np.array((205, 168, 255)), - (213, 3): np.array((220, 171, 218)), - (214, 3): np.array((176, 188, 243)), + (211, 3): np.array((177, 175, 255)), + (212, 3): np.array((255, 168, 100)), + (213, 3): np.array((255, 153, 215)), + (214, 3): np.array((205, 206, 75)), (215, 3): np.array((191, 191, 191)), - (216, 3): np.array((250, 150, 244)), - (217, 3): np.array((255, 153, 192)), - (218, 3): np.array((220, 171, 218)), - (219, 3): np.array((235, 173, 165)), - (220, 3): np.array((235, 148, 255)), - (221, 3): np.array((250, 150, 244)), - (222, 3): np.array((205, 168, 255)), - (223, 3): np.array((220, 171, 218)), - (224, 3): np.array((176, 188, 243)), + (216, 3): np.array((255, 115, 240)), + (217, 3): np.array((255, 100, 255)), + (218, 3): np.array((255, 153, 215)), + (219, 3): np.array((242, 138, 255)), + (220, 3): np.array((255, 131, 124)), + (221, 3): np.array((255, 115, 240)), + (222, 3): np.array((255, 168, 100)), + (223, 3): np.array((255, 153, 215)), + (224, 3): np.array((205, 206, 75)), (225, 3): np.array((191, 191, 191)), - (226, 3): np.array((146, 208, 217)), - (227, 3): np.array((161, 211, 164)), - (228, 3): np.array((161, 186, 255)), - (229, 3): np.array((176, 188, 243)), - (230, 3): np.array((131, 206, 255)), - (231, 3): np.array((146, 208, 217)), - (232, 3): np.array((205, 168, 255)), - (233, 3): np.array((220, 171, 218)), - (234, 3): np.array((176, 188, 243)), + (226, 3): np.array((140, 244, 51)), + (227, 3): np.array((126, 228, 166)), + (228, 3): np.array((218, 222, 0)), + (229, 3): np.array((205, 206, 75)), + (230, 3): np.array((154, 255, 0)), + (231, 3): np.array((140, 244, 51)), + (232, 3): np.array((255, 168, 100)), + (233, 3): np.array((255, 153, 215)), + (234, 3): np.array((205, 206, 75)), (235, 3): np.array((191, 191, 191)), - (236, 3): np.array((190, 165, 255)), - (237, 3): np.array((205, 168, 255)), - (238, 3): np.array((161, 186, 255)), - (239, 3): np.array((176, 188, 243)), - (240, 3): np.array((255, 255, 255)), - (241, 3): np.array((255, 255, 202)), - (242, 3): np.array((225, 255, 228)), - (243, 3): np.array((240, 255, 175)), - (244, 3): np.array((239, 252, 255)), - (245, 3): np.array((255, 255, 254)), - (246, 3): np.array((210, 255, 255)), - (247, 3): np.array((225, 255, 228)), - (248, 3): np.array((255, 234, 255)), - (249, 3): np.array((255, 237, 229)), - (250, 3): np.array((255, 255, 255)), - (251, 3): np.array((255, 255, 202)), - (252, 3): np.array((255, 232, 255)), - (253, 3): np.array((255, 234, 255)), - (254, 3): np.array((239, 252, 255)), - (255, 3): np.array((254, 255, 255)), + (236, 3): np.array((255, 184, 0)), + (237, 3): np.array((255, 168, 100)), + (238, 3): np.array((218, 222, 0)), + (239, 3): np.array((205, 206, 75)), + (240, 3): np.array((255, 255, 254)), + (241, 3): np.array((241, 239, 255)), + (242, 3): np.array((190, 255, 230)), + (243, 3): np.array((176, 255, 255)), + (244, 3): np.array((255, 255, 139)), + (245, 3): np.array((254, 255, 254)), + (246, 3): np.array((204, 255, 115)), + (247, 3): np.array((190, 255, 230)), + (248, 3): np.array((255, 217, 255)), + (249, 3): np.array((255, 201, 255)), + (250, 3): np.array((255, 255, 254)), + (251, 3): np.array((241, 239, 255)), + (252, 3): np.array((255, 232, 164)), + (253, 3): np.array((255, 217, 255)), + (254, 3): np.array((255, 255, 139)), + (255, 3): np.array((255, 255, 254)), } -# 87 unique colours +# 86 unique colours diff --git a/screen.py b/screen.py index 51386f2..684cd79 100644 --- a/screen.py +++ b/screen.py @@ -80,54 +80,57 @@ class DHGRScreen: def _read(self, line, pos): if pos < 0: return 0 - return 1 if line[pos] else 0 def bitmap_to_image_ntsc(self, bitmap: np.ndarray) -> np.ndarray: y_width = 12 - i_width = 24 - q_width = 24 + u_width = 24 + v_width = 24 contrast = 1 - saturation = 1 - # DHGR has a timing shift of 1/4 phase, i.e x=0 is actually 1/4 phase. - # XXX should use (x + 1) % 4 ? - hue = math.pi / 2 + # TODO: This is necessary to match OpenEmulator. I think it is because + # they introduce an extra (unexplained) factor of 2 when applying the + # Chebyshev/Lanczos filtering to the u and v components. + saturation = 2 + # TODO: this phase shift is necessary to match OpenEmulator. I'm not + # sure where it comes from - e.g. it doesn't match the phaseInfo + # calculation for the signal phase at the start of the visible region. + hue = 0.2 * (2 * np.pi) # Apply effect of saturation - yiq_to_rgb = np.array( + yuv_to_rgb = np.array( ((1, 0, 0), (0, saturation, 0), (0, 0, saturation)), dtype=np.float) # Apply hue phase rotation - yiq_to_rgb = np.matmul(np.array( + yuv_to_rgb = np.matmul(np.array( ((1, 0, 0), (0, np.cos(hue), np.sin(hue)), (0, -np.sin(hue), np.cos(hue)))), - yiq_to_rgb) - # Y'IQ to R'G'B' conversion - yiq_to_rgb = np.matmul(np.array( - ((1, 0.956, 0.621), (1, -0.272, -.647), (1, -1.107, 1.704))), - yiq_to_rgb) + yuv_to_rgb) + # Y'UV to R'G'B' conversion + yuv_to_rgb = np.matmul(np.array( + ((1, 0, 1.139883), (1, -0.394642, -.5806227), (1, 2.032062, 0))), + yuv_to_rgb) # Apply effect of contrast - yiq_to_rgb *= contrast + yuv_to_rgb *= contrast out_rgb = np.empty((bitmap.shape[0], bitmap.shape[1] * 3, 3), dtype=np.uint8) for y in range(bitmap.shape[0]): ysum = 0 - isum = 0 - qsum = 0 + usum = 0 + vsum = 0 line = np.repeat(bitmap[y], 3) for x in range(bitmap.shape[1] * 3): ysum += self._read(line, x) - self._read(line, x - y_width) - isum += self._read(line, x) * self._sin(x) - self._read( - line, x - i_width) * self._sin((x - i_width)) - qsum += self._read(line, x) * self._cos(x) - self._read( - line, x - q_width) * self._cos((x - q_width)) + usum += self._read(line, x) * self._sin(x) - self._read( + line, x - u_width) * self._sin((x - u_width)) + vsum += self._read(line, x) * self._cos(x) - self._read( + line, x - v_width) * self._cos((x - v_width)) rgb = np.matmul( - yiq_to_rgb, np.array( - (ysum / y_width, isum / i_width, - qsum / q_width)).reshape((3, 1))).reshape(3) + yuv_to_rgb, np.array( + (ysum / y_width, usum / u_width, + vsum / v_width)).reshape((3, 1))).reshape(3) r = min(255, max(0, rgb[0] * 255)) g = min(255, max(0, rgb[1] * 255)) b = min(255, max(0, rgb[2] * 255))