Thanks to visit codestin.com
Credit goes to github.com

Skip to content

fixes issue 763 #774

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 1, 2025
Merged

fixes issue 763 #774

merged 2 commits into from
May 1, 2025

Conversation

lemire
Copy link
Member

@lemire lemire commented Apr 30, 2025

@pauldreik did find one more bug... this should fix it. Reproducing test case added.

fixes #763

@lemire
Copy link
Member Author

lemire commented Apr 30, 2025

We need to release after this. Waiting for tests to go green.

@lemire lemire merged commit b3f4cf9 into master May 1, 2025
77 checks passed
@pauldreik
Copy link
Collaborator

good morning! I tried this and unfortunately there is more.

@pauldreik
Copy link
Collaborator

with the smaller block size used in fuzzing, this fails:

  #if !SIMDUTF_IS_BIG_ENDIAN
TEST(causes_mismatch_in_count2) {
  // different count reported! 168 vs 88
  const std::vector<std::uint16_t> base64{
      0x4a, 0x31, 0x41, 0x20,   0x20,   0x20,   0x20,   0x20, 0x20, 0x20, 0x20,
      0x20, 0x20, 0x20, 0x20,   0x20,   0x20,   0x20,   0x20, 0x20, 0x20, 0x20,
      0x20, 0x20, 0x20, 0x20,   0x20,   0x20,   0x20,   0x20, 0x20, 0x20, 0x20,
      0x20, 0x20, 0x20, 0x20,   0x20,   0x20,   0x20,   0x20, 0x20, 0x20, 0x20,
      0x20, 0x20, 0x20, 0x20,   0x20,   0x20,   0x20,   0x20, 0x20, 0x20, 0x20,
      0x20, 0x20, 0x20, 0x20,   0x20,   0x20,   0x20,   0x20, 0x20, 0x20, 0x20,
      0x20, 0x20, 0x20, 0x20,   0x20,   0x20,   0x20,   0x20, 0x20, 0x20, 0x20,
      0x20, 0x20, 0x20, 0x20,   0x20,   0x20,   0x20,   0x20, 0x20, 0x20, 0x20,
      0x3d, 0x20, 0x20, 0x3d,   0x20,   0x20,   0x20,   0x20, 0x20, 0x20, 0x20,
      0x20, 0x20, 0x20, 0x20,   0x20,   0x20,   0x20,   0x20, 0x20, 0x20, 0x20,
      0x20, 0x20, 0x20, 0x20,   0x20,   0x20,   0x20,   0x20, 0x20, 0x20, 0x20,
      0x20, 0x20, 0x20, 0x20,   0x20,   0x20,   0x20,   0x20, 0x20, 0x20, 0x20,
      0x20, 0x20, 0x20, 0x20,   0x20,   0x20,   0x20,   0x20, 0x20, 0x20, 0x20,
      0x20, 0x20, 0x20, 0x20,   0x20,   0x20,   0x20,   0x20, 0x20, 0x20, 0x20,
      0x20, 0x20, 0x20, 0x20,   0x20,   0x20,   0x20,   0x20, 0x20, 0x20, 0x20,
      0x20, 0x20, 0x20, 0x2020, 0x2020, 0x2020, 0x2020,
  };
  compare_decode(base64, 8224, simdutf::base64_default,
                 simdutf::last_chunk_handling_options::stop_before_partial,
                 false);
};
  #endif

working right to reproduce the problem with 4096 size as well.

@pauldreik
Copy link
Collaborator

here is an unminimized case, working for block size 4096:

// different data size! 5763 vs 5766
TEST(issue_xxx) {
  const std::vector<unsigned char> base64{
      0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31,
      0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32,
      0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30,
      0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37,
      0x34, 0x37, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x39, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38,
      0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x32, 0x39, 0x31, 0x31,
      0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36,
      0x34, 0x35, 0x35, 0x39, 0x37, 0x37, 0x31, 0x34, 0x32, 0x34, 0x09, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31,
      0x32, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35,
      0x39, 0x37, 0x37, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35, 0x35, 0x32, 0x32,
      0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09,
      0x09, 0x35, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30,
      0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32,
      0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35, 0x33,
      0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38,
      0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09,
      0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39,
      0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34,
      0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31,
      0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30,
      0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32,
      0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39,
      0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35,
      0x39, 0x37, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x39, 0x09, 0x09, 0x30,
      0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33,
      0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x32, 0x39, 0x31, 0x31, 0x39,
      0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34,
      0x35, 0x35, 0x39, 0x37, 0x37, 0x31, 0x34, 0x32, 0x34, 0x09, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31,
      0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39,
      0x37, 0x37, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35, 0x35, 0x32, 0x32, 0x35,
      0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09,
      0x35, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39,
      0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35, 0x33, 0x34,
      0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09,
      0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09,
      0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31,
      0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31,
      0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x30, 0x31, 0x30, 0x30,
      0x09, 0x09, 0x32, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39,
      0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31,
      0x32, 0x38, 0x31, 0x37, 0x32, 0x34, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31,
      0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39,
      0x37, 0x37, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x39, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38,
      0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x32, 0x39, 0x31, 0x31,
      0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39,
      0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x09, 0x09, 0x31, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34,
      0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37,
      0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32,
      0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31,
      0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09,
      0x35, 0x35, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32,
      0x39, 0x31, 0x31, 0x39, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35, 0x35, 0x32, 0x32, 0x35, 0x30,
      0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31,
      0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32,
      0x38, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34,
      0x32, 0x09, 0x09, 0x35, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30,
      0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34,
      0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37,
      0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x31, 0x31, 0x32, 0x32, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32,
      0x38, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32,
      0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32,
      0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x31, 0x35, 0x35, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39,
      0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35,
      0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37, 0x37, 0x38, 0x09, 0x09, 0x09,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09,
      0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x31, 0x31, 0x39, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37,
      0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32,
      0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x39, 0x35, 0x34, 0x32, 0x38, 0x09,
      0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34,
      0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x38, 0x09, 0x09, 0x09,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35,
      0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32,
      0x31, 0x30, 0x31, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35, 0x33, 0x34,
      0x32, 0x38, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35,
      0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30,
      0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35,
      0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34,
      0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30,
      0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x31, 0x31, 0x32, 0x32, 0x31, 0x39, 0x35, 0x33, 0x34,
      0x32, 0x38, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31,
      0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32,
      0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31,
      0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34,
      0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x31, 0x35, 0x35, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34,
      0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32,
      0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37, 0x37, 0x38, 0x09, 0x09,
      0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31,
      0x31, 0x39, 0x35, 0x33, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38,
      0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x31, 0x39, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30,
      0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x39, 0x35, 0x34, 0x32, 0x38,
      0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33,
      0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x38, 0x37, 0x32,
      0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35, 0x33,
      0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38,
      0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09,
      0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39,
      0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x30, 0x30, 0x30,
      0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
      0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31,
      0x31, 0x39, 0x34, 0x38, 0x37, 0x31, 0x34, 0x30, 0x09, 0x09, 0x09, 0x30,
      0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x39, 0x35, 0x33,
      0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30,
      0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37,
      0x37, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35, 0x35, 0x32, 0x32, 0x35, 0x30,
      0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31,
      0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32,
      0x38, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34,
      0x32, 0x09, 0x09, 0x35, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30,
      0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34,
      0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37,
      0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x31, 0x31, 0x32, 0x32, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32,
      0x38, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32,
      0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32,
      0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x31, 0x35, 0x35, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39,
      0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35,
      0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37, 0x37, 0x38, 0x09, 0x09, 0x09,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09,
      0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x31, 0x31, 0x39, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37,
      0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32,
      0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x39, 0x35, 0x34, 0x32, 0x38, 0x09,
      0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34,
      0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x38, 0x09, 0x09, 0x09,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35,
      0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32,
      0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31,
      0x39, 0x35, 0x34, 0x32, 0x38, 0x09, 0x09, 0x31, 0x31, 0x39, 0x35, 0x33,
      0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34,
      0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37,
      0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x35, 0x35, 0x35, 0x35, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31,
      0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x33, 0x34, 0x32,
      0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31,
      0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34,
      0x32, 0x38, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32,
      0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38,
      0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32,
      0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32,
      0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34,
      0x32, 0x38, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31,
      0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32,
      0x38, 0x35, 0x30, 0x30, 0x31, 0x30, 0x30, 0x09, 0x09, 0x32, 0x30, 0x31,
      0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34,
      0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x31, 0x37, 0x32,
      0x34, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32,
      0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37, 0x37, 0x38, 0x09, 0x09,
      0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31,
      0x31, 0x39, 0x35, 0x33, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38,
      0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09,
      0x09, 0x30, 0x30, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09,
      0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31,
      0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32,
      0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31,
      0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34,
      0x32, 0x38, 0x09, 0x09, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35,
      0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30,
      0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31,
      0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39,
      0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35,
      0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32,
      0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38,
      0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30,
      0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33,
      0x34, 0x34, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37,
      0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32,
      0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39,
      0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30,
      0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32,
      0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x30, 0x30,
      0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
      0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31,
      0x31, 0x31, 0x39, 0x34, 0x38, 0x37, 0x31, 0x34, 0x30, 0x09, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31,
      0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39,
      0x37, 0x37, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35, 0x35, 0x32, 0x32, 0x35,
      0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09,
      0x35, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39,
      0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35, 0x33, 0x34,
      0x32, 0x38, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35,
      0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30,
      0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35,
      0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34,
      0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30,
      0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x31, 0x31, 0x32, 0x32, 0x31, 0x39, 0x35, 0x33, 0x34,
      0x32, 0x38, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31,
      0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32,
      0x38, 0x35, 0x30, 0x09, 0x09, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32,
      0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38,
      0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32,
      0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32,
      0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35,
      0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34,
      0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30,
      0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30,
      0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35,
      0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x09,
      0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36,
      0x34, 0x35, 0x35, 0x39, 0x37, 0x37, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x38, 0x32, 0x09, 0x09, 0x09,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35,
      0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34,
      0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32,
      0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37, 0x37, 0x31, 0x34, 0x32,
      0x34, 0x09, 0x09, 0x09, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
      0x31, 0x30, 0x31, 0x32, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34,
      0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30,
      0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30,
      0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35,
      0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x09,
      0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x39,
      0x31, 0x35, 0x35, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36,
      0x34, 0x35, 0x35, 0x39, 0x37, 0x37, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35,
      0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30,
      0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x34, 0x35, 0x35, 0x39, 0x37,
      0x37, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x39, 0x09, 0x09, 0x30,
      0x30, 0x30, 0x38, 0x32, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33,
      0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32,
      0x32, 0x32, 0x35, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33,
      0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35,
      0x35, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35,
      0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30,
      0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35,
      0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34,
      0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30,
      0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30,
      0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35,
      0x30, 0x37, 0x32, 0x39, 0x31, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32,
      0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38,
      0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32,
      0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32,
      0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x30, 0x36, 0x38,
      0x35, 0x36, 0x39, 0x38, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09,
      0x09, 0x09, 0x35, 0x35, 0x39, 0x35, 0x34, 0x32, 0x38, 0x09, 0x09, 0x09,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35,
      0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33,
      0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30,
      0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x09, 0x09,
      0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34,
      0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37,
      0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32,
      0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31,
      0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x34, 0x39, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34,
      0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35,
      0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x30,
      0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35,
      0x35, 0x39, 0x37, 0x37, 0x31, 0x34, 0x32, 0x34, 0x09, 0x09, 0x09, 0x30,
      0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x39, 0x35, 0x33,
      0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30,
      0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37,
      0x37, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35, 0x35, 0x32, 0x32, 0x35, 0x30,
      0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31,
      0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32,
      0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09,
      0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31,
      0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30,
      0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32,
      0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31,
      0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31,
      0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32,
      0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30,
      0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37,
      0x37, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x39, 0x09, 0x09, 0x30,
      0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33,
      0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x32, 0x39, 0x31, 0x31, 0x39,
      0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x33, 0x34,
      0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30,
      0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35,
      0x34, 0x32, 0x38, 0x09, 0x09, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32,
      0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09,
      0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31,
      0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30,
      0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32,
      0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31,
      0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32,
      0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32,
      0x38, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38,
      0x33, 0x34, 0x34, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30,
      0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34,
      0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37,
      0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x39, 0x37, 0x37, 0x31, 0x34, 0x32, 0x34, 0x09, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31,
      0x32, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35,
      0x39, 0x37, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35,
      0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37, 0x37, 0x31, 0x34, 0x32, 0x34,
      0x09, 0x09, 0x09, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31,
      0x30, 0x31, 0x32, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x31, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37,
      0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32,
      0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39,
      0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30,
      0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32,
      0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33,
      0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35,
      0x35, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35,
      0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30,
      0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35,
      0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x32, 0x31,
      0x33, 0x31, 0x37, 0x31, 0x30, 0x30, 0x31, 0x36, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34,
      0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30,
      0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x30,
      0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32,
      0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35, 0x33,
      0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38,
      0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09,
      0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39,
      0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34,
      0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31,
      0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30,
      0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32,
      0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39,
      0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35,
      0x39, 0x37, 0x37, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x39, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x38, 0x32, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32,
      0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30,
      0x31, 0x32, 0x32, 0x32, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36,
      0x34, 0x35, 0x35, 0x39, 0x37, 0x37, 0x31, 0x34, 0x32, 0x34, 0x09, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31,
      0x32, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30,
      0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09,
      0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39,
      0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x31,
      0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37, 0x37,
      0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x39, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x38,
      0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32,
      0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37, 0x37, 0x31, 0x34,
      0x32, 0x34, 0x09, 0x09, 0x09, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
      0x30, 0x31, 0x30, 0x31, 0x32, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33,
      0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30,
      0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35,
      0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35,
      0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32,
      0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38,
      0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x33,
      0x36, 0x34, 0x35, 0x35, 0x39, 0x37, 0x34, 0x37, 0x38, 0x09, 0x09, 0x09,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09,
      0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09,
      0x30, 0x30, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31,
      0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37, 0x37,
      0x31, 0x34, 0x32, 0x34, 0x09, 0x09, 0x09, 0x30, 0x30, 0x30, 0x30, 0x30,
      0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34,
      0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32,
      0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37, 0x37, 0x32, 0x09, 0x09,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x35, 0x35, 0x35, 0x35, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31,
      0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x33, 0x34, 0x32,
      0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31,
      0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34,
      0x32, 0x38, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09,
      0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32,
      0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38,
      0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32,
      0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32,
      0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34,
      0x32, 0x38, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31,
      0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32,
      0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31,
      0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34,
      0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34,
      0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, 0x32, 0x32,
      0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37, 0x37, 0x38, 0x09, 0x09,
      0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31,
      0x31, 0x39, 0x35, 0x33, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38,
      0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09,
      0x09, 0x30, 0x30, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09,
      0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31,
      0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32,
      0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31,
      0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34,
      0x32, 0x38, 0x09, 0x09, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35,
      0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30,
      0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31,
      0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39,
      0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35,
      0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32,
      0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38,
      0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30,
      0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33,
      0x34, 0x34, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37,
      0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32,
      0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39,
      0x09, 0x09, 0x30, 0x30, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30,
      0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32,
      0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33,
      0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x39, 0x37, 0x37, 0x31, 0x34, 0x32, 0x34, 0x09, 0x09, 0x09,
      0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31,
      0x30, 0x31, 0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39,
      0x37, 0x37, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35, 0x35, 0x32, 0x32, 0x35,
      0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09,
      0x35, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39,
      0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35, 0x33, 0x34,
      0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09,
      0x09, 0x09, 0x35, 0x35, 0x35, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30,
      0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35,
      0x34, 0x32, 0x38, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x34, 0x39,
      0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35,
      0x35, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35,
      0x39, 0x35, 0x34, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34,
      0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09,
      0x30, 0x30, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x39, 0x35, 0x33, 0x34,
      0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31,
      0x32, 0x32, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31,
      0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35,
      0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x37,
      0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32,
      0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31,
      0x39, 0x35, 0x34, 0x32, 0x38, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38,
      0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38, 0x09, 0x09, 0x09,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35,
      0x39, 0x31, 0x32, 0x38, 0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30,
      0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31,
      0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39,
      0x35, 0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39,
      0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32,
      0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31,
      0x39, 0x35, 0x34, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38,
      0x33, 0x34, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31,
      0x32, 0x32, 0x32, 0x35, 0x33, 0x36, 0x34, 0x35, 0x35, 0x39, 0x37, 0x37,
      0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x39, 0x09, 0x09, 0x30, 0x30,
      0x30, 0x32, 0x38, 0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31, 0x32, 0x38, 0x33, 0x34,
      0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35,
      0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x31, 0x31, 0x39, 0x35,
      0x33, 0x34, 0x32, 0x38, 0x35, 0x30, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32,
      0x31, 0x30, 0x31, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31,
      0x39, 0x35, 0x34, 0x32, 0x38, 0x09, 0x09, 0x31, 0x31, 0x39, 0x35, 0x33,
      0x34, 0x32, 0x38, 0x34, 0x39, 0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x38,
      0x09, 0x09, 0x09, 0x35, 0x35, 0x35, 0x35, 0x35, 0x32, 0x35, 0x33, 0x36,
      0x34, 0x37, 0x37, 0x39, 0x35, 0x35, 0x32, 0x09, 0x09, 0x35, 0x35, 0x35,
      0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x31, 0x39, 0x35, 0x33,
      0x34, 0x31, 0x31, 0x39, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x35, 0x35,
      0x35, 0x32, 0x32, 0x35, 0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35,
      0x34, 0x32, 0x09, 0x09, 0x35, 0x35, 0x33, 0x34, 0x32, 0x38, 0x35, 0x30,
      0x09, 0x09, 0x30, 0x30, 0x30, 0x32, 0x31, 0x30, 0x31, 0x32, 0x32, 0x35,
      0x30, 0x37, 0x32, 0x39, 0x31, 0x31, 0x39, 0x35, 0x34, 0x32, 0x38, 0x31,
      0x39, 0x35, 0x33, 0x35, 0x35, 0x35, 0x35, 0x35, 0x31, 0x35, 0x39, 0x31,
      0x32, 0x34, 0x32, 0x38,
  };
  compare_decode(base64, 12601, simdutf::base64_default,
                 simdutf::last_chunk_handling_options::stop_before_partial,
                 true);
};

@pauldreik
Copy link
Collaborator

here is a smaller problematic case which gets different result (SUCCESS vs BASE64_INPUT_REMAINDER):

TEST(gets_different_error) {
  std::vector<unsigned char> base64(5463, 0x20);
  base64.back() = 0x38;
  compare_decode(base64, 8224, simdutf::base64_default,
                 simdutf::last_chunk_handling_options::stop_before_partial,
                 false);
}

@lemire
Copy link
Member Author

lemire commented May 1, 2025

@pauldreik Thanks. We shall produce a patch release.

@lemire
Copy link
Member Author

lemire commented May 1, 2025

@pauldreik Please see #778

@lemire
Copy link
Member Author

lemire commented May 1, 2025

@pauldreik Note that this issue is not new. It was pre-existing. Your new fuzzing just exposed it.

@lemire
Copy link
Member Author

lemire commented May 2, 2025

See #778

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

atomic_base64_to_binary_safe is not really ready for production use
2 participants