xref: /aosp_15_r20/external/zlib/contrib/tests/utils_unittest.cc (revision 86ee64e75fa5f8bce2c8c356138035642429cd05)
1*86ee64e7SAndroid Build Coastguard Worker // Copyright 2020 The Chromium Authors
2*86ee64e7SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*86ee64e7SAndroid Build Coastguard Worker // found in the Chromium source repository LICENSE file.
4*86ee64e7SAndroid Build Coastguard Worker 
5*86ee64e7SAndroid Build Coastguard Worker #include "infcover.h"
6*86ee64e7SAndroid Build Coastguard Worker 
7*86ee64e7SAndroid Build Coastguard Worker #include <cstddef>
8*86ee64e7SAndroid Build Coastguard Worker #include <vector>
9*86ee64e7SAndroid Build Coastguard Worker 
10*86ee64e7SAndroid Build Coastguard Worker #include "compression_utils_portable.h"
11*86ee64e7SAndroid Build Coastguard Worker #include "gtest.h"
12*86ee64e7SAndroid Build Coastguard Worker 
13*86ee64e7SAndroid Build Coastguard Worker #if !defined(CMAKE_STANDALONE_UNITTESTS)
14*86ee64e7SAndroid Build Coastguard Worker #include "base/files/file_path.h"
15*86ee64e7SAndroid Build Coastguard Worker #include "base/files/scoped_temp_dir.h"
16*86ee64e7SAndroid Build Coastguard Worker 
17*86ee64e7SAndroid Build Coastguard Worker #include "third_party/zlib/contrib/minizip/unzip.h"
18*86ee64e7SAndroid Build Coastguard Worker #include "third_party/zlib/contrib/minizip/zip.h"
19*86ee64e7SAndroid Build Coastguard Worker #endif
20*86ee64e7SAndroid Build Coastguard Worker 
21*86ee64e7SAndroid Build Coastguard Worker #include "zlib.h"
22*86ee64e7SAndroid Build Coastguard Worker 
TestPayloads(size_t input_size,zlib_internal::WrapperType type,const int compression_level=Z_DEFAULT_COMPRESSION)23*86ee64e7SAndroid Build Coastguard Worker void TestPayloads(size_t input_size, zlib_internal::WrapperType type,
24*86ee64e7SAndroid Build Coastguard Worker                   const int compression_level = Z_DEFAULT_COMPRESSION) {
25*86ee64e7SAndroid Build Coastguard Worker   std::vector<unsigned char> input;
26*86ee64e7SAndroid Build Coastguard Worker   input.reserve(input_size);
27*86ee64e7SAndroid Build Coastguard Worker   for (size_t i = 1; i <= input_size; ++i)
28*86ee64e7SAndroid Build Coastguard Worker     input.push_back(i & 0xff);
29*86ee64e7SAndroid Build Coastguard Worker 
30*86ee64e7SAndroid Build Coastguard Worker   // If it is big enough for GZIP, will work for other wrappers.
31*86ee64e7SAndroid Build Coastguard Worker   std::vector<unsigned char> compressed(
32*86ee64e7SAndroid Build Coastguard Worker       zlib_internal::GzipExpectedCompressedSize(input.size()));
33*86ee64e7SAndroid Build Coastguard Worker   std::vector<unsigned char> decompressed(input.size());
34*86ee64e7SAndroid Build Coastguard Worker 
35*86ee64e7SAndroid Build Coastguard Worker   // Libcores's java/util/zip/Deflater default settings: ZLIB,
36*86ee64e7SAndroid Build Coastguard Worker   // DEFAULT_COMPRESSION and DEFAULT_STRATEGY.
37*86ee64e7SAndroid Build Coastguard Worker   unsigned long compressed_size = static_cast<unsigned long>(compressed.size());
38*86ee64e7SAndroid Build Coastguard Worker   int result = zlib_internal::CompressHelper(
39*86ee64e7SAndroid Build Coastguard Worker       type, compressed.data(), &compressed_size, input.data(), input.size(),
40*86ee64e7SAndroid Build Coastguard Worker       compression_level, nullptr, nullptr);
41*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(result, Z_OK);
42*86ee64e7SAndroid Build Coastguard Worker 
43*86ee64e7SAndroid Build Coastguard Worker   unsigned long decompressed_size =
44*86ee64e7SAndroid Build Coastguard Worker       static_cast<unsigned long>(decompressed.size());
45*86ee64e7SAndroid Build Coastguard Worker   result = zlib_internal::UncompressHelper(type, decompressed.data(),
46*86ee64e7SAndroid Build Coastguard Worker                                            &decompressed_size,
47*86ee64e7SAndroid Build Coastguard Worker                                            compressed.data(), compressed_size);
48*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(result, Z_OK);
49*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(input, decompressed);
50*86ee64e7SAndroid Build Coastguard Worker }
51*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,ZlibWrapper)52*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, ZlibWrapper) {
53*86ee64e7SAndroid Build Coastguard Worker   // Minimal ZLIB wrapped short stream size is about 8 bytes.
54*86ee64e7SAndroid Build Coastguard Worker   for (size_t i = 1; i < 1024; ++i)
55*86ee64e7SAndroid Build Coastguard Worker     TestPayloads(i, zlib_internal::WrapperType::ZLIB);
56*86ee64e7SAndroid Build Coastguard Worker }
57*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,GzipWrapper)58*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, GzipWrapper) {
59*86ee64e7SAndroid Build Coastguard Worker   // GZIP should be 12 bytes bigger than ZLIB wrapper.
60*86ee64e7SAndroid Build Coastguard Worker   for (size_t i = 1; i < 1024; ++i)
61*86ee64e7SAndroid Build Coastguard Worker     TestPayloads(i, zlib_internal::WrapperType::GZIP);
62*86ee64e7SAndroid Build Coastguard Worker }
63*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,RawWrapper)64*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, RawWrapper) {
65*86ee64e7SAndroid Build Coastguard Worker   // RAW has no wrapper (V8 Blobs is a known user), size
66*86ee64e7SAndroid Build Coastguard Worker   // should be payload_size + 2 for short payloads.
67*86ee64e7SAndroid Build Coastguard Worker   for (size_t i = 1; i < 1024; ++i)
68*86ee64e7SAndroid Build Coastguard Worker     TestPayloads(i, zlib_internal::WrapperType::ZRAW);
69*86ee64e7SAndroid Build Coastguard Worker }
70*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,LargePayloads)71*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, LargePayloads) {
72*86ee64e7SAndroid Build Coastguard Worker   static const size_t lengths[] = { 6000, 8000, 10'000, 15'000, 20'000, 30'000,
73*86ee64e7SAndroid Build Coastguard Worker                                     50'000, 100'000, 150'000, 2'500'000,
74*86ee64e7SAndroid Build Coastguard Worker                                     5'000'000, 10'000'000, 20'000'000 };
75*86ee64e7SAndroid Build Coastguard Worker 
76*86ee64e7SAndroid Build Coastguard Worker   for (size_t length: lengths) {
77*86ee64e7SAndroid Build Coastguard Worker     TestPayloads(length, zlib_internal::WrapperType::ZLIB);
78*86ee64e7SAndroid Build Coastguard Worker     TestPayloads(length, zlib_internal::WrapperType::GZIP);
79*86ee64e7SAndroid Build Coastguard Worker   }
80*86ee64e7SAndroid Build Coastguard Worker }
81*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,CompressionLevels)82*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, CompressionLevels) {
83*86ee64e7SAndroid Build Coastguard Worker   static const int levels[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
84*86ee64e7SAndroid Build Coastguard Worker   for (int level: levels) {
85*86ee64e7SAndroid Build Coastguard Worker     TestPayloads(5'000'000, zlib_internal::WrapperType::ZLIB, level);
86*86ee64e7SAndroid Build Coastguard Worker     TestPayloads(5'000'000, zlib_internal::WrapperType::GZIP, level);
87*86ee64e7SAndroid Build Coastguard Worker   }
88*86ee64e7SAndroid Build Coastguard Worker }
89*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,InflateCover)90*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, InflateCover) {
91*86ee64e7SAndroid Build Coastguard Worker   cover_support();
92*86ee64e7SAndroid Build Coastguard Worker   cover_wrap();
93*86ee64e7SAndroid Build Coastguard Worker   cover_back();
94*86ee64e7SAndroid Build Coastguard Worker   cover_inflate();
95*86ee64e7SAndroid Build Coastguard Worker   // TODO(cavalcantii): enable this last test.
96*86ee64e7SAndroid Build Coastguard Worker   // cover_trees();
97*86ee64e7SAndroid Build Coastguard Worker   cover_fast();
98*86ee64e7SAndroid Build Coastguard Worker }
99*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,InflateCVE)100*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, InflateCVE) {
101*86ee64e7SAndroid Build Coastguard Worker   cover_CVE_2022_37434();
102*86ee64e7SAndroid Build Coastguard Worker }
103*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,DeflateStored)104*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, DeflateStored) {
105*86ee64e7SAndroid Build Coastguard Worker   const int no_compression = 0;
106*86ee64e7SAndroid Build Coastguard Worker   const zlib_internal::WrapperType type = zlib_internal::WrapperType::GZIP;
107*86ee64e7SAndroid Build Coastguard Worker   std::vector<unsigned char> input(1 << 10, 42);
108*86ee64e7SAndroid Build Coastguard Worker   std::vector<unsigned char> compressed(
109*86ee64e7SAndroid Build Coastguard Worker       zlib_internal::GzipExpectedCompressedSize(input.size()));
110*86ee64e7SAndroid Build Coastguard Worker   std::vector<unsigned char> decompressed(input.size());
111*86ee64e7SAndroid Build Coastguard Worker   unsigned long compressed_size = static_cast<unsigned long>(compressed.size());
112*86ee64e7SAndroid Build Coastguard Worker   int result = zlib_internal::CompressHelper(
113*86ee64e7SAndroid Build Coastguard Worker       type, compressed.data(), &compressed_size, input.data(), input.size(),
114*86ee64e7SAndroid Build Coastguard Worker       no_compression, nullptr, nullptr);
115*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(result, Z_OK);
116*86ee64e7SAndroid Build Coastguard Worker 
117*86ee64e7SAndroid Build Coastguard Worker   unsigned long decompressed_size =
118*86ee64e7SAndroid Build Coastguard Worker       static_cast<unsigned long>(decompressed.size());
119*86ee64e7SAndroid Build Coastguard Worker   result = zlib_internal::UncompressHelper(type, decompressed.data(),
120*86ee64e7SAndroid Build Coastguard Worker                                            &decompressed_size,
121*86ee64e7SAndroid Build Coastguard Worker                                            compressed.data(), compressed_size);
122*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(result, Z_OK);
123*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(input, decompressed);
124*86ee64e7SAndroid Build Coastguard Worker }
125*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,StreamingInflate)126*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, StreamingInflate) {
127*86ee64e7SAndroid Build Coastguard Worker   uint8_t comp_buf[4096], decomp_buf[4096];
128*86ee64e7SAndroid Build Coastguard Worker   z_stream comp_strm, decomp_strm;
129*86ee64e7SAndroid Build Coastguard Worker   int ret;
130*86ee64e7SAndroid Build Coastguard Worker 
131*86ee64e7SAndroid Build Coastguard Worker   std::vector<uint8_t> src;
132*86ee64e7SAndroid Build Coastguard Worker   for (size_t i = 0; i < 1000; i++) {
133*86ee64e7SAndroid Build Coastguard Worker     for (size_t j = 0; j < 40; j++) {
134*86ee64e7SAndroid Build Coastguard Worker       src.push_back(j);
135*86ee64e7SAndroid Build Coastguard Worker     }
136*86ee64e7SAndroid Build Coastguard Worker   }
137*86ee64e7SAndroid Build Coastguard Worker 
138*86ee64e7SAndroid Build Coastguard Worker   // Deflate src into comp_buf.
139*86ee64e7SAndroid Build Coastguard Worker   comp_strm.zalloc = Z_NULL;
140*86ee64e7SAndroid Build Coastguard Worker   comp_strm.zfree = Z_NULL;
141*86ee64e7SAndroid Build Coastguard Worker   comp_strm.opaque = Z_NULL;
142*86ee64e7SAndroid Build Coastguard Worker   ret = deflateInit(&comp_strm, Z_BEST_COMPRESSION);
143*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
144*86ee64e7SAndroid Build Coastguard Worker   comp_strm.next_out = comp_buf;
145*86ee64e7SAndroid Build Coastguard Worker   comp_strm.avail_out = sizeof(comp_buf);
146*86ee64e7SAndroid Build Coastguard Worker   comp_strm.next_in = src.data();
147*86ee64e7SAndroid Build Coastguard Worker   comp_strm.avail_in = src.size();
148*86ee64e7SAndroid Build Coastguard Worker   ret = deflate(&comp_strm, Z_FINISH);
149*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_STREAM_END);
150*86ee64e7SAndroid Build Coastguard Worker   size_t comp_sz = sizeof(comp_buf) - comp_strm.avail_out;
151*86ee64e7SAndroid Build Coastguard Worker 
152*86ee64e7SAndroid Build Coastguard Worker   // Inflate comp_buf one 4096-byte buffer at a time.
153*86ee64e7SAndroid Build Coastguard Worker   decomp_strm.zalloc = Z_NULL;
154*86ee64e7SAndroid Build Coastguard Worker   decomp_strm.zfree = Z_NULL;
155*86ee64e7SAndroid Build Coastguard Worker   decomp_strm.opaque = Z_NULL;
156*86ee64e7SAndroid Build Coastguard Worker   ret = inflateInit(&decomp_strm);
157*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
158*86ee64e7SAndroid Build Coastguard Worker   decomp_strm.next_in = comp_buf;
159*86ee64e7SAndroid Build Coastguard Worker   decomp_strm.avail_in = comp_sz;
160*86ee64e7SAndroid Build Coastguard Worker 
161*86ee64e7SAndroid Build Coastguard Worker   while (decomp_strm.avail_in > 0) {
162*86ee64e7SAndroid Build Coastguard Worker     decomp_strm.next_out = decomp_buf;
163*86ee64e7SAndroid Build Coastguard Worker     decomp_strm.avail_out = sizeof(decomp_buf);
164*86ee64e7SAndroid Build Coastguard Worker     ret = inflate(&decomp_strm, Z_FINISH);
165*86ee64e7SAndroid Build Coastguard Worker     ASSERT_TRUE(ret == Z_OK || ret == Z_STREAM_END || ret == Z_BUF_ERROR);
166*86ee64e7SAndroid Build Coastguard Worker 
167*86ee64e7SAndroid Build Coastguard Worker     // Verify the output bytes.
168*86ee64e7SAndroid Build Coastguard Worker     size_t num_out = sizeof(decomp_buf) - decomp_strm.avail_out;
169*86ee64e7SAndroid Build Coastguard Worker     for (size_t i = 0; i < num_out; i++) {
170*86ee64e7SAndroid Build Coastguard Worker       EXPECT_EQ(decomp_buf[i], src[decomp_strm.total_out - num_out + i]);
171*86ee64e7SAndroid Build Coastguard Worker     }
172*86ee64e7SAndroid Build Coastguard Worker   }
173*86ee64e7SAndroid Build Coastguard Worker 
174*86ee64e7SAndroid Build Coastguard Worker   // Cleanup memory (i.e. makes ASAN bot happy).
175*86ee64e7SAndroid Build Coastguard Worker   ret = deflateEnd(&comp_strm);
176*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(ret, Z_OK);
177*86ee64e7SAndroid Build Coastguard Worker   ret = inflateEnd(&decomp_strm);
178*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(ret, Z_OK);
179*86ee64e7SAndroid Build Coastguard Worker }
180*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,CRCHashBitsCollision)181*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, CRCHashBitsCollision) {
182*86ee64e7SAndroid Build Coastguard Worker   // The CRC32c of the hex sequences 2a,14,14,14 and 2a,14,db,14 have the same
183*86ee64e7SAndroid Build Coastguard Worker   // lower 9 bits. Since longest_match doesn't check match[2], a bad match could
184*86ee64e7SAndroid Build Coastguard Worker   // be chosen when the number of hash bits is <= 9. For this reason, the number
185*86ee64e7SAndroid Build Coastguard Worker   // of hash bits must be set higher, regardless of the memlevel parameter, when
186*86ee64e7SAndroid Build Coastguard Worker   // using CRC32c hashing for string matching. See https://crbug.com/1113596
187*86ee64e7SAndroid Build Coastguard Worker 
188*86ee64e7SAndroid Build Coastguard Worker   std::vector<uint8_t> src = {
189*86ee64e7SAndroid Build Coastguard Worker       // Random byte; zlib doesn't match at offset 0.
190*86ee64e7SAndroid Build Coastguard Worker       123,
191*86ee64e7SAndroid Build Coastguard Worker 
192*86ee64e7SAndroid Build Coastguard Worker       // This will look like 5-byte match.
193*86ee64e7SAndroid Build Coastguard Worker       0x2a,
194*86ee64e7SAndroid Build Coastguard Worker       0x14,
195*86ee64e7SAndroid Build Coastguard Worker       0xdb,
196*86ee64e7SAndroid Build Coastguard Worker       0x14,
197*86ee64e7SAndroid Build Coastguard Worker       0x15,
198*86ee64e7SAndroid Build Coastguard Worker 
199*86ee64e7SAndroid Build Coastguard Worker       // Offer a 4-byte match to bump the next expected match length to 5.
200*86ee64e7SAndroid Build Coastguard Worker       0x2a,
201*86ee64e7SAndroid Build Coastguard Worker       0x14,
202*86ee64e7SAndroid Build Coastguard Worker       0x14,
203*86ee64e7SAndroid Build Coastguard Worker       0x14,
204*86ee64e7SAndroid Build Coastguard Worker 
205*86ee64e7SAndroid Build Coastguard Worker       0x2a,
206*86ee64e7SAndroid Build Coastguard Worker       0x14,
207*86ee64e7SAndroid Build Coastguard Worker       0x14,
208*86ee64e7SAndroid Build Coastguard Worker       0x14,
209*86ee64e7SAndroid Build Coastguard Worker       0x15,
210*86ee64e7SAndroid Build Coastguard Worker   };
211*86ee64e7SAndroid Build Coastguard Worker 
212*86ee64e7SAndroid Build Coastguard Worker   z_stream stream;
213*86ee64e7SAndroid Build Coastguard Worker   stream.zalloc = nullptr;
214*86ee64e7SAndroid Build Coastguard Worker   stream.zfree = nullptr;
215*86ee64e7SAndroid Build Coastguard Worker 
216*86ee64e7SAndroid Build Coastguard Worker   // Using a low memlevel to try to reduce the number of hash bits. Negative
217*86ee64e7SAndroid Build Coastguard Worker   // windowbits means raw deflate, i.e. without the zlib header.
218*86ee64e7SAndroid Build Coastguard Worker   int ret = deflateInit2(&stream, /*comp level*/ 2, /*method*/ Z_DEFLATED,
219*86ee64e7SAndroid Build Coastguard Worker                          /*windowbits*/ -15, /*memlevel*/ 2,
220*86ee64e7SAndroid Build Coastguard Worker                          /*strategy*/ Z_DEFAULT_STRATEGY);
221*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
222*86ee64e7SAndroid Build Coastguard Worker   std::vector<uint8_t> compressed(100, '\0');
223*86ee64e7SAndroid Build Coastguard Worker   stream.next_out = compressed.data();
224*86ee64e7SAndroid Build Coastguard Worker   stream.avail_out = compressed.size();
225*86ee64e7SAndroid Build Coastguard Worker   stream.next_in = src.data();
226*86ee64e7SAndroid Build Coastguard Worker   stream.avail_in = src.size();
227*86ee64e7SAndroid Build Coastguard Worker   ret = deflate(&stream, Z_FINISH);
228*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_STREAM_END);
229*86ee64e7SAndroid Build Coastguard Worker   compressed.resize(compressed.size() - stream.avail_out);
230*86ee64e7SAndroid Build Coastguard Worker   deflateEnd(&stream);
231*86ee64e7SAndroid Build Coastguard Worker 
232*86ee64e7SAndroid Build Coastguard Worker   ret = inflateInit2(&stream, /*windowbits*/ -15);
233*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
234*86ee64e7SAndroid Build Coastguard Worker   std::vector<uint8_t> decompressed(src.size(), '\0');
235*86ee64e7SAndroid Build Coastguard Worker   stream.next_in = compressed.data();
236*86ee64e7SAndroid Build Coastguard Worker   stream.avail_in = compressed.size();
237*86ee64e7SAndroid Build Coastguard Worker   stream.next_out = decompressed.data();
238*86ee64e7SAndroid Build Coastguard Worker   stream.avail_out = decompressed.size();
239*86ee64e7SAndroid Build Coastguard Worker   ret = inflate(&stream, Z_FINISH);
240*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_STREAM_END);
241*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(0U, stream.avail_out);
242*86ee64e7SAndroid Build Coastguard Worker   inflateEnd(&stream);
243*86ee64e7SAndroid Build Coastguard Worker 
244*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(src, decompressed);
245*86ee64e7SAndroid Build Coastguard Worker }
246*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,CRCHashAssert)247*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, CRCHashAssert) {
248*86ee64e7SAndroid Build Coastguard Worker   // The CRC32c of the hex sequences ff,ff,5e,6f and ff,ff,13,ff have the same
249*86ee64e7SAndroid Build Coastguard Worker   // lower 15 bits. This means longest_match's assert that match[2] == scan[2]
250*86ee64e7SAndroid Build Coastguard Worker   // won't hold. However, such hash collisions are only possible when one of the
251*86ee64e7SAndroid Build Coastguard Worker   // other four bytes also mismatch. This tests that zlib's assert handles this
252*86ee64e7SAndroid Build Coastguard Worker   // case.
253*86ee64e7SAndroid Build Coastguard Worker 
254*86ee64e7SAndroid Build Coastguard Worker   std::vector<uint8_t> src = {
255*86ee64e7SAndroid Build Coastguard Worker       // Random byte; zlib doesn't match at offset 0.
256*86ee64e7SAndroid Build Coastguard Worker       123,
257*86ee64e7SAndroid Build Coastguard Worker 
258*86ee64e7SAndroid Build Coastguard Worker       // This has the same hash as the last byte sequence, and the first two and
259*86ee64e7SAndroid Build Coastguard Worker       // last two bytes match; though the third and the fourth don't.
260*86ee64e7SAndroid Build Coastguard Worker       0xff,
261*86ee64e7SAndroid Build Coastguard Worker       0xff,
262*86ee64e7SAndroid Build Coastguard Worker       0x5e,
263*86ee64e7SAndroid Build Coastguard Worker       0x6f,
264*86ee64e7SAndroid Build Coastguard Worker       0x12,
265*86ee64e7SAndroid Build Coastguard Worker       0x34,
266*86ee64e7SAndroid Build Coastguard Worker 
267*86ee64e7SAndroid Build Coastguard Worker       // Offer a 5-byte match to bump the next expected match length to 6
268*86ee64e7SAndroid Build Coastguard Worker       // (because the two first and two last bytes need to match).
269*86ee64e7SAndroid Build Coastguard Worker       0xff,
270*86ee64e7SAndroid Build Coastguard Worker       0xff,
271*86ee64e7SAndroid Build Coastguard Worker       0x13,
272*86ee64e7SAndroid Build Coastguard Worker       0xff,
273*86ee64e7SAndroid Build Coastguard Worker       0x12,
274*86ee64e7SAndroid Build Coastguard Worker 
275*86ee64e7SAndroid Build Coastguard Worker       0xff,
276*86ee64e7SAndroid Build Coastguard Worker       0xff,
277*86ee64e7SAndroid Build Coastguard Worker       0x13,
278*86ee64e7SAndroid Build Coastguard Worker       0xff,
279*86ee64e7SAndroid Build Coastguard Worker       0x12,
280*86ee64e7SAndroid Build Coastguard Worker       0x34,
281*86ee64e7SAndroid Build Coastguard Worker   };
282*86ee64e7SAndroid Build Coastguard Worker 
283*86ee64e7SAndroid Build Coastguard Worker   z_stream stream;
284*86ee64e7SAndroid Build Coastguard Worker   stream.zalloc = nullptr;
285*86ee64e7SAndroid Build Coastguard Worker   stream.zfree = nullptr;
286*86ee64e7SAndroid Build Coastguard Worker 
287*86ee64e7SAndroid Build Coastguard Worker   int ret = deflateInit2(&stream, /*comp level*/ 5, /*method*/ Z_DEFLATED,
288*86ee64e7SAndroid Build Coastguard Worker                          /*windowbits*/ -15, /*memlevel*/ 8,
289*86ee64e7SAndroid Build Coastguard Worker                          /*strategy*/ Z_DEFAULT_STRATEGY);
290*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
291*86ee64e7SAndroid Build Coastguard Worker   std::vector<uint8_t> compressed(100, '\0');
292*86ee64e7SAndroid Build Coastguard Worker   stream.next_out = compressed.data();
293*86ee64e7SAndroid Build Coastguard Worker   stream.avail_out = compressed.size();
294*86ee64e7SAndroid Build Coastguard Worker   stream.next_in = src.data();
295*86ee64e7SAndroid Build Coastguard Worker   stream.avail_in = src.size();
296*86ee64e7SAndroid Build Coastguard Worker   ret = deflate(&stream, Z_FINISH);
297*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_STREAM_END);
298*86ee64e7SAndroid Build Coastguard Worker   compressed.resize(compressed.size() - stream.avail_out);
299*86ee64e7SAndroid Build Coastguard Worker   deflateEnd(&stream);
300*86ee64e7SAndroid Build Coastguard Worker 
301*86ee64e7SAndroid Build Coastguard Worker   ret = inflateInit2(&stream, /*windowbits*/ -15);
302*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
303*86ee64e7SAndroid Build Coastguard Worker   std::vector<uint8_t> decompressed(src.size(), '\0');
304*86ee64e7SAndroid Build Coastguard Worker   stream.next_in = compressed.data();
305*86ee64e7SAndroid Build Coastguard Worker   stream.avail_in = compressed.size();
306*86ee64e7SAndroid Build Coastguard Worker   stream.next_out = decompressed.data();
307*86ee64e7SAndroid Build Coastguard Worker   stream.avail_out = decompressed.size();
308*86ee64e7SAndroid Build Coastguard Worker   ret = inflate(&stream, Z_FINISH);
309*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_STREAM_END);
310*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(0U, stream.avail_out);
311*86ee64e7SAndroid Build Coastguard Worker   inflateEnd(&stream);
312*86ee64e7SAndroid Build Coastguard Worker 
313*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(src, decompressed);
314*86ee64e7SAndroid Build Coastguard Worker }
315*86ee64e7SAndroid Build Coastguard Worker 
316*86ee64e7SAndroid Build Coastguard Worker // Fuzzer generated.
317*86ee64e7SAndroid Build Coastguard Worker static const uint8_t checkMatchCrashData[] = {
318*86ee64e7SAndroid Build Coastguard Worker     0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00,
319*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
320*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
321*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
322*86ee64e7SAndroid Build Coastguard Worker     0x6e, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x01, 0x39, 0x6e, 0x6e,
323*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0xf7, 0xff, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e,
324*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x0a, 0x9a, 0x00, 0x00, 0x6e, 0x6e, 0x6e, 0x2a, 0x00, 0x00,
325*86ee64e7SAndroid Build Coastguard Worker     0x00, 0xd5, 0xf0, 0x00, 0x81, 0x02, 0xf3, 0xfd, 0xff, 0xab, 0xf3, 0x6e,
326*86ee64e7SAndroid Build Coastguard Worker     0x7e, 0x04, 0x5b, 0xf6, 0x2a, 0x2c, 0xf8, 0x00, 0x54, 0xf3, 0xa5, 0x0e,
327*86ee64e7SAndroid Build Coastguard Worker     0xfd, 0x6e, 0xff, 0x00, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
328*86ee64e7SAndroid Build Coastguard Worker     0x00, 0xa4, 0x0b, 0xa5, 0x2a, 0x0d, 0x10, 0x01, 0x26, 0xf6, 0x04, 0x0e,
329*86ee64e7SAndroid Build Coastguard Worker     0xff, 0x6e, 0x6e, 0x6e, 0x76, 0x00, 0x00, 0x87, 0x01, 0xfe, 0x0d, 0xb6,
330*86ee64e7SAndroid Build Coastguard Worker     0x6e, 0x6e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
331*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0xfd, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x9b,
332*86ee64e7SAndroid Build Coastguard Worker     0x02, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
333*86ee64e7SAndroid Build Coastguard Worker     0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x6e, 0xff, 0xff, 0x00,
334*86ee64e7SAndroid Build Coastguard Worker     0x00, 0xd5, 0xf0, 0x00, 0xff, 0x40, 0x7e, 0x0b, 0xa5, 0x10, 0x67, 0x01,
335*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00,
336*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00,
337*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x40, 0x7e, 0x0b, 0xa5, 0x10, 0x67,
338*86ee64e7SAndroid Build Coastguard Worker     0x7e, 0x32, 0x6e, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x40, 0x0b, 0xa5,
339*86ee64e7SAndroid Build Coastguard Worker     0x10, 0x67, 0x01, 0xfe, 0x0d, 0xb6, 0x2a, 0x00, 0x00, 0x58, 0x00, 0x00,
340*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x6e, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
341*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x3d, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00,
342*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0xd6, 0x2d, 0x2d, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
343*86ee64e7SAndroid Build Coastguard Worker     0x8a, 0x8a, 0x8a, 0x8a, 0x66, 0x8a, 0x8a, 0x8a, 0xee, 0x1d, 0x00, 0x00,
344*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x02, 0x00, 0x00, 0x00, 0xee, 0x0a, 0x00, 0x00, 0x00, 0x54, 0x40,
345*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
346*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
347*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0xff, 0xff, 0x23, 0x7e, 0x00, 0x1e,
348*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0xd5, 0xf0, 0x00, 0xff, 0x40, 0x0b, 0xa5, 0x10, 0x67, 0x01,
349*86ee64e7SAndroid Build Coastguard Worker     0xfe, 0x0d, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
350*86ee64e7SAndroid Build Coastguard Worker     0x8a, 0x8a, 0x8a, 0x2d, 0x6e, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0e,
351*86ee64e7SAndroid Build Coastguard Worker     0xfb, 0x00, 0x10, 0x24, 0x00, 0x00, 0xfb, 0xff, 0x00, 0x00, 0xff, 0x1f,
352*86ee64e7SAndroid Build Coastguard Worker     0xb3, 0x00, 0x04, 0x3d, 0x00, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
353*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00,
354*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
355*86ee64e7SAndroid Build Coastguard Worker     0x01, 0x45, 0x3d, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x11, 0x21, 0x00, 0x1e,
356*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x0c, 0xb3, 0xfe, 0x0e, 0xee, 0x02, 0x00, 0x1d, 0x00, 0x00, 0x00,
357*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x6e, 0x00,
358*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x87, 0x00, 0x33, 0x38, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x00, 0x00,
359*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x38, 0x00, 0x00, 0xff, 0xff, 0xff, 0x04, 0x3f, 0xff, 0xff, 0xff,
360*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0xff, 0x00, 0x31, 0x13, 0x13, 0x13,
361*86ee64e7SAndroid Build Coastguard Worker     0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0x30, 0x83, 0x33,
362*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xff, 0xff, 0x7d, 0xff, 0x00, 0x01,
363*86ee64e7SAndroid Build Coastguard Worker     0x10, 0x0d, 0x2a, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x11,
364*86ee64e7SAndroid Build Coastguard Worker     0x21, 0x00, 0xa5, 0x00, 0x68, 0x68, 0x68, 0x67, 0x00, 0x00, 0xff, 0xff,
365*86ee64e7SAndroid Build Coastguard Worker     0x02, 0x00, 0x00, 0x68, 0x68, 0x68, 0x68, 0x00, 0x00, 0xfa, 0xff, 0xff,
366*86ee64e7SAndroid Build Coastguard Worker     0x03, 0x01, 0xff, 0x02, 0x00, 0x00, 0x68, 0x68, 0x68, 0x68, 0x0a, 0x10,
367*86ee64e7SAndroid Build Coastguard Worker     0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
368*86ee64e7SAndroid Build Coastguard Worker     0x06, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
369*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0xfa, 0xff, 0xff, 0x08, 0xff, 0xff, 0xff, 0x00, 0x06, 0x04,
370*86ee64e7SAndroid Build Coastguard Worker     0x00, 0xf8, 0xff, 0xff, 0x00, 0x01, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
371*86ee64e7SAndroid Build Coastguard Worker     0x00, 0xff, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
372*86ee64e7SAndroid Build Coastguard Worker     0x78, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0x06, 0x04, 0x6e,
373*86ee64e7SAndroid Build Coastguard Worker     0x7e, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00,
374*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x6e, 0x6e, 0x6e,
375*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x01, 0x38, 0xd5, 0xf0, 0x00, 0x00, 0x2a, 0xfe, 0x04, 0x5b, 0x0d,
376*86ee64e7SAndroid Build Coastguard Worker     0xfd, 0x6e, 0x92, 0x28, 0xf9, 0xfb, 0xff, 0x07, 0xd2, 0xd6, 0x2d, 0x2d,
377*86ee64e7SAndroid Build Coastguard Worker     0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
378*86ee64e7SAndroid Build Coastguard Worker     0x8a, 0x8a, 0xc2, 0x91, 0x00, 0x5b, 0xef, 0xde, 0xf2, 0x6e, 0x6e, 0xfd,
379*86ee64e7SAndroid Build Coastguard Worker     0x0c, 0x02, 0x91, 0x62, 0x91, 0xfd, 0x6e, 0x6e, 0xd3, 0x06, 0x00, 0x00,
380*86ee64e7SAndroid Build Coastguard Worker     0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00,
381*86ee64e7SAndroid Build Coastguard Worker     0xd5, 0xf0, 0x00, 0xff, 0x00, 0x00, 0x31, 0x13, 0x13, 0x13, 0x04, 0x00,
382*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x13, 0x0a, 0x00, 0x00,
383*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x6e, 0x00, 0x00, 0x01,
384*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x09, 0x00, 0x6a, 0x24, 0x26, 0x30, 0x01, 0x2e, 0x2a, 0xfe,
385*86ee64e7SAndroid Build Coastguard Worker     0x04, 0x5b, 0x0d, 0xfd, 0x6e, 0x6e, 0xd7, 0x06, 0x6e, 0x6e, 0x6e, 0x00,
386*86ee64e7SAndroid Build Coastguard Worker     0x00, 0xb1, 0xb1, 0xb1, 0xb1, 0x00, 0x00, 0x00, 0x6e, 0x5b, 0x00, 0x00,
387*86ee64e7SAndroid Build Coastguard Worker     0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
388*86ee64e7SAndroid Build Coastguard Worker     0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
389*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
390*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
391*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
392*86ee64e7SAndroid Build Coastguard Worker     0x1e, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
393*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00,
394*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
395*86ee64e7SAndroid Build Coastguard Worker     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
396*86ee64e7SAndroid Build Coastguard Worker     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
397*86ee64e7SAndroid Build Coastguard Worker     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x0b,
398*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x24, 0x2a, 0x6e, 0x5c, 0x24,
399*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
400*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb,
401*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
402*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
403*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
404*86ee64e7SAndroid Build Coastguard Worker     0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
405*86ee64e7SAndroid Build Coastguard Worker     0x05, 0x00, 0x00, 0x00, 0x5d, 0x10, 0x6e, 0x6e, 0xa5, 0x2f, 0x00, 0x00,
406*86ee64e7SAndroid Build Coastguard Worker     0x95, 0x87, 0x00, 0x6e};
407*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,CheckMatchCrash)408*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, CheckMatchCrash) {
409*86ee64e7SAndroid Build Coastguard Worker   // See https://crbug.com/1113142.
410*86ee64e7SAndroid Build Coastguard Worker   z_stream stream;
411*86ee64e7SAndroid Build Coastguard Worker   stream.zalloc = nullptr;
412*86ee64e7SAndroid Build Coastguard Worker   stream.zfree = nullptr;
413*86ee64e7SAndroid Build Coastguard Worker 
414*86ee64e7SAndroid Build Coastguard Worker   // Low windowbits to hit window sliding also with a relatively small input.
415*86ee64e7SAndroid Build Coastguard Worker   int ret = deflateInit2(&stream, /*comp level*/ 5, /*method*/ Z_DEFLATED,
416*86ee64e7SAndroid Build Coastguard Worker                          /*windowbits*/ -9, /*memlevel*/ 8,
417*86ee64e7SAndroid Build Coastguard Worker                          /*strategy*/ Z_DEFAULT_STRATEGY);
418*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
419*86ee64e7SAndroid Build Coastguard Worker 
420*86ee64e7SAndroid Build Coastguard Worker   uint8_t compressed[sizeof(checkMatchCrashData) * 2];
421*86ee64e7SAndroid Build Coastguard Worker   stream.next_out = compressed;
422*86ee64e7SAndroid Build Coastguard Worker   stream.avail_out = sizeof(compressed);
423*86ee64e7SAndroid Build Coastguard Worker 
424*86ee64e7SAndroid Build Coastguard Worker   for (size_t i = 0; i < sizeof(checkMatchCrashData); i++) {
425*86ee64e7SAndroid Build Coastguard Worker     ASSERT_GT(stream.avail_out, 0U);
426*86ee64e7SAndroid Build Coastguard Worker     stream.next_in = (uint8_t*)&checkMatchCrashData[i];
427*86ee64e7SAndroid Build Coastguard Worker     stream.avail_in = 1;
428*86ee64e7SAndroid Build Coastguard Worker     ret = deflate(&stream, Z_NO_FLUSH);
429*86ee64e7SAndroid Build Coastguard Worker     ASSERT_EQ(ret, Z_OK);
430*86ee64e7SAndroid Build Coastguard Worker   }
431*86ee64e7SAndroid Build Coastguard Worker 
432*86ee64e7SAndroid Build Coastguard Worker   stream.next_in = nullptr;
433*86ee64e7SAndroid Build Coastguard Worker   stream.avail_in = 0;
434*86ee64e7SAndroid Build Coastguard Worker   ASSERT_GT(stream.avail_out, 0U);
435*86ee64e7SAndroid Build Coastguard Worker   ret = deflate(&stream, Z_FINISH);
436*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_STREAM_END);
437*86ee64e7SAndroid Build Coastguard Worker   size_t compressed_sz = sizeof(compressed) - stream.avail_out;
438*86ee64e7SAndroid Build Coastguard Worker   deflateEnd(&stream);
439*86ee64e7SAndroid Build Coastguard Worker 
440*86ee64e7SAndroid Build Coastguard Worker   uint8_t decompressed[sizeof(checkMatchCrashData)];
441*86ee64e7SAndroid Build Coastguard Worker   ret = inflateInit2(&stream, -15);
442*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
443*86ee64e7SAndroid Build Coastguard Worker   stream.next_in = compressed;
444*86ee64e7SAndroid Build Coastguard Worker   stream.avail_in = compressed_sz;
445*86ee64e7SAndroid Build Coastguard Worker   stream.next_out = decompressed;
446*86ee64e7SAndroid Build Coastguard Worker   stream.avail_out = sizeof(decompressed);
447*86ee64e7SAndroid Build Coastguard Worker   ret = inflate(&stream, Z_FINISH);
448*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_STREAM_END);
449*86ee64e7SAndroid Build Coastguard Worker   inflateEnd(&stream);
450*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(
451*86ee64e7SAndroid Build Coastguard Worker       memcmp(checkMatchCrashData, decompressed, sizeof(checkMatchCrashData)),
452*86ee64e7SAndroid Build Coastguard Worker       0);
453*86ee64e7SAndroid Build Coastguard Worker }
454*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,DeflateRLEUninitUse)455*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, DeflateRLEUninitUse) {
456*86ee64e7SAndroid Build Coastguard Worker   // MSan would complain about use of uninitialized values in deflate_rle if the
457*86ee64e7SAndroid Build Coastguard Worker   // window isn't zero-initialized. See crbug.com/1137613. Similar problems
458*86ee64e7SAndroid Build Coastguard Worker   // exist in other places in zlib, e.g. longest_match (crbug.com/1144420) but
459*86ee64e7SAndroid Build Coastguard Worker   // we don't have as nice test cases.
460*86ee64e7SAndroid Build Coastguard Worker 
461*86ee64e7SAndroid Build Coastguard Worker   int level = 9;
462*86ee64e7SAndroid Build Coastguard Worker   int windowBits = 9;
463*86ee64e7SAndroid Build Coastguard Worker   int memLevel = 8;
464*86ee64e7SAndroid Build Coastguard Worker   int strategy = Z_RLE;
465*86ee64e7SAndroid Build Coastguard Worker   const std::vector<uint8_t> src{
466*86ee64e7SAndroid Build Coastguard Worker       0x31, 0x64, 0x38, 0x32, 0x30, 0x32, 0x30, 0x36, 0x65, 0x35, 0x38, 0x35,
467*86ee64e7SAndroid Build Coastguard Worker       0x32, 0x61, 0x30, 0x36, 0x65, 0x35, 0x32, 0x66, 0x30, 0x34, 0x38, 0x37,
468*86ee64e7SAndroid Build Coastguard Worker       0x61, 0x31, 0x38, 0x36, 0x37, 0x37, 0x31, 0x39, 0x0a, 0x65, 0x62, 0x00,
469*86ee64e7SAndroid Build Coastguard Worker       0x9f, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0x09, 0x00, 0x62, 0x00, 0x9f, 0xff,
470*86ee64e7SAndroid Build Coastguard Worker       0xc6, 0xc6, 0xc6, 0xff, 0x09, 0x00, 0x62, 0x00, 0x9f, 0xff, 0xc6, 0xc6,
471*86ee64e7SAndroid Build Coastguard Worker       0xc6, 0xff, 0x09, 0x00, 0x62, 0x00, 0x9f, 0xff, 0xc6, 0xc6, 0xc6, 0x95,
472*86ee64e7SAndroid Build Coastguard Worker       0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0e, 0x0a, 0x54, 0x52,
473*86ee64e7SAndroid Build Coastguard Worker       0x58, 0x56, 0xab, 0x26, 0x13, 0x53, 0x5a, 0xb5, 0x30, 0xbb, 0x96, 0x44,
474*86ee64e7SAndroid Build Coastguard Worker       0x80, 0xe6, 0xc5, 0x0a, 0xd0, 0x47, 0x7a, 0xa0, 0x4e, 0xbe, 0x30, 0xdc,
475*86ee64e7SAndroid Build Coastguard Worker       0xa1, 0x08, 0x54, 0xe1, 0x51, 0xd1, 0xea, 0xef, 0xdb, 0xa1, 0x2d, 0xb4,
476*86ee64e7SAndroid Build Coastguard Worker       0xb9, 0x58, 0xb1, 0x2f, 0xf0, 0xae, 0xbc, 0x07, 0xd1, 0xba, 0x7f, 0x14,
477*86ee64e7SAndroid Build Coastguard Worker       0xa4, 0xde, 0x99, 0x7f, 0x4d, 0x3e, 0x25, 0xd9, 0xef, 0xee, 0x4f, 0x38,
478*86ee64e7SAndroid Build Coastguard Worker       0x7b, 0xaf, 0x3f, 0x6b, 0x53, 0x5a, 0xcb, 0x1f, 0x97, 0xb5, 0x43, 0xa3,
479*86ee64e7SAndroid Build Coastguard Worker       0xe8, 0xff, 0x09, 0x00, 0x62, 0x00, 0x9f, 0xff, 0xc6, 0xc6, 0xc6, 0xff,
480*86ee64e7SAndroid Build Coastguard Worker       0x09, 0x00, 0x62, 0x00, 0x9f, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0x09, 0x00,
481*86ee64e7SAndroid Build Coastguard Worker       0x62, 0x00, 0x9f, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0x09, 0x00, 0x62, 0x00,
482*86ee64e7SAndroid Build Coastguard Worker       0x9f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
483*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
484*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
485*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
486*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
487*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
488*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
489*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
490*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
491*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
492*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
493*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
494*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
495*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
496*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
497*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
498*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
499*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
500*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
501*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
502*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
503*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3c,
504*86ee64e7SAndroid Build Coastguard Worker       0x73, 0x70, 0x23, 0x87, 0xec, 0xf8, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
505*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
506*86ee64e7SAndroid Build Coastguard Worker       0xc1, 0x00, 0x00, 0x9f, 0xc6, 0xc6, 0xff, 0x09, 0x00, 0x62, 0x00, 0x9f,
507*86ee64e7SAndroid Build Coastguard Worker       0xff, 0xc6, 0xc6, 0xc6, 0xff, 0x09, 0x00, 0x62, 0x00, 0x9f, 0xff, 0x00,
508*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
509*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
510*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
511*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
512*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
513*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
514*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
515*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
516*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
517*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
518*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
519*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
520*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
521*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
522*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
523*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
524*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
525*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
526*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
527*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
528*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
529*86ee64e7SAndroid Build Coastguard Worker       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
530*86ee64e7SAndroid Build Coastguard Worker   };
531*86ee64e7SAndroid Build Coastguard Worker 
532*86ee64e7SAndroid Build Coastguard Worker   z_stream stream;
533*86ee64e7SAndroid Build Coastguard Worker   stream.zalloc = Z_NULL;
534*86ee64e7SAndroid Build Coastguard Worker   stream.zfree = Z_NULL;
535*86ee64e7SAndroid Build Coastguard Worker 
536*86ee64e7SAndroid Build Coastguard Worker   // Compress the data one byte at a time to exercise the streaming code.
537*86ee64e7SAndroid Build Coastguard Worker   int ret =
538*86ee64e7SAndroid Build Coastguard Worker       deflateInit2(&stream, level, Z_DEFLATED, windowBits, memLevel, strategy);
539*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
540*86ee64e7SAndroid Build Coastguard Worker   std::vector<uint8_t> compressed(src.size() * 2 + 1000);
541*86ee64e7SAndroid Build Coastguard Worker   stream.next_out = compressed.data();
542*86ee64e7SAndroid Build Coastguard Worker   stream.avail_out = compressed.size();
543*86ee64e7SAndroid Build Coastguard Worker   for (uint8_t b : src) {
544*86ee64e7SAndroid Build Coastguard Worker     stream.next_in = &b;
545*86ee64e7SAndroid Build Coastguard Worker     stream.avail_in = 1;
546*86ee64e7SAndroid Build Coastguard Worker     ret = deflate(&stream, Z_NO_FLUSH);
547*86ee64e7SAndroid Build Coastguard Worker     ASSERT_EQ(ret, Z_OK);
548*86ee64e7SAndroid Build Coastguard Worker   }
549*86ee64e7SAndroid Build Coastguard Worker   stream.next_in = Z_NULL;
550*86ee64e7SAndroid Build Coastguard Worker   stream.avail_in = 0;
551*86ee64e7SAndroid Build Coastguard Worker   ret = deflate(&stream, Z_FINISH);
552*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_STREAM_END);
553*86ee64e7SAndroid Build Coastguard Worker   deflateEnd(&stream);
554*86ee64e7SAndroid Build Coastguard Worker }
555*86ee64e7SAndroid Build Coastguard Worker 
556*86ee64e7SAndroid Build Coastguard Worker static const char zFixedCorruptionData[] =
557*86ee64e7SAndroid Build Coastguard Worker     "AAABAACAADAAEAAFAAGAAHAAIAAJAAKAALAAMAANAAOAAPAAQAARAASAATAAUAAVAAWAAXAAYA"
558*86ee64e7SAndroid Build Coastguard Worker     "AZABBABCABDABEABFABGABHABIABJABKABLABMABNABOABPABQABRABSABTABUABVABWABXABY"
559*86ee64e7SAndroid Build Coastguard Worker     "ABZACBACCACDACEACFACGACHACIACJACKACLACMACNACOACPACQACRACSACTACUACVACWACXAC"
560*86ee64e7SAndroid Build Coastguard Worker     "YACZADBADCADDADEADFADGADHADIADJADKADLADMADNADOADPADQADRADSADTADUADVADWADXA"
561*86ee64e7SAndroid Build Coastguard Worker     "DYADZAEBAECAEDAEEAEFAEGAEHAEIAEJAEKAELAEMAENAEOAEPAEQAERAESAETAEUAEVAEWAEX"
562*86ee64e7SAndroid Build Coastguard Worker     "AEYAEZAFBAFCAFDAFEAFFAFGAFHAFIAFJAFKAFLAFMAFNAFOAFPAFQAFRAFSAFTAFUAFVAFWAF"
563*86ee64e7SAndroid Build Coastguard Worker     "XAFYAFZAGBAGCAGDAGEAGFAGGAGHAGIAGJAGKAGLAGMAGNAGOAGPAGQAGRAGSAGTAGUAGVAGWA"
564*86ee64e7SAndroid Build Coastguard Worker     "GXAGYAGZAHBAHCAHDAHEAHFAHGAHHAHIAHJAHKAHLAHMAHNAHOAHPAHQAHRAHSAHTAHUAHVAHW"
565*86ee64e7SAndroid Build Coastguard Worker     "AHXAHYAHZAIBAICAIDAIEAIFAIGAIHAIIAIJAIKAILAIMAINAIOAIPAIQAIRAISAITAIUAIVAI"
566*86ee64e7SAndroid Build Coastguard Worker     "WAIXAIYAIZAJBAJCAJDAJEAJFAJGAJHAJIAJJAJKAJLAJMAJNAJOAJPAJQAJRAJSAJTAJUAJVA"
567*86ee64e7SAndroid Build Coastguard Worker     "JWAJXAJYAJZAKBAKCAKDAKEAKFAKGAKHAKIAKJAKKAKLAKMAKNAKOAKPAKQAKRAKSAKTAKUAKV"
568*86ee64e7SAndroid Build Coastguard Worker     "AKWAKXAKYAKZALBALCALDALEALFALGALHALIALJALKALLALMALNALOALPALQALRALSALTALUAL"
569*86ee64e7SAndroid Build Coastguard Worker     "VALWALXALYALZAMBAMCAMDAMEAMFAMGAMHAMIAMJAMKAMLAMMAMNAMOAMPAMQAMRAMSAMTAMUA"
570*86ee64e7SAndroid Build Coastguard Worker     "MVAMWAMXAMYAMZANBANCANDANEANFANGANHANIANJANKANLANMANNANOANPANQANRANSANTANU"
571*86ee64e7SAndroid Build Coastguard Worker     "ANVANWANXANYANZAOBAOCAODAOEAOFAOGAOHAOIAOJAOKAOLAOMAONAOOAOPAOQAORAOSAOTAO"
572*86ee64e7SAndroid Build Coastguard Worker     "UAOVAOWAOXAOYAOZAPBAPCAPDAPEAPFAPGAPHAPIAPJAPKAPLAPMAPNAPOAPPAPQAPRAPSAPTA"
573*86ee64e7SAndroid Build Coastguard Worker     "PUAPVAPWAPXAPYAPZAQBAQCAQDAQEAQFAQGAQHAQIAQJAQKAQLAQMAQNAQOAQPAQQAQRAQSAQT"
574*86ee64e7SAndroid Build Coastguard Worker     "AQUAQVAQWAQXAQYAQZARBARCARDAREARFARGARHARIARJARKARLARMARNAROARPARQARRARSAR"
575*86ee64e7SAndroid Build Coastguard Worker     "TARUARVARWARXARYARZASBASCASDASEASFASGASHASIASJASKASLASMASNASOASPASQASRASSA"
576*86ee64e7SAndroid Build Coastguard Worker     "STASUASVASWASXASYASZATBATCATDATEATFATGATHATIATJATKATLATMATNATOATPATQATRATS"
577*86ee64e7SAndroid Build Coastguard Worker     "ATTATUATVATWATXATYATZAUBAUCAUDAUEAUFAUGAUHAUIAUJAUKAULAUMAUNAUOAUPAUQAURAU"
578*86ee64e7SAndroid Build Coastguard Worker     "SAUTAUUAUVAUWAUXAUYAUZAVBAVCAVDAVEAVFAVGAVHAVIAVJAVKAVLAVMAVNAVOAVPAVQAVRA"
579*86ee64e7SAndroid Build Coastguard Worker     "VSAVTAVUAVVAVWAVXAVYAVZAWBAWCAWDAWEAWFAWGAWHAWIAWJAWKAWLAWMAWNAWOAWPAWQAWR"
580*86ee64e7SAndroid Build Coastguard Worker     "AWSAWTAWUAWVAWWAWXAWYAWZAXBAXCAXDAXEAXFAXGAXHAXIAXJAXKAXLAXMAXNAXOAXPAXQAX"
581*86ee64e7SAndroid Build Coastguard Worker     "RAXSAXTAXUAXVAXWAXXAXYAXZAYBAYCAYDAYEAYFAYGAYHAYIAYJAYKAYLAYMAYNAYOAYPAYQA"
582*86ee64e7SAndroid Build Coastguard Worker     "YRAYSAYTAYUAYVAYWAYXAYYAYZAZBAZCAZDAZEAZFAZGAZHAZIAZJAZKAZLAZMAZNAZOAZPAZQ"
583*86ee64e7SAndroid Build Coastguard Worker     "AZRAZSAZTAZUAZVAZWAZXAZYAZZBBBCBBDBBEBBFBBGBBHBBIBBJBBKBBLBBMBBNBBOBBPBBQB"
584*86ee64e7SAndroid Build Coastguard Worker     "BRBBSBBTBBUBBVBBWBBXBBYBBZBCCBCDBCEBCFBCGBCHBCIBCJBCKBCLBCMBCNBCOBCPBCQBCR"
585*86ee64e7SAndroid Build Coastguard Worker     "BCSBCTBCUBCVBCWBCXBCYBCZBDCBDDBDEBDFBDGBDHBDIBDJBDKBDLBDMBDNBDOBDPBDQBDRBD"
586*86ee64e7SAndroid Build Coastguard Worker     "SBDTBDUBDVBDWBDXBDYBDZBECBEDBEEBEFBEGBEHBEIBEJBEKBELBEMBENBEOBEPBEQBERBESB"
587*86ee64e7SAndroid Build Coastguard Worker     "ETBEUBEVBEWBEXBEYBEZBFCBFDBFEBFFBFGBFHBFIBFJBFKBFLBFMBFNBFOBFPBFQBFRBFSBFT"
588*86ee64e7SAndroid Build Coastguard Worker     "BFUBFVBFWBFXBFYBFZBGCBGDBGEBGFBGGBGHBGIBGJBGKBGLBGMBGNBGOBGPBGQBGRBGSBGTBG"
589*86ee64e7SAndroid Build Coastguard Worker     "UBGVBGWBGXBGYBGZBHCBHDBHEBHFBHGBHHBHIBHJBHKBHLBHMBHNBHOBHPBHQBHRBHSBHTBHUB"
590*86ee64e7SAndroid Build Coastguard Worker     "HVBHWBHXBHYBHZBICBIDBIEBIFBIGBIHBIIBIJBIKBILBIMBINBIOBIPBIQBIRBISBITBIUBIV"
591*86ee64e7SAndroid Build Coastguard Worker     "BIWBIXBIYBIZBJCBJDBJEBJFBJGBJHBJIBJJBJKBJLBJMBJNBJOBJPBJQBJRBJSBJTBJUBJVBJ"
592*86ee64e7SAndroid Build Coastguard Worker     "WBJXBJYBJZBKCBKDBKEBKFBKGBKHBKIBKJBKKBKLBKMBKNBKOBKPBKQBKRBKSBKTBKUBKVBKWB"
593*86ee64e7SAndroid Build Coastguard Worker     "KXBKYBKZBLCBLDBLEBLFBLGBLHBLIBLJBLKBLLBLMBLNBLOBLPBLQBLRBLSBLTBLUBLVBLWBLX"
594*86ee64e7SAndroid Build Coastguard Worker     "BLYBLZBMCBMDBMEBMFBMGBMHBMIBMJBMKBMLBMMBMNBMOBMPBMQBMRBMSBMTBMUBMVBMWBMXBM"
595*86ee64e7SAndroid Build Coastguard Worker     "YBMZBNCBNDBNEBNFBNGBNHBNIBNJBNKBNLBNMBNNBNOBNPBNQBNRBNSBNTBNUBNVBNWBNXBNYB"
596*86ee64e7SAndroid Build Coastguard Worker     "NZBOCBODBOEBOFBOGBOHBOIBOJBOKBOLBOMBONBOOBOPBOQBORBOSBOTBOUBOVBOWBOXBOYBOZ"
597*86ee64e7SAndroid Build Coastguard Worker     "BPCBPDBPEBPFBPGBPHBPIBPJBPKBPLBPMBPNBPOBPPBPQBPRBPSBPTBPUBPVBPWBPXBPYBPZBQ"
598*86ee64e7SAndroid Build Coastguard Worker     "CBQDBQEBQFBQGBQHBQIBQJBQKBQLBQMBQNBQOBQPBQQBQRBQSBQTBQUBQVBQWBQXBQYBQZBRCB"
599*86ee64e7SAndroid Build Coastguard Worker     "RDBREBRFBRGBRHBRIBRJBRKBRLBRMBRNBROBRPBRQBRRBRSBRTBRUBRVBRWBRXBRYBRZBSCBSD"
600*86ee64e7SAndroid Build Coastguard Worker     "BSEBSFBSGBSHBSIBSJBSKBSLBSMBSNBSOBSPBSQBSRBSSBSTBSUBSVBSWBSXBSYBSZBTCBTDBT"
601*86ee64e7SAndroid Build Coastguard Worker     "EBTFBTGBTHBTIBTJBTKBTLBTMBTNBTOBTPBTQBTRBTSBTTBTUBTVBTWBTXBTYBTZBUCBUDBUEB"
602*86ee64e7SAndroid Build Coastguard Worker     "UFBUGBUHBUIBUJBUKBULBUMBUNBUOBUPBUQBURBUSBUTBUUBUVBUWBUXBUYBUZBVCBVDBVEBVF"
603*86ee64e7SAndroid Build Coastguard Worker     "BVGBVHBVIBVJBVKBVLBVMBVNBVOBVPBVQBVRBVSBVTBVUBVVBVWBVXBVYBVZBWCBWDBWEBWFBW"
604*86ee64e7SAndroid Build Coastguard Worker     "GBWHBWIBWJBWKBWLBWMBWNBWOBWPBWQBWRBWSBWTBWUBWVBWWBWXBWYBWZBXCBXDBXEBXFBXGB"
605*86ee64e7SAndroid Build Coastguard Worker     "XHBXIBXJBXKBXLBXMBXNBXOBXPBXQBXRBXSBXTBXUBXVBXWBXXBXYBXZBYCBYDBYEBYFBYGBYH"
606*86ee64e7SAndroid Build Coastguard Worker     "BYIBYJBYKBYLBYMBYNBYOBYPBYQBYRBYSBYTBYUBYVBYWBYXBYYBYZBZCBZDBZEBZFBZGBZHBZ"
607*86ee64e7SAndroid Build Coastguard Worker     "IBZJBZKBZLBZMBZNBZOBZPBZQBZRBZSBZTBZUBZVBZWBZXBZYBZZCCCDCCECCFCCGCCHCCICCJ"
608*86ee64e7SAndroid Build Coastguard Worker     "CCKCCLCCMCCNCCOCCPCCQCCRCCSCCTCCUCCVCCWCCXCCYCCZCDDCDECDFCDGCDHCDICDJCDKCD"
609*86ee64e7SAndroid Build Coastguard Worker     "LCDMCDNCDOCDPCDQCDRCDSCDTCDUCDVCDWCDXCDYCDZCEDCEECEFCEGCEHCEICEJCEKCELCEMC"
610*86ee64e7SAndroid Build Coastguard Worker     "ENCEOCEPCEQCERCESCETCEUCEVCEWCEXCEYCEZCFDCFECFFCFGCFHCFICFJCFKCFLCFMCFNCFO"
611*86ee64e7SAndroid Build Coastguard Worker     "CFPCFQCFRCFSCFTCFUCFVCFWCFXCFYCFZCGDCGECGFCGGCGHCGICGJCGKCGLCGMCGNCGOCGPCG"
612*86ee64e7SAndroid Build Coastguard Worker     "QCGRCGSCGTCGUCGVCGWCGXCGYCGZCHDCHECHFCHGCHHCHICHJCHKCHLCHMCHNCHOCHPCHQCHRC"
613*86ee64e7SAndroid Build Coastguard Worker     "HSCHTCHUCHVCHWCHXCHYCHZCIDCIECIFCIGCIHCIICIJCIKCILCIMCINCIOCIPCIQCIRCISCIT"
614*86ee64e7SAndroid Build Coastguard Worker     "CIUCIVCIWCIXCIYCIZCJDCJECJFCJGCJHCJICJJCJKCJLCJMCJNCJOCJPCJQCJRCJSCJTCJUCJ"
615*86ee64e7SAndroid Build Coastguard Worker     "VCJWCJXCJYCJZCKDCKECKFCKGCKHCKICKJCKKCKLCKMCKNCKOCKPCKQCKRCKSCKTCKUCKVCKWC"
616*86ee64e7SAndroid Build Coastguard Worker     "KXCKYCKZCLDCLECLFCLGCLHCLICLJCLKCLLCLMCLNCLOCLPCLQCLRCLSCLTCLUCLVCLWCLXCLY"
617*86ee64e7SAndroid Build Coastguard Worker     "CLZCMDCMECMFCMGCMHCMICMJCMKCMLCMMCMNCMOCMPCMQCMRCMSCMTCMUCMVCMWCMXCMYCMZCN"
618*86ee64e7SAndroid Build Coastguard Worker     "DCNECNFCNGCNHCNICNJCNKCNLCNMCNNCNOCNPCNQCNRCNSCNTCNUCNVCNWCNXCNYCNZCODCOEC"
619*86ee64e7SAndroid Build Coastguard Worker     "OFCOGCOHCOICOJCOKCOLCOMCONCOOCOPCOQCORCOSCOTCOUCOVCOWCOXCOYCOZCPDCPECPFCPG"
620*86ee64e7SAndroid Build Coastguard Worker     "CPHCPICPJCPKCPLCPMCPNCPOCPPCPQCPRCPSCPTCPUCPVCPWCPXCPYCPZCQDCQECQFCQGCQHCQ"
621*86ee64e7SAndroid Build Coastguard Worker     "ICQJCQKCQLCQMCQNCQOCQPCQQCQRCQSCQTCQUCQVCQWCQXCQYCQZCRDCRECRFCRGCRHCRICRJC"
622*86ee64e7SAndroid Build Coastguard Worker     "RKCRLCRMCRNCROCRPCRQCRRCRSCRTCRUCRVCRWCRXCRYCRZCSDCSECSFCSGCSHCSICSJCSKCSL"
623*86ee64e7SAndroid Build Coastguard Worker     "CSMCSNCSOCSPCSQCSRCSSCSTCSUCSVCSWCSXCSYCSZCTDCTECTFCTGCTHCTICTJCTKCTLCTMCT"
624*86ee64e7SAndroid Build Coastguard Worker     "NCTOCTPCTQCTRCTSCTTCTUCTVCTWCTXCTYCTZCUDCUECUFCUGCUHCUICUJCUKCULCUMCUNCUOC"
625*86ee64e7SAndroid Build Coastguard Worker     "UPCUQCURCUSCUTCUUCUVCUWCUXCUYCUZCVDCVECVFCVGCVHCVICVJCVKCVLCVMCVNCVOCVPCVQ"
626*86ee64e7SAndroid Build Coastguard Worker     "CVRCVSCVTCVUCVVCVWCVXCVYCVZCWDCWECWFCWGCWHCWICWJCWKCWLCWMCWNCWOCWPCWQCWRCW"
627*86ee64e7SAndroid Build Coastguard Worker     "SCWTCWUCWVCWWCWXCWYCWZCXDCXECXFCXGCXHCXICXJCXKCXLCXMCXNCXOCXPCXQCXRCXSCXTC"
628*86ee64e7SAndroid Build Coastguard Worker     "XUCXVCXWCXXCXYCXZCYDCYECYFCYGCYHCYICYJCYKCYLCYMCYNCYOCYPCYQCYRCYSCYTCYUCYV"
629*86ee64e7SAndroid Build Coastguard Worker     "CYWCYXCYYCYZCZDCZECZFCZGCZHCZICZJCZKCZLCZMCZNCZOCZPCZQCZRCZSCZTCZUCZVCZWCZ"
630*86ee64e7SAndroid Build Coastguard Worker     "XCZYCZZDDDEDDFDDGDDHDDIDDJDDKDDLDDMDDNDDODDPDDQDDRDDSDDTDDUDDVDDWDDXDDYDDZ"
631*86ee64e7SAndroid Build Coastguard Worker     "DEEDEFDEGDEHDEIDEJDEKDELDEMDENDEODEPDEQDERDESDETDEUDEVDEWDEXDEYDEZDFEDFFDF"
632*86ee64e7SAndroid Build Coastguard Worker     "GDFHDFIDFJDFKDFLDFMDFNDFODFPDFQDFRDFSDFTDFUDFVDFWDFXDFYDFZDGEDGFDGGDGHDGID"
633*86ee64e7SAndroid Build Coastguard Worker     "GJDGKDGLDGMDGNDGODGPDGQDGRDGSDGTDGUDGVDGWDGXDGYDGZDHEDHFDHGDHHDHIDHJDHKDHL"
634*86ee64e7SAndroid Build Coastguard Worker     "DHMDHNDHODHPDHQDHRDHSDHTDHUDHVDHWDHXDHYDHZDIEDIFDIGDIHDIIDIJDIKDILDIMDINDI"
635*86ee64e7SAndroid Build Coastguard Worker     "ODIPDIQDIRDISDITDIUDIVDIWDIXDIYDIZDJEDJFDJGDJHDJIDJJDJKDJLDJMDJNDJODJPDJQD"
636*86ee64e7SAndroid Build Coastguard Worker     "JRDJSDJTDJUDJVDJWDJXDJYDJZDKEDKFDKGDKHDKIDKJDKKDKLDKMDKNDKODKPDKQDKRDKSDKT"
637*86ee64e7SAndroid Build Coastguard Worker     "DKUDKVDKWDKXDKYDKZDLEDLFDLGDLHDLIDLJDLKDLLDLMDLNDLODLPDLQDLRDLSDLTDLUDLVDL"
638*86ee64e7SAndroid Build Coastguard Worker     "WDLXDLYDLZDMEDMFDMGDMHDMIDMJDMKDMLDMMDMNDMODMPDMQDMRDMSDMTDMUDMVDMWDMXDMYD"
639*86ee64e7SAndroid Build Coastguard Worker     "MZDNEDNFDNGDNHDNIDNJDNKDNLDNMDNNDNODNPDNQDNRDNSDNTDNUDNVDNWDNXDNYDNZDOEDOF"
640*86ee64e7SAndroid Build Coastguard Worker     "DOGDOHDOIDOJDOKDOLDOMDONDOODOPDOQDORDOSDOTDOUDOVDOWDOXDOYDOZDPEDPFDPGDPHDP"
641*86ee64e7SAndroid Build Coastguard Worker     "IDPJDPKDPLDPMDPNDPODPPDPQDPRDPSDPTDPUDPVDPWDPXDPYDPZDQEDQFDQGDQHDQIDQJDQKD"
642*86ee64e7SAndroid Build Coastguard Worker     "QLDQMDQNDQODQPDQQDQRDQSDQTDQUDQVDQWDQXDQYDQZDREDRFDRGDRHDRIDRJDRKDRLDRMDRN"
643*86ee64e7SAndroid Build Coastguard Worker     "DRODRPDRQDRRDRSDRTDRUDRVDRWDRXDRYDRZDSEDSFDSGDSHDSIDSJDSKDSLDSMDSNDSODSPDS"
644*86ee64e7SAndroid Build Coastguard Worker     "QDSRDSSDSTDSUDSVDSWDSXDSYDSZDTEDTFDTGDTHDTIDTJDTKDTLDTMDTNDTODTPDTQDTRDTSD"
645*86ee64e7SAndroid Build Coastguard Worker     "TTDTUDTVDTWDTXDTYDTZDUEDUFDUGDUHDUIDUJDUKDULDUMDUNDUODUPDUQDURDUSDUTDUUDUV"
646*86ee64e7SAndroid Build Coastguard Worker     "DUWDUXDUYDUZDVEDVFDVGDVHDVIDVJDVKDVLDVMDVNDVODVPDVQDVRDVSDVTDVUDVVDVWDVXDV"
647*86ee64e7SAndroid Build Coastguard Worker     "YDVZDWEDWFDWGDWHDWIDWJDWKDWLDWMDWNDWODWPDWQDWRDWSDWTDWUDWVDWWDWXDWYDWZDXED"
648*86ee64e7SAndroid Build Coastguard Worker     "XFDXGDXHDXIDXJDXKDXLDXMDXNDXODXPDXQDXRDXSDXTDXUDXVDXWDXXDXYDXZDYEDYFDYGDYH"
649*86ee64e7SAndroid Build Coastguard Worker     "DYIDYJDYKDYLDYMDYNDYODYPDYQDYRDYSDYTDYUDYVDYWDYXDYYDYZDZEDZFDZGDZHDZIDZJDZ"
650*86ee64e7SAndroid Build Coastguard Worker     "KDZLDZMDZNDZODZPDZQDZRDZSDZTDZUDZVDZWDZXDZYDZZEEEFEEGEEHEEIEEJEEKEELEEMEEN"
651*86ee64e7SAndroid Build Coastguard Worker     "EEOEEPEEQEEREESEETEEUEEVEEWEEXEEYEEZEFFEFGEFHEFIEFJEFKEFLEFMEFNEFOEFPEFQEF"
652*86ee64e7SAndroid Build Coastguard Worker     "REFSEFTEFUEFVEFWEFXEFYEFZEGFEGGEGHEGIEGJEGKEGLEGMEGNEGOEGPEGQEGREGSEGTEGUE"
653*86ee64e7SAndroid Build Coastguard Worker     "GVEGWEGXEGYEGZEHFEHGEHHEHIEHJEHKEHLEHMEHNEHOEHPEHQEHREHSEHTEHUEHVEHWEHXEHY"
654*86ee64e7SAndroid Build Coastguard Worker     "EHZEIFEIGEIHEIIEIJEIKEILEIMEINEIOEIPEIQEIREISEITEIUEIVEIWEIXEIYEIZEJFEJGEJ"
655*86ee64e7SAndroid Build Coastguard Worker     "HEJIEJJEJKEJLEJMEJNEJOEJPEJQEJREJSEJTEJUEJVEJWEJXEJYEJZEKFEKGEKHEKIEKJEKKE"
656*86ee64e7SAndroid Build Coastguard Worker     "KLEKMEKNEKOEKPEKQEKREKSEKTEKUEKVEKWEKXEKYEKZELFELGELHELIELJELKELLELMELNELO"
657*86ee64e7SAndroid Build Coastguard Worker     "ELPELQELRELSELTELUELVELWELXELYELZEMFEMGEMHEMIEMJEMKEMLEMMEMNEMOEMPEMQEMREM"
658*86ee64e7SAndroid Build Coastguard Worker     "SEMTEMUEMVEMWEMXEMYEMZENFENGENHENIENJENKENLENMENNENOENPENQENRENSENTENUENVE"
659*86ee64e7SAndroid Build Coastguard Worker     "NWENXENYENZEOFEOGEOHEOIEOJEOKEOLEOMEONEOOEOPEOQEOREOSEOTEOUEOVEOWEOXEOYEOZ"
660*86ee64e7SAndroid Build Coastguard Worker     "EPFEPGEPHEPIEPJEPKEPLEPMEPNEPOEPPEPQEPREPSEPTEPUEPVEPWEPXEPYEPZEQFEQGEQHEQ"
661*86ee64e7SAndroid Build Coastguard Worker     "IEQJEQKEQLEQMEQNEQOEQPEQQEQREQSEQTEQUEQVEQWEQXEQYEQZERFERGERHERIERJERKERLE"
662*86ee64e7SAndroid Build Coastguard Worker     "RMERNEROERPERQERRERSERTERUERVERWERXERYERZESFESGESHESIESJESKESLESMESNESOESP"
663*86ee64e7SAndroid Build Coastguard Worker     "ESQESRESSESTESUESVESWESXESYESZETFETGETHETIETJETKETLETMETNETOETPETQETRETSET"
664*86ee64e7SAndroid Build Coastguard Worker     "TETUETVETWETXETYETZEUFEUGEUHEUIEUJEUKEULEUMEUNEUOEUPEUQEUREUSEUTEUUEUVEUWE"
665*86ee64e7SAndroid Build Coastguard Worker     "UXEUYEUZEVFEVGEVHEVIEVJEVKEVLEVMEVNEVOEVPEVQEVREVSEVTEVUEVVEVWEVXEVYEVZEWF"
666*86ee64e7SAndroid Build Coastguard Worker     "EWGEWHEWIEWJEWKEWLEWMEWNEWOEWPEWQEWREWSEWTEWUEWVEWWEWXEWYEWZEXFEXGEXHEXIEX"
667*86ee64e7SAndroid Build Coastguard Worker     "JEXKEXLEXMEXNEXOEXPEXQEXREXSEXTEXUEXVEXWEXXEXYEXZEYFEYGEYHEYIEYJEYKEYLEYME"
668*86ee64e7SAndroid Build Coastguard Worker     "YNEYOEYPEYQEYREYSEYTEYUEYVEYWEYXEYYEYZEZFEZGEZHEZIEZJEZKEZLEZMEZNEZOEZPEZQ"
669*86ee64e7SAndroid Build Coastguard Worker     "EZREZSEZTEZUEZVEZWEZXEZYEZZFFFGFFHFFIFFJFFKFFLFFMFFNFFOFFPFFQFFRFFSFFTFFUF"
670*86ee64e7SAndroid Build Coastguard Worker     "FVFFWFFXFFYFFZFGGFGHFGIFGJFGKFGLFGMFGNFGOFGPFGQFGRFGSFGTFGUFGVFGWFGXFGYFGZ"
671*86ee64e7SAndroid Build Coastguard Worker     "FHGFHHFHIFHJFHKFHLFHMFHNFHOFHPFHQFHRFHSFHTFHUFHVFHWFHXFHYFHZFIGFIHFIIFIJFI"
672*86ee64e7SAndroid Build Coastguard Worker     "KFILFIMFINFIOFIPFIQFIRFISFITFIUFIVFIWFIXFIYFIZFJGFJHFJIFJJFJKFJLFJMFJNFJOF"
673*86ee64e7SAndroid Build Coastguard Worker     "JPFJQFJRFJSFJTFJUFJVFJWFJXFJYFJZFKGFKHFKIFKJFKKFKLFKMFKNFKOFKPFKQFKRFKSFKT"
674*86ee64e7SAndroid Build Coastguard Worker     "FKUFKVFKWFKXFKYFKZFLGFLHFLIFLJFLKFLLFLMFLNFLOFLPFLQFLRFLSFLTFLUFLVFLWFLXFL"
675*86ee64e7SAndroid Build Coastguard Worker     "YFLZFMGFMHFMIFMJFMKFMLFMMFMNFMOFMPFMQFMRFMSFMTFMUFMVFMWFMXFMYFMZFNGFNHFNIF"
676*86ee64e7SAndroid Build Coastguard Worker     "NJFNKFNLFNMFNNFNOFNPFNQFNRFNSFNTFNUFNVFNWFNXFNYFNZFOGFOHFOIFOJFOKFOLFOMFON"
677*86ee64e7SAndroid Build Coastguard Worker     "FOOFOPFOQFORFOSFOTFOUFOVFOWFOXFOYFOZFPGFPHFPIFPJFPKFPLFPMFPNFPOFPPFPQFPRFP"
678*86ee64e7SAndroid Build Coastguard Worker     "SFPTFPUFPVFPWFPXFPYFPZFQGFQHFQIFQJFQKFQLFQMFQNFQOFQPFQQFQRFQSFQTFQUFQVFQWF"
679*86ee64e7SAndroid Build Coastguard Worker     "QXFQYFQZFRGFRHFRIFRJFRKFRLFRMFRNFROFRPFRQFRRFRSFRTFRUFRVFRWFRXFRYFRZFSGFSH"
680*86ee64e7SAndroid Build Coastguard Worker     "FSIFSJFSKFSLFSMFSNFSOFSPFSQFSRFSSFSTFSUFSVFSWFSXFSYFSZFTGFTHFTIFTJFTKFTLFT"
681*86ee64e7SAndroid Build Coastguard Worker     "MFTNFTOFTPFTQFTRFTSFTTFTUFTVFTWFTXFTYFTZFUGFUHFUIFUJFUKFULFUMFUNFUOFUPFUQF"
682*86ee64e7SAndroid Build Coastguard Worker     "URFUSFUTFUUFUVFUWFUXFUYFUZFVGFVHFVIFVJFVKFVLFVMFVNFVOFVPFVQFVRFVSFVTFVUFVV"
683*86ee64e7SAndroid Build Coastguard Worker     "FVWFVXFVYFVZFWGFWHFWIFWJFWKFWLFWMFWNFWOFWPFWQFWRFWSFWTFWUFWVFWWFWXFWYFWZFX"
684*86ee64e7SAndroid Build Coastguard Worker     "GFXHFXIFXJFXKFXLFXMFXNFXOFXPFXQFXRFXSFXTFXUFXVFXWFXXFXYFXZFYGFYHFYIFYJFYKF"
685*86ee64e7SAndroid Build Coastguard Worker     "YLFYMFYNFYOFYPFYQFYRFYSFYTFYUFYVFYWFYXFYYFYZFZGFZHFZIFZJFZKFZLFZMFZNFZOFZP"
686*86ee64e7SAndroid Build Coastguard Worker     "FZQFZRFZSFZTFZUFZVFZWFZXFZYFZZGGGHGGIGGJGGKGGLGGMGGNGGOGGPGGQGGRGGSGGTGGUG"
687*86ee64e7SAndroid Build Coastguard Worker     "GVGGWGGXGGYGGZGHHGHIGHJGHKGHLGHMGHNGHOGHPGHQGHRGHSGHTGHUGHVGHWGHXGHYGHZGIH"
688*86ee64e7SAndroid Build Coastguard Worker     "GIIGIJGIKGILGIMGINGIOGIPGIQGIRGISGITGIUGIVGIWGIXGIYGIZGJHGJIGJJGJKGJLGJMGJ"
689*86ee64e7SAndroid Build Coastguard Worker     "NGJOGJPGJQGJRGJSGJTGJUGJVGJWGJXGJYGJZGKHGKIGKJGKKGKLGKMGKNGKOGKPGKQGKRGKSG"
690*86ee64e7SAndroid Build Coastguard Worker     "KTGKUGKVGKWGKXGKYGKZGLHGLIGLJGLKGLLGLMGLNGLOGLPGLQGLRGLSGLTGLUGLVGLWGLXGLY"
691*86ee64e7SAndroid Build Coastguard Worker     "GLZGMHGMIGMJGMKGMLGMMGMNGMOGMPGMQGMRGMSGMTGMUGMVGMWGMXGMYGMZGNHGNIGNJGNKGN"
692*86ee64e7SAndroid Build Coastguard Worker     "LGNMGNNGNOGNPGNQGNRGNSGNTGNUGNVGNWGNXGNYGNZGOHGOIGOJGOKGOLGOMGONGOOGOPGOQG"
693*86ee64e7SAndroid Build Coastguard Worker     "ORGOSGOTGOUGOVGOWGOXGOYGOZGPHGPIGPJGPKGPLGPMGPNGPOGPPGPQGPRGPSGPTGPUGPVGPW"
694*86ee64e7SAndroid Build Coastguard Worker     "GPXGPYGPZGQHGQIGQJGQKGQLGQMGQNGQOGQPGQQGQRGQSGQTGQUGQVGQWGQXGQYGQZGRHGRIGR"
695*86ee64e7SAndroid Build Coastguard Worker     "JGRKGRLGRMGRNGROGRPGRQGRRGRSGRTGRUGRVGRWGRXGRYGRZGSHGSIGSJGSKGSLGSMGSNGSOG"
696*86ee64e7SAndroid Build Coastguard Worker     "SPGSQGSRGSSGSTGSUGSVGSWGSXGSYGSZGTHGTIGTJGTKGTLGTMGTNGTOGTPGTQGTRGTSGTTGTU"
697*86ee64e7SAndroid Build Coastguard Worker     "GTVGTWGTXGTYGTZGUHGUIGUJGUKGULGUMGUNGUOGUPGUQGURGUSGUTGUUGUVGUWGUXGUYGUZGV"
698*86ee64e7SAndroid Build Coastguard Worker     "HGVIGVJGVKGVLGVMGVNGVOGVPGVQGVRGVSGVTGVUGVVGVWGVXGVYGVZGWHGWIGWJGWKGWLGWMG"
699*86ee64e7SAndroid Build Coastguard Worker     "WNGWOGWPGWQGWRGWSGWTGWUGWVGWWGWXGWYGWZGXHGXIGXJGXKGXLGXMGXNGXOGXPGXQGXRGXS"
700*86ee64e7SAndroid Build Coastguard Worker     "GXTGXUGXVGXWGXXGXYGXZGYHGYIGYJGYKGYLGYMGYNGYOGYPGYQGYRGYSGYTGYUGYVGYWGYXGY"
701*86ee64e7SAndroid Build Coastguard Worker     "YGYZGZHGZIGZJGZKGZLGZMGZNGZOGZPGZQGZRGZSGZTGZUGZVGZWGZXGZYGZZHHHIHHJHHKHHL"
702*86ee64e7SAndroid Build Coastguard Worker     "HHMHHNHHOHHPHHQHHRHHSHHTHHUHHVHHWHHXHHYHHZHIIHIJHIKHILHIMHINHIOHIPHIQHIRHI"
703*86ee64e7SAndroid Build Coastguard Worker     "SHITHIUHIVHIWHIXHIYHIZHJIHJJHJKHJLHJMHJNHJOHJPHJQHJRHJSHJTHJUHJVHJWHJXHJYH"
704*86ee64e7SAndroid Build Coastguard Worker     "JZHKIHKJHKKHKLHKMHKNHKOHKPHKQHKRHKSHKTHKUHKVHKWHKXHKYHKZHLIHLJHLKHLLHLMHLN"
705*86ee64e7SAndroid Build Coastguard Worker     "HLOHLPHLQHLRHLSHLTHLUHLVHLWHLXHLYHLZHMIHMJHMKHMLHMMHMNHMOHMPHMQHMRHMSHMTHM"
706*86ee64e7SAndroid Build Coastguard Worker     "UHMVHMWHMXHMYHMZHNIHNJHNKHNLHNMHNNHNOHNPHNQHNRHNSHNTHNUHNVHNWHNXHNYHNZHOIH"
707*86ee64e7SAndroid Build Coastguard Worker     "OJHOKHOLHOMHONHOOHOPHOQHORHOSHOTHOUHOVHOWHOXHOYHOZHPIHPJHPKHPLHPMHPNHPOHPP"
708*86ee64e7SAndroid Build Coastguard Worker     "HPQHPRHPSHPTHPUHPVHPWHPXHPYHPZHQIHQJHQKHQLHQMHQNHQOHQPHQQHQRHQSHQTHQUHQVHQ"
709*86ee64e7SAndroid Build Coastguard Worker     "WHQXHQYHQZHRIHRJHRKHRLHRMHRNHROHRPHRQHRRHRSHRTHRUHRVHRWHRXHRYHRZHSIHSJHSKH"
710*86ee64e7SAndroid Build Coastguard Worker     "SLHSMHSNHSOHSPHSQHSRHSSHSTHSUHSVHSWHSXHSYHSZHTIHTJHTKHTLHTMHTNHTOHTPHTQHTR"
711*86ee64e7SAndroid Build Coastguard Worker     "HTSHTTHTUHTVHTWHTXHTYHTZHUIHUJHUKHULHUMHUNHUOHUPHUQHURHUSHUTHUUHUVHUWHUXHU"
712*86ee64e7SAndroid Build Coastguard Worker     "YHUZHVIHVJHVKHVLHVMHVNHVOHVPHVQHVRHVSHVTHVUHVVHVWHVXHVYHVZHWIHWJHWKHWLHWMH"
713*86ee64e7SAndroid Build Coastguard Worker     "WNHWOHWPHWQHWRHWSHWTHWUHWVHWWHWXHWYHWZHXIHXJHXKHXLHXMHXNHXOHXPHXQHXRHXSHXT"
714*86ee64e7SAndroid Build Coastguard Worker     "HXUHXVHXWHXXHXYHXZHYIHYJHYKHYLHYMHYNHYOHYPHYQHYRHYSHYTHYUHYVHYWHYXHYYHYZHZ"
715*86ee64e7SAndroid Build Coastguard Worker     "IHZJHZKHZLHZMHZNHZOHZPHZQHZRHZSHZTHZUHZVHZWHZXHZYHZZIIIJIIKIILIIMIINIIOIIP"
716*86ee64e7SAndroid Build Coastguard Worker     "IIQIIRIISIITIIUIIVIIWIIXIIYIIZIJJIJKIJLIJMIJNIJOIJPIJQIJRIJSIJTIJUIJVIJWIJ"
717*86ee64e7SAndroid Build Coastguard Worker     "XIJYIJZIKJIKKIKLIKMIKNIKOIKPIKQIKRIKSIKTIKUIKVIKWIKXIKYIKZILJILKILLILMILNI"
718*86ee64e7SAndroid Build Coastguard Worker     "LOILPILQILRILSILTILUILVILWILXILYILZIMJIMKIMLIMMIMNIMOIMPIMQIMRIMSIMTIMUIMV"
719*86ee64e7SAndroid Build Coastguard Worker     "IMWIMXIMYIMZINJINKINLINMINNINOINPINQINRINSINTINUINVINWINXINYINZIOJIOKIOLIO"
720*86ee64e7SAndroid Build Coastguard Worker     "MIONIOOIOPIOQIORIOSIOTIOUIOVIOWIOXIOYIOZIPJIPKIPLIPMIPNIPOIPPIPQIPRIPSIPTI"
721*86ee64e7SAndroid Build Coastguard Worker     "PUIPVIPWIPXIPYIPZIQJIQKIQLIQMIQNIQOIQPIQQIQRIQSIQTIQUIQVIQWIQXIQYIQZIRJIRK"
722*86ee64e7SAndroid Build Coastguard Worker     "IRLIRMIRNIROIRPIRQIRRIRSIRTIRUIRVIRWIRXIRYIRZISJISKISLISMISNISOISPISQISRIS"
723*86ee64e7SAndroid Build Coastguard Worker     "SISTISUISVISWISXISYISZITJITKITLITMITNITOITPITQITRITSITTITUITVITWITXITYITZI"
724*86ee64e7SAndroid Build Coastguard Worker     "UJIUKIULIUMIUNIUOIUPIUQIURIUSIUTIUUIUVIUWIUXIUYIUZIVJIVKIVLIVMIVNIVOIVPIVQ"
725*86ee64e7SAndroid Build Coastguard Worker     "IVRIVSIVTIVUIVVIVWIVXIVYIVZIWJIWKIWLIWMIWNIWOIWPIWQIWRIWSIWTIWUIWVIWWIWXIW"
726*86ee64e7SAndroid Build Coastguard Worker     "YIWZIXJIXKIXLIXMIXNIXOIXPIXQIXRIXSIXTIXUIXVIXWIXXIXYIXZIYJIYKIYLIYMIYNIYOI"
727*86ee64e7SAndroid Build Coastguard Worker     "YPIYQIYRIYSIYTIYUIYVIYWIYXIYYIYZIZJIZKIZLIZMIZNIZOIZPIZQIZRIZSIZTIZUIZVIZW"
728*86ee64e7SAndroid Build Coastguard Worker     "IZXIZYIZZJJJKJJLJJMJJNJJOJJPJJQJJRJJSJJTJJUJJVJJWJJXJJYJJZJKKJKLJKMJKNJKOJ"
729*86ee64e7SAndroid Build Coastguard Worker     "KPJKQJKRJKSJKTJKUJKVJKWJKXJKYJKZJLKJLLJLMJLNJLOJLPJLQJLRJLSJLTJLUJLVJLWJLX"
730*86ee64e7SAndroid Build Coastguard Worker     "JLYJLZJMKJMLJMMJMNJMOJMPJMQJMRJMSJMTJMUJMVJMWJMXJMYJMZJNKJNLJNMJNNJNOJNPJN"
731*86ee64e7SAndroid Build Coastguard Worker     "QJNRJNSJNTJNUJNVJNWJNXJNYJNZJOKJOLJOMJONJOOJOPJOQJORJOSJOTJOUJOVJOWJOXJOYJ"
732*86ee64e7SAndroid Build Coastguard Worker     "OZJPKJPLJPMJPNJPOJPPJPQJPRJPSJPTJPUJPVJPWJPXJPYJPZJQKJQLJQMJQNJQOJQPJQQJQR"
733*86ee64e7SAndroid Build Coastguard Worker     "JQSJQTJQUJQVJQWJQXJQYJQZJRKJRLJRMJRNJROJRPJRQJRRJRSJRTJRUJRVJRWJRXJRYJRZJS"
734*86ee64e7SAndroid Build Coastguard Worker     "KJSLJSMJSNJSOJSPJSQJSRJSSJSTJSUJSVJSWJSXJSYJSZJTKJTLJTMJTNJTOJTPJTQJTRJTSJ"
735*86ee64e7SAndroid Build Coastguard Worker     "TTJTUJTVJTWJTXJTYJTZJUKJULJUMJUNJUOJUPJUQJURJUSJUTJUUJUVJUWJUXJUYJUZJVKJVL"
736*86ee64e7SAndroid Build Coastguard Worker     "JVMJVNJVOJVPJVQJVRJVSJVTJVUJVVJVWJVXJVYJVZJWKJWLJWMJWNJWOJWPJWQJWRJWSJWTJW"
737*86ee64e7SAndroid Build Coastguard Worker     "UJWVJWWJWXJWYJWZJXKJXLJXMJXNJXOJXPJXQJXRJXSJXTJXUJXVJXWJXXJXYJXZJYKJYLJYMJ"
738*86ee64e7SAndroid Build Coastguard Worker     "YNJYOJYPJYQJYRJYSJYTJYUJYVJYWJYXJYYJYZJZKJZLJZMJZNJZOJZPJZQJZRJZSJZTJZUJZV"
739*86ee64e7SAndroid Build Coastguard Worker     "JZWJZXJZYJZZKKKLKKMKKNKKOKKPKKQKKRKKSKKTKKUKKVKKWKKXKKYKKZKLLKLMKLNKLOKLPK"
740*86ee64e7SAndroid Build Coastguard Worker     "LQKLRKLSKLTKLUKLVKLWKLXKLYKLZKMLKMMKMNKMOKMPKMQKMRKMSKMTKMUKMVKMWKMXKMYKMZ"
741*86ee64e7SAndroid Build Coastguard Worker     "KNLKNMKNNKNOKNPKNQKNRKNSKNTKNUKNVKNWKNXKNYKNZKOLKOMKONKOOKOPKOQKORKOSKOTKO"
742*86ee64e7SAndroid Build Coastguard Worker     "UKOVKOWKOXKOYKOZKPLKPMKPNKPOKPPKPQKPRKPSKPTKPUKPVKPWKPXKPYKPZKQLKQMKQNKQOK"
743*86ee64e7SAndroid Build Coastguard Worker     "QPKQQKQRKQSKQTKQUKQVKQWKQXKQYKQZKRLKRMKRNKROKRPKRQKRRKRSKRTKRUKRVKRWKRXKRY"
744*86ee64e7SAndroid Build Coastguard Worker     "KRZKSLKSMKSNKSOKSPKSQKSRKSSKSTKSUKSVKSWKSXKSYKSZKTLKTMKTNKTOKTPKTQKTRKTSKT"
745*86ee64e7SAndroid Build Coastguard Worker     "TKTUKTVKTWKTXKTYKTZKULKUMKUNKUOKUPKUQKURKUSKUTKUUKUVKUWKUXKUYKUZKVLKVMKVNK"
746*86ee64e7SAndroid Build Coastguard Worker     "VOKVPKVQKVRKVSKVTKVUKVVKVWKVXKVYKVZKWLKWMKWNKWOKWPKWQKWRKWSKWTKWUKWVKWWKWX"
747*86ee64e7SAndroid Build Coastguard Worker     "KWYKWZKXLKXMKXNKXOKXPKXQKXRKXSKXTKXUKXVKXWKXXKXYKXZKYLKYMKYNKYOKYPKYQKYRKY"
748*86ee64e7SAndroid Build Coastguard Worker     "SKYTKYUKYVKYWKYXKYYKYZKZLKZMKZNKZOKZPKZQKZRKZSKZTKZUKZVKZWKZXKZYKZZLLLMLLN"
749*86ee64e7SAndroid Build Coastguard Worker     "LLOLLPLLQLLRLLSLLTLLULLVLLWLLXLLYLLZLMMLMNLMOLMPLMQLMRLMSLMTLMULMVLMWLMXLM"
750*86ee64e7SAndroid Build Coastguard Worker     "YLMZLNMLNNLNOLNPLNQLNRLNSLNTLNULNVLNWLNXLNYLNZLOMLONLOOLOPLOQLORLOSLOTLOUL"
751*86ee64e7SAndroid Build Coastguard Worker     "OVLOWLOXLOYLOZLPMLPNLPOLPPLPQLPRLPSLPTLPULPVLPWLPXLPYLPZLQMLQNLQOLQPLQQLQR"
752*86ee64e7SAndroid Build Coastguard Worker     "LQSLQTLQULQVLQWLQXLQYLQZLRMLRNLROLRPLRQLRRLRSLRTLRULRVLRWLRXLRYLRZLSMLSNLS"
753*86ee64e7SAndroid Build Coastguard Worker     "OLSPLSQLSRLSSLSTLSULSVLSWLSXLSYLSZLTMLTNLTOLTPLTQLTRLTSLTTLTULTVLTWLTXLTYL"
754*86ee64e7SAndroid Build Coastguard Worker     "TZLUMLUNLUOLUPLUQLURLUSLUTLUULUVLUWLUXLUYLUZLVMLVNLVOLVPLVQLVRLVSLVTLVULVV"
755*86ee64e7SAndroid Build Coastguard Worker     "LVWLVXLVYLVZLWMLWNLWOLWPLWQLWRLWSLWTLWULWVLWWLWXLWYLWZLXMLXNLXOLXPLXQLXRLX"
756*86ee64e7SAndroid Build Coastguard Worker     "SLXTLXULXVLXWLXXLXYLXZLYMLYNLYOLYPLYQLYRLYSLYTLYULYVLYWLYXLYYLYZLZMLZNLZOL"
757*86ee64e7SAndroid Build Coastguard Worker     "ZPLZQLZRLZSLZTLZULZVLZWLZXLZYLZZMMMNMMOMMPMMQMMRMMSMMTMMUMMVMMWMMXMMYMMZMN"
758*86ee64e7SAndroid Build Coastguard Worker     "NMNOMNPMNQMNRMNSMNTMNUMNVMNWMNXMNYMNZMONMOOMOPMOQMORMOSMOTMOUMOVMOWMOXMOYM"
759*86ee64e7SAndroid Build Coastguard Worker     "OZMPNMPOMPPMPQMPRMPSMPTMPUMPVMPWMPXMPYMPZMQNMQOMQPMQQMQRMQSMQTMQUMQVMQWMQX"
760*86ee64e7SAndroid Build Coastguard Worker     "MQYMQZMRNMROMRPMRQMRRMRSMRTMRUMRVMRWMRXMRYMRZMSNMSOMSPMSQMSRMSSMSTMSUMSVMS"
761*86ee64e7SAndroid Build Coastguard Worker     "WMSXMSYMSZMTNMTOMTPMTQMTRMTSMTTMTUMTVMTWMTXMTYMTZMUNMUOMUPMUQMURMUSMUTMUUM"
762*86ee64e7SAndroid Build Coastguard Worker     "UVMUWMUXMUYMUZMVNMVOMVPMVQMVRMVSMVTMVUMVVMVWMVXMVYMVZMWNMWOMWPMWQMWRMWSMWT"
763*86ee64e7SAndroid Build Coastguard Worker     "MWUMWVMWWMWXMWYMWZMXNMXOMXPMXQMXRMXSMXTMXUMXVMXWMXXMXYMXZMYNMYOMYPMYQMYRMY"
764*86ee64e7SAndroid Build Coastguard Worker     "SMYTMYUMYVMYWMYXMYYMYZMZNMZOMZPMZQMZRMZSMZTMZUMZVMZWMZXMZYMZZNNNONNPNNQNNR"
765*86ee64e7SAndroid Build Coastguard Worker     "NNSNNTNNUNNVNNWNNXNNYNNZNOONOPNOQNORNOSNOTNOUNOVNOWNOXNOYNOZNPONPPNPQNPRNP"
766*86ee64e7SAndroid Build Coastguard Worker     "SNPTNPUNPVNPWNPXNPYNPZNQONQPNQQNQRNQSNQTNQUNQVNQWNQXNQYNQZNRONRPNRQNRRNRSN"
767*86ee64e7SAndroid Build Coastguard Worker     "RTNRUNRVNRWNRXNRYNRZNSONSPNSQNSRNSSNSTNSUNSVNSWNSXNSYNSZNTONTPNTQNTRNTSNTT"
768*86ee64e7SAndroid Build Coastguard Worker     "NTUNTVNTWNTXNTYNTZNUONUPNUQNURNUSNUTNUUNUVNUWNUXNUYNUZNVONVPNVQNVRNVSNVTNV"
769*86ee64e7SAndroid Build Coastguard Worker     "UNVVNVWNVXNVYNVZNWONWPNWQNWRNWSNWTNWUNWVNWWNWXNWYNWZNXONXPNXQNXRNXSNXTNXUN"
770*86ee64e7SAndroid Build Coastguard Worker     "XVNXWNXXNXYNXZNYONYPNYQNYRNYSNYTNYUNYVNYWNYXNYYNYZNZONZPNZQNZRNZSNZTNZUNZV"
771*86ee64e7SAndroid Build Coastguard Worker     "NZWNZXNZYNZZOOOPOOQOOROOSOOTOOUOOVOOWOOXOOYOOZOPPOPQOPROPSOPTOPUOPVOPWOPXO"
772*86ee64e7SAndroid Build Coastguard Worker     "PYOPZOQPOQQOQROQSOQTOQUOQVOQWOQXOQYOQZORPORQORRORSORTORUORVORWORXORYORZOSP"
773*86ee64e7SAndroid Build Coastguard Worker     "OSQOSROSSOSTOSUOSVOSWOSXOSYOSZOTPOTQOTROTSOTTOTUOTVOTWOTXOTYOTZOUPOUQOUROU"
774*86ee64e7SAndroid Build Coastguard Worker     "SOUTOUUOUVOUWOUXOUYOUZOVPOVQOVROVSOVTOVUOVVOVWOVXOVYOVZOWPOWQOWROWSOWTOWUO"
775*86ee64e7SAndroid Build Coastguard Worker     "WVOWWOWXOWYOWZOXPOXQOXROXSOXTOXUOXVOXWOXXOXYOXZOYPOYQOYROYSOYTOYUOYVOYWOYX"
776*86ee64e7SAndroid Build Coastguard Worker     "OYYOYZOZPOZQOZROZSOZTOZUOZVOZWOZXOZYOZZPPPQPPRPPSPPTPPUPPVPPWPPXPPYPPZPQQP"
777*86ee64e7SAndroid Build Coastguard Worker     "QRPQSPQTPQUPQVPQWPQXPQYPQZPRQPRRPRSPRTPRUPRVPRWPRXPRYPRZPSQPSRPSSPSTPSUPSV"
778*86ee64e7SAndroid Build Coastguard Worker     "PSWPSXPSYPSZPTQPTRPTSPTTPTUPTVTABUABVABWABXABYABZACBACCACDACEACFACGACHACIA"
779*86ee64e7SAndroid Build Coastguard Worker     "CJACKACLACMACNACOACPACQACRACSACTACUACVACWACXACYACZADBADCADDADEADFADGADHADI"
780*86ee64e7SAndroid Build Coastguard Worker     "ADJADKADLADMADAAABAACAADAAEAAFAAGAAHAAIAAJAAKAALAAMAANAAOAAPAAQAARAASAATAA"
781*86ee64e7SAndroid Build Coastguard Worker     "UAAVAAWAAXAAYAAZABBABCABDABEABFABGABHABIABJABKABLABMABNABOABPABQABRABSABHA"
782*86ee64e7SAndroid Build Coastguard Worker     "FIAFJAFKAFLAFMAFNAFOAFPAFQAFRAFSAFTAFUAFVAFWAFXAFYAFZAGBAGCAGDAGEAGFAGGAGH"
783*86ee64e7SAndroid Build Coastguard Worker     "AGIAGJAGKAGLAGMAGNAGOAGPAGQAGRAGSAGTAGUAGVAGWAGXAGYAGZAHNADOADPADQADRADSAD"
784*86ee64e7SAndroid Build Coastguard Worker     "TADUADVADWADXADYADZAEBAECAEDAEEAEFAEGAEHAEIAEJAEKAELAEMAENAEOAEPAEQAERAESA"
785*86ee64e7SAndroid Build Coastguard Worker     "ETAEUAEVAEWAEXAEYAEZAFBAFCAFDAFEAFFAFGAFUAIVAIWAIXAIYAIZAJBAJCAJDAJEAJFAJG"
786*86ee64e7SAndroid Build Coastguard Worker     "AJHAJIAJJAJKAJLAJMAJNAJOAJPAJQAJRAJSAJTAJUAJVAJWAJXAJYAJZAKBAKCAKDAKEAKFAK"
787*86ee64e7SAndroid Build Coastguard Worker     "GAKHAKIAKJAKKAKLAKMAKNAKBAHCAHDAHEAHFAHGAHHAHIAHJAHKAHLAHMAHNAHOAHPAHQAHRA"
788*86ee64e7SAndroid Build Coastguard Worker     "HSAHTAHUAHVAHWAHXAHYAHZAIBAICAIDAIEAIFAIGAIHAIIAIJAIKAILAIMAINAIOAIPAIQAIR"
789*86ee64e7SAndroid Build Coastguard Worker     "AISAITAIIAMJAMKAMLAMMAMNAMOAMPAMQAMRAMSAMTAMUAMVAMWAMXAMYAMZANBANCANDANEAN"
790*86ee64e7SAndroid Build Coastguard Worker     "FANGANHANIANJANKANLANMANNANOANPANQANRANSANTANUANVANWANXANYANZAOBAOOAKPAKQA"
791*86ee64e7SAndroid Build Coastguard Worker     "KRAKSAKTAKUAKVAKWAKXAKYAKZALBALCALDALEALFALGALHALIALJALKALLALMALNALOALPALQ"
792*86ee64e7SAndroid Build Coastguard Worker     "ALRALSALTALUALVALWALXALYALZAMBAMCAMDAMEAMFAMGAMHAMVAPWAPXAPYAPZAQBAQCAQDAQ"
793*86ee64e7SAndroid Build Coastguard Worker     "EAQFAQGAQHAQIAQJAQKAQLAQMAQNAQOAQPAQQAQRAQSAQTAQUAQVAQWAQXAQYAQZARBARCARDA"
794*86ee64e7SAndroid Build Coastguard Worker     "REARFARGARHARIARJARKARLARMARNAROARCAODAOEAOFAOGAOHAOIAOJAOKAOLAOMAONAOOAOP"
795*86ee64e7SAndroid Build Coastguard Worker     "AOQAORAOSAOTAOUAOVAOWAOXAOYAOZAPBAPCAPDAPEAPFAPGAPHAPIAPJAPKAPLAPMAPNAPOAP"
796*86ee64e7SAndroid Build Coastguard Worker     "PAPQAPRAPSAPTAPUAPJATKATLATMATNATOATPATQATRATSATTATUATVATWATXATYATZAUBAUCA"
797*86ee64e7SAndroid Build Coastguard Worker     "UDAUEAUFAUGAUHAUIAUJAUKAULAUMAUNAUOAUPAUQAURAUSAUTAUUAUVAUWAUXAUYAUZAVBAVC"
798*86ee64e7SAndroid Build Coastguard Worker     "AVPARQARRARSARTARUARVARWARXARYARZASBASCASDASEASFASGASHASIASJASKASLASMASNAS"
799*86ee64e7SAndroid Build Coastguard Worker     "OASPASQASRASSASTASUASVASWASXASYASZATBATCATDATEATFATGATHATIATWAWXAWYAWZAXBA"
800*86ee64e7SAndroid Build Coastguard Worker     "XCAXDAXEAXFAXGAXHAXIAXJAXKAXLAXMAXNAXOAXPAXQAXRAXSAXTAXUAXVAXWAXXAXYAXZAYB"
801*86ee64e7SAndroid Build Coastguard Worker     "AYCAYDAYEAYFAYGAYHAYIAYJAYKAYLAYMAYNAYOAYPAYDAVEAVFAVGAVHAVIAVJAVKAVLAVMAV"
802*86ee64e7SAndroid Build Coastguard Worker     "NAVOAVPAVQAVRAVSAVTAVUAVVAVWAVXAVYAVZAWBAWCAWDAWEAWFAWGAWHAWIAWJAWKAWLAWMA"
803*86ee64e7SAndroid Build Coastguard Worker     "WNAWOAWPAWQAWRAWSAWTAWUAWVAWBLBBMBBNBBOBBPBBQBBRBBSBBTBBUBBVBBWBBXBBYBBZBC"
804*86ee64e7SAndroid Build Coastguard Worker     "CBCDBCEBCFBCGBCHBCIBCJBCKBCLBCMBCNBCOBCPBCQBCRBCSBCTBCUBCVBCWBCXBCYBCZBDCB"
805*86ee64e7SAndroid Build Coastguard Worker     "DDBDEBDFBDGBQAYRAYSAYTAYUAYVAYWAYXAYYAYZAZBAZCAZDAZEAZFAZGAZHAZIAZJAZKAZLA"
806*86ee64e7SAndroid Build Coastguard Worker     "ZMAZNAZOAZPAZQAZRAZSAZTAZUAZVAZWAZXAZYAZZBBBCBBDBBEBBFBBGBBHBBIBBJBBKBFDBF"
807*86ee64e7SAndroid Build Coastguard Worker     "EBFFBFGBFHBFIBFJBFKBFLBFMBFNBFOBFPBFQBFRBFSBFTBFUBFVBFWBFXBFYBFZBGCBGDBGEB"
808*86ee64e7SAndroid Build Coastguard Worker     "GFBGGBGHBGIBGJBGKBGLBGMBGNBGOBGPBGQBGRBGSBGTBGUBGVBGWBDHBDIBDJBDKBDLBDMBDN"
809*86ee64e7SAndroid Build Coastguard Worker     "BDOBDPBDQBDRBDSBDTBDUBDVBDWBDXBDYBDZBECBEDBEEBEFBEGBEHBEIBEJBEKBELBEMBENBE"
810*86ee64e7SAndroid Build Coastguard Worker     "OBEPBEQBERBESBETBEUBEVBEWBEXBEYBEZBFCBITBIUBIVBIWBIXBIYBIZBJCBJDBJEBJFBJGB"
811*86ee64e7SAndroid Build Coastguard Worker     "JHBJIBJJBJKBJLBJMBJNBJOBJPBJQBJRBJSBJTBJUBJVBJWBJXBJYBJZBKCBKDBKEBKFBKGBKH"
812*86ee64e7SAndroid Build Coastguard Worker     "BKIBKJBKKBKLBKMBKNBKOBGXBGYBGZBHCBHDBHEBHFBHGBHHBHIBHJBHKBHLBHMBHNBHOBHPBH"
813*86ee64e7SAndroid Build Coastguard Worker     "QBHRBHSBHTBHUBHVBHWBHXBHYBHZBICBIDBIEBIFBIGBIHBIIBIJBIKBILBIMBINBIOBIPBIQB"
814*86ee64e7SAndroid Build Coastguard Worker     "IRBISBMLBMMBMNBMOBMPBMQBMRBMSBMTBMUBMVBMWBMXBMYBMZBNCBNDBNEBNFBNGBNHBNIBNJ"
815*86ee64e7SAndroid Build Coastguard Worker     "BNKBNLBNMBNNBNOBNPBNQBNRBNSBNTBNUBNVBNWBNXBNYBNZBOCBODBOEBOFBOGBKPBKQBKRBK"
816*86ee64e7SAndroid Build Coastguard Worker     "SBKTBKUBKVBKWBKXBKYBKZBLCBLDBLEBLFBLGBLHBLIBLJBLKBLLBLMBLNBLOBLPBLQBLRBLSB"
817*86ee64e7SAndroid Build Coastguard Worker     "LTBLUBLVBLWBLXBLYBLZBMCBMDBMEBMFBMGBMHBMIBMJBMKBQDBQEBQFBQGBQHBQIBQJBQKBQL"
818*86ee64e7SAndroid Build Coastguard Worker     "BQMBQNBQOBQPBQQBQRBQSBQTBQUBQVBQWBQXBQYBQZBRCBRDBREBRFBRGBRHBRIBRJBRKBRLBR"
819*86ee64e7SAndroid Build Coastguard Worker     "MBRNBROBRPBRQBRRBRSBRTBRUBRVBRWBOHBOIBOJBOKBOLBOMBONBOOBOPBOQBORBOSBOTBOUB"
820*86ee64e7SAndroid Build Coastguard Worker     "OVBOWBOXBOYBOZBPCBPDBPEBPFBPGBPHBPIBPJBPKBPLBPMBPNBPOBPPBPQBPRBPSBPTBPUBPV"
821*86ee64e7SAndroid Build Coastguard Worker     "BPWBPXBPYBPZBQCBTTBTUBTVBTWBTXBTYBTZBUCBUDBUEBUFBUGBUHBUIBUJBUKBULBUMBUNBU"
822*86ee64e7SAndroid Build Coastguard Worker     "OBUPBUQBURBUSBUTBUUBUVBUWBUXBUYBUZBVCBVDBVEBVFBVGBVHBVIBVJBVKBVLBVMBVNBVOB"
823*86ee64e7SAndroid Build Coastguard Worker     "RXBRYBRZBSCBSDBSEBSFBSGBSHBSIBSJBSKBSLBSMBSNBSOBSPBSQBSRBSSBSTBSUBSVBSWBSX"
824*86ee64e7SAndroid Build Coastguard Worker     "BSYBSZBTCBTDBTEBTFBTGBTHBTIBTJBTKBTLBTMBTNBTOBTPBTQBTRBTSBXLBXMBXNBXOBXPBX"
825*86ee64e7SAndroid Build Coastguard Worker     "QBXRBXSBXTBXUBXVBXWBXXBXYBXZBYCBYDBYEBYFBYGBYHBYIBYJBYKBYLBYMBYNBYOBYPBYQB"
826*86ee64e7SAndroid Build Coastguard Worker     "YRBYSBYTBYUBYVBYWBYXBYYBYZBZCBZDBZEBZFBZGBVPBVQBVRBVSBVTBVUBVVBVWBVXBVYBVZ"
827*86ee64e7SAndroid Build Coastguard Worker     "BWCBWDBWEBWFBWGBWHBWIBWJBWKBWLBWMBWNBWOBWPBWQBWRBWSBWTBWUBWVBWWBWXBWYBWZBX"
828*86ee64e7SAndroid Build Coastguard Worker     "CBXDBXEBXFBXGBXHBXIBXJBXKBCDFCDGCDHCDICDJCDKCDLCDMCDNCDOCDPCDQCDRCDSCDTCDU"
829*86ee64e7SAndroid Build Coastguard Worker     "CDVCDWCDXCDYCDZCEDCEECEFCEGCEHCEICEJCEKCELCEMCENCEOCEPCEQCERCESCETCEUCEVCE"
830*86ee64e7SAndroid Build Coastguard Worker     "WCEXCEYCEZZHBZIBZJBZKBZLBZMBZNBZOBZPBZQBZRBZSBZTBZUBZVBZWBZXBZYBZZCCCDCCEC"
831*86ee64e7SAndroid Build Coastguard Worker     "CFCCGCCHCCICCJCCKCCLCCMCCNCCOCCPCCQCCRCCSCCTCCUCCVCCWCCXCCYCCZCDDCDECGYCGZ"
832*86ee64e7SAndroid Build Coastguard Worker     "CHDCHECHFCHGCHHCHICHJCHKCHLCHMCHNCHOCHPCHQCHRCHSCHTCHUCHVCHWCHXCHYCHZCIDCI"
833*86ee64e7SAndroid Build Coastguard Worker     "ECIFCIGCIHCIICIJCIKCILCIMCINCIOCIPCIQCIRCISCITCIUCIVCFDCFECFFCFGCFHCFICFJC"
834*86ee64e7SAndroid Build Coastguard Worker     "FKCFLCFMCFNCFOCFPCFQCFRCFSCFTCFUCFVCFWCFXCFYCFZCGDCGECGFCGGCGHCGICGJCGKCGL"
835*86ee64e7SAndroid Build Coastguard Worker     "CGMCGNCGOCGPCGQCGRCGSCGTCGUCGVCGWCGXCKUCKVCKWCKXCKYCKZCLDCLECLFCLGCLHCLICL"
836*86ee64e7SAndroid Build Coastguard Worker     "JCLKCLLCLMCLNCLOCLPCLQCLRCLSCLTCLUCLVCLWCLXCLYCLZCMDCMECMFCMGCMHCMICMJCMKC"
837*86ee64e7SAndroid Build Coastguard Worker     "MLCMMCMNCMOCMPCMQCMRCIWCIXCIYCIZCJDCJECJFCJGCJHCJICJJCJKCJLCJMCJNCJOCJPCJQ"
838*86ee64e7SAndroid Build Coastguard Worker     "CJRCJSCJTCJUCJVCJWCJXCJYCJZCKDCKECKFCKGCKHCKICKJCKKCKLCKMCKNCKOCKPCKQCKRCK"
839*86ee64e7SAndroid Build Coastguard Worker     "SCKTCOQCORCOSCOTCOUCOVCOWCOXCOYCOZCPDCPECPFCPGCPHCPICPJCPKCPLCPMCPNCPOCPPC"
840*86ee64e7SAndroid Build Coastguard Worker     "PQCPRCPSCPTCPUCPVCPWCPXCPYCPZCQDCQECQFCQGCQHCQICQJCQKCQLCQMCQNCMSCMTCMUCMV"
841*86ee64e7SAndroid Build Coastguard Worker     "CMWCMXCMYCMZCNDCNECNFCNGCNHCNICNJCNKCNLCNMCNNCNOCNPCNQCNRCNSCNTCNUCNVCNWCN"
842*86ee64e7SAndroid Build Coastguard Worker     "XCNYCNZCODCOECOFCOGCOHCOICOJCOKCOLCOMCONCOOCOPCSMCSNCSOCSPCSQCSRCSSCSTCSUC"
843*86ee64e7SAndroid Build Coastguard Worker     "SVCSWCSXCSYCSZCTDCTECTFCTGCTHCTICTJCTKCTLCTMCTNCTOCTPCTQCTRCTSCTTCTUCTVCTW"
844*86ee64e7SAndroid Build Coastguard Worker     "CTXCTYCTZCUDCUECUFCUGCUHCUICUJCQOCQPCQQCQRCQSCQTCQUCQVCQWCQXCQYCQZCRDCRECR"
845*86ee64e7SAndroid Build Coastguard Worker     "FCRGCRHCRICRJCRKCRLCRMCRNCROCRPCRQCRRCRSCRTCRUCRVCRWCRXCRYCRZCSDCSECSFCSGC"
846*86ee64e7SAndroid Build Coastguard Worker     "SHCSICSJCSKCSLCWICWJCWKCWLCWMCWNCWOCWPCWQCWRCWSCWTCWUCWVCWWCWXCWYCWZCXDCXE"
847*86ee64e7SAndroid Build Coastguard Worker     "CXFCXGCXHCXICXJCXKCXLCXMCXNCXOCXPCXQCXRCXSCXTCXUCXVCXWCXXCXYCXZCYDCYECYFCU"
848*86ee64e7SAndroid Build Coastguard Worker     "KCULCUMCUNCUOCUPCUQCURCUSCUTCUUCUVCUWCUXCUYCUZCVDCVECVFCVGCVHCVICVJCVKCVLC"
849*86ee64e7SAndroid Build Coastguard Worker     "VMCVNCVOCVPCVQCVRCVSCVTCVUCVVCVWCVXCVYCVZCWDCWECWFCWGCWHEDDFDDGDDHDDIDDJDD"
850*86ee64e7SAndroid Build Coastguard Worker     "KDDLDDMDDNDDODDPDDQDDRDDSDDTDDUDDVDDWDDXDDYDDZDEEDEFDEGDEHDEIDEJDEKDELDEMD"
851*86ee64e7SAndroid Build Coastguard Worker     "ENDEODEPDEQDERDESDETDEUDEVDEWDEXDEYDEZDFCYGCYHCYICYJCYKCYLCYMCYNCYOCYPCYQC"
852*86ee64e7SAndroid Build Coastguard Worker     "YRCYSCYTCYUCYVCYWCYXCYYCYZCZDCZECZFCZGCZHCZICZJCZKCZLCZMCZNCZOCZPCZQCZRCZS"
853*86ee64e7SAndroid Build Coastguard Worker     "CZTCZUCZVCZWCZXCZYCZZDDDEDHFDHGDHHDHIDHJDHKDHLDHMDHNDHODHPDHQDHRDHSDHTDHUD"
854*86ee64e7SAndroid Build Coastguard Worker     "HVDHWDHXDHYDHZDIEDIFDIGDIHDIIDIJDIKDILDIMDINDIODIPDIQDIRDISDITDIUDIVDIWDIX"
855*86ee64e7SAndroid Build Coastguard Worker     "DIYDIZDJEDFFDFGDFHDFIDFJDFKDFLDFMDFNDFODFPDFQDFRDFSDFTDFUDFVDFWDFXDFYDFZDG"
856*86ee64e7SAndroid Build Coastguard Worker     "EDGFDGGDGHDGIDGJDGKDGLDGMDGNDGODGPDGQDGRDGSDGTDGUDGVDGWDGXDGYDGZDHEDLFDLGD"
857*86ee64e7SAndroid Build Coastguard Worker     "LHDLIDLJDLKDLLDLMDLNDLODLPDLQDLRDLSDLTDLUDLVDLWDLXDLYDLZDMEDMFDMGDMHDMIDMJ"
858*86ee64e7SAndroid Build Coastguard Worker     "DMKDMLDMMDMNDMODMPDMQDMRDMSDMTDMUDMVDMWDMXDMYDMZDNEDJFDJGDJHDJIDJJDJKDJLDJ"
859*86ee64e7SAndroid Build Coastguard Worker     "MDJNDJODJPDJQDJRDJSDJTDJUDJVDJWDJXDJYDJZDKEDKFDKGDKHDKIDKJDKKDKLDKMDKNDKOD"
860*86ee64e7SAndroid Build Coastguard Worker     "KPDKQDKRDKSDKTDKUDKVDKWDKXDKYDKZDLEDPFDPGDPHDPIDPJDPKDPLDPMDPNDPODPPDPQDPR"
861*86ee64e7SAndroid Build Coastguard Worker     "DPSDPTDPUDPVDPWDPXDPYDPZDQEDQFDQGDQHDQIDQJDQKDQLDQMDQNDQODQPDQQDQRDQSDQTDQ"
862*86ee64e7SAndroid Build Coastguard Worker     "UDQVDQWDQXDQYDQZDREDNFDNGDNHDNIDNJDNKDNLDNMDNNDNODNPDNQDNRDNSDNTDNUDNVDNWD"
863*86ee64e7SAndroid Build Coastguard Worker     "NXDNYDNZDOEDOFDOGDOHDOIDOJDOKDOLDOMDONDOODOPDOQDORDOSDOTDOUDOVDOWDOXDOYDOZ"
864*86ee64e7SAndroid Build Coastguard Worker     "DPEDTFDTGDTHDTIDTJDTKDTLDTMDTNDTODTPDTQDTRDTSDTTDTUDTVDTWDTXDTYDTZDUEDUFDU"
865*86ee64e7SAndroid Build Coastguard Worker     "GDUHDUIDUJDUKDULDUMDUNDUODUPDUQDURDUSDUTDUUDUVDUWDUXDUYDUZDVEDRFDRGDRHDRID"
866*86ee64e7SAndroid Build Coastguard Worker     "RJDRKDRLDRMDRNDRODRPDRQDRRDRSDRTDRUDRVDRWDRXDRYDRZDSEDSFDSGDSHDSIDSJDSKDSL"
867*86ee64e7SAndroid Build Coastguard Worker     "DSMDSNDSODSPDSQDSRDSSDSTDSUDSVDSWDSXDSYDSZDTEDXFDXGDXHDXIDXJDXKDXLDXMDXNDX"
868*86ee64e7SAndroid Build Coastguard Worker     "ODXPDXQDXRDXSDXTDXUDXVDXWDXXDXYDXZDYEDYFDYGDYHDYIDYJDYKDYLDYMDYNDYODYPDYQD"
869*86ee64e7SAndroid Build Coastguard Worker     "YRDYSDYTDYUDYVDYWDYXDYYDYZDZEDVFDVGDVHDVIDVJDVKDVLDVMDVNDVODVPDVQDVRDVSDVT"
870*86ee64e7SAndroid Build Coastguard Worker     "DVUDVVDVWDVXDVYDVZDWEDWFDWGDWHDWIDWJDWKDWLDWMDWNDWODWPDWQDWRDWSDWTDWUDWVDW"
871*86ee64e7SAndroid Build Coastguard Worker     "WDWXDWYDWZDXFGEFHEFIEFJEFKEFLEFMEFNEFOEFPEFQEFREFSEFTEFUEFVEFWEFXEFYEFZEGF"
872*86ee64e7SAndroid Build Coastguard Worker     "EGGEGHEGIEGJEGKEGLEGMEGNEGOEGPEGQEGREGSEGTEGUEGVEGWEGXEGYEGZEHFEHGEHHEEDZF"
873*86ee64e7SAndroid Build Coastguard Worker     "DZGDZHDZIDZJDZKDZLDZMDZNDZODZPDZQDZRDZSDZTDZUDZVDZWDZXDZYDZZEEEFEEGEEHEEIE"
874*86ee64e7SAndroid Build Coastguard Worker     "EJEEKEELEEMEENEEOEEPEEQEEREESEETEEUEEVEEWEEXEEYEEZEFFEJKEJLEJMEJNEJOEJPEJQ"
875*86ee64e7SAndroid Build Coastguard Worker     "EJREJSEJTEJUEJVEJWEJXEJYEJZEKFEKGEKHEKIEKJEKKEKLEKMEKNEKOEKPEKQEKREKSEKTEK"
876*86ee64e7SAndroid Build Coastguard Worker     "UEKVEKWEKXEKYEKZELFELGELHELIELJELKELLEHIEHJEHKEHLEHMEHNEHOEHPEHQEHREHSEHTE"
877*86ee64e7SAndroid Build Coastguard Worker     "HUEHVEHWEHXEHYEHZEIFEIGEIHEIIEIJEIKEILEIMEINEIOEIPEIQEIREISEITEIUEIVEIWEIX"
878*86ee64e7SAndroid Build Coastguard Worker     "EIYEIZEJFEJGEJHEJIEJJENOENPENQENRENSENTENUENVENWENXENYENZEOFEOGEOHEOIEOJEO"
879*86ee64e7SAndroid Build Coastguard Worker     "KEOLEOMEONEOOEOPEOQEOREOSEOTEOUEOVEOWEOXEOYEOZEPFEPGEPHEPIEPJEPKEPLEPMEPNE"
880*86ee64e7SAndroid Build Coastguard Worker     "POEPPELMELNELOELPELQELRELSELTELUELVELWELXELYELZEMFEMGEMHEMIEMJEMKEMLEMMEMN"
881*86ee64e7SAndroid Build Coastguard Worker     "EMOEMPEMQEMREMSEMTEMUEMVEMWEMXEMYEMZENFENGENHENIENJENKENLENMENNERSERTERUER"
882*86ee64e7SAndroid Build Coastguard Worker     "VERWERXERYERZESFESGESHESIESJESKESLESMESNESOESPESQESRESSESTESUESVESWESXESYE"
883*86ee64e7SAndroid Build Coastguard Worker     "SZETFETGETHETIETJETKETLETMETNETOETPETQETRETSETTEPQEPREPSEPTEPUEPVEPWEPXEPY"
884*86ee64e7SAndroid Build Coastguard Worker     "EPZEQFEQGEQHEQIEQJEQKEQLEQMEQNEQOEQPEQQEQREQSEQTEQUEQVEQWEQXEQYEQZERFERGER"
885*86ee64e7SAndroid Build Coastguard Worker     "HERIERJERKERLERMERNEROERPERQERREVWEVXEVYEVZEWFEWGEWHEWIEWJEWKEWLEWMEWNEWOE"
886*86ee64e7SAndroid Build Coastguard Worker     "WPEWQEWREWSEWTEWUEWVEWWEWXEWYEWZEXFEXGEXHEXIEXJEXKEXLEXMEXNEXOEXPEXQEXREXS"
887*86ee64e7SAndroid Build Coastguard Worker     "EXTEXUEXVEXWEXXETUETVETWETXETYETZEUFEUGEUHEUIEUJEUKEULEUMEUNEUOEUPEUQEUREU"
888*86ee64e7SAndroid Build Coastguard Worker     "SEUTEUUEUVEUWEUXEUYEUZEVFEVGEVHEVIEVJEVKEVLEVMEVNEVOEVPEVQEVREVSEVTEVUEVVE"
889*86ee64e7SAndroid Build Coastguard Worker     "FFGFFHFFIFFJFFKFFLFFMFFNFFOFFPFFQFFRFFSFFTFFUFFVFFWFFXFFYFFZFGGFGHFGIFGJFG"
890*86ee64e7SAndroid Build Coastguard Worker     "KFGLFGMFGNFGOFGPFGQFGRFGSFGTFGUFGVFGWFGXFGYFGZFHGFHHFHIFHJXYEXZEYFEYGEYHEY"
891*86ee64e7SAndroid Build Coastguard Worker     "IEYJEYKEYLEYMEYNEYOEYPEYQEYREYSEYTEYUEYVEYWEYXEYYEYZEZFEZGEZHEZIEZJEZKEZLE"
892*86ee64e7SAndroid Build Coastguard Worker     "ZMEZNEZOEZPEZQEZREZSEZTEZUEZVEZWEZXEZYEZZFFJOFJPFJQFJRFJSFJTFJUFJVFJWFJXFJ"
893*86ee64e7SAndroid Build Coastguard Worker     "YFJZFKGFKHFKIFKJFKKFKLFKMFKNFKOFKPFKQFKRFKSFKTFKUFKVFKWFKXFKYFKZFLGFLHFLIF"
894*86ee64e7SAndroid Build Coastguard Worker     "LJFLKFLLFLMFLNFLOFLPFLQFLRFHKFHLFHMFHNFHOFHPFHQFHRFHSFHTFHUFHVFHWFHXFHYFHZ"
895*86ee64e7SAndroid Build Coastguard Worker     "FIGFIHFIIFIJFIKFILFIMFINFIOFIPFIQFIRFISFITFIUFIVFIWFIXFIYFIZFJGFJHFJIFJJFJ"
896*86ee64e7SAndroid Build Coastguard Worker     "KFJLFJMFJNFNWFNXFNYFNZFOGFOHFOIFOJFOKFOLFOMFONFOOFOPFOQFORFOSFOTFOUFOVFOWF"
897*86ee64e7SAndroid Build Coastguard Worker     "OXFOYFOZFPGFPHFPIFPJFPKFPLFPMFPNFPOFPPFPQFPRFPSFPTFPUFPVFPWFPXFPYFPZFLSFLT"
898*86ee64e7SAndroid Build Coastguard Worker     "FLUFLVFLWFLXFLYFLZFMGFMHFMIFMJFMKFMLFMMFMNFMOFMPFMQFMRFMSFMTFMUFMVFMWFMXFM"
899*86ee64e7SAndroid Build Coastguard Worker     "YFMZFNGFNHFNIFNJFNKFNLFNMFNNFNOFNPFNQFNRFNSFNTFNUFNVFSKFSLFSMFSNFSOFSPFSQF"
900*86ee64e7SAndroid Build Coastguard Worker     "SRFSSFSTFSUFSVFSWFSXFSYFSZFTGFTHFTIFTJFTKFTLFTMFTNFTOFTPFTQFTRFTSFTTFTUFTV"
901*86ee64e7SAndroid Build Coastguard Worker     "FTWFTXFTYFTZFUGFUHFUIFUJFUKFULFUMFUNFQGFQHFQIFQJFQKFQLFQMFQNFQOFQPFQQFQRFQ"
902*86ee64e7SAndroid Build Coastguard Worker     "SFQTFQUFQVFQWFQXFQYFQZFRGFRHFRIFRJFRKFRLFRMFRNFROFRPFRQFRRFRSFRTFRUFRVFRWF"
903*86ee64e7SAndroid Build Coastguard Worker     "RXFRYFRZFSGFSHFSIFSJFWSFWTFWUFWVFWWFWXFWYFWZFXGFXHFXIFXJFXKFXLFXMFXNFXOFXP"
904*86ee64e7SAndroid Build Coastguard Worker     "FXQFXRFXSFXTFXUFXVFXWFXXFXYFXZFYGFYHFYIFYJFYKFYLFYMFYNFYOFYPFYQFYRFYSFYTFY"
905*86ee64e7SAndroid Build Coastguard Worker     "UFYVFUOFUPFUQFURFUSFUTFUUFUVFUWFUXFUYFUZFVGFVHFVIFVJFVKFVLFVMFVNFVOFVPFVQF"
906*86ee64e7SAndroid Build Coastguard Worker     "VRFVSFVTFVUFVVFVWFVXFVYFVZFWGFWHFWIFWJFWKFWLFWMFWNFWOFWPFWQFWRHGHIGHJGHKGH"
907*86ee64e7SAndroid Build Coastguard Worker     "LGHMGHNGHOGHPGHQGHRGHSGHTGHUGHVGHWGHXGHYGHZGIHGIIGIJGIKGILGIMGINGIOGIPGIQG"
908*86ee64e7SAndroid Build Coastguard Worker     "IRGISGITGIUGIVGIWGIXGIYGIZGJHGJIGJJGJKGJLGJMGJFYWFYXFYYFYZFZGFZHFZIFZJFZKF"
909*86ee64e7SAndroid Build Coastguard Worker     "ZLFZMFZNFZOFZPFZQFZRFZSFZTFZUFZVFZWFZXFZYFZZGGGHGGIGGJGGKGGLGGMGGNGGOGGPGG"
910*86ee64e7SAndroid Build Coastguard Worker     "QGGRGGSGGTGGUGGVGGWGGXGGYGGZGHTGLUGLVGLWGLXGLYGLZGMHGMIGMJGMKGMLGMMGMNGMOG"
911*86ee64e7SAndroid Build Coastguard Worker     "MPGMQGMRGMSGMTGMUGMVGMWGMXGMYGMZGNHGNIGNJGNKGNLGNMGNNGNOGNPGNQGNRGNSGNTGNU"
912*86ee64e7SAndroid Build Coastguard Worker     "GNVGNWGNXGNYGNNGJOGJPGJQGJRGJSGJTGJUGJVGJWGJXGJYGJZGKHGKIGKJGKKGKLGKMGKNGK"
913*86ee64e7SAndroid Build Coastguard Worker     "OGKPGKQGKRGKSGKTGKUGKVGKWGKXGKYGKZGLHGLIGLJGLKGLLGLMGLNGLOGLPGLQGLRGLSGLMG"
914*86ee64e7SAndroid Build Coastguard Worker     "QNGQOGQPGQQGQRGQSGQTGQUGQVGQWGQXGQYGQZGRHGRIGRJGRKGRLGRMGRNGROGRPGRQGRRGRS"
915*86ee64e7SAndroid Build Coastguard Worker     "GRTGRUGRVGRWGRXGRYGRZGSHGSIGSJGSKGSLGSMGSNGSOGSPGSQGSRGSZGOHGOIGOJGOKGOLGO"
916*86ee64e7SAndroid Build Coastguard Worker     "MGONGOOGOPGOQGORGOSGOTGOUGOVGOWGOXGOYGOZGPHGPIGPJGPKGPLGPMGPNGPOGPPGPQGPRG"
917*86ee64e7SAndroid Build Coastguard Worker     "PSGPTGPUGPVGPWGPXGPYGPZGQHGQIGQJGQKGQLGQYGUZGVHGVIGVJGVKGVLGVMGVNGVOGVPGVQ"
918*86ee64e7SAndroid Build Coastguard Worker     "GVRGVSGVTGVUGVVGVWGVXGVYGVZGWHGWIGWJGWKGWLGWMGWNGWOGWPGWQGWRGWSGWTGWUGWVGW"
919*86ee64e7SAndroid Build Coastguard Worker     "WGWXGWYGWZGXHGXIGXJGXKGXSGSTGSUGSVGSWGSXGSYGSZGTHGTIGTJGTKGTLGTMGTNGTOGTPG"
920*86ee64e7SAndroid Build Coastguard Worker     "TQGTRGTSGTTGTUGTVGTWGTXGTYGTZGUHGUIGUJGUKGULGUMGUNGUOGUPGUQGURGUSGUTGUUGUV"
921*86ee64e7SAndroid Build Coastguard Worker     "GUWGUXGURGZSGZTGZUGZVGZWGZXGZYGZZHHHIHHJHHKHHLHHMHHNHHOHHPHHQHHRHHSHHTHHUH"
922*86ee64e7SAndroid Build Coastguard Worker     "HVHHWHHXHHYHHZHIIHIJHIKHILHIMHINHIOHIPHIQHIRHISHITHIUHIVHIWHIXHIYHLGXMGXNG"
923*86ee64e7SAndroid Build Coastguard Worker     "XOGXPGXQGXRGXSGXTGXUGXVGXWGXXGXYGXZGYHGYIGYJGYKGYLGYMGYNGYOGYPGYQGYRGYSGYT"
924*86ee64e7SAndroid Build Coastguard Worker     "GYUGYVGYWGYXGYYGYZGZHGZIGZJGZKGZLGZMGZNGZOGZPGZQGZLPHLQHLRHLSHLTHLUHLVHLWH"
925*86ee64e7SAndroid Build Coastguard Worker     "LXHLYHLZHMIHMJHMKHMLHMMHMNHMOHMPHMQHMRHMSHMTHMUHMVHMWHMXHMYHMZHNIHNJHNKHNL"
926*86ee64e7SAndroid Build Coastguard Worker     "HNMHNNHNOHNPHNQHNRHNSHNTHNUHNVHNWHIZHJIHJJHJKHJLHJMHJNHJOHJPHJQHJRHJSHJTHJ"
927*86ee64e7SAndroid Build Coastguard Worker     "UHJVHJWHJXHJYHJZHKIHKJHKKHKLHKMHKNHKOHKPHKQHKRHKSHKTHKUHKVHKWHKXHKYHKZHLIH"
928*86ee64e7SAndroid Build Coastguard Worker     "LJHLKHLLHLMHLNHLOHQNHQOHQPHQQHQRHQSHQTHQUHQVHQWHQXHQYHQZHRIHRJHRKHRLHRMHRN"
929*86ee64e7SAndroid Build Coastguard Worker     "HROHRPHRQHRRHRSHRTHRUHRVHRWHRXHRYHRZHSIHSJHSKHSLHSMHSNHSOHSPHSQHSRHSSHSTHS"
930*86ee64e7SAndroid Build Coastguard Worker     "UHNXHNYHNZHOIHOJHOKHOLHOMHONHOOHOPHOQHORHOSHOTHOUHOVHOWHOXHOYHOZHPIHPJHPKH"
931*86ee64e7SAndroid Build Coastguard Worker     "PLHPMHPNHPOHPPHPQHPRHPSHPTHPUHPVHPWHPXHPYHPZHQIHQJHQKHQLHQMHVLHVMHVNHVOHVP"
932*86ee64e7SAndroid Build Coastguard Worker     "HVQHVRHVSHVTHVUHVVHVWHVXHVYHVZHWIHWJHWKHWLHWMHWNHWOHWPHWQHWRHWSHWTHWUHWVHW"
933*86ee64e7SAndroid Build Coastguard Worker     "WHWXHWYHWZHXIHXJHXKHXLHXMHXNHXOHXPHXQHXRHXSHSVHSWHSXHSYHSZHTIHTJHTKHTLHTMH"
934*86ee64e7SAndroid Build Coastguard Worker     "TNHTOHTPHTQHTRHTSHTTHTUHTVHTWHTXHTYHTZHUIHUJHUKHULHUMHUNHUOHUPHUQHURHUSHUT"
935*86ee64e7SAndroid Build Coastguard Worker     "HUUHUVHUWHUXHUYHUZHVIHVJHVKHIIKIILIIMIINIIOIIPIIQIIRIISIITIIUIIVIIWIIXIIYI"
936*86ee64e7SAndroid Build Coastguard Worker     "IZIJJIJKIJLIJMIJNIJOIJPIJQIJRIJSIJTIJUIJVIJWIJXIJYIJZIKJIKKIKLIKMIKNIKOIKP"
937*86ee64e7SAndroid Build Coastguard Worker     "IKQIKRIKSIKTXTHXUHXVHXWHXXHXYHXZHYIHYJHYKHYLHYMHYNHYOHYPHYQHYRHYSHYTHYUHYV"
938*86ee64e7SAndroid Build Coastguard Worker     "HYWHYXHYYHYZHZIHZJHZKHZLHZMHZNHZOHZPHZQHZRHZSHZTHZUHZVHZWHZXHZYHZZIIIJINNI"
939*86ee64e7SAndroid Build Coastguard Worker     "NOINPINQINRINSINTINUINVINWINXINYINZIOJIOKIOLIOMIONIOOIOPIOQIORIOSIOTIOUIOV"
940*86ee64e7SAndroid Build Coastguard Worker     "IOWIOXIOYIOZIPJIPKIPLIPMIPNIPOIPPIPQIPRIPSIPTIPUIPVIPWIKUIKVIKWIKXIKYIKZIL"
941*86ee64e7SAndroid Build Coastguard Worker     "JILKILLILMILNILOILPILQILRILSILTILUILVILWILXILYILZIMJIMKIMLIMMIMNIMOIMPIMQI"
942*86ee64e7SAndroid Build Coastguard Worker     "MRIMSIMTIMUIMVIMWIMXIMYIMZINJINKINLINMISQISRISSISTISUISVISWISXISYISZITJITK"
943*86ee64e7SAndroid Build Coastguard Worker     "ITLITMITNITOITPITQITRITSITTITUITVITWITXITYITZIUJIUKIULIUMIUNIUOIUPIUQIURIU"
944*86ee64e7SAndroid Build Coastguard Worker     "SIUTIUUIUVIUWIUXIUYIUZIPXIPYIPZIQJIQKIQLIQMIQNIQOIQPIQQIQRIQSIQTIQUIQVIQWI"
945*86ee64e7SAndroid Build Coastguard Worker     "QXIQYIQZIRJIRKIRLIRMIRNIROIRPIRQIRRIRSIRTIRUIRVIRWIRXIRYIRZISJISKISLISMISN"
946*86ee64e7SAndroid Build Coastguard Worker     "ISOISPIXTIXUIXVIXWIXXIXYIXZIYJIYKIYLIYMIYNIYOIYPIYQIYRIYSIYTIYUIYVIYWIYXIY"
947*86ee64e7SAndroid Build Coastguard Worker     "YIYZIZJIZKIZLIZMIZNIZOIZPIZQIZRIZSIZTIZUIZVIZWIZXIZYIZZJJJKJJLJJIVJIVKIVLI"
948*86ee64e7SAndroid Build Coastguard Worker     "VMIVNIVOIVPIVQIVRIVSIVTIVUIVVIVWIVXIVYIVZIWJIWKIWLIWMIWNIWOIWPIWQIWRIWSIWT"
949*86ee64e7SAndroid Build Coastguard Worker     "IWUIWVIWWIWXIWYIWZIXJIXKIXLIXMIXNIXOIXPIXQIXRIXSYJLZJMKJMLJMMJMNJMOJMPJMQJ"
950*86ee64e7SAndroid Build Coastguard Worker     "MRJMSJMTJMUJMVJMWJMXJMYJMZJNKJNLJNMJNNJNOJNPJNQJNRJNSJNTJNUJNVJNWJNXJNYJNZ"
951*86ee64e7SAndroid Build Coastguard Worker     "JOKJOLJOMJONJOOJOPJOQJORJOSJOTJOMJJNJJOJJPJJQJJRJJSJJTJJUJJVJJWJJXJJYJJZJK"
952*86ee64e7SAndroid Build Coastguard Worker     "KJKLJKMJKNJKOJKPJKQJKRJKSJKTJKUJKVJKWJKXJKYJKZJLKJLLJLMJLNJLOJLPJLQJLRJLSJ"
953*86ee64e7SAndroid Build Coastguard Worker     "LTJLUJLVJLWJLXJLQJRRJRSJRTJRUJRVJRWJRXJRYJRZJSKJSLJSMJSNJSOJSPJSQJSRJSSJST"
954*86ee64e7SAndroid Build Coastguard Worker     "JSUJSVJSWJSXJSYJSZJTKJTLJTMJTNJTOJTPJTQJTRJTSJTTJTUJTVJTWJTXJTYJTZJUKJULJU"
955*86ee64e7SAndroid Build Coastguard Worker     "UJOVJOWJOXJOYJOZJPKJPLJPMJPNJPOJPPJPQJPRJPSJPTJPUJPVJPWJPXJPYJPZJQKJQLJQMJ"
956*86ee64e7SAndroid Build Coastguard Worker     "QNJQOJQPJQQJQRJQSJQTJQUJQVJQWJQXJQYJQZJRKJRLJRMJRNJROJRPJRYJWZJXKJXLJXMJXN"
957*86ee64e7SAndroid Build Coastguard Worker     "JXOJXPJXQJXRJXSJXTJXUJXVJXWJXXJXYJXZJYKJYLJYMJYNJYOJYPJYQJYRJYSJYTJYUJYVJY"
958*86ee64e7SAndroid Build Coastguard Worker     "WJYXJYYJYZJZKJZLJZMJZNJZOJZPJZQJZRJZSJZTJZMJUNJUOJUPJUQJURJUSJUTJUUJUVJUWJ"
959*86ee64e7SAndroid Build Coastguard Worker     "UXJUYJUZJVKJVLJVMJVNJVOJVPJVQJVRJVSJVTJVUJVVJVWJVXJVYJVZJWKJWLJWMJWNJWOJWP"
960*86ee64e7SAndroid Build Coastguard Worker     "JWQJWRJWSJWTJWUJWVJWWJWXJWMTKMUKMVKMWKMXKMYKMZKNLKNMKNNKNOKNPKNQKNRKNSKNTK"
961*86ee64e7SAndroid Build Coastguard Worker     "NUKNVKNWKNXKNYKNZKOLKOMKONKOOKOPKOQKORKOSKOTKOUKOVKOWKOXKOYKOZKPLKPMKPNKPO"
962*86ee64e7SAndroid Build Coastguard Worker     "KPPKPQKPRKUJZVJZWJZXJZYJZZKKKLKKMKKNKKOKKPKKQKKRKKSKKTKKUKKVKKWKKXKKYKKZKL"
963*86ee64e7SAndroid Build Coastguard Worker     "LKLMKLNKLOKLPKLQKLRKLSKLTKLUKLVKLWKLXKLYKLZKMLKMMKMNKMOKMPKMQKMRKMSKSRKSSK"
964*86ee64e7SAndroid Build Coastguard Worker     "STKSUKSVKSWKSXKSYKSZKTLKTMKTNKTOKTPKTQKTRKTSKTTKTUKTVKTWKTXKTYKTZKULKUMKUN"
965*86ee64e7SAndroid Build Coastguard Worker     "KUOKUPKUQKURKUSKUTKUUKUVKUWKUXKUYKUZKVLKVMKVNKVOKVPKPSKPTKPUKPVKPWKPXKPYKP"
966*86ee64e7SAndroid Build Coastguard Worker     "ZKQLKQMKQNKQOKQPKQQKQRKQSKQTKQUKQVKQWKQXKQYKQZKRLKRMKRNKROKRPKRQKRRKRSKRTK"
967*86ee64e7SAndroid Build Coastguard Worker     "RUKRVKRWKRXKRYKRZKSLKSMKSNKSOKSPKSQKYPKYQKYRKYSKYTKYUKYVKYWKYXKYYKYZKZLKZM"
968*86ee64e7SAndroid Build Coastguard Worker     "KZNKZOKZPKZQKZRKZSKZTKZUKZVKZWKZXKZYKZZLLLMLLNLLOLLPLLQLLRLLSLLTLLULLVLLWL"
969*86ee64e7SAndroid Build Coastguard Worker     "LXLLYLLZLMMLMNLMOLMPVQKVRKVSKVTKVUKVVKVWKVXKVYKVZKWLKWMKWNKWOKWPKWQKWRKWSK"
970*86ee64e7SAndroid Build Coastguard Worker     "WTKWUKWVKWWKWXKWYKWZKXLKXMKXNKXOKXPKXQKXRKXSKXTKXUKXVKXWKXXKXYKXZKYLKYMKYN"
971*86ee64e7SAndroid Build Coastguard Worker     "KYOKLPSLPTLPULPVLPWLPXLPYLPZLQMLQNLQOLQPLQQLQRLQSLQTLQULQVLQWLQXLQYLQZLRML"
972*86ee64e7SAndroid Build Coastguard Worker     "RNLROLRPLRQLRRLRSLRTLRULRVLRWLRXLRYLRZLSMLSNLSOLSPLSQLSRLSSLSTLMQLMRLMSLMT"
973*86ee64e7SAndroid Build Coastguard Worker     "LMULMVLMWLMXLMYLMZLNMLNNLNOLNPLNQLNRLNSLNTLNULNVLNWLNXLNYLNZLOMLONLOOLOPLO"
974*86ee64e7SAndroid Build Coastguard Worker     "QLORLOSLOTLOULOVLOWLOXLOYLOZLPMLPNLPOLPPLPQLPRLVWLVXLVYLVZLWMLWNLWOLWPLWQL"
975*86ee64e7SAndroid Build Coastguard Worker     "WRLWSLWTLWULWVLWWLWXLWYLWZLXMLXNLXOLXPLXQLXRLXSLXTLXULXVLXWLXXLXYLXZLYMLYN"
976*86ee64e7SAndroid Build Coastguard Worker     "LYOLYPLYQLYRLYSLYTLYULYVLYWLYXLSULSVLSWLSXLSYLSZLTMLTNLTOLTPLTQLTRLTSLTTLT"
977*86ee64e7SAndroid Build Coastguard Worker     "ULTVLTWLTXLTYLTZLUMLUNLUOLUPLUQLURLUSLUTLUULUVLUWLUXLUYLUZLVMLVNLVOLVPLVQL"
978*86ee64e7SAndroid Build Coastguard Worker     "VRLVSLVTLVULVVOMOPMOQMORMOSMOTMOUMOVMOWMOXMOYMOZMPNMPOMPPMPQMPRMPSMPTMPUMP"
979*86ee64e7SAndroid Build Coastguard Worker     "VMPWMPXMPYMPZMQNMQOMQPMQQMQRMQSMQTMQUMQVMQWMQXMQYMQZMRNMROMRPMRQMRRMRSMRLY"
980*86ee64e7SAndroid Build Coastguard Worker     "YLYZLZMLZNLZOLZPLZQLZRLZSLZTLZULZVLZWLZXLZYLZZMMMNMMOMMPMMQMMRMMSMMTMMUMMV"
981*86ee64e7SAndroid Build Coastguard Worker     "MMWMMXMMYMMZMNNMNOMNPMNQMNRMNSMNTMNUMNVMNWMNXMNYMNZMONMOYMUZMVNMVOMVPMVQMV"
982*86ee64e7SAndroid Build Coastguard Worker     "RMVSMVTMVUMVVMVWMVXMVYMVZMWNMWOMWPMWQMWRMWSMWTMWUMWVMWWMWXMWYMWZMXNMXOMXPM"
983*86ee64e7SAndroid Build Coastguard Worker     "XQMXRMXSMXTMXUMXVMXWMXXMXYMXZMYNMYOMYPMYTMRUMRVMRWMRXMRYMRZMSNMSOMSPMSQMSR"
984*86ee64e7SAndroid Build Coastguard Worker     "MSSMSTMSUMSVMSWMSXMSYMSZMTNMTOMTPMTQMTRMTSMTTMTUMTVMTWMTXMTYMTZMUNMUOMUPMU"
985*86ee64e7SAndroid Build Coastguard Worker     "QMURMUSMUTMUUMUVMUWMUXMUOXNOYNOZNPONPPNPQNPRNPSNPTNPUNPVNPWNPXNPYNPZNQONQP"
986*86ee64e7SAndroid Build Coastguard Worker     "NQQNQRNQSNQTNQUNQVNQWNQXNQYNQZNRONRPNRQNRRNRSNRTNRUNRVNRWNRXNRYNRZNSONSPNS"
987*86ee64e7SAndroid Build Coastguard Worker     "QNSRNSSNQMYRMYSMYTMYUMYVMYWMYXMYYMYZMZNMZOMZPMZQMZRMZSMZTMZUMZVMZWMZXMZYMZ"
988*86ee64e7SAndroid Build Coastguard Worker     "ZNNNONNPNNQNNRNNSNNTNNUNNVNNWNNXNNYNNZNOONOPNOQNORNOSNOTNOUNOVNOWNWPNWQNWR"
989*86ee64e7SAndroid Build Coastguard Worker     "NWSNWTNWUNWVNWWNWXNWYNWZNXONXPNXQNXRNXSNXTNXUNXVNXWNXXNXYNXZNYONYPNYQNYRNY"
990*86ee64e7SAndroid Build Coastguard Worker     "SNYTNYUNYVNYWNYXNYYNYZNZONZPNZQNZRNZSNZTNZUNZVNZWNSTNSUNSVNSWNSXNSYNSZNTON"
991*86ee64e7SAndroid Build Coastguard Worker     "TPNTQNTRNTSNTTNTUNTVNTWNTXNTYNTZNUONUPNUQNURNUSNUTNUUNUVNUWNUXNUYNUZNVONVP"
992*86ee64e7SAndroid Build Coastguard Worker     "NVQNVRNVSNVTNVUNVVNVWNVXNVYNVZNWONORXORYORZOSPOSQOSROSSOSTOSUOSVOSWOSXOSYO"
993*86ee64e7SAndroid Build Coastguard Worker     "SZOTPOTQOTROTSOTTOTUOTVOTWOTXOTYOTZOUPOUQOUROUSOUTOUUOUVOUWOUXOUYOUZOVPOVQ"
994*86ee64e7SAndroid Build Coastguard Worker     "OVROVSOVTOVUOVVOVWZXNZYNZZOOOPOOQOOROOSOOTOOUOOVOOWOOXOOYOOZOPPOPQOPROPSOP"
995*86ee64e7SAndroid Build Coastguard Worker     "TOPUOPVOPWOPXOPYOPZOQPOQQOQROQSOQTOQUOQVOQWOQXOQYOQZORPORQORRORSORTORUORVO"
996*86ee64e7SAndroid Build Coastguard Worker     "RWOZXOZYOZZPPPQPPRPPSPPTPPUPPVPPWPPXPPYPPZPQQPQRPQSPQTPQUPQVPQWPQXPQYPQZPR"
997*86ee64e7SAndroid Build Coastguard Worker     "QPRRPRSPRTPRUPRVPRWPRXPRYPRZPSQPSRPSSPSTPSUPSVPSWPSXPSYPSZPTOVXOVYOVZOWPOW"
998*86ee64e7SAndroid Build Coastguard Worker     "QOWROWSOWTOWUOWVOWWOWXOWYOWZOXPOXQOXROXSOXTOXUOXVOXWOXXOXYOXZOYPOYQOYROYSO"
999*86ee64e7SAndroid Build Coastguard Worker     "YTOYUOYVOYWOYXOYYOYZOZPOZQOZROZSOZTOZUOZVOZWQPTRPTSPTTPTUPTV";
1000*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,DeflateZFixedCorruption)1001*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, DeflateZFixedCorruption) {
1002*86ee64e7SAndroid Build Coastguard Worker   // Tavis's test case from
1003*86ee64e7SAndroid Build Coastguard Worker   // https://www.openwall.com/lists/oss-security/2022/03/26/1
1004*86ee64e7SAndroid Build Coastguard Worker   // The upstream fix,
1005*86ee64e7SAndroid Build Coastguard Worker   // https://github.com/madler/zlib/commit/5c44459c3b28a9bd3283aaceab7c615f8020c531,
1006*86ee64e7SAndroid Build Coastguard Worker   // was merged in Chromium in #583975.
1007*86ee64e7SAndroid Build Coastguard Worker 
1008*86ee64e7SAndroid Build Coastguard Worker   z_stream stream;
1009*86ee64e7SAndroid Build Coastguard Worker   stream.zalloc = Z_NULL;
1010*86ee64e7SAndroid Build Coastguard Worker   stream.zfree = Z_NULL;
1011*86ee64e7SAndroid Build Coastguard Worker 
1012*86ee64e7SAndroid Build Coastguard Worker   int level = Z_DEFAULT_COMPRESSION;
1013*86ee64e7SAndroid Build Coastguard Worker   int windowBits = 15;
1014*86ee64e7SAndroid Build Coastguard Worker   int memLevel = 1;
1015*86ee64e7SAndroid Build Coastguard Worker   int strategy = Z_FIXED;
1016*86ee64e7SAndroid Build Coastguard Worker 
1017*86ee64e7SAndroid Build Coastguard Worker   int ret =
1018*86ee64e7SAndroid Build Coastguard Worker       deflateInit2(&stream, level, Z_DEFLATED, windowBits, memLevel, strategy);
1019*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
1020*86ee64e7SAndroid Build Coastguard Worker   std::vector<uint8_t> compressed(
1021*86ee64e7SAndroid Build Coastguard Worker       deflateBound(&stream, strlen(zFixedCorruptionData)));
1022*86ee64e7SAndroid Build Coastguard Worker   stream.next_out = compressed.data();
1023*86ee64e7SAndroid Build Coastguard Worker   stream.avail_out = compressed.size();
1024*86ee64e7SAndroid Build Coastguard Worker   stream.next_in = (uint8_t*)zFixedCorruptionData;
1025*86ee64e7SAndroid Build Coastguard Worker   stream.avail_in = strlen(zFixedCorruptionData);
1026*86ee64e7SAndroid Build Coastguard Worker   ret = deflate(&stream, Z_FINISH);
1027*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_STREAM_END);
1028*86ee64e7SAndroid Build Coastguard Worker   size_t compressed_sz = compressed.size() - stream.avail_out;
1029*86ee64e7SAndroid Build Coastguard Worker   deflateEnd(&stream);
1030*86ee64e7SAndroid Build Coastguard Worker 
1031*86ee64e7SAndroid Build Coastguard Worker   std::vector<uint8_t> decompressed(strlen(zFixedCorruptionData));
1032*86ee64e7SAndroid Build Coastguard Worker   ret = inflateInit2(&stream, windowBits);
1033*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
1034*86ee64e7SAndroid Build Coastguard Worker   stream.next_in = compressed.data();
1035*86ee64e7SAndroid Build Coastguard Worker   stream.avail_in = compressed_sz;
1036*86ee64e7SAndroid Build Coastguard Worker   stream.next_out = decompressed.data();
1037*86ee64e7SAndroid Build Coastguard Worker   stream.avail_out = decompressed.size();
1038*86ee64e7SAndroid Build Coastguard Worker   ret = inflate(&stream, Z_FINISH);
1039*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_STREAM_END);
1040*86ee64e7SAndroid Build Coastguard Worker   inflateEnd(&stream);
1041*86ee64e7SAndroid Build Coastguard Worker 
1042*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(decompressed.size(), strlen(zFixedCorruptionData));
1043*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(
1044*86ee64e7SAndroid Build Coastguard Worker       memcmp(zFixedCorruptionData, decompressed.data(), decompressed.size()),
1045*86ee64e7SAndroid Build Coastguard Worker       0);
1046*86ee64e7SAndroid Build Coastguard Worker }
1047*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,DeflateCopy)1048*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, DeflateCopy) {
1049*86ee64e7SAndroid Build Coastguard Worker   // Check that deflateCopy() works.
1050*86ee64e7SAndroid Build Coastguard Worker 
1051*86ee64e7SAndroid Build Coastguard Worker   z_stream stream1;
1052*86ee64e7SAndroid Build Coastguard Worker   stream1.zalloc = Z_NULL;
1053*86ee64e7SAndroid Build Coastguard Worker   stream1.zfree = Z_NULL;
1054*86ee64e7SAndroid Build Coastguard Worker   int ret =
1055*86ee64e7SAndroid Build Coastguard Worker       deflateInit(&stream1, Z_DEFAULT_COMPRESSION);
1056*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
1057*86ee64e7SAndroid Build Coastguard Worker   std::vector<uint8_t> compressed(
1058*86ee64e7SAndroid Build Coastguard Worker       deflateBound(&stream1, strlen(zFixedCorruptionData)));
1059*86ee64e7SAndroid Build Coastguard Worker   stream1.next_out = compressed.data();
1060*86ee64e7SAndroid Build Coastguard Worker   stream1.avail_out = compressed.size();
1061*86ee64e7SAndroid Build Coastguard Worker 
1062*86ee64e7SAndroid Build Coastguard Worker   // Compress the first 1000 bytes.
1063*86ee64e7SAndroid Build Coastguard Worker   stream1.next_in = (uint8_t*)zFixedCorruptionData;
1064*86ee64e7SAndroid Build Coastguard Worker   stream1.avail_in = 1000;
1065*86ee64e7SAndroid Build Coastguard Worker   ret = deflate(&stream1, Z_NO_FLUSH);
1066*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
1067*86ee64e7SAndroid Build Coastguard Worker 
1068*86ee64e7SAndroid Build Coastguard Worker   // Copy the stream state.
1069*86ee64e7SAndroid Build Coastguard Worker   z_stream stream2;
1070*86ee64e7SAndroid Build Coastguard Worker   ret = deflateCopy(&stream2, &stream1);
1071*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
1072*86ee64e7SAndroid Build Coastguard Worker   deflateEnd(&stream1);
1073*86ee64e7SAndroid Build Coastguard Worker 
1074*86ee64e7SAndroid Build Coastguard Worker   // Compress the remaining bytes.
1075*86ee64e7SAndroid Build Coastguard Worker   stream2.next_in = (uint8_t*)zFixedCorruptionData + (1000 - stream2.avail_in);
1076*86ee64e7SAndroid Build Coastguard Worker   stream2.avail_in = strlen(zFixedCorruptionData) - (1000 - stream2.avail_in);
1077*86ee64e7SAndroid Build Coastguard Worker   ret = deflate(&stream2, Z_FINISH);
1078*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_STREAM_END);
1079*86ee64e7SAndroid Build Coastguard Worker   size_t compressed_sz = compressed.size() - stream2.avail_out;
1080*86ee64e7SAndroid Build Coastguard Worker   deflateEnd(&stream2);
1081*86ee64e7SAndroid Build Coastguard Worker 
1082*86ee64e7SAndroid Build Coastguard Worker   // Check that decompression is successful.
1083*86ee64e7SAndroid Build Coastguard Worker   std::vector<uint8_t> decompressed(strlen(zFixedCorruptionData));
1084*86ee64e7SAndroid Build Coastguard Worker   z_stream stream;
1085*86ee64e7SAndroid Build Coastguard Worker   stream.zalloc = Z_NULL;
1086*86ee64e7SAndroid Build Coastguard Worker   stream.zfree = Z_NULL;
1087*86ee64e7SAndroid Build Coastguard Worker   ret = inflateInit(&stream);
1088*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
1089*86ee64e7SAndroid Build Coastguard Worker   stream.next_in = compressed.data();
1090*86ee64e7SAndroid Build Coastguard Worker   stream.avail_in = compressed_sz;
1091*86ee64e7SAndroid Build Coastguard Worker   stream.next_out = decompressed.data();
1092*86ee64e7SAndroid Build Coastguard Worker   stream.avail_out = decompressed.size();
1093*86ee64e7SAndroid Build Coastguard Worker   ret = inflate(&stream, Z_FINISH);
1094*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_STREAM_END);
1095*86ee64e7SAndroid Build Coastguard Worker   inflateEnd(&stream);
1096*86ee64e7SAndroid Build Coastguard Worker 
1097*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(decompressed.size(), strlen(zFixedCorruptionData));
1098*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(
1099*86ee64e7SAndroid Build Coastguard Worker       memcmp(zFixedCorruptionData, decompressed.data(), decompressed.size()),
1100*86ee64e7SAndroid Build Coastguard Worker       0);
1101*86ee64e7SAndroid Build Coastguard Worker }
1102*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,GzipStored)1103*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, GzipStored) {
1104*86ee64e7SAndroid Build Coastguard Worker   // Check that deflating uncompressed blocks with a gzip header doesn't write
1105*86ee64e7SAndroid Build Coastguard Worker   // out of bounds (crbug.com/325990053).
1106*86ee64e7SAndroid Build Coastguard Worker   z_stream stream;
1107*86ee64e7SAndroid Build Coastguard Worker   stream.zalloc = Z_NULL;
1108*86ee64e7SAndroid Build Coastguard Worker   stream.zfree = Z_NULL;
1109*86ee64e7SAndroid Build Coastguard Worker   static const int kGzipWrapper = 16;
1110*86ee64e7SAndroid Build Coastguard Worker   int ret = deflateInit2(&stream, Z_NO_COMPRESSION, Z_DEFLATED,
1111*86ee64e7SAndroid Build Coastguard Worker                          9 + kGzipWrapper, 9, Z_DEFAULT_STRATEGY);
1112*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
1113*86ee64e7SAndroid Build Coastguard Worker 
1114*86ee64e7SAndroid Build Coastguard Worker   const std::vector<uint8_t> src(512 * 1024);
1115*86ee64e7SAndroid Build Coastguard Worker   stream.next_in = (unsigned char*)src.data();
1116*86ee64e7SAndroid Build Coastguard Worker   stream.avail_in = src.size();
1117*86ee64e7SAndroid Build Coastguard Worker 
1118*86ee64e7SAndroid Build Coastguard Worker   std::vector<uint8_t> out(1000);
1119*86ee64e7SAndroid Build Coastguard Worker   stream.next_out = (unsigned char*)out.data();
1120*86ee64e7SAndroid Build Coastguard Worker   stream.avail_out = out.size();
1121*86ee64e7SAndroid Build Coastguard Worker 
1122*86ee64e7SAndroid Build Coastguard Worker   ret = deflate(&stream, Z_NO_FLUSH);
1123*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
1124*86ee64e7SAndroid Build Coastguard Worker 
1125*86ee64e7SAndroid Build Coastguard Worker   deflateEnd(&stream);
1126*86ee64e7SAndroid Build Coastguard Worker }
1127*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,DeflateBound)1128*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, DeflateBound) {
1129*86ee64e7SAndroid Build Coastguard Worker   // Check that the deflateBound() isn't too low when using non-default
1130*86ee64e7SAndroid Build Coastguard Worker   // parameters (crbug.com/40270738).
1131*86ee64e7SAndroid Build Coastguard Worker   const int level = 9;
1132*86ee64e7SAndroid Build Coastguard Worker   const int windowBits = 15;
1133*86ee64e7SAndroid Build Coastguard Worker   const int memLevel = 1;
1134*86ee64e7SAndroid Build Coastguard Worker   const int strategy = Z_FIXED;
1135*86ee64e7SAndroid Build Coastguard Worker   const uint8_t src[] = {
1136*86ee64e7SAndroid Build Coastguard Worker       49,  255, 255, 20,  45,  49,  167, 56,  55,  255, 255, 255, 223, 255, 49,
1137*86ee64e7SAndroid Build Coastguard Worker       255, 3,   78,  0,   0,   141, 253, 209, 163, 29,  195, 43,  60,  199, 123,
1138*86ee64e7SAndroid Build Coastguard Worker       112, 35,  134, 13,  148, 102, 212, 4,   184, 103, 7,   102, 225, 102, 156,
1139*86ee64e7SAndroid Build Coastguard Worker       164, 78,  48,  70,  49,  125, 162, 55,  116, 161, 174, 83,  0,   59,  0,
1140*86ee64e7SAndroid Build Coastguard Worker       225, 140, 0,   0,   63,  63,  4,   15,  198, 30,  126, 196, 33,  99,  135,
1141*86ee64e7SAndroid Build Coastguard Worker       41,  192, 82,  28,  105, 216, 170, 221, 14,  61,  1,   0,   0,   22,  195,
1142*86ee64e7SAndroid Build Coastguard Worker       45,  53,  244, 163, 167, 158, 229, 68,  18,  112, 49,  174, 43,  75,  90,
1143*86ee64e7SAndroid Build Coastguard Worker       161, 85,  19,  36,  163, 118, 228, 169, 180, 161, 237, 234, 253, 197, 234,
1144*86ee64e7SAndroid Build Coastguard Worker       66,  106, 12,  42,  124, 96,  160, 144, 183, 194, 157, 167, 202, 217};
1145*86ee64e7SAndroid Build Coastguard Worker 
1146*86ee64e7SAndroid Build Coastguard Worker   z_stream stream;
1147*86ee64e7SAndroid Build Coastguard Worker   stream.zalloc = Z_NULL;
1148*86ee64e7SAndroid Build Coastguard Worker   stream.zfree = Z_NULL;
1149*86ee64e7SAndroid Build Coastguard Worker   int ret =
1150*86ee64e7SAndroid Build Coastguard Worker       deflateInit2(&stream, level, Z_DEFLATED, windowBits, memLevel, strategy);
1151*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_OK);
1152*86ee64e7SAndroid Build Coastguard Worker   size_t deflate_bound = deflateBound(&stream, sizeof(src));
1153*86ee64e7SAndroid Build Coastguard Worker 
1154*86ee64e7SAndroid Build Coastguard Worker   uint8_t out[sizeof(src) * 10];
1155*86ee64e7SAndroid Build Coastguard Worker   stream.next_in = (uint8_t*)src;
1156*86ee64e7SAndroid Build Coastguard Worker   stream.avail_in = sizeof(src);
1157*86ee64e7SAndroid Build Coastguard Worker   stream.next_out = out;
1158*86ee64e7SAndroid Build Coastguard Worker   stream.avail_out = sizeof(out);
1159*86ee64e7SAndroid Build Coastguard Worker   ret = deflate(&stream, Z_FINISH);
1160*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(ret, Z_STREAM_END);
1161*86ee64e7SAndroid Build Coastguard Worker 
1162*86ee64e7SAndroid Build Coastguard Worker   size_t out_size = sizeof(out) - stream.avail_out;
1163*86ee64e7SAndroid Build Coastguard Worker   EXPECT_LE(out_size, deflate_bound);
1164*86ee64e7SAndroid Build Coastguard Worker 
1165*86ee64e7SAndroid Build Coastguard Worker   deflateEnd(&stream);
1166*86ee64e7SAndroid Build Coastguard Worker }
1167*86ee64e7SAndroid Build Coastguard Worker 
1168*86ee64e7SAndroid Build Coastguard Worker // TODO(gustavoa): make these tests run standalone.
1169*86ee64e7SAndroid Build Coastguard Worker #ifndef CMAKE_STANDALONE_UNITTESTS
1170*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,ZipFilenameCommentSize)1171*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, ZipFilenameCommentSize) {
1172*86ee64e7SAndroid Build Coastguard Worker   // Check that minizip rejects zip member filenames or comments longer than
1173*86ee64e7SAndroid Build Coastguard Worker   // the zip format can represent.
1174*86ee64e7SAndroid Build Coastguard Worker 
1175*86ee64e7SAndroid Build Coastguard Worker   base::ScopedTempDir temp_dir;
1176*86ee64e7SAndroid Build Coastguard Worker   ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
1177*86ee64e7SAndroid Build Coastguard Worker   base::FilePath zip_file = temp_dir.GetPath().AppendASCII("crbug1470539.zip");
1178*86ee64e7SAndroid Build Coastguard Worker 
1179*86ee64e7SAndroid Build Coastguard Worker   zipFile zf = zipOpen(zip_file.AsUTF8Unsafe().c_str(), APPEND_STATUS_CREATE);
1180*86ee64e7SAndroid Build Coastguard Worker   ASSERT_NE(zf, nullptr);
1181*86ee64e7SAndroid Build Coastguard Worker 
1182*86ee64e7SAndroid Build Coastguard Worker   // Adding a member with 2^16 byte filename is okay.
1183*86ee64e7SAndroid Build Coastguard Worker   std::string long_filename(UINT16_MAX, 'a');
1184*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(zipOpenNewFileInZip(zf, long_filename.c_str(), nullptr, nullptr, 0,
1185*86ee64e7SAndroid Build Coastguard Worker                                 nullptr, 0, nullptr, Z_DEFLATED,
1186*86ee64e7SAndroid Build Coastguard Worker                                 Z_DEFAULT_COMPRESSION),
1187*86ee64e7SAndroid Build Coastguard Worker             ZIP_OK);
1188*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(zipWriteInFileInZip(zf, "1", 1), ZIP_OK);
1189*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(zipCloseFileInZip(zf), ZIP_OK);
1190*86ee64e7SAndroid Build Coastguard Worker 
1191*86ee64e7SAndroid Build Coastguard Worker   // Adding a member with 2^16+1 byte filename is NOT okay.
1192*86ee64e7SAndroid Build Coastguard Worker   std::string too_long_filename = long_filename + 'a';
1193*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(zipOpenNewFileInZip(zf, too_long_filename.c_str(), nullptr, nullptr,
1194*86ee64e7SAndroid Build Coastguard Worker                                 0, nullptr, 0, nullptr, Z_DEFLATED,
1195*86ee64e7SAndroid Build Coastguard Worker                                 Z_DEFAULT_COMPRESSION),
1196*86ee64e7SAndroid Build Coastguard Worker             ZIP_PARAMERROR);
1197*86ee64e7SAndroid Build Coastguard Worker 
1198*86ee64e7SAndroid Build Coastguard Worker   // Adding a member with 2^16 byte comment is okay.
1199*86ee64e7SAndroid Build Coastguard Worker   std::string long_comment(UINT16_MAX, 'x');
1200*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(zipOpenNewFileInZip(zf, "x", nullptr, nullptr, 0, nullptr, 0,
1201*86ee64e7SAndroid Build Coastguard Worker                                 long_comment.c_str(), Z_DEFLATED,
1202*86ee64e7SAndroid Build Coastguard Worker                                 Z_DEFAULT_COMPRESSION),
1203*86ee64e7SAndroid Build Coastguard Worker             ZIP_OK);
1204*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(zipCloseFileInZip(zf), ZIP_OK);
1205*86ee64e7SAndroid Build Coastguard Worker 
1206*86ee64e7SAndroid Build Coastguard Worker   // Adding a member with 2^16+1 byte comment is NOT okay.
1207*86ee64e7SAndroid Build Coastguard Worker   std::string too_long_comment = long_comment + 'x';
1208*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(zipOpenNewFileInZip(zf, "x", nullptr, nullptr, 0, nullptr, 0,
1209*86ee64e7SAndroid Build Coastguard Worker                                 too_long_comment.c_str(), Z_DEFLATED,
1210*86ee64e7SAndroid Build Coastguard Worker                                 Z_DEFAULT_COMPRESSION),
1211*86ee64e7SAndroid Build Coastguard Worker             ZIP_PARAMERROR);
1212*86ee64e7SAndroid Build Coastguard Worker 
1213*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(zipClose(zf, nullptr), ZIP_OK);
1214*86ee64e7SAndroid Build Coastguard Worker 
1215*86ee64e7SAndroid Build Coastguard Worker   // Check that the long filename and comment members were successfully added.
1216*86ee64e7SAndroid Build Coastguard Worker   unzFile uzf = unzOpen(zip_file.AsUTF8Unsafe().c_str());
1217*86ee64e7SAndroid Build Coastguard Worker   ASSERT_NE(uzf, nullptr);
1218*86ee64e7SAndroid Build Coastguard Worker   char buf[UINT16_MAX + 2];
1219*86ee64e7SAndroid Build Coastguard Worker 
1220*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(unzGoToFirstFile(uzf), UNZ_OK);
1221*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(unzGetCurrentFileInfo(uzf, nullptr, buf, sizeof(buf), nullptr, 0,
1222*86ee64e7SAndroid Build Coastguard Worker                                   nullptr, 0),
1223*86ee64e7SAndroid Build Coastguard Worker             UNZ_OK);
1224*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(std::string(buf), long_filename);
1225*86ee64e7SAndroid Build Coastguard Worker 
1226*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(unzGoToNextFile(uzf), UNZ_OK);
1227*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(unzGetCurrentFileInfo(uzf, nullptr, nullptr, 0, nullptr, 0, buf,
1228*86ee64e7SAndroid Build Coastguard Worker                                   sizeof(buf)),
1229*86ee64e7SAndroid Build Coastguard Worker             UNZ_OK);
1230*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(std::string(buf), long_comment);
1231*86ee64e7SAndroid Build Coastguard Worker 
1232*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(unzGoToNextFile(uzf), UNZ_END_OF_LIST_OF_FILE);
1233*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(unzClose(uzf), UNZ_OK);
1234*86ee64e7SAndroid Build Coastguard Worker }
1235*86ee64e7SAndroid Build Coastguard Worker 
TEST(ZlibTest,ZipExtraFieldSize)1236*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, ZipExtraFieldSize) {
1237*86ee64e7SAndroid Build Coastguard Worker   // Check that minizip rejects zip members with too large extra fields.
1238*86ee64e7SAndroid Build Coastguard Worker 
1239*86ee64e7SAndroid Build Coastguard Worker   std::string extra_field;
1240*86ee64e7SAndroid Build Coastguard Worker   extra_field.append("\x12\x34");  // Header ID.
1241*86ee64e7SAndroid Build Coastguard Worker   extra_field.append("\xfb\xff");  // Data size (not including the header).
1242*86ee64e7SAndroid Build Coastguard Worker   extra_field.append(UINT16_MAX - 4, 'a');
1243*86ee64e7SAndroid Build Coastguard Worker 
1244*86ee64e7SAndroid Build Coastguard Worker   base::ScopedTempDir temp_dir;
1245*86ee64e7SAndroid Build Coastguard Worker   ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
1246*86ee64e7SAndroid Build Coastguard Worker   base::FilePath zip_file = temp_dir.GetPath().AppendASCII("extrafield.zip");
1247*86ee64e7SAndroid Build Coastguard Worker 
1248*86ee64e7SAndroid Build Coastguard Worker   zipFile zf = zipOpen(zip_file.AsUTF8Unsafe().c_str(), APPEND_STATUS_CREATE);
1249*86ee64e7SAndroid Build Coastguard Worker   ASSERT_NE(zf, nullptr);
1250*86ee64e7SAndroid Build Coastguard Worker 
1251*86ee64e7SAndroid Build Coastguard Worker   // Adding a member with 2^16 byte extra field should work.
1252*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(zipOpenNewFileInZip(zf, "a", nullptr, extra_field.data(),
1253*86ee64e7SAndroid Build Coastguard Worker                                 extra_field.size(), extra_field.data(),
1254*86ee64e7SAndroid Build Coastguard Worker                                 extra_field.size(), nullptr, Z_DEFLATED,
1255*86ee64e7SAndroid Build Coastguard Worker                                 Z_DEFAULT_COMPRESSION),
1256*86ee64e7SAndroid Build Coastguard Worker             ZIP_OK);
1257*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(zipWriteInFileInZip(zf, "1", 1), ZIP_OK);
1258*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(zipCloseFileInZip(zf), ZIP_OK);
1259*86ee64e7SAndroid Build Coastguard Worker 
1260*86ee64e7SAndroid Build Coastguard Worker   // More then 2^16 bytes doesn't work. Neither for size_extrafield_local, nor
1261*86ee64e7SAndroid Build Coastguard Worker   // size_extrafield_global.
1262*86ee64e7SAndroid Build Coastguard Worker   std::string extra_field_long = extra_field + 'x';
1263*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(
1264*86ee64e7SAndroid Build Coastguard Worker       zipOpenNewFileInZip(zf, "b", nullptr, nullptr, 0, extra_field_long.data(),
1265*86ee64e7SAndroid Build Coastguard Worker                           extra_field_long.size(), nullptr, Z_DEFLATED,
1266*86ee64e7SAndroid Build Coastguard Worker                           Z_DEFAULT_COMPRESSION),
1267*86ee64e7SAndroid Build Coastguard Worker       ZIP_PARAMERROR);
1268*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(zipOpenNewFileInZip(zf, "b", nullptr, extra_field_long.data(),
1269*86ee64e7SAndroid Build Coastguard Worker                                 extra_field_long.size(), nullptr, 0, nullptr,
1270*86ee64e7SAndroid Build Coastguard Worker                                 Z_DEFLATED, Z_DEFAULT_COMPRESSION),
1271*86ee64e7SAndroid Build Coastguard Worker             ZIP_PARAMERROR);
1272*86ee64e7SAndroid Build Coastguard Worker 
1273*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(zipClose(zf, nullptr), ZIP_OK);
1274*86ee64e7SAndroid Build Coastguard Worker 
1275*86ee64e7SAndroid Build Coastguard Worker   // Check that the data can be read back.
1276*86ee64e7SAndroid Build Coastguard Worker   unzFile uzf = unzOpen(zip_file.AsUTF8Unsafe().c_str());
1277*86ee64e7SAndroid Build Coastguard Worker   ASSERT_NE(uzf, nullptr);
1278*86ee64e7SAndroid Build Coastguard Worker   char buf[UINT16_MAX + 1] = {0};
1279*86ee64e7SAndroid Build Coastguard Worker 
1280*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(unzGoToFirstFile(uzf), UNZ_OK);
1281*86ee64e7SAndroid Build Coastguard Worker   ASSERT_EQ(unzGetCurrentFileInfo(uzf, nullptr, nullptr, 0, buf,
1282*86ee64e7SAndroid Build Coastguard Worker                                   sizeof(buf) - 1, nullptr, 0),
1283*86ee64e7SAndroid Build Coastguard Worker             UNZ_OK);
1284*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(std::string(buf), extra_field);
1285*86ee64e7SAndroid Build Coastguard Worker 
1286*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(unzGoToNextFile(uzf), UNZ_END_OF_LIST_OF_FILE);
1287*86ee64e7SAndroid Build Coastguard Worker   EXPECT_EQ(unzClose(uzf), UNZ_OK);
1288*86ee64e7SAndroid Build Coastguard Worker }
1289*86ee64e7SAndroid Build Coastguard Worker 
1290*86ee64e7SAndroid Build Coastguard Worker #endif
1291