* commit '64ed397635ef2666b0ca0c8d8c60a8bc44581d82':
vf_yadif: fix out-of line reads
Conflicts:
libavfilter/vf_yadif.c
tests/ref/fate/filter-yadif-mode0
tests/ref/fate/filter-yadif-mode1
Merged-by: Michael Niedermayer <michaelni@gmx.at>
... | ... |
@@ -34,15 +34,15 @@ |
34 | 34 |
#define PERM_RWP AV_PERM_WRITE | AV_PERM_PRESERVE | AV_PERM_REUSE |
35 | 35 |
|
36 | 36 |
#define CHECK(j)\ |
37 |
- { int score = FFABS(cur[mrefs-1+(j)] - cur[prefs-1-(j)])\ |
|
37 |
+ { int score = FFABS(cur[mrefs + off_left + (j)] - cur[prefs + off_left - (j)])\ |
|
38 | 38 |
+ FFABS(cur[mrefs +(j)] - cur[prefs -(j)])\ |
39 |
- + FFABS(cur[mrefs+1+(j)] - cur[prefs+1-(j)]);\ |
|
39 |
+ + FFABS(cur[mrefs + off_right + (j)] - cur[prefs + off_right - (j)]);\ |
|
40 | 40 |
if (score < spatial_score) {\ |
41 | 41 |
spatial_score= score;\ |
42 | 42 |
spatial_pred= (cur[mrefs +(j)] + cur[prefs -(j)])>>1;\ |
43 | 43 |
|
44 |
-#define FILTER \ |
|
45 |
- for (x = 0; x < w; x++) { \ |
|
44 |
+#define FILTER(start, end) \ |
|
45 |
+ for (x = start; x < end; x++) { \ |
|
46 | 46 |
int c = cur[mrefs]; \ |
47 | 47 |
int d = (prev2[0] + next2[0])>>1; \ |
48 | 48 |
int e = cur[prefs]; \ |
... | ... |
@@ -51,11 +51,15 @@ |
51 | 51 |
int temporal_diff2 =(FFABS(next[mrefs] - c) + FFABS(next[prefs] - e) )>>1; \ |
52 | 52 |
int diff = FFMAX3(temporal_diff0 >> 1, temporal_diff1, temporal_diff2); \ |
53 | 53 |
int spatial_pred = (c+e) >> 1; \ |
54 |
- int spatial_score = FFABS(cur[mrefs - 1] - cur[prefs - 1]) + FFABS(c-e) \ |
|
55 |
- + FFABS(cur[mrefs + 1] - cur[prefs + 1]) - 1; \ |
|
54 |
+ int off_right = (x < w - 1) ? 1 : -1;\ |
|
55 |
+ int off_left = x ? -1 : 1;\ |
|
56 |
+ int spatial_score = FFABS(cur[mrefs + off_left] - cur[prefs + off_left]) + FFABS(c-e) \ |
|
57 |
+ + FFABS(cur[mrefs + off_right] - cur[prefs + off_right]) - 1; \ |
|
56 | 58 |
\ |
57 |
- CHECK(-1) CHECK(-2) }} }} \ |
|
58 |
- CHECK( 1) CHECK( 2) }} }} \ |
|
59 |
+ if (x > 2 && x < w - 3) {\ |
|
60 |
+ CHECK(-1) CHECK(-2) }} }} \ |
|
61 |
+ CHECK( 1) CHECK( 2) }} }} \ |
|
62 |
+ }\ |
|
59 | 63 |
\ |
60 | 64 |
if (mode < 2) { \ |
61 | 65 |
int b = (prev2[2 * mrefs] + next2[2 * mrefs])>>1; \ |
... | ... |
@@ -93,9 +97,34 @@ static void filter_line_c(void *dst1, |
93 | 93 |
uint8_t *prev2 = parity ? prev : cur ; |
94 | 94 |
uint8_t *next2 = parity ? cur : next; |
95 | 95 |
|
96 |
- FILTER |
|
96 |
+ FILTER(0, w) |
|
97 | 97 |
} |
98 | 98 |
|
99 |
+static void filter_edges(void *dst1, void *prev1, void *cur1, void *next1, |
|
100 |
+ int w, int prefs, int mrefs, int parity, int mode, |
|
101 |
+ int l_edge) |
|
102 |
+{ |
|
103 |
+ uint8_t *dst = dst1; |
|
104 |
+ uint8_t *prev = prev1; |
|
105 |
+ uint8_t *cur = cur1; |
|
106 |
+ uint8_t *next = next1; |
|
107 |
+ int x; |
|
108 |
+ uint8_t *prev2 = parity ? prev : cur ; |
|
109 |
+ uint8_t *next2 = parity ? cur : next; |
|
110 |
+ |
|
111 |
+ FILTER(0, l_edge) |
|
112 |
+ |
|
113 |
+ dst = (uint8_t*)dst1 + w - 3; |
|
114 |
+ prev = (uint8_t*)prev1 + w - 3; |
|
115 |
+ cur = (uint8_t*)cur1 + w - 3; |
|
116 |
+ next = (uint8_t*)next1 + w - 3; |
|
117 |
+ prev2 = (uint8_t*)(parity ? prev : cur); |
|
118 |
+ next2 = (uint8_t*)(parity ? cur : next); |
|
119 |
+ |
|
120 |
+ FILTER(w - 3, w) |
|
121 |
+} |
|
122 |
+ |
|
123 |
+ |
|
99 | 124 |
static void filter_line_c_16bit(void *dst1, |
100 | 125 |
void *prev1, void *cur1, void *next1, |
101 | 126 |
int w, int prefs, int mrefs, int parity, |
... | ... |
@@ -111,7 +140,31 @@ static void filter_line_c_16bit(void *dst1, |
111 | 111 |
mrefs /= 2; |
112 | 112 |
prefs /= 2; |
113 | 113 |
|
114 |
- FILTER |
|
114 |
+ FILTER(0, w) |
|
115 |
+} |
|
116 |
+ |
|
117 |
+static void filter_edges_16bit(void *dst1, void *prev1, void *cur1, void *next1, |
|
118 |
+ int w, int prefs, int mrefs, int parity, int mode, |
|
119 |
+ int l_edge) |
|
120 |
+{ |
|
121 |
+ uint16_t *dst = dst1; |
|
122 |
+ uint16_t *prev = prev1; |
|
123 |
+ uint16_t *cur = cur1; |
|
124 |
+ uint16_t *next = next1; |
|
125 |
+ int x; |
|
126 |
+ uint16_t *prev2 = parity ? prev : cur ; |
|
127 |
+ uint16_t *next2 = parity ? cur : next; |
|
128 |
+ |
|
129 |
+ FILTER(0, l_edge) |
|
130 |
+ |
|
131 |
+ dst = (uint16_t*)dst1 + w - 3; |
|
132 |
+ prev = (uint16_t*)prev1 + w - 3; |
|
133 |
+ cur = (uint16_t*)cur1 + w - 3; |
|
134 |
+ next = (uint16_t*)next1 + w - 3; |
|
135 |
+ prev2 = (uint16_t*)(parity ? prev : cur); |
|
136 |
+ next2 = (uint16_t*)(parity ? cur : next); |
|
137 |
+ |
|
138 |
+ FILTER(w - 3, w) |
|
115 | 139 |
} |
116 | 140 |
|
117 | 141 |
static void filter(AVFilterContext *ctx, AVFilterBufferRef *dstpic, |
... | ... |
@@ -126,6 +179,7 @@ static void filter(AVFilterContext *ctx, AVFilterBufferRef *dstpic, |
126 | 126 |
int refs = yadif->cur->linesize[i]; |
127 | 127 |
int absrefs = FFABS(refs); |
128 | 128 |
int df = (yadif->csp->comp[i].depth_minus1 + 8) / 8; |
129 |
+ int l_edge, l_edge_pix; |
|
129 | 130 |
|
130 | 131 |
if (i == 1 || i == 2) { |
131 | 132 |
/* Why is this not part of the per-plane description thing? */ |
... | ... |
@@ -133,11 +187,11 @@ static void filter(AVFilterContext *ctx, AVFilterBufferRef *dstpic, |
133 | 133 |
h >>= yadif->csp->log2_chroma_h; |
134 | 134 |
} |
135 | 135 |
|
136 |
- if(yadif->temp_line_size < absrefs) { |
|
137 |
- av_free(yadif->temp_line); |
|
138 |
- yadif->temp_line = av_mallocz(2*64 + 5*absrefs); |
|
139 |
- yadif->temp_line_size = absrefs; |
|
140 |
- } |
|
136 |
+ /* filtering reads 3 pixels to the left/right; to avoid invalid reads, |
|
137 |
+ * we need to call the c variant which avoids this for border pixels |
|
138 |
+ */ |
|
139 |
+ l_edge = yadif->req_align; |
|
140 |
+ l_edge_pix = l_edge / df; |
|
141 | 141 |
|
142 | 142 |
for (y = 0; y < h; y++) { |
143 | 143 |
if ((y ^ parity) & 1) { |
... | ... |
@@ -146,26 +200,22 @@ static void filter(AVFilterContext *ctx, AVFilterBufferRef *dstpic, |
146 | 146 |
uint8_t *next = &yadif->next->data[i][y * refs]; |
147 | 147 |
uint8_t *dst = &dstpic->data[i][y * dstpic->linesize[i]]; |
148 | 148 |
int mode = y == 1 || y + 2 == h ? 2 : yadif->mode; |
149 |
- int prefs = y+1<h ? refs : -refs; |
|
150 |
- int mrefs = y ?-refs : refs; |
|
151 |
- |
|
152 |
- if(y<=1 || y+2>=h) { |
|
153 |
- uint8_t *tmp = yadif->temp_line + 64 + 2*absrefs; |
|
154 |
- if(mode<2) |
|
155 |
- memcpy(tmp+2*mrefs, cur+2*mrefs, w*df); |
|
156 |
- memcpy(tmp+mrefs, cur+mrefs, w*df); |
|
157 |
- memcpy(tmp , cur , w*df); |
|
158 |
- if(prefs != mrefs) { |
|
159 |
- memcpy(tmp+prefs, cur+prefs, w*df); |
|
160 |
- if(mode<2) |
|
161 |
- memcpy(tmp+2*prefs, cur+2*prefs, w*df); |
|
162 |
- } |
|
163 |
- cur = tmp; |
|
149 |
+ if (yadif->req_align) { |
|
150 |
+ yadif->filter_line(dst + l_edge, prev + l_edge, cur + l_edge, |
|
151 |
+ next + l_edge, w - l_edge_pix - 3, |
|
152 |
+ y + 1 < h ? refs : -refs, |
|
153 |
+ y ? -refs : refs, |
|
154 |
+ parity ^ tff, mode); |
|
155 |
+ yadif->filter_edges(dst, prev, cur, next, w, |
|
156 |
+ y + 1 < h ? refs : -refs, |
|
157 |
+ y ? -refs : refs, |
|
158 |
+ parity ^ tff, mode, l_edge_pix); |
|
159 |
+ } else { |
|
160 |
+ yadif->filter_line(dst, prev, cur, next + l_edge, w, |
|
161 |
+ y + 1 < h ? refs : -refs, |
|
162 |
+ y ? -refs : refs, |
|
163 |
+ parity ^ tff, mode); |
|
164 | 164 |
} |
165 |
- |
|
166 |
- yadif->filter_line(dst, prev, cur, next, w, |
|
167 |
- prefs, mrefs, |
|
168 |
- parity ^ tff, mode); |
|
169 | 165 |
} else { |
170 | 166 |
memcpy(&dstpic->data[i][y * dstpic->linesize[i]], |
171 | 167 |
&yadif->cur->data[i][y * refs], w * df); |
... | ... |
@@ -333,7 +383,6 @@ static av_cold void uninit(AVFilterContext *ctx) |
333 | 333 |
avfilter_unref_bufferp(&yadif->prev); |
334 | 334 |
avfilter_unref_bufferp(&yadif->cur ); |
335 | 335 |
avfilter_unref_bufferp(&yadif->next); |
336 |
- av_freep(&yadif->temp_line); yadif->temp_line_size = 0; |
|
337 | 336 |
av_opt_free(yadif); |
338 | 337 |
} |
339 | 338 |
|
... | ... |
@@ -416,9 +465,11 @@ static int config_props(AVFilterLink *link) |
416 | 416 |
|
417 | 417 |
s->csp = av_pix_fmt_desc_get(link->format); |
418 | 418 |
if (s->csp->comp[0].depth_minus1 / 8 == 1) { |
419 |
- s->filter_line = filter_line_c_16bit; |
|
419 |
+ s->filter_line = filter_line_c_16bit; |
|
420 |
+ s->filter_edges = filter_edges_16bit; |
|
420 | 421 |
} else { |
421 |
- s->filter_line = filter_line_c; |
|
422 |
+ s->filter_line = filter_line_c; |
|
423 |
+ s->filter_edges = filter_edges; |
|
422 | 424 |
|
423 | 425 |
if (ARCH_X86) |
424 | 426 |
ff_yadif_init_x86(s); |
... | ... |
@@ -42,12 +42,18 @@ av_cold void ff_yadif_init_x86(YADIFContext *yadif) |
42 | 42 |
|
43 | 43 |
#if HAVE_YASM |
44 | 44 |
#if ARCH_X86_32 |
45 |
- if (EXTERNAL_MMXEXT(cpu_flags)) |
|
45 |
+ if (EXTERNAL_MMXEXT(cpu_flags)) { |
|
46 | 46 |
yadif->filter_line = ff_yadif_filter_line_mmxext; |
47 |
+ yadif->req_align = 8; |
|
48 |
+ } |
|
47 | 49 |
#endif /* ARCH_X86_32 */ |
48 |
- if (EXTERNAL_SSE2(cpu_flags)) |
|
50 |
+ if (EXTERNAL_SSE2(cpu_flags)) { |
|
49 | 51 |
yadif->filter_line = ff_yadif_filter_line_sse2; |
50 |
- if (EXTERNAL_SSSE3(cpu_flags)) |
|
52 |
+ yadif->req_align = 16; |
|
53 |
+ } |
|
54 |
+ if (EXTERNAL_SSSE3(cpu_flags)) { |
|
51 | 55 |
yadif->filter_line = ff_yadif_filter_line_ssse3; |
56 |
+ yadif->req_align = 16; |
|
57 |
+ } |
|
52 | 58 |
#endif /* HAVE_YASM */ |
53 | 59 |
} |
... | ... |
@@ -53,9 +53,17 @@ typedef struct YADIFContext { |
53 | 53 |
AVFilterBufferRef *next; |
54 | 54 |
AVFilterBufferRef *prev; |
55 | 55 |
AVFilterBufferRef *out; |
56 |
+ |
|
57 |
+ /** |
|
58 |
+ * Required alignment for filter_line |
|
59 |
+ */ |
|
60 |
+ int req_align; |
|
56 | 61 |
void (*filter_line)(void *dst, |
57 | 62 |
void *prev, void *cur, void *next, |
58 | 63 |
int w, int prefs, int mrefs, int parity, int mode); |
64 |
+ void (*filter_edges)(void *dst, void *prev, void *cur, void *next, |
|
65 |
+ int w, int prefs, int mrefs, int parity, int mode, |
|
66 |
+ int l_edge); |
|
59 | 67 |
|
60 | 68 |
const AVPixFmtDescriptor *csp; |
61 | 69 |
int eof; |
... | ... |
@@ -1,32 +1,32 @@ |
1 | 1 |
#tb 0: 1/25 |
2 |
-0, 9, 9, 1, 622080, 0x4440caef |
|
3 |
-0, 10, 10, 1, 622080, 0xce67e69d |
|
4 |
-0, 11, 11, 1, 622080, 0x1dbdc653 |
|
5 |
-0, 12, 12, 1, 622080, 0x55c791d0 |
|
6 |
-0, 13, 13, 1, 622080, 0x8193740b |
|
7 |
-0, 14, 14, 1, 622080, 0x7125970f |
|
8 |
-0, 15, 15, 1, 622080, 0xeb63783a |
|
9 |
-0, 16, 16, 1, 622080, 0x7080590b |
|
10 |
-0, 17, 17, 1, 622080, 0x13f8175b |
|
11 |
-0, 18, 18, 1, 622080, 0x3e550e94 |
|
12 |
-0, 19, 19, 1, 622080, 0x7f9d66f7 |
|
13 |
-0, 20, 20, 1, 622080, 0x068eda80 |
|
14 |
-0, 21, 21, 1, 622080, 0x843997f7 |
|
15 |
-0, 22, 22, 1, 622080, 0x88207ca3 |
|
16 |
-0, 23, 23, 1, 622080, 0x353eed75 |
|
17 |
-0, 24, 24, 1, 622080, 0xf93e92b0 |
|
18 |
-0, 25, 25, 1, 622080, 0xd0811094 |
|
19 |
-0, 26, 26, 1, 622080, 0xb04a3141 |
|
20 |
-0, 27, 27, 1, 622080, 0x4ab84909 |
|
21 |
-0, 28, 28, 1, 622080, 0x4700b8f9 |
|
22 |
-0, 29, 29, 1, 622080, 0x6305aeba |
|
23 |
-0, 30, 30, 1, 622080, 0x153faa3e |
|
24 |
-0, 31, 31, 1, 622080, 0xae724063 |
|
25 |
-0, 32, 32, 1, 622080, 0xbe4fe779 |
|
26 |
-0, 33, 33, 1, 622080, 0x209ed8c7 |
|
27 |
-0, 34, 34, 1, 622080, 0xe2bbac96 |
|
28 |
-0, 35, 35, 1, 622080, 0xe945441e |
|
29 |
-0, 36, 36, 1, 622080, 0x3590bd5d |
|
30 |
-0, 37, 37, 1, 622080, 0x8f3ef716 |
|
31 |
-0, 38, 38, 1, 622080, 0x0109f125 |
|
32 |
-0, 39, 39, 1, 622080, 0x230c373f |
|
2 |
+0, 9, 9, 1, 622080, 0x6331caee |
|
3 |
+0, 10, 10, 1, 622080, 0xa459e690 |
|
4 |
+0, 11, 11, 1, 622080, 0x6429c648 |
|
5 |
+0, 12, 12, 1, 622080, 0xa49891ca |
|
6 |
+0, 13, 13, 1, 622080, 0x2a887404 |
|
7 |
+0, 14, 14, 1, 622080, 0xe8d49705 |
|
8 |
+0, 15, 15, 1, 622080, 0x1b627835 |
|
9 |
+0, 16, 16, 1, 622080, 0x686858fd |
|
10 |
+0, 17, 17, 1, 622080, 0x2675174f |
|
11 |
+0, 18, 18, 1, 622080, 0x78470e7f |
|
12 |
+0, 19, 19, 1, 622080, 0xffb366ec |
|
13 |
+0, 20, 20, 1, 622080, 0xd575da72 |
|
14 |
+0, 21, 21, 1, 622080, 0x5fb297f7 |
|
15 |
+0, 22, 22, 1, 622080, 0xbac77ca0 |
|
16 |
+0, 23, 23, 1, 622080, 0x3276ed72 |
|
17 |
+0, 24, 24, 1, 622080, 0x264092b2 |
|
18 |
+0, 25, 25, 1, 622080, 0x20ba1094 |
|
19 |
+0, 26, 26, 1, 622080, 0x76cc3139 |
|
20 |
+0, 27, 27, 1, 622080, 0x469a4902 |
|
21 |
+0, 28, 28, 1, 622080, 0x0ed7b8f5 |
|
22 |
+0, 29, 29, 1, 622080, 0xdc51aeac |
|
23 |
+0, 30, 30, 1, 622080, 0xee06aa36 |
|
24 |
+0, 31, 31, 1, 622080, 0x7372405f |
|
25 |
+0, 32, 32, 1, 622080, 0x9e0ee776 |
|
26 |
+0, 33, 33, 1, 622080, 0x39e6d8c9 |
|
27 |
+0, 34, 34, 1, 622080, 0x51d9ac9a |
|
28 |
+0, 35, 35, 1, 622080, 0x2b63441d |
|
29 |
+0, 36, 36, 1, 622080, 0x58afbd5e |
|
30 |
+0, 37, 37, 1, 622080, 0xb972f716 |
|
31 |
+0, 38, 38, 1, 622080, 0x6a6df129 |
|
32 |
+0, 39, 39, 1, 622080, 0x28b1373d |
... | ... |
@@ -1,63 +1,63 @@ |
1 | 1 |
#tb 0: 1/50 |
2 |
-0, 18, 18, 1, 622080, 0x4440caef |
|
3 |
-0, 19, 19, 1, 622080, 0xa5cea88b |
|
4 |
-0, 20, 20, 1, 622080, 0xce67e69d |
|
5 |
-0, 21, 21, 1, 622080, 0x9a57891f |
|
6 |
-0, 22, 22, 1, 622080, 0x1dbdc653 |
|
7 |
-0, 23, 23, 1, 622080, 0xc171c0c5 |
|
8 |
-0, 24, 24, 1, 622080, 0x55c791d0 |
|
9 |
-0, 25, 25, 1, 622080, 0x20db9890 |
|
10 |
-0, 26, 26, 1, 622080, 0x8193740b |
|
11 |
-0, 27, 27, 1, 622080, 0xdb181d52 |
|
12 |
-0, 28, 28, 1, 622080, 0x7125970f |
|
13 |
-0, 29, 29, 1, 622080, 0xc2b913d1 |
|
14 |
-0, 30, 30, 1, 622080, 0xeb63783a |
|
15 |
-0, 31, 31, 1, 622080, 0xf1d9c5fb |
|
16 |
-0, 32, 32, 1, 622080, 0x7080590b |
|
17 |
-0, 33, 33, 1, 622080, 0xeda55774 |
|
18 |
-0, 34, 34, 1, 622080, 0x13f8175b |
|
19 |
-0, 35, 35, 1, 622080, 0x01921a16 |
|
20 |
-0, 36, 36, 1, 622080, 0x3e550e94 |
|
21 |
-0, 37, 37, 1, 622080, 0xd5047bc9 |
|
22 |
-0, 38, 38, 1, 622080, 0x7f9d66f7 |
|
23 |
-0, 39, 39, 1, 622080, 0x2fc806ea |
|
24 |
-0, 40, 40, 1, 622080, 0x068eda80 |
|
25 |
-0, 41, 41, 1, 622080, 0xf0e125a7 |
|
26 |
-0, 42, 42, 1, 622080, 0x843997f7 |
|
27 |
-0, 43, 43, 1, 622080, 0x4afe2976 |
|
28 |
-0, 44, 44, 1, 622080, 0x88207ca3 |
|
29 |
-0, 45, 45, 1, 622080, 0x637fcbfe |
|
30 |
-0, 46, 46, 1, 622080, 0x353eed75 |
|
31 |
-0, 47, 47, 1, 622080, 0xd9a8f5ac |
|
32 |
-0, 48, 48, 1, 622080, 0xf93e92b0 |
|
33 |
-0, 49, 49, 1, 622080, 0x4540039f |
|
34 |
-0, 50, 50, 1, 622080, 0xd0811094 |
|
35 |
-0, 51, 51, 1, 622080, 0x3039906f |
|
36 |
-0, 52, 52, 1, 622080, 0xb04a3141 |
|
37 |
-0, 53, 53, 1, 622080, 0xe62d2cfa |
|
38 |
-0, 54, 54, 1, 622080, 0x4ab84909 |
|
39 |
-0, 55, 55, 1, 622080, 0x82de12ee |
|
40 |
-0, 56, 56, 1, 622080, 0x4700b8f9 |
|
41 |
-0, 57, 57, 1, 622080, 0x7e849cc9 |
|
42 |
-0, 58, 58, 1, 622080, 0x6305aeba |
|
43 |
-0, 59, 59, 1, 622080, 0x939bf771 |
|
44 |
-0, 60, 60, 1, 622080, 0x153faa3e |
|
45 |
-0, 61, 61, 1, 622080, 0xb67f3233 |
|
46 |
-0, 62, 62, 1, 622080, 0xae724063 |
|
47 |
-0, 63, 63, 1, 622080, 0xed2b44b3 |
|
48 |
-0, 64, 64, 1, 622080, 0xbe4fe779 |
|
49 |
-0, 65, 65, 1, 622080, 0x380f8563 |
|
50 |
-0, 66, 66, 1, 622080, 0x209ed8c7 |
|
51 |
-0, 67, 67, 1, 622080, 0xb964d70f |
|
52 |
-0, 68, 68, 1, 622080, 0xe2bbac96 |
|
53 |
-0, 69, 69, 1, 622080, 0x4f60f7f4 |
|
54 |
-0, 70, 70, 1, 622080, 0xe945441e |
|
55 |
-0, 71, 71, 1, 622080, 0xded0b740 |
|
56 |
-0, 72, 72, 1, 622080, 0x3590bd5d |
|
57 |
-0, 73, 73, 1, 622080, 0xb9a15294 |
|
58 |
-0, 74, 74, 1, 622080, 0x8f3ef716 |
|
59 |
-0, 75, 75, 1, 622080, 0x3e2301a8 |
|
60 |
-0, 76, 76, 1, 622080, 0x0109f125 |
|
61 |
-0, 77, 77, 1, 622080, 0x5252371e |
|
62 |
-0, 78, 78, 1, 622080, 0x230c373f |
|
63 |
-0, 79, 79, 1, 622080, 0x5a1ab1f1 |
|
2 |
+0, 18, 18, 1, 622080, 0x6331caee |
|
3 |
+0, 19, 19, 1, 622080, 0x625da883 |
|
4 |
+0, 20, 20, 1, 622080, 0xa459e690 |
|
5 |
+0, 21, 21, 1, 622080, 0xce5d891e |
|
6 |
+0, 22, 22, 1, 622080, 0x6429c648 |
|
7 |
+0, 23, 23, 1, 622080, 0x608cc0ba |
|
8 |
+0, 24, 24, 1, 622080, 0xa49891ca |
|
9 |
+0, 25, 25, 1, 622080, 0x9721987f |
|
10 |
+0, 26, 26, 1, 622080, 0x2a887404 |
|
11 |
+0, 27, 27, 1, 622080, 0x60d71d47 |
|
12 |
+0, 28, 28, 1, 622080, 0xe8d49705 |
|
13 |
+0, 29, 29, 1, 622080, 0x821e13cb |
|
14 |
+0, 30, 30, 1, 622080, 0x1b627835 |
|
15 |
+0, 31, 31, 1, 622080, 0x1806c5f4 |
|
16 |
+0, 32, 32, 1, 622080, 0x686858fd |
|
17 |
+0, 33, 33, 1, 622080, 0xab865773 |
|
18 |
+0, 34, 34, 1, 622080, 0x2675174f |
|
19 |
+0, 35, 35, 1, 622080, 0x43a61a14 |
|
20 |
+0, 36, 36, 1, 622080, 0x78470e7f |
|
21 |
+0, 37, 37, 1, 622080, 0xeb877bc6 |
|
22 |
+0, 38, 38, 1, 622080, 0xffb366ec |
|
23 |
+0, 39, 39, 1, 622080, 0xda0906e7 |
|
24 |
+0, 40, 40, 1, 622080, 0xd575da72 |
|
25 |
+0, 41, 41, 1, 622080, 0x23ae25a4 |
|
26 |
+0, 42, 42, 1, 622080, 0x5fb297f7 |
|
27 |
+0, 43, 43, 1, 622080, 0x99b32978 |
|
28 |
+0, 44, 44, 1, 622080, 0xbac77ca0 |
|
29 |
+0, 45, 45, 1, 622080, 0xc1cdcbf9 |
|
30 |
+0, 46, 46, 1, 622080, 0x3276ed72 |
|
31 |
+0, 47, 47, 1, 622080, 0x4061f5ab |
|
32 |
+0, 48, 48, 1, 622080, 0x264092b2 |
|
33 |
+0, 49, 49, 1, 622080, 0xa4e2039e |
|
34 |
+0, 50, 50, 1, 622080, 0x20ba1094 |
|
35 |
+0, 51, 51, 1, 622080, 0x984e906e |
|
36 |
+0, 52, 52, 1, 622080, 0x76cc3139 |
|
37 |
+0, 53, 53, 1, 622080, 0xf70e2cf6 |
|
38 |
+0, 54, 54, 1, 622080, 0x469a4902 |
|
39 |
+0, 55, 55, 1, 622080, 0x235312e6 |
|
40 |
+0, 56, 56, 1, 622080, 0x0ed7b8f5 |
|
41 |
+0, 57, 57, 1, 622080, 0xd0269cc3 |
|
42 |
+0, 58, 58, 1, 622080, 0xdc51aeac |
|
43 |
+0, 59, 59, 1, 622080, 0x1aa5f76e |
|
44 |
+0, 60, 60, 1, 622080, 0xee06aa36 |
|
45 |
+0, 61, 61, 1, 622080, 0xa7103230 |
|
46 |
+0, 62, 62, 1, 622080, 0x7372405f |
|
47 |
+0, 63, 63, 1, 622080, 0x8d7a44b5 |
|
48 |
+0, 64, 64, 1, 622080, 0x9e0ee776 |
|
49 |
+0, 65, 65, 1, 622080, 0xd41e8560 |
|
50 |
+0, 66, 66, 1, 622080, 0x39e6d8c9 |
|
51 |
+0, 67, 67, 1, 622080, 0x7a23d70c |
|
52 |
+0, 68, 68, 1, 622080, 0x51d9ac9a |
|
53 |
+0, 69, 69, 1, 622080, 0x8eacf7f2 |
|
54 |
+0, 70, 70, 1, 622080, 0x2b63441d |
|
55 |
+0, 71, 71, 1, 622080, 0x9f71b742 |
|
56 |
+0, 72, 72, 1, 622080, 0x58afbd5e |
|
57 |
+0, 73, 73, 1, 622080, 0x4d645292 |
|
58 |
+0, 74, 74, 1, 622080, 0xb972f716 |
|
59 |
+0, 75, 75, 1, 622080, 0xbb5d01a2 |
|
60 |
+0, 76, 76, 1, 622080, 0x6a6df129 |
|
61 |
+0, 77, 77, 1, 622080, 0x9e45371e |
|
62 |
+0, 78, 78, 1, 622080, 0x28b1373d |
|
63 |
+0, 79, 79, 1, 622080, 0xa1cdb1f2 |