Try   HackMD

Babystretchy (Web) - IrisCTF2023

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

More byte mean more secure

SOURCE CODE :

<?php $password = exec("openssl rand -hex 64"); $stretched_password = ""; for($a = 0; $a < strlen($password); $a++) { for($b = 0; $b < 64; $b++) $stretched_password .= $password[$a]; } echo "Fear my 4096 byte password!\n> "; $h = password_hash($stretched_password, PASSWORD_DEFAULT); while (FALSE !== ($line = fgets(STDIN))) { if(password_verify(trim($line), $h)) die(file_get_contents("flag")); echo "> "; } die("No!"); ?>
  • First $password will be randomly generated 64 characters of hex.
  • Next go through 2 loops, each character of $password will be repeated 64 times.
  • The goal here is to find a string ($line) when entering the password_verify function that returns True. We'll get the FLAG

Exploiting

We will be interested in the password_hash function first.
password_hash — Creates a password hash

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

We can see the author uses PASSWORD_DEFAULT, which means the maximum input is only 72 bytes, the remainder will be truncated.
You can refer here for more information

Ok, to test, i have simulated the following code

<?php $password = "5aa980cbe366458bd0b36f7e0193d59e46ee49aac520ab457901d3af5d2d3058b9b3a1bc88a1e28ba96ba40189e98358f7fc46dcccdebbdb11d8c037a9c650a3"; // for example password parameter is generated like this sequence $stretched_password = ""; for($a = 0; $a < strlen($password); $a++) { for($b = 0; $b < 64; $b++) $stretched_password .= $password[$a]; } $h = password_hash($stretched_password, PASSWORD_DEFAULT); $line = "5555555555555555555555555555555555555555555555555555555555555555aaaaaaaa"; if(password_verify(trim($line), $h)) die("True"); echo "False";

Thus, my mining idea will only need the first 64 characters and the next 8 characters of $password.
Now simply we will write the script to brute force

Because this post connects netcat to answer via terminal, I needed the help of the team (pwner)

import os from pwn import * # connect to server r = remote('stretchy.chal.irisc.tf', 10704) msg = r.recvuntil(b"Solution?") x = msg.decode('utf8').split('\n')[3].strip().split(' ') solution = os.popen("python3 pow.py " + x[4] + " " + x[5]).read() r.sendline(str(solution)) r.recvuntil(b">") f = open("out.txt", "r") for x in f: r.sendline(str(x.strip())) log.info(str(r.recv())) r.close()

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Attached files:
pow.py

#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import base64 import os import secrets import socket import sys import hashlib try: import gmpy2 HAVE_GMP = True except ImportError: HAVE_GMP = False sys.stderr.write("[NOTICE] Running 10x slower, gotta go fast? pip3 install gmpy2\n") VERSION = 's' MODULUS = 2**1279-1 CHALSIZE = 2**128 SOLVER_URL = 'https://goo.gle/kctf-pow' def python_sloth_root(x, diff, p): exponent = (p + 1) // 4 for i in range(diff): x = pow(x, exponent, p) ^ 1 return x def python_sloth_square(y, diff, p): for i in range(diff): y = pow(y ^ 1, 2, p) return y def gmpy_sloth_root(x, diff, p): exponent = (p + 1) // 4 for i in range(diff): x = gmpy2.powmod(x, exponent, p).bit_flip(0) return int(x) def gmpy_sloth_square(y, diff, p): y = gmpy2.mpz(y) for i in range(diff): y = gmpy2.powmod(y.bit_flip(0), 2, p) return int(y) def sloth_root(x, diff, p): if HAVE_GMP: return gmpy_sloth_root(x, diff, p) else: return python_sloth_root(x, diff, p) def sloth_square(x, diff, p): if HAVE_GMP: return gmpy_sloth_square(x, diff, p) else: return python_sloth_square(x, diff, p) def encode_number(num): size = (num.bit_length() // 24) * 3 + 3 return str(base64.b64encode(num.to_bytes(size, 'big')), 'utf-8') def decode_number(enc): return int.from_bytes(base64.b64decode(bytes(enc, 'utf-8')), 'big') def decode_challenge(enc): dec = enc.split('.') if dec[0] != VERSION: raise Exception('Unknown challenge version') return list(map(decode_number, dec[1:])) def encode_challenge(arr): return '.'.join([VERSION] + list(map(encode_number, arr))) def get_challenge(diff): x = secrets.randbelow(CHALSIZE) return encode_challenge([diff, x]) def solve_challenge(chal): [diff, x] = decode_challenge(chal) y = sloth_root(x, diff, MODULUS) return encode_challenge([y]) def can_bypass(chal, sol): from ecdsa import VerifyingKey from ecdsa.util import sigdecode_der if not sol.startswith('b.'): return False sig = bytes.fromhex(sol[2:]) with open("/kctf/pow-bypass/pow-bypass-key-pub.pem", "r") as fd: vk = VerifyingKey.from_pem(fd.read()) return vk.verify(signature=sig, data=bytes(chal, 'ascii'), hashfunc=hashlib.sha256, sigdecode=sigdecode_der) def verify_challenge(chal, sol, allow_bypass=True): if allow_bypass and can_bypass(chal, sol): return True [diff, x] = decode_challenge(chal) [y] = decode_challenge(sol) res = sloth_square(y, diff, MODULUS) return (x == res) or (MODULUS - x == res) def usage(): sys.stdout.write('Usage:\n') sys.stdout.write('Solve pow: {} solve $challenge\n') sys.stdout.write('Check pow: {} ask $difficulty\n') sys.stdout.write(' $difficulty examples (for 1.6GHz CPU) in fast mode:\n') sys.stdout.write(' 1337: 1 sec\n') sys.stdout.write(' 31337: 30 secs\n') sys.stdout.write(' 313373: 5 mins\n') sys.stdout.flush() sys.exit(1) def main(): if len(sys.argv) != 3: usage() sys.exit(1) cmd = sys.argv[1] if cmd == 'ask': difficulty = int(sys.argv[2]) if difficulty == 0: sys.stdout.write("== proof-of-work: disabled ==\n") sys.exit(0) challenge = get_challenge(difficulty) sys.stdout.write("== proof-of-work: enabled ==\n") sys.stdout.write("please solve a pow first\n") sys.stdout.write("You can run the solver with:\n") sys.stdout.write(" python3 <(curl -sSL {}) solve {}\n".format(SOLVER_URL, challenge)) sys.stdout.write("===================\n") sys.stdout.write("\n") sys.stdout.write("Solution? ") sys.stdout.flush() solution = '' with os.fdopen(0, "rb", 0) as f: while not solution: line = f.readline().decode("utf-8") if not line: sys.stdout.write("EOF") sys.stdout.flush() sys.exit(1) solution = line.strip() if verify_challenge(challenge, solution): sys.stdout.write("Correct\n") sys.stdout.flush() sys.exit(0) else: sys.stdout.write("Proof-of-work fail") sys.stdout.flush() elif cmd == 'solve': challenge = sys.argv[2] solution = solve_challenge(challenge) if verify_challenge(challenge, solution, False): sys.stderr.write("Solution: \n".format(solution)) sys.stderr.flush() sys.stdout.write(solution) sys.stdout.flush() sys.stderr.write("\n") sys.stderr.flush() sys.exit(0) else: usage() sys.exit(1) if __name__ == "__main__": main()

file out.txt

000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000011111111
000000000000000000000000000000000000000000000000000000000000000022222222
000000000000000000000000000000000000000000000000000000000000000033333333
000000000000000000000000000000000000000000000000000000000000000044444444
000000000000000000000000000000000000000000000000000000000000000055555555
000000000000000000000000000000000000000000000000000000000000000066666666
000000000000000000000000000000000000000000000000000000000000000077777777
000000000000000000000000000000000000000000000000000000000000000088888888
000000000000000000000000000000000000000000000000000000000000000099999999
0000000000000000000000000000000000000000000000000000000000000000aaaaaaaa
0000000000000000000000000000000000000000000000000000000000000000bbbbbbbb
0000000000000000000000000000000000000000000000000000000000000000cccccccc
0000000000000000000000000000000000000000000000000000000000000000dddddddd
0000000000000000000000000000000000000000000000000000000000000000eeeeeeee
0000000000000000000000000000000000000000000000000000000000000000ffffffff
111111111111111111111111111111111111111111111111111111111111111100000000
111111111111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111122222222
111111111111111111111111111111111111111111111111111111111111111133333333
111111111111111111111111111111111111111111111111111111111111111144444444
111111111111111111111111111111111111111111111111111111111111111155555555
111111111111111111111111111111111111111111111111111111111111111166666666
111111111111111111111111111111111111111111111111111111111111111177777777
111111111111111111111111111111111111111111111111111111111111111188888888
111111111111111111111111111111111111111111111111111111111111111199999999
1111111111111111111111111111111111111111111111111111111111111111aaaaaaaa
1111111111111111111111111111111111111111111111111111111111111111bbbbbbbb
1111111111111111111111111111111111111111111111111111111111111111cccccccc
1111111111111111111111111111111111111111111111111111111111111111dddddddd
1111111111111111111111111111111111111111111111111111111111111111eeeeeeee
1111111111111111111111111111111111111111111111111111111111111111ffffffff
222222222222222222222222222222222222222222222222222222222222222200000000
222222222222222222222222222222222222222222222222222222222222222211111111
222222222222222222222222222222222222222222222222222222222222222222222222
222222222222222222222222222222222222222222222222222222222222222233333333
222222222222222222222222222222222222222222222222222222222222222244444444
222222222222222222222222222222222222222222222222222222222222222255555555
222222222222222222222222222222222222222222222222222222222222222266666666
222222222222222222222222222222222222222222222222222222222222222277777777
222222222222222222222222222222222222222222222222222222222222222288888888
222222222222222222222222222222222222222222222222222222222222222299999999
2222222222222222222222222222222222222222222222222222222222222222aaaaaaaa
2222222222222222222222222222222222222222222222222222222222222222bbbbbbbb
2222222222222222222222222222222222222222222222222222222222222222cccccccc
2222222222222222222222222222222222222222222222222222222222222222dddddddd
2222222222222222222222222222222222222222222222222222222222222222eeeeeeee
2222222222222222222222222222222222222222222222222222222222222222ffffffff
333333333333333333333333333333333333333333333333333333333333333300000000
333333333333333333333333333333333333333333333333333333333333333311111111
333333333333333333333333333333333333333333333333333333333333333322222222
333333333333333333333333333333333333333333333333333333333333333333333333
333333333333333333333333333333333333333333333333333333333333333344444444
333333333333333333333333333333333333333333333333333333333333333355555555
333333333333333333333333333333333333333333333333333333333333333366666666
333333333333333333333333333333333333333333333333333333333333333377777777
333333333333333333333333333333333333333333333333333333333333333388888888
333333333333333333333333333333333333333333333333333333333333333399999999
3333333333333333333333333333333333333333333333333333333333333333aaaaaaaa
3333333333333333333333333333333333333333333333333333333333333333bbbbbbbb
3333333333333333333333333333333333333333333333333333333333333333cccccccc
3333333333333333333333333333333333333333333333333333333333333333dddddddd
3333333333333333333333333333333333333333333333333333333333333333eeeeeeee
3333333333333333333333333333333333333333333333333333333333333333ffffffff
444444444444444444444444444444444444444444444444444444444444444400000000
444444444444444444444444444444444444444444444444444444444444444411111111
444444444444444444444444444444444444444444444444444444444444444422222222
444444444444444444444444444444444444444444444444444444444444444433333333
444444444444444444444444444444444444444444444444444444444444444444444444
444444444444444444444444444444444444444444444444444444444444444455555555
444444444444444444444444444444444444444444444444444444444444444466666666
444444444444444444444444444444444444444444444444444444444444444477777777
444444444444444444444444444444444444444444444444444444444444444488888888
444444444444444444444444444444444444444444444444444444444444444499999999
4444444444444444444444444444444444444444444444444444444444444444aaaaaaaa
4444444444444444444444444444444444444444444444444444444444444444bbbbbbbb
4444444444444444444444444444444444444444444444444444444444444444cccccccc
4444444444444444444444444444444444444444444444444444444444444444dddddddd
4444444444444444444444444444444444444444444444444444444444444444eeeeeeee
4444444444444444444444444444444444444444444444444444444444444444ffffffff
555555555555555555555555555555555555555555555555555555555555555500000000
555555555555555555555555555555555555555555555555555555555555555511111111
555555555555555555555555555555555555555555555555555555555555555522222222
555555555555555555555555555555555555555555555555555555555555555533333333
555555555555555555555555555555555555555555555555555555555555555544444444
555555555555555555555555555555555555555555555555555555555555555555555555
555555555555555555555555555555555555555555555555555555555555555566666666
555555555555555555555555555555555555555555555555555555555555555577777777
555555555555555555555555555555555555555555555555555555555555555588888888
555555555555555555555555555555555555555555555555555555555555555599999999
5555555555555555555555555555555555555555555555555555555555555555aaaaaaaa
5555555555555555555555555555555555555555555555555555555555555555bbbbbbbb
5555555555555555555555555555555555555555555555555555555555555555cccccccc
5555555555555555555555555555555555555555555555555555555555555555dddddddd
5555555555555555555555555555555555555555555555555555555555555555eeeeeeee
5555555555555555555555555555555555555555555555555555555555555555ffffffff
666666666666666666666666666666666666666666666666666666666666666600000000
666666666666666666666666666666666666666666666666666666666666666611111111
666666666666666666666666666666666666666666666666666666666666666622222222
666666666666666666666666666666666666666666666666666666666666666633333333
666666666666666666666666666666666666666666666666666666666666666644444444
666666666666666666666666666666666666666666666666666666666666666655555555
666666666666666666666666666666666666666666666666666666666666666666666666
666666666666666666666666666666666666666666666666666666666666666677777777
666666666666666666666666666666666666666666666666666666666666666688888888
666666666666666666666666666666666666666666666666666666666666666699999999
6666666666666666666666666666666666666666666666666666666666666666aaaaaaaa
6666666666666666666666666666666666666666666666666666666666666666bbbbbbbb
6666666666666666666666666666666666666666666666666666666666666666cccccccc
6666666666666666666666666666666666666666666666666666666666666666dddddddd
6666666666666666666666666666666666666666666666666666666666666666eeeeeeee
6666666666666666666666666666666666666666666666666666666666666666ffffffff
777777777777777777777777777777777777777777777777777777777777777700000000
777777777777777777777777777777777777777777777777777777777777777711111111
777777777777777777777777777777777777777777777777777777777777777722222222
777777777777777777777777777777777777777777777777777777777777777733333333
777777777777777777777777777777777777777777777777777777777777777744444444
777777777777777777777777777777777777777777777777777777777777777755555555
777777777777777777777777777777777777777777777777777777777777777766666666
777777777777777777777777777777777777777777777777777777777777777777777777
777777777777777777777777777777777777777777777777777777777777777788888888
777777777777777777777777777777777777777777777777777777777777777799999999
7777777777777777777777777777777777777777777777777777777777777777aaaaaaaa
7777777777777777777777777777777777777777777777777777777777777777bbbbbbbb
7777777777777777777777777777777777777777777777777777777777777777cccccccc
7777777777777777777777777777777777777777777777777777777777777777dddddddd
7777777777777777777777777777777777777777777777777777777777777777eeeeeeee
7777777777777777777777777777777777777777777777777777777777777777ffffffff
888888888888888888888888888888888888888888888888888888888888888800000000
888888888888888888888888888888888888888888888888888888888888888811111111
888888888888888888888888888888888888888888888888888888888888888822222222
888888888888888888888888888888888888888888888888888888888888888833333333
888888888888888888888888888888888888888888888888888888888888888844444444
888888888888888888888888888888888888888888888888888888888888888855555555
888888888888888888888888888888888888888888888888888888888888888866666666
888888888888888888888888888888888888888888888888888888888888888877777777
888888888888888888888888888888888888888888888888888888888888888888888888
888888888888888888888888888888888888888888888888888888888888888899999999
8888888888888888888888888888888888888888888888888888888888888888aaaaaaaa
8888888888888888888888888888888888888888888888888888888888888888bbbbbbbb
8888888888888888888888888888888888888888888888888888888888888888cccccccc
8888888888888888888888888888888888888888888888888888888888888888dddddddd
8888888888888888888888888888888888888888888888888888888888888888eeeeeeee
8888888888888888888888888888888888888888888888888888888888888888ffffffff
999999999999999999999999999999999999999999999999999999999999999900000000
999999999999999999999999999999999999999999999999999999999999999911111111
999999999999999999999999999999999999999999999999999999999999999922222222
999999999999999999999999999999999999999999999999999999999999999933333333
999999999999999999999999999999999999999999999999999999999999999944444444
999999999999999999999999999999999999999999999999999999999999999955555555
999999999999999999999999999999999999999999999999999999999999999966666666
999999999999999999999999999999999999999999999999999999999999999977777777
999999999999999999999999999999999999999999999999999999999999999988888888
999999999999999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999999999999999999999999999aaaaaaaa
9999999999999999999999999999999999999999999999999999999999999999bbbbbbbb
9999999999999999999999999999999999999999999999999999999999999999cccccccc
9999999999999999999999999999999999999999999999999999999999999999dddddddd
9999999999999999999999999999999999999999999999999999999999999999eeeeeeee
9999999999999999999999999999999999999999999999999999999999999999ffffffff
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa00000000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa11111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa22222222
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa33333333
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa44444444
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa55555555
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa66666666
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa77777777
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa88888888
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa99999999
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbb
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccc
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadddddddd
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeeeeeee
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffffffff
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb00000000
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb11111111
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb22222222
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb33333333
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb44444444
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb55555555
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb66666666
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb77777777
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb88888888
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb99999999
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccc
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbdddddddd
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbeeeeeeee
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbffffffff
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc00000000
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc11111111
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc22222222
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc33333333
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc44444444
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc55555555
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66666666
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc77777777
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc88888888
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc99999999
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaa
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccbbbbbbbb
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdddddddd
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeee
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccffffffff
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd00000000
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd11111111
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd22222222
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd33333333
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd44444444
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd55555555
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd66666666
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd77777777
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd88888888
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd99999999
ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaaaaa
ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddbbbbbbbb
ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddcccccccc
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeee
ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddffffffff
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee11111111
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee22222222
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee33333333
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee44444444
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee55555555
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee66666666
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee77777777
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee88888888
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee99999999
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaa
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbbbbb
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecccccccc
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeedddddddd
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11111111
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff22222222
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33333333
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff44444444
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff55555555
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff66666666
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77777777
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88888888
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff99999999
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaaaaaaaa
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbbbbbbbb
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcccccccc
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdddddddd
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeee
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff