History

avcodec/vp6: select idct based (loosely) on number of coefficients decoded

The VP3/4/5/6 reference decoders all use three IDCT versions: one for the DC-only case, another for blocks with more than 10 coefficients, and an optimised one for blocks with up to 10 AC coefficents. VP6 relies on the sparse 10 coefficient version, and without it, IDCT drift occurs. Fixes: https://trac.ffmpeg.org/ticket/1282

Peter Ross committed 7 years ago

Commit d8ebfd11 parent 160ebe06 files · +213 −178Browse files

Unified · Split

6 files
  1. libavcodec/vp5.c +1 −0
  2. libavcodec/vp56.c +24 −6
  3. libavcodec/vp56.h +2 −0
  4. libavcodec/vp6.c +14 −0
  5. tests/ref/fate/vp6a +86 −86
  6. tests/ref/fate/vp6a-skip_alpha +86 −86
libavcodec/vp5.c+1−0
@@ -252,6 +252,7 @@ static int vp5_parse_coeff(VP56Context *s) · 251 unmodified lines
252252 for (i=coeff_idx; i<=ctx_last; i++)
253253 s->coeff_ctx[ff_vp56_b6to4[b]][i] = 5;
254254 s->above_blocks[s->above_block_idx[b]].not_null_dc = s->coeff_ctx[ff_vp56_b6to4[b]][0];
255+ s->idct_selector[b] = 63;
255256 }
256257 return 0;
257258 }
libavcodec/vp56.c+24−6
@@ -406,6 +406,24 @@ static void vp56_mc(VP56Context *s, int b, int plane, uint8_t *src, · 405 unmodified lines
406406 }
407407 }
408408
409+static void vp56_idct_put(VP56Context *s, uint8_t * dest, ptrdiff_t stride, int16_t *block, int selector)
410+{
411+ if (selector > 10 || selector == 1)
412+ s->vp3dsp.idct_put(dest, stride, block);
413+ else
414+ ff_vp3dsp_idct10_put(dest, stride, block);
415+}
416+
417+static void vp56_idct_add(VP56Context *s, uint8_t * dest, ptrdiff_t stride, int16_t *block, int selector)
418+{
419+ if (selector > 10)
420+ s->vp3dsp.idct_add(dest, stride, block);
421+ else if (selector > 1)
422+ ff_vp3dsp_idct10_add(dest, stride, block);
423+ else
424+ s->vp3dsp.idct_dc_add(dest, stride, block);
425+}
426+
409427 static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, int is_alpha, VP56mb mb_type)
410428 {
411429 int b, ab, b_max, plane, off;
@@ -426,8 +444,8 @@ static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, in · 14 unmodified lines
426444 case VP56_MB_INTRA:
427445 for (b=0; b<b_max; b++) {
428446 plane = ff_vp56_b2p[b+ab];
429− s->vp3dsp.idct_put(frame_current->data[plane] + s->block_offset[b],
430− s->stride[plane], s->block_coeff[b]);
447+ vp56_idct_put(s, frame_current->data[plane] + s->block_offset[b],
448+ s->stride[plane], s->block_coeff[b], s->idct_selector[b]);
431449 }
432450 break;
433451
@@ -439,8 +457,8 @@ static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, in · 5 unmodified lines
439457 s->hdsp.put_pixels_tab[1][0](frame_current->data[plane] + off,
440458 frame_ref->data[plane] + off,
441459 s->stride[plane], 8);
442− s->vp3dsp.idct_add(frame_current->data[plane] + off,
443− s->stride[plane], s->block_coeff[b]);
460+ vp56_idct_add(s, frame_current->data[plane] + off,
461+ s->stride[plane], s->block_coeff[b], s->idct_selector[b]);
444462 }
445463 break;
446464
@@ -457,8 +475,8 @@ static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, in · 10 unmodified lines
457475 plane = ff_vp56_b2p[b+ab];
458476 vp56_mc(s, b, plane, frame_ref->data[plane], s->stride[plane],
459477 16*col+x_off, 16*row+y_off);
460− s->vp3dsp.idct_add(frame_current->data[plane] + s->block_offset[b],
461− s->stride[plane], s->block_coeff[b]);
478+ vp56_idct_add(s, frame_current->data[plane] + s->block_offset[b],
479+ s->stride[plane], s->block_coeff[b], s->idct_selector[b]);
462480 }
463481 break;
464482 }
libavcodec/vp56.h+2−0
@@ -105,6 +105,7 @@ typedef struct VP56Macroblock { · 104 unmodified lines
105105 typedef struct VP56Model {
106106 uint8_t coeff_reorder[64]; /* used in vp6 only */
107107 uint8_t coeff_index_to_pos[64]; /* used in vp6 only */
108+ uint8_t coeff_index_to_idct_selector[64]; /* used in vp6 only */
108109 uint8_t vector_sig[2]; /* delta sign */
109110 uint8_t vector_dct[2]; /* delta coding types */
110111 uint8_t vector_pdi[2][2]; /* predefined delta init */
@@ -157,6 +158,7 @@ struct vp56_context { · 46 unmodified lines
157158 VP56mb mb_type;
158159 VP56Macroblock *macroblocks;
159160 DECLARE_ALIGNED(16, int16_t, block_coeff)[6][64];
161+ int idct_selector[6];
160162
161163 /* motion vectors */
162164 VP56mv mv[6]; /* vectors for each block in MB */
libavcodec/vp6.c+14−0
@@ -194,6 +194,18 @@ static void vp6_coeff_order_table_init(VP56Context *s) · 193 unmodified lines
194194 for (pos=1; pos<64; pos++)
195195 if (s->modelp->coeff_reorder[pos] == i)
196196 s->modelp->coeff_index_to_pos[idx++] = pos;
197+
198+ for (idx = 0; idx < 64; idx++) {
199+ int max = 0;
200+ for (i = 0; i <= idx; i++) {
201+ int v = s->modelp->coeff_index_to_pos[i];
202+ if (v > max)
203+ max = v;
204+ }
205+ if (s->sub_version > 6)
206+ max++;
207+ s->modelp->coeff_index_to_idct_selector[idx] = max;
208+ }
197209 }
198210
199211 static void vp6_default_models_init(VP56Context *s)
@@ -446,6 +458,7 @@ static int vp6_parse_coeff_huffman(VP56Context *s) · 246 unmodified lines
446458 cg = FFMIN(vp6_coeff_groups[coeff_idx], 3);
447459 vlc_coeff = &s->ract_vlc[pt][ct][cg];
448460 }
461+ s->idct_selector[b] = model->coeff_index_to_idct_selector[FFMIN(coeff_idx, 63)];
449462 }
450463 return 0;
451464 }
@@ -527,6 +540,7 @@ static int vp6_parse_coeff(VP56Context *s) · 75 unmodified lines
527540
528541 s->left_block[ff_vp56_b6to4[b]].not_null_dc =
529542 s->above_blocks[s->above_block_idx[b]].not_null_dc = !!s->block_coeff[b][0];
543+ s->idct_selector[b] = model->coeff_index_to_idct_selector[FFMIN(coeff_idx, 63)];
530544 }
531545 return 0;
532546 }
tests/ref/fate/vp6a+86−86
@@ -4,95 +4,95 @@ · 3 unmodified lines
44 #dimensions 0: 300x180
55 #sar 0: 0/1
66 0, 0, 0, 1, 135000, 0x9dceed6d
7−0, 1, 1, 1, 135000, 0x47e5778d
8−0, 2, 2, 1, 135000, 0x5de36599
9−0, 3, 3, 1, 135000, 0x540d8079
10−0, 4, 4, 1, 135000, 0xba9ea534
11−0, 5, 5, 1, 135000, 0xa75088f8
12−0, 6, 6, 1, 135000, 0x7d867559
13−0, 7, 7, 1, 135000, 0xcc678fee
14−0, 8, 8, 1, 135000, 0x79c590b9
15−0, 9, 9, 1, 135000, 0x87789918
16−0, 10, 10, 1, 135000, 0xaa939213
17−0, 11, 11, 1, 135000, 0x3912916d
18−0, 12, 12, 1, 135000, 0x41305d0b
19−0, 13, 13, 1, 135000, 0x2686b5dd
20−0, 14, 14, 1, 135000, 0xa69ae422
21−0, 15, 15, 1, 135000, 0x998a3478
22−0, 16, 16, 1, 135000, 0x5842768d
23−0, 17, 17, 1, 135000, 0xf6a85b16
24−0, 18, 18, 1, 135000, 0x7a5b2708
25−0, 19, 19, 1, 135000, 0x8b2abb63
26−0, 20, 20, 1, 135000, 0x7dc8468b
27−0, 21, 21, 1, 135000, 0x04d85001
28−0, 22, 22, 1, 135000, 0x83e3c647
29−0, 23, 23, 1, 135000, 0xcddd687e
30−0, 24, 24, 1, 135000, 0x818e785e
31−0, 25, 25, 1, 135000, 0x3a915080
32−0, 26, 26, 1, 135000, 0x953d603d
33−0, 27, 27, 1, 135000, 0x79005ebf
34−0, 28, 28, 1, 135000, 0x80afec75
35−0, 29, 29, 1, 135000, 0xfc8e376b
36−0, 30, 30, 1, 135000, 0xf957b7ef
37−0, 31, 31, 1, 135000, 0xe878da44
38−0, 32, 32, 1, 135000, 0xe68ecca3
39−0, 33, 33, 1, 135000, 0x1a2cc7d3
40−0, 34, 34, 1, 135000, 0x4f346a69
41−0, 35, 35, 1, 135000, 0x7a0cf4ac
42−0, 36, 36, 1, 135000, 0x6d4eee7a
43−0, 37, 37, 1, 135000, 0xf0688cbd
44−0, 38, 38, 1, 135000, 0xca4abbbc
45−0, 39, 39, 1, 135000, 0x87669519
46−0, 40, 40, 1, 135000, 0xd090e9d7
47−0, 41, 41, 1, 135000, 0xd7f536c1
48−0, 42, 42, 1, 135000, 0x353ede54
49−0, 43, 43, 1, 135000, 0xbc8f5358
50−0, 44, 44, 1, 135000, 0xb52cd59a
51−0, 45, 45, 1, 135000, 0x0b882eba
52−0, 46, 46, 1, 135000, 0xc544cd54
53−0, 47, 47, 1, 135000, 0x31ca7e73
7+0, 1, 1, 1, 135000, 0x1fc377a4
8+0, 2, 2, 1, 135000, 0x0b4465d4
9+0, 3, 3, 1, 135000, 0x136b8062
10+0, 4, 4, 1, 135000, 0x4691a55c
11+0, 5, 5, 1, 135000, 0x55bb8a19
12+0, 6, 6, 1, 135000, 0xdbf67651
13+0, 7, 7, 1, 135000, 0x6fb19113
14+0, 8, 8, 1, 135000, 0x3edc9227
15+0, 9, 9, 1, 135000, 0x53b39aff
16+0, 10, 10, 1, 135000, 0x699e94b0
17+0, 11, 11, 1, 135000, 0xeedd9388
18+0, 12, 12, 1, 135000, 0x14055f96
19+0, 13, 13, 1, 135000, 0x71fbb5fd
20+0, 14, 14, 1, 135000, 0x6fb4e491
21+0, 15, 15, 1, 135000, 0x35ca3482
22+0, 16, 16, 1, 135000, 0x0c2a7530
23+0, 17, 17, 1, 135000, 0x422c5581
24+0, 18, 18, 1, 135000, 0x19eb2155
25+0, 19, 19, 1, 135000, 0x07e1b114
26+0, 20, 20, 1, 135000, 0xa10f3f81
27+0, 21, 21, 1, 135000, 0x75684dcd
28+0, 22, 22, 1, 135000, 0x1721c337
29+0, 23, 23, 1, 135000, 0x3897667d
30+0, 24, 24, 1, 135000, 0x1232769e
31+0, 25, 25, 1, 135000, 0xec975059
32+0, 26, 26, 1, 135000, 0xb2a46123
33+0, 27, 27, 1, 135000, 0x052c5f72
34+0, 28, 28, 1, 135000, 0x3087eb2f
35+0, 29, 29, 1, 135000, 0xd1e0373a
36+0, 30, 30, 1, 135000, 0x64dab704
37+0, 31, 31, 1, 135000, 0xa44dd89e
38+0, 32, 32, 1, 135000, 0x380ecae9
39+0, 33, 33, 1, 135000, 0x8c6fc4ab
40+0, 34, 34, 1, 135000, 0x02096903
41+0, 35, 35, 1, 135000, 0x11edf432
42+0, 36, 36, 1, 135000, 0x3585ee5f
43+0, 37, 37, 1, 135000, 0xe1338c40
44+0, 38, 38, 1, 135000, 0x5edfbd0c
45+0, 39, 39, 1, 135000, 0x9420965c
46+0, 40, 40, 1, 135000, 0x0caceb17
47+0, 41, 41, 1, 135000, 0x3fdc36c3
48+0, 42, 42, 1, 135000, 0x8a24df14
49+0, 43, 43, 1, 135000, 0x5dc057b0
50+0, 44, 44, 1, 135000, 0xdc5eda65
51+0, 45, 45, 1, 135000, 0x60433612
52+0, 46, 46, 1, 135000, 0x6a91d6c9
53+0, 47, 47, 1, 135000, 0x53598734
5454 0, 48, 48, 1, 135000, 0xb1569ce9
55−0, 49, 49, 1, 135000, 0x8bf4394f
56−0, 50, 50, 1, 135000, 0xf413812a
57−0, 51, 51, 1, 135000, 0xf2fa90ab
58−0, 52, 52, 1, 135000, 0xdcd8b265
59−0, 53, 53, 1, 135000, 0xa89cdba1
60−0, 54, 54, 1, 135000, 0x212b59a5
61−0, 55, 55, 1, 135000, 0x10c589c3
62−0, 56, 56, 1, 135000, 0x432ab5b4
55+0, 49, 49, 1, 135000, 0xf5e83a33
56+0, 50, 50, 1, 135000, 0xebe18275
57+0, 51, 51, 1, 135000, 0x98af9447
58+0, 52, 52, 1, 135000, 0x3f03b765
59+0, 53, 53, 1, 135000, 0x7423e0b8
60+0, 54, 54, 1, 135000, 0x6c1b5faa
61+0, 55, 55, 1, 135000, 0xebf98d52
62+0, 56, 56, 1, 135000, 0xf3dfb8b6
6363 0, 57, 57, 1, 135000, 0x85a9634a
64−0, 58, 58, 1, 135000, 0x10db5b87
65−0, 59, 59, 1, 135000, 0x583145d9
66−0, 60, 60, 1, 135000, 0x7d3a33bd
67−0, 61, 61, 1, 135000, 0xcf592423
68−0, 62, 62, 1, 135000, 0xb59728e5
69−0, 63, 63, 1, 135000, 0x1eeca660
70−0, 64, 64, 1, 135000, 0xff7bcc34
71−0, 65, 65, 1, 135000, 0x0ef8f271
72−0, 66, 66, 1, 135000, 0x8c9ca8ee
73−0, 67, 67, 1, 135000, 0x8a7ece34
74−0, 68, 68, 1, 135000, 0x7d4c3b5d
75−0, 69, 69, 1, 135000, 0x99118f21
76−0, 70, 70, 1, 135000, 0xd97fe7e2
77−0, 71, 71, 1, 135000, 0xf93842f1
78−0, 72, 72, 1, 135000, 0x35c912e8
79−0, 73, 73, 1, 135000, 0x14e59e97
64+0, 58, 58, 1, 135000, 0x4d425bb5
65+0, 59, 59, 1, 135000, 0xfb7945ee
66+0, 60, 60, 1, 135000, 0x593534c1
67+0, 61, 61, 1, 135000, 0xe3fa2517
68+0, 62, 62, 1, 135000, 0x893629e3
69+0, 63, 63, 1, 135000, 0xdc3ca6ad
70+0, 64, 64, 1, 135000, 0x16b1ce27
71+0, 65, 65, 1, 135000, 0x8296f478
72+0, 66, 66, 1, 135000, 0x9e9baaa3
73+0, 67, 67, 1, 135000, 0x994ecd4a
74+0, 68, 68, 1, 135000, 0x40f83b3c
75+0, 69, 69, 1, 135000, 0x0de38f90
76+0, 70, 70, 1, 135000, 0x5455ea6c
77+0, 71, 71, 1, 135000, 0x053e41e8
78+0, 72, 72, 1, 135000, 0x0fee1281
79+0, 73, 73, 1, 135000, 0xa0c9a434
8080 0, 74, 74, 1, 135000, 0x8e4c19aa
81−0, 75, 75, 1, 135000, 0x4adfbc53
82−0, 76, 76, 1, 135000, 0x0613adde
83−0, 77, 77, 1, 135000, 0x8db264ab
84−0, 78, 78, 1, 135000, 0x3948b619
85−0, 79, 79, 1, 135000, 0x843d7c02
86−0, 80, 80, 1, 135000, 0x534fea34
81+0, 75, 75, 1, 135000, 0x34bebc00
82+0, 76, 76, 1, 135000, 0x6670ad6f
83+0, 77, 77, 1, 135000, 0xdbba63fc
84+0, 78, 78, 1, 135000, 0xe34fb839
85+0, 79, 79, 1, 135000, 0xa3ce7eb1
86+0, 80, 80, 1, 135000, 0xdec7ed7d
8787 0, 81, 81, 1, 135000, 0xdb7041bf
88−0, 82, 82, 1, 135000, 0xd0ce1cce
89−0, 83, 83, 1, 135000, 0x3c008335
90−0, 84, 84, 1, 135000, 0xb699208f
91−0, 85, 85, 1, 135000, 0xe07da3ca
92−0, 86, 86, 1, 135000, 0x26331f41
93−0, 87, 87, 1, 135000, 0x4e19fe83
94−0, 88, 88, 1, 135000, 0xaa9a9e45
95−0, 89, 89, 1, 135000, 0x336b7ed0
96−0, 90, 90, 1, 135000, 0xc9bf7611
88+0, 82, 82, 1, 135000, 0x2b1d1dc1
89+0, 83, 83, 1, 135000, 0xaaa384c1
90+0, 84, 84, 1, 135000, 0x37f42217
91+0, 85, 85, 1, 135000, 0x928ba4da
92+0, 86, 86, 1, 135000, 0x2b681f41
93+0, 87, 87, 1, 135000, 0xcbe1ff84
94+0, 88, 88, 1, 135000, 0x47949f24
95+0, 89, 89, 1, 135000, 0x368b7fe5
96+0, 90, 90, 1, 135000, 0x1cf4773b
9797 0, 91, 91, 1, 135000, 0x14c33a35
9898 0, 92, 92, 1, 135000, 0xdc08470e
tests/ref/fate/vp6a-skip_alpha+86−86
@@ -4,95 +4,95 @@ · 3 unmodified lines
44 #dimensions 0: 300x180
55 #sar 0: 0/1
66 0, 0, 0, 1, 81000, 0xcb92962d
7−0, 1, 1, 1, 81000, 0xae381904
8−0, 2, 2, 1, 81000, 0x1fcc0c75
9−0, 3, 3, 1, 81000, 0x023f0c21
10−0, 4, 4, 1, 81000, 0xad691402
11−0, 5, 5, 1, 81000, 0x42390be0
12−0, 6, 6, 1, 81000, 0xc1c10a4e
13−0, 7, 7, 1, 81000, 0x9c0315ac
14−0, 8, 8, 1, 81000, 0xc2a315a7
15−0, 9, 9, 1, 81000, 0x3a631392
16−0, 10, 10, 1, 81000, 0x11591414
17−0, 11, 11, 1, 81000, 0x1a551125
18−0, 12, 12, 1, 81000, 0x2e1efa4f
19−0, 13, 13, 1, 81000, 0x4aa3f016
20−0, 14, 14, 1, 81000, 0x74c029d8
21−0, 15, 15, 1, 81000, 0xdee9a98b
22−0, 16, 16, 1, 81000, 0xdf3502d5
23−0, 17, 17, 1, 81000, 0x4653536b
24−0, 18, 18, 1, 81000, 0x7f658c75
25−0, 19, 19, 1, 81000, 0xab18ff13
26−0, 20, 20, 1, 81000, 0xac2b8f3b
27−0, 21, 21, 1, 81000, 0xd61ff094
28−0, 22, 22, 1, 81000, 0x425bfc2b
29−0, 23, 23, 1, 81000, 0x6be7ecd3
30−0, 24, 24, 1, 81000, 0x0b0ee65b
31−0, 25, 25, 1, 81000, 0x3c6f146b
32−0, 26, 26, 1, 81000, 0x27c4e9c8
33−0, 27, 27, 1, 81000, 0x174022c4
34−0, 28, 28, 1, 81000, 0x3320fe81
35−0, 29, 29, 1, 81000, 0x7a3c342e
36−0, 30, 30, 1, 81000, 0x448b4346
37−0, 31, 31, 1, 81000, 0xd285b23d
38−0, 32, 32, 1, 81000, 0x852ed590
39−0, 33, 33, 1, 81000, 0xc9d3df17
40−0, 34, 34, 1, 81000, 0x4d23727b
41−0, 35, 35, 1, 81000, 0x1fae66cd
42−0, 36, 36, 1, 81000, 0x384d54ab
43−0, 37, 37, 1, 81000, 0x2fee6ba3
44−0, 38, 38, 1, 81000, 0xd7ad6f59
45−0, 39, 39, 1, 81000, 0xaf5e3e76
46−0, 40, 40, 1, 81000, 0x10fceda4
47−0, 41, 41, 1, 81000, 0xb26df92b
48−0, 42, 42, 1, 81000, 0xd6676e08
49−0, 43, 43, 1, 81000, 0xff6b1b95
50−0, 44, 44, 1, 81000, 0x6196d598
51−0, 45, 45, 1, 81000, 0x833ebf1b
52−0, 46, 46, 1, 81000, 0x7b085af1
53−0, 47, 47, 1, 81000, 0xe8f583b4
7+0, 1, 1, 1, 81000, 0x8fef1925
8+0, 2, 2, 1, 81000, 0xf0350cb6
9+0, 3, 3, 1, 81000, 0xa70a0c52
10+0, 4, 4, 1, 81000, 0x21ef1490
11+0, 5, 5, 1, 81000, 0x98bc0c96
12+0, 6, 6, 1, 81000, 0x92380b27
13+0, 7, 7, 1, 81000, 0xbba216cd
14+0, 8, 8, 1, 81000, 0x92a8172b
15+0, 9, 9, 1, 81000, 0xfbc21592
16+0, 10, 10, 1, 81000, 0xdad416a1
17+0, 11, 11, 1, 81000, 0xec4d13aa
18+0, 12, 12, 1, 81000, 0xaf36fcff
19+0, 13, 13, 1, 81000, 0xb4fcf056
20+0, 14, 14, 1, 81000, 0xe3782a3f
21+0, 15, 15, 1, 81000, 0x714daa0b
22+0, 16, 16, 1, 81000, 0xe2770382
23+0, 17, 17, 1, 81000, 0x553253ff
24+0, 18, 18, 1, 81000, 0x928d8c46
25+0, 19, 19, 1, 81000, 0x06c8fe82
26+0, 20, 20, 1, 81000, 0xb8198f5a
27+0, 21, 21, 1, 81000, 0x0029f118
28+0, 22, 22, 1, 81000, 0x6fe7fc6f
29+0, 23, 23, 1, 81000, 0x9165edde
30+0, 24, 24, 1, 81000, 0xe76ae791
31+0, 25, 25, 1, 81000, 0xa4dd145a
32+0, 26, 26, 1, 81000, 0x2d7de9d8
33+0, 27, 27, 1, 81000, 0xe102228b
34+0, 28, 28, 1, 81000, 0xc57ffe0e
35+0, 29, 29, 1, 81000, 0x324434cb
36+0, 30, 30, 1, 81000, 0xedc0433e
37+0, 31, 31, 1, 81000, 0xd42bb18a
38+0, 32, 32, 1, 81000, 0xedb3d561
39+0, 33, 33, 1, 81000, 0x5244de92
40+0, 34, 34, 1, 81000, 0x0bb27280
41+0, 35, 35, 1, 81000, 0xc6116736
42+0, 36, 36, 1, 81000, 0x42f154e2
43+0, 37, 37, 1, 81000, 0xffbd6bf9
44+0, 38, 38, 1, 81000, 0x813170d0
45+0, 39, 39, 1, 81000, 0x430c4040
46+0, 40, 40, 1, 81000, 0x56d1eecb
47+0, 41, 41, 1, 81000, 0xaa4afa12
48+0, 42, 42, 1, 81000, 0x2c3d6fb8
49+0, 43, 43, 1, 81000, 0xfedf1e3e
50+0, 44, 44, 1, 81000, 0xf538d893
51+0, 45, 45, 1, 81000, 0xcc81c3b5
52+0, 46, 46, 1, 81000, 0x59b95fbc
53+0, 47, 47, 1, 81000, 0xb4da87a0
5454 0, 48, 48, 1, 81000, 0x3426d5e4
55−0, 49, 49, 1, 81000, 0x214069ed
56−0, 50, 50, 1, 81000, 0x7dbdfd3f
57−0, 51, 51, 1, 81000, 0xf19b3f45
58−0, 52, 52, 1, 81000, 0x0f05c7e2
59−0, 53, 53, 1, 81000, 0xba94e323
60−0, 54, 54, 1, 81000, 0x0de7b0c2
61−0, 55, 55, 1, 81000, 0xfcf93c55
62−0, 56, 56, 1, 81000, 0x8a8dbd55
55+0, 49, 49, 1, 81000, 0x8d066aae
56+0, 50, 50, 1, 81000, 0x09effe79
57+0, 51, 51, 1, 81000, 0xecc540ae
58+0, 52, 52, 1, 81000, 0x845dc90c
59+0, 53, 53, 1, 81000, 0x9c2fe4d2
60+0, 54, 54, 1, 81000, 0x8887b277
61+0, 55, 55, 1, 81000, 0x3bdc3ca9
62+0, 56, 56, 1, 81000, 0x094fbe27
6363 0, 57, 57, 1, 81000, 0xddf22b97
64−0, 58, 58, 1, 81000, 0x49a830ff
65−0, 59, 59, 1, 81000, 0x82ab2a4b
66−0, 60, 60, 1, 81000, 0xd23420e5
67−0, 61, 61, 1, 81000, 0x7c1017d1
68−0, 62, 62, 1, 81000, 0x9aa61b38
69−0, 63, 63, 1, 81000, 0x2a724a18
70−0, 64, 64, 1, 81000, 0xc18055f2
71−0, 65, 65, 1, 81000, 0xecba3855
72−0, 66, 66, 1, 81000, 0x0eed6b0f
73−0, 67, 67, 1, 81000, 0x4be73816
74−0, 68, 68, 1, 81000, 0xa681214e
75−0, 69, 69, 1, 81000, 0x4958f83d
76−0, 70, 70, 1, 81000, 0xca0f0d61
77−0, 71, 71, 1, 81000, 0x3c453de1
78−0, 72, 72, 1, 81000, 0xff60360a
79−0, 73, 73, 1, 81000, 0xdcef0949
64+0, 58, 58, 1, 81000, 0x31b23156
65+0, 59, 59, 1, 81000, 0xf5bf2ad8
66+0, 60, 60, 1, 81000, 0x4a9321c4
67+0, 61, 61, 1, 81000, 0xdd1b18ca
68+0, 62, 62, 1, 81000, 0x4ece1cdd
69+0, 63, 63, 1, 81000, 0x6a9a4b53
70+0, 64, 64, 1, 81000, 0x6624578b
71+0, 65, 65, 1, 81000, 0x89273a0f
72+0, 66, 66, 1, 81000, 0x9eb56c4c
73+0, 67, 67, 1, 81000, 0xe60238f5
74+0, 68, 68, 1, 81000, 0xbc4c228a
75+0, 69, 69, 1, 81000, 0x3feefa08
76+0, 70, 70, 1, 81000, 0x0d620f37
77+0, 71, 71, 1, 81000, 0x93693fc8
78+0, 72, 72, 1, 81000, 0xfc4b3848
79+0, 73, 73, 1, 81000, 0xd9950bfb
8080 0, 74, 74, 1, 81000, 0xe5e3732d
81−0, 75, 75, 1, 81000, 0x39747fd4
82−0, 76, 76, 1, 81000, 0x6bec70e6
83−0, 77, 77, 1, 81000, 0x7026a8c0
84−0, 78, 78, 1, 81000, 0x92de5b61
85−0, 79, 79, 1, 81000, 0x3f00507f
86−0, 80, 80, 1, 81000, 0x5620c377
81+0, 75, 75, 1, 81000, 0x53517fd2
82+0, 76, 76, 1, 81000, 0xb57c70b0
83+0, 77, 77, 1, 81000, 0x378ea87c
84+0, 78, 78, 1, 81000, 0xfd2b5b58
85+0, 79, 79, 1, 81000, 0x66d45077
86+0, 80, 80, 1, 81000, 0x6e07c3f8
8787 0, 81, 81, 1, 81000, 0x39f5ed38
88−0, 82, 82, 1, 81000, 0x6ee35d67
89−0, 83, 83, 1, 81000, 0x4f99a409
90−0, 84, 84, 1, 81000, 0x0a05b6ea
91−0, 85, 85, 1, 81000, 0xd6c442d9
92−0, 86, 86, 1, 81000, 0x0bb3d2f0
93−0, 87, 87, 1, 81000, 0x6891c5b1
94−0, 88, 88, 1, 81000, 0xf16ba9be
95−0, 89, 89, 1, 81000, 0xba53528e
96−0, 90, 90, 1, 81000, 0xc847de49
88+0, 82, 82, 1, 81000, 0x55b05da7
89+0, 83, 83, 1, 81000, 0x7f78a42c
90+0, 84, 84, 1, 81000, 0x5139b79c
91+0, 85, 85, 1, 81000, 0x4054437d
92+0, 86, 86, 1, 81000, 0x0f9dd327
93+0, 87, 87, 1, 81000, 0xa885c60e
94+0, 88, 88, 1, 81000, 0x37abaa72
95+0, 89, 89, 1, 81000, 0xdab25345
96+0, 90, 90, 1, 81000, 0xbdf4df9d
9797 0, 91, 91, 1, 81000, 0xc5b2e2b0
9898 0, 92, 92, 1, 81000, 0xb0b497ff

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t