void graphics_render_qr_code(void) {
  char qr_code[] = {
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1,
      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0,
      0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1,
      0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1,
      0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0,
      0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1,
      0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1,
      1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
      1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1,
      1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0,
      1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0,
      1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,
      1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1,
      1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
      1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,
      1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1,
      1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1,
      1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1,
      0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
      1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1,
      0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1,
      0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1,
      0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1,
      1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0,
      0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1,
      0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
      1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1,
      1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1,
      1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0,
      0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,
      0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0,
      0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1,
      0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1,
      0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0,
      1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
  int x = 0;
  int y = 0;
  int render_x = 0;
  int render_y = 0;
  int offset_line = 0;
  for (y = 0; y < 31; y++) {
    for (x = 0; x < 31; x++) {
      if (qr_code[y * 31 + x] == 1) {
        render_x = (x * 2) + 5;
        render_y = (y * 1) + 1;
        graphics_sprites_render_box(render_x, render_y, 2, 1);
      }
    }
  }
  render_x = 5 + 2 * 31 / 2 - 44 / 2;
  render_y = 1 + 1 * 31 + 2;
  mvprintw(render_y, render_x, "https://github.com/NIPE-SYSTEMS/turbo-bomber");
  render_x = 5 + 2 * 31 / 2 - 12 / 2;
  render_y = 1 + 1 * 31 + 4;
  mvprintw(render_y, render_x, "Made in 2016");
  render_x = 2 * 5 + 2 * 31;
  render_y = 1;
  mvprintw(render_y, render_x, "Features:");
  offset_line = 2;
  mvprintw(render_y + offset_line++, render_x,
           " - Command line game (based on ncurses)");
  mvprintw(render_y + offset_line++, render_x, " - Animations");
  mvprintw(render_y + offset_line++, render_x,
           " - Complex cutscenes (made by hand)");
  mvprintw(render_y + offset_line++, render_x, " - Colors (more or less)");
  mvprintw(render_y + offset_line++, render_x, " - ASCII art");
  mvprintw(render_y + offset_line++, render_x, " - Cheats (TURBO-MODE)");
  mvprintw(render_y + offset_line++, render_x,
           " - Sprite rendering (based on ncurses)");
  mvprintw(render_y + offset_line++, render_x,
           " - Dynamic sprite reading (file I/O)");
  mvprintw(render_y + offset_line++, render_x,
           " - Multilayered rendering (alpha rendering)");
  mvprintw(render_y + offset_line++, render_x, " - AI: Bomb spot selection");
  mvprintw(render_y + offset_line++, render_x,
           " - AI: Explosion simulation (array magic)");
  mvprintw(render_y + offset_line++, render_x,
           " - AI: Pathfinding (wavefront/floodfill)");
  mvprintw(render_y + offset_line++, render_x,
           " - AI: Job lists (linked lists)");
  mvprintw(render_y + offset_line++, render_x,
           " - Explosion algorithm (array magic v2)");
  mvprintw(render_y + offset_line++, render_x,
           " - Explosion triggers nearby bombs");
  mvprintw(render_y + offset_line++, render_x,
           " - Items, power ups (linked lists, structs)");
  mvprintw(render_y + offset_line++, render_x, " - Destroyable items");
  mvprintw(render_y + offset_line++, render_x, " - Destructable walls");
  mvprintw(render_y + offset_line++, render_x,
           " - Random drops (item drops, probabilities)");
  mvprintw(render_y + offset_line++, render_x,
           " - Game states (enums, controlled state changes)");
  mvprintw(render_y + offset_line++, render_x,
           " - Logging, debug output (file I/O)");
  mvprintw(render_y + offset_line++, render_x,
           " - Git, public repository with complete code");
  mvprintw(render_y + offset_line++, render_x,
           " - Modular code (many header files)");
  mvprintw(render_y + offset_line++, render_x, " - Game loop (timing)");
  mvprintw(render_y + offset_line++, render_x,
           " - Keyboard input handling (based on ncurses)");
  mvprintw(render_y + offset_line++, render_x, " - QR code (maybe this one)");
  mvprintw(render_y + offset_line++, render_x, " - Game pausing");
  mvprintw(render_y + offset_line++, render_x,
           " - Screenshot taking (file I/O)");
}


x86 assembly (clang, -O0):
<graphics_render_qr_code>:
push   %rbp
mov    %rsp,%rbp
sub    $0x3f0,%rsp
lea    -0x3d0(%rbp),%rdi
lea    0xeb7(%rip),%rsi
mov    $0x3c1,%edx
call   1030 <memcpy@plt>
movl   $0x0,-0x3d4(%rbp)
movl   $0x0,-0x3d8(%rbp)
movl   $0x0,-0x3dc(%rbp)
movl   $0x0,-0x3e0(%rbp)
movl   $0x0,-0x3e4(%rbp)
movl   $0x0,-0x3d8(%rbp)
cmpl   $0x1f,-0x3d8(%rbp)
jge    1246 <graphics_render_qr_code+0x116>
movl   $0x0,-0x3d4(%rbp)
cmpl   $0x1f,-0x3d4(%rbp)
jge    122d <graphics_render_qr_code+0xfd>
imul   $0x1f,-0x3d8(%rbp),%eax
add    -0x3d4(%rbp),%eax
cltq
movsbl -0x3d0(%rbp,%rax,1),%eax
ff
cmp    $0x1,%eax
jne    1214 <graphics_render_qr_code+0xe4>
mov    -0x3d4(%rbp),%eax
shl    $0x1,%eax
add    $0x5,%eax
mov    %eax,-0x3dc(%rbp)
mov    -0x3d8(%rbp),%eax
shl    $0x0,%eax
add    $0x1,%eax
mov    %eax,-0x3e0(%rbp)
mov    -0x3dc(%rbp),%edi
mov    -0x3e0(%rbp),%esi
mov    $0x2,%edx
mov    $0x1,%ecx
mov    $0x0,%al
call   1040 <graphics_sprites_render_box@plt>
jmp    1219 <graphics_render_qr_code+0xe9>
mov    -0x3d4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3d4(%rbp)
jmp    11a6 <graphics_render_qr_code+0x76>
jmp    1232 <graphics_render_qr_code+0x102>
mov    -0x3d8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3d8(%rbp)
jmp    118f <graphics_render_qr_code+0x5f>
movl   $0xe,-0x3dc(%rbp)
movl   $0x22,-0x3e0(%rbp)
mov    -0x3e0(%rbp),%edi
mov    -0x3dc(%rbp),%esi
lea    0x1154(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
movl   $0x1e,-0x3dc(%rbp)
movl   $0x24,-0x3e0(%rbp)
mov    -0x3e0(%rbp),%edi
mov    -0x3dc(%rbp),%esi
lea    0x1153(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
movl   $0x48,-0x3dc(%rbp)
movl   $0x1,-0x3e0(%rbp)
mov    -0x3e0(%rbp),%edi
mov    -0x3dc(%rbp),%esi
lea    0x1132(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
movl   $0x2,-0x3e4(%rbp)
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x1105(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x1100(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x10e1(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x10d8(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x10c4(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x10a4(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x108e(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x1088(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x1080(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x107f(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x106d(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x106a(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x1066(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x1059(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x1054(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x104a(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x1049(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x1031(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x101a(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x1019(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x101d(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x1014(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x1014(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0x100b(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0xff4(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0xff5(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0xfe4(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
mov    -0x3e0(%rbp),%edi
mov    -0x3e4(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3e4(%rbp)
add    %eax,%edi
mov    -0x3dc(%rbp),%esi
lea    0xfc7(%rip),%rdx
mov    $0x0,%al
call   1050 <mvprintw@plt>
add    $0x3f0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<graphics_render_qr_code>:
push   %rbp
push   %r15
push   %r14
push   %rbx
push   %rax
lea    0xed2(%rip),%r15
xor    %r14d,%r14d
jmp    114a <graphics_render_qr_code+0x2a>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1f,%r15
cmp    $0x1f,%r14
je     1188 <graphics_render_qr_code+0x68>
add    $0x1,%r14
mov    $0x5,%ebp
mov    $0xffffffffffffffe1,%rbx
jmp    1168 <graphics_render_qr_code+0x48>
nopl   0x0(%rax)
add    $0x2,%ebp
inc    %rbx
je     1140 <graphics_render_qr_code+0x20>
cmpb   $0x1,0x1f(%r15,%rbx,1)
jne    1160 <graphics_render_qr_code+0x40>
mov    %ebp,%edi
mov    %r14d,%esi
mov    $0x2,%edx
mov    $0x1,%ecx
xor    %eax,%eax
call   1030 <graphics_sprites_render_box@plt>
jmp    1160 <graphics_render_qr_code+0x40>
lea    0x1232(%rip),%rdx
mov    $0x22,%edi
mov    $0xe,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x1247(%rip),%rdx
mov    $0x24,%edi
mov    $0x1e,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x123c(%rip),%rdx
mov    $0x1,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x122e(%rip),%rdx
mov    $0x3,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x123e(%rip),%rdx
mov    $0x4,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x1234(%rip),%rdx
mov    $0x5,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x1240(%rip),%rdx
mov    $0x6,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x1241(%rip),%rdx
mov    $0x7,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x1236(%rip),%rdx
mov    $0x8,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x1235(%rip),%rdx
mov    $0x9,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x1244(%rip),%rdx
mov    $0xa,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x1251(%rip),%rdx
mov    $0xb,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x1265(%rip),%rdx
mov    $0xc,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x1268(%rip),%rdx
mov    $0xd,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x127a(%rip),%rdx
mov    $0xe,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x128b(%rip),%rdx
mov    $0xf,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x1293(%rip),%rdx
mov    $0x10,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x12a3(%rip),%rdx
mov    $0x11,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x12ae(%rip),%rdx
mov    $0x12,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x12c2(%rip),%rdx
mov    $0x13,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x12bf(%rip),%rdx
mov    $0x14,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x12bd(%rip),%rdx
mov    $0x15,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x12d1(%rip),%rdx
mov    $0x16,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x12ea(%rip),%rdx
mov    $0x17,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x12f6(%rip),%rdx
mov    $0x18,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x130b(%rip),%rdx
mov    $0x19,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x1317(%rip),%rdx
mov    $0x1a,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x1315(%rip),%rdx
mov    $0x1b,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x132b(%rip),%rdx
mov    $0x1c,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x132f(%rip),%rdx
mov    $0x1d,%edi
mov    $0x48,%esi
xor    %eax,%eax
call   1040 <mvprintw@plt>
lea    0x1327(%rip),%rdx
mov    $0x1e,%edi
mov    $0x48,%esi
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
jmp    1040 <mvprintw@plt>

LLVM IR (-O0):
@__const.graphics_render_qr_code.qr_code = [961 x i8] c"\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\00\00\00\00\00\00\00\01\01\00\00\00\01\00\01\01\00\01\00\01\01\01\00\00\00\00\00\00\00\01\01\00\01\01\01\01\01\00\01\01\01\01\00\00\01\00\00\01\00\00\01\01\01\00\01\01\01\01\01\00\01\01\00\01\00\00\00\01\00\01\01\00\00\00\01\00\00\00\00\01\00\01\01\01\00\01\00\00\00\01\00\01\01\00\01\00\00\00\01\00\01\00\01\00\00\01\01\00\00\01\00\01\00\00\01\00\01\00\00\00\01\00\01\01\00\01\00\00\00\01\00\01\00\01\00\01\00\00\01\01\01\00\01\00\00\01\00\01\00\00\00\01\00\01\01\00\01\01\01\01\01\00\01\01\00\00\01\01\01\01\00\00\00\01\01\01\01\00\01\01\01\01\01\00\01\01\00\00\00\00\00\00\00\01\00\01\00\01\00\01\00\01\00\01\00\01\00\01\00\00\00\00\00\00\00\01\01\01\01\01\01\01\01\01\01\01\00\01\01\00\00\00\01\01\00\00\00\00\01\01\01\01\01\01\01\01\01\01\00\00\01\01\01\00\00\00\01\00\00\01\00\00\01\01\01\01\00\01\01\01\01\01\00\00\01\01\01\01\01\00\01\00\01\01\01\01\00\00\01\00\01\01\00\01\01\00\01\00\00\00\00\01\00\00\01\00\00\01\01\01\01\00\00\01\00\00\00\00\01\00\01\00\00\01\00\01\00\00\01\00\00\01\01\01\00\01\01\01\01\01\01\01\00\01\01\01\00\01\01\01\01\00\00\01\00\00\01\01\01\01\00\00\00\01\01\01\00\01\01\01\01\01\00\00\00\00\00\01\00\00\01\00\00\01\01\01\00\01\00\00\01\00\01\01\00\00\01\01\01\01\00\01\01\01\01\00\00\00\01\01\01\01\01\00\01\00\01\00\01\00\01\01\00\00\01\00\00\00\01\01\00\00\01\01\01\01\00\00\01\01\00\00\01\01\01\01\01\01\00\01\00\01\00\01\01\00\01\01\00\00\00\01\01\01\01\00\00\01\01\00\01\01\01\01\00\01\01\00\00\01\01\01\00\00\01\00\01\01\00\00\01\00\01\00\01\01\01\00\00\00\01\01\00\01\00\01\01\01\00\01\01\00\00\01\00\01\01\00\01\00\01\00\00\01\01\01\01\00\01\01\00\00\00\01\00\00\01\01\01\01\00\01\01\00\01\01\00\01\01\00\00\00\01\00\00\00\01\01\00\00\01\01\00\00\00\00\01\01\00\01\00\00\00\01\01\00\01\00\01\01\01\01\00\00\01\01\00\01\01\00\01\01\01\00\01\01\01\00\00\01\00\01\00\00\01\01\01\01\01\00\01\00\01\01\01\01\01\01\01\01\00\01\00\00\01\01\00\01\00\00\00\00\01\01\01\00\00\01\00\00\00\00\00\00\00\01\00\00\00\01\01\01\01\01\01\01\01\01\01\00\00\01\01\00\01\01\01\01\00\01\01\00\01\01\01\00\00\01\01\01\01\01\00\00\00\00\00\00\00\01\00\01\00\01\01\01\00\01\00\01\00\00\00\01\00\01\00\00\00\01\01\01\01\00\01\01\01\01\01\00\01\00\01\00\01\00\00\00\01\01\01\01\00\00\01\01\01\00\01\01\01\00\01\01\00\01\00\00\00\01\00\01\01\01\00\00\00\00\01\00\01\00\01\00\00\00\00\00\00\00\01\00\00\01\01\00\01\00\00\00\01\00\01\01\01\01\01\01\00\01\00\01\01\00\00\00\00\01\01\01\00\00\00\01\01\01\00\01\00\00\00\01\00\01\01\01\00\00\00\01\01\00\01\01\01\00\00\00\00\00\00\00\00\00\01\01\01\00\01\01\01\01\01\00\01\00\01\00\00\01\01\00\01\00\00\01\01\01\01\00\00\01\00\00\01\00\01\01\00\00\00\00\00\00\00\01\00\01\01\00\00\01\01\00\00\01\01\00\01\01\00\00\00\01\00\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01"
@.str = [45 x i8] c"https://github.com/NIPE-SYSTEMS/turbo-bomber\00"
@.str.1 = [13 x i8] c"Made in 2016\00"
@.str.2 = [10 x i8] c"Features:\00"
@.str.3 = [40 x i8] c" - Command line game (based on ncurses)\00"
@.str.4 = [14 x i8] c" - Animations\00"
@.str.5 = [36 x i8] c" - Complex cutscenes (made by hand)\00"
@.str.6 = [25 x i8] c" - Colors (more or less)\00"
@.str.7 = [13 x i8] c" - ASCII art\00"
@.str.8 = [23 x i8] c" - Cheats (TURBO-MODE)\00"
@.str.9 = [39 x i8] c" - Sprite rendering (based on ncurses)\00"
@.str.10 = [37 x i8] c" - Dynamic sprite reading (file I/O)\00"
@.str.11 = [44 x i8] c" - Multilayered rendering (alpha rendering)\00"
@.str.12 = [27 x i8] c" - AI: Bomb spot selection\00"
@.str.13 = [42 x i8] c" - AI: Explosion simulation (array magic)\00"
@.str.14 = [41 x i8] c" - AI: Pathfinding (wavefront/floodfill)\00"
@.str.15 = [32 x i8] c" - AI: Job lists (linked lists)\00"
@.str.16 = [40 x i8] c" - Explosion algorithm (array magic v2)\00"
@.str.17 = [35 x i8] c" - Explosion triggers nearby bombs\00"
@.str.18 = [44 x i8] c" - Items, power ups (linked lists, structs)\00"
@.str.19 = [21 x i8] c" - Destroyable items\00"
@.str.20 = [22 x i8] c" - Destructable walls\00"
@.str.21 = [44 x i8] c" - Random drops (item drops, probabilities)\00"
@.str.22 = [49 x i8] c" - Game states (enums, controlled state changes)\00"
@.str.23 = [36 x i8] c" - Logging, debug output (file I/O)\00"
@.str.24 = [45 x i8] c" - Git, public repository with complete code\00"
@.str.25 = [36 x i8] c" - Modular code (many header files)\00"
@.str.26 = [22 x i8] c" - Game loop (timing)\00"
@.str.27 = [46 x i8] c" - Keyboard input handling (based on ncurses)\00"
@.str.28 = [28 x i8] c" - QR code (maybe this one)\00"
@.str.29 = [16 x i8] c" - Game pausing\00"
@.str.30 = [32 x i8] c" - Screenshot taking (file I/O)\00"
define void @graphics_render_qr_code() {
%1 = alloca [961 x i8]
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = bitcast [961 x i8]* %1 to i8*
store i32 0, i32* %2
store i32 0, i32* %3
store i32 0, i32* %4
store i32 0, i32* %5
store i32 0, i32* %6
store i32 0, i32* %3
br label %8
8: ; preds = %40, %0
%9 = load i32, i32* %3
%10 = icmp slt i32 %9, 31
br i1 %10, label %11, label %43
11: ; preds = %8
store i32 0, i32* %2
br label %12
12: ; preds = %36, %11
%13 = load i32, i32* %2
%14 = icmp slt i32 %13, 31
br i1 %14, label %15, label %39
15: ; preds = %12
%16 = load i32, i32* %3
%17 = mul nsw i32 %16, 31
%18 = load i32, i32* %2
%19 = add nsw i32 %17, %18
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds [961 x i8], [961 x i8]* %1, i64 0, i64 %20
%22 = load i8, i8* %21
%23 = sext i8 %22 to i32
%24 = icmp eq i32 %23, 1
br i1 %24, label %25, label %35
25: ; preds = %15
%26 = load i32, i32* %2
%27 = mul nsw i32 %26, 2
%28 = add nsw i32 %27, 5
store i32 %28, i32* %4
%29 = load i32, i32* %3
%30 = mul nsw i32 %29, 1
%31 = add nsw i32 %30, 1
store i32 %31, i32* %5
%32 = load i32, i32* %4
%33 = load i32, i32* %5
%34 = call i32 (i32, i32, i32, i32, ...) bitcast (i32 (...)* @graphics_sprites_render_box to i32 (i32, i32, i32, i32, ...)*)(i32 %32, i32 %33, i32 2, i32 1)
br label %35
35: ; preds = %25, %15
br label %36
36: ; preds = %35
%37 = load i32, i32* %2
%38 = add nsw i32 %37, 1
store i32 %38, i32* %2
br label %12
39: ; preds = %12
br label %40
40: ; preds = %39
%41 = load i32, i32* %3
%42 = add nsw i32 %41, 1
store i32 %42, i32* %3
br label %8
43: ; preds = %8
store i32 14, i32* %4
store i32 34, i32* %5
%44 = load i32, i32* %5
%45 = load i32, i32* %4
%46 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %44, i32 %45, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str, i64 0, i64 0))
store i32 30, i32* %4
store i32 36, i32* %5
%47 = load i32, i32* %5
%48 = load i32, i32* %4
%49 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %47, i32 %48, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0))
store i32 72, i32* %4
store i32 1, i32* %5
%50 = load i32, i32* %5
%51 = load i32, i32* %4
%52 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %50, i32 %51, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.2, i64 0, i64 0))
store i32 2, i32* %6
%53 = load i32, i32* %5
%54 = load i32, i32* %6
%55 = add nsw i32 %54, 1
store i32 %55, i32* %6
%56 = add nsw i32 %53, %54
%57 = load i32, i32* %4
%58 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %56, i32 %57, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.3, i64 0, i64 0))
%59 = load i32, i32* %5
%60 = load i32, i32* %6
%61 = add nsw i32 %60, 1
store i32 %61, i32* %6
%62 = add nsw i32 %59, %60
%63 = load i32, i32* %4
%64 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %62, i32 %63, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0))
%65 = load i32, i32* %5
%66 = load i32, i32* %6
%67 = add nsw i32 %66, 1
store i32 %67, i32* %6
%68 = add nsw i32 %65, %66
%69 = load i32, i32* %4
%70 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %68, i32 %69, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.5, i64 0, i64 0))
%71 = load i32, i32* %5
%72 = load i32, i32* %6
%73 = add nsw i32 %72, 1
store i32 %73, i32* %6
%74 = add nsw i32 %71, %72
%75 = load i32, i32* %4
%76 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %74, i32 %75, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.6, i64 0, i64 0))
%77 = load i32, i32* %5
%78 = load i32, i32* %6
%79 = add nsw i32 %78, 1
store i32 %79, i32* %6
%80 = add nsw i32 %77, %78
%81 = load i32, i32* %4
%82 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %80, i32 %81, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.7, i64 0, i64 0))
%83 = load i32, i32* %5
%84 = load i32, i32* %6
%85 = add nsw i32 %84, 1
store i32 %85, i32* %6
%86 = add nsw i32 %83, %84
%87 = load i32, i32* %4
%88 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %86, i32 %87, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.8, i64 0, i64 0))
%89 = load i32, i32* %5
%90 = load i32, i32* %6
%91 = add nsw i32 %90, 1
store i32 %91, i32* %6
%92 = add nsw i32 %89, %90
%93 = load i32, i32* %4
%94 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %92, i32 %93, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.9, i64 0, i64 0))
%95 = load i32, i32* %5
%96 = load i32, i32* %6
%97 = add nsw i32 %96, 1
store i32 %97, i32* %6
%98 = add nsw i32 %95, %96
%99 = load i32, i32* %4
%100 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %98, i32 %99, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.10, i64 0, i64 0))
%101 = load i32, i32* %5
%102 = load i32, i32* %6
%103 = add nsw i32 %102, 1
store i32 %103, i32* %6
%104 = add nsw i32 %101, %102
%105 = load i32, i32* %4
%106 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %104, i32 %105, i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.11, i64 0, i64 0))
%107 = load i32, i32* %5
%108 = load i32, i32* %6
%109 = add nsw i32 %108, 1
store i32 %109, i32* %6
%110 = add nsw i32 %107, %108
%111 = load i32, i32* %4
%112 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %110, i32 %111, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0))
%113 = load i32, i32* %5
%114 = load i32, i32* %6
%115 = add nsw i32 %114, 1
store i32 %115, i32* %6
%116 = add nsw i32 %113, %114
%117 = load i32, i32* %4
%118 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %116, i32 %117, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.13, i64 0, i64 0))
%119 = load i32, i32* %5
%120 = load i32, i32* %6
%121 = add nsw i32 %120, 1
store i32 %121, i32* %6
%122 = add nsw i32 %119, %120
%123 = load i32, i32* %4
%124 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %122, i32 %123, i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.14, i64 0, i64 0))
%125 = load i32, i32* %5
%126 = load i32, i32* %6
%127 = add nsw i32 %126, 1
store i32 %127, i32* %6
%128 = add nsw i32 %125, %126
%129 = load i32, i32* %4
%130 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %128, i32 %129, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.15, i64 0, i64 0))
%131 = load i32, i32* %5
%132 = load i32, i32* %6
%133 = add nsw i32 %132, 1
store i32 %133, i32* %6
%134 = add nsw i32 %131, %132
%135 = load i32, i32* %4
%136 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %134, i32 %135, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.16, i64 0, i64 0))
%137 = load i32, i32* %5
%138 = load i32, i32* %6
%139 = add nsw i32 %138, 1
store i32 %139, i32* %6
%140 = add nsw i32 %137, %138
%141 = load i32, i32* %4
%142 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %140, i32 %141, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.17, i64 0, i64 0))
%143 = load i32, i32* %5
%144 = load i32, i32* %6
%145 = add nsw i32 %144, 1
store i32 %145, i32* %6
%146 = add nsw i32 %143, %144
%147 = load i32, i32* %4
%148 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %146, i32 %147, i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.18, i64 0, i64 0))
%149 = load i32, i32* %5
%150 = load i32, i32* %6
%151 = add nsw i32 %150, 1
store i32 %151, i32* %6
%152 = add nsw i32 %149, %150
%153 = load i32, i32* %4
%154 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %152, i32 %153, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.19, i64 0, i64 0))
%155 = load i32, i32* %5
%156 = load i32, i32* %6
%157 = add nsw i32 %156, 1
store i32 %157, i32* %6
%158 = add nsw i32 %155, %156
%159 = load i32, i32* %4
%160 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %158, i32 %159, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.20, i64 0, i64 0))
%161 = load i32, i32* %5
%162 = load i32, i32* %6
%163 = add nsw i32 %162, 1
store i32 %163, i32* %6
%164 = add nsw i32 %161, %162
%165 = load i32, i32* %4
%166 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %164, i32 %165, i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.21, i64 0, i64 0))
%167 = load i32, i32* %5
%168 = load i32, i32* %6
%169 = add nsw i32 %168, 1
store i32 %169, i32* %6
%170 = add nsw i32 %167, %168
%171 = load i32, i32* %4
%172 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %170, i32 %171, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.22, i64 0, i64 0))
%173 = load i32, i32* %5
%174 = load i32, i32* %6
%175 = add nsw i32 %174, 1
store i32 %175, i32* %6
%176 = add nsw i32 %173, %174
%177 = load i32, i32* %4
%178 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %176, i32 %177, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.23, i64 0, i64 0))
%179 = load i32, i32* %5
%180 = load i32, i32* %6
%181 = add nsw i32 %180, 1
store i32 %181, i32* %6
%182 = add nsw i32 %179, %180
%183 = load i32, i32* %4
%184 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %182, i32 %183, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.24, i64 0, i64 0))
%185 = load i32, i32* %5
%186 = load i32, i32* %6
%187 = add nsw i32 %186, 1
store i32 %187, i32* %6
%188 = add nsw i32 %185, %186
%189 = load i32, i32* %4
%190 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %188, i32 %189, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.25, i64 0, i64 0))
%191 = load i32, i32* %5
%192 = load i32, i32* %6
%193 = add nsw i32 %192, 1
store i32 %193, i32* %6
%194 = add nsw i32 %191, %192
%195 = load i32, i32* %4
%196 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %194, i32 %195, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.26, i64 0, i64 0))
%197 = load i32, i32* %5
%198 = load i32, i32* %6
%199 = add nsw i32 %198, 1
store i32 %199, i32* %6
%200 = add nsw i32 %197, %198
%201 = load i32, i32* %4
%202 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %200, i32 %201, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.27, i64 0, i64 0))
%203 = load i32, i32* %5
%204 = load i32, i32* %6
%205 = add nsw i32 %204, 1
store i32 %205, i32* %6
%206 = add nsw i32 %203, %204
%207 = load i32, i32* %4
%208 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %206, i32 %207, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.28, i64 0, i64 0))
%209 = load i32, i32* %5
%210 = load i32, i32* %6
%211 = add nsw i32 %210, 1
store i32 %211, i32* %6
%212 = add nsw i32 %209, %210
%213 = load i32, i32* %4
%214 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %212, i32 %213, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.29, i64 0, i64 0))
%215 = load i32, i32* %5
%216 = load i32, i32* %6
%217 = add nsw i32 %216, 1
store i32 %217, i32* %6
%218 = add nsw i32 %215, %216
%219 = load i32, i32* %4
%220 = call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 %218, i32 %219, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.30, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@__const.graphics_render_qr_code.qr_code = [961 x i8] c"\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\00\00\00\00\00\00\00\01\01\00\00\00\01\00\01\01\00\01\00\01\01\01\00\00\00\00\00\00\00\01\01\00\01\01\01\01\01\00\01\01\01\01\00\00\01\00\00\01\00\00\01\01\01\00\01\01\01\01\01\00\01\01\00\01\00\00\00\01\00\01\01\00\00\00\01\00\00\00\00\01\00\01\01\01\00\01\00\00\00\01\00\01\01\00\01\00\00\00\01\00\01\00\01\00\00\01\01\00\00\01\00\01\00\00\01\00\01\00\00\00\01\00\01\01\00\01\00\00\00\01\00\01\00\01\00\01\00\00\01\01\01\00\01\00\00\01\00\01\00\00\00\01\00\01\01\00\01\01\01\01\01\00\01\01\00\00\01\01\01\01\00\00\00\01\01\01\01\00\01\01\01\01\01\00\01\01\00\00\00\00\00\00\00\01\00\01\00\01\00\01\00\01\00\01\00\01\00\01\00\00\00\00\00\00\00\01\01\01\01\01\01\01\01\01\01\01\00\01\01\00\00\00\01\01\00\00\00\00\01\01\01\01\01\01\01\01\01\01\00\00\01\01\01\00\00\00\01\00\00\01\00\00\01\01\01\01\00\01\01\01\01\01\00\00\01\01\01\01\01\00\01\00\01\01\01\01\00\00\01\00\01\01\00\01\01\00\01\00\00\00\00\01\00\00\01\00\00\01\01\01\01\00\00\01\00\00\00\00\01\00\01\00\00\01\00\01\00\00\01\00\00\01\01\01\00\01\01\01\01\01\01\01\00\01\01\01\00\01\01\01\01\00\00\01\00\00\01\01\01\01\00\00\00\01\01\01\00\01\01\01\01\01\00\00\00\00\00\01\00\00\01\00\00\01\01\01\00\01\00\00\01\00\01\01\00\00\01\01\01\01\00\01\01\01\01\00\00\00\01\01\01\01\01\00\01\00\01\00\01\00\01\01\00\00\01\00\00\00\01\01\00\00\01\01\01\01\00\00\01\01\00\00\01\01\01\01\01\01\00\01\00\01\00\01\01\00\01\01\00\00\00\01\01\01\01\00\00\01\01\00\01\01\01\01\00\01\01\00\00\01\01\01\00\00\01\00\01\01\00\00\01\00\01\00\01\01\01\00\00\00\01\01\00\01\00\01\01\01\00\01\01\00\00\01\00\01\01\00\01\00\01\00\00\01\01\01\01\00\01\01\00\00\00\01\00\00\01\01\01\01\00\01\01\00\01\01\00\01\01\00\00\00\01\00\00\00\01\01\00\00\01\01\00\00\00\00\01\01\00\01\00\00\00\01\01\00\01\00\01\01\01\01\00\00\01\01\00\01\01\00\01\01\01\00\01\01\01\00\00\01\00\01\00\00\01\01\01\01\01\00\01\00\01\01\01\01\01\01\01\01\00\01\00\00\01\01\00\01\00\00\00\00\01\01\01\00\00\01\00\00\00\00\00\00\00\01\00\00\00\01\01\01\01\01\01\01\01\01\01\00\00\01\01\00\01\01\01\01\00\01\01\00\01\01\01\00\00\01\01\01\01\01\00\00\00\00\00\00\00\01\00\01\00\01\01\01\00\01\00\01\00\00\00\01\00\01\00\00\00\01\01\01\01\00\01\01\01\01\01\00\01\00\01\00\01\00\00\00\01\01\01\01\00\00\01\01\01\00\01\01\01\00\01\01\00\01\00\00\00\01\00\01\01\01\00\00\00\00\01\00\01\00\01\00\00\00\00\00\00\00\01\00\00\01\01\00\01\00\00\00\01\00\01\01\01\01\01\01\00\01\00\01\01\00\00\00\00\01\01\01\00\00\00\01\01\01\00\01\00\00\00\01\00\01\01\01\00\00\00\01\01\00\01\01\01\00\00\00\00\00\00\00\00\00\01\01\01\00\01\01\01\01\01\00\01\00\01\00\00\01\01\00\01\00\00\01\01\01\01\00\00\01\00\00\01\00\01\01\00\00\00\00\00\00\00\01\00\01\01\00\00\01\01\00\00\01\01\00\01\01\00\00\00\01\00\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01"
@.str = [45 x i8] c"https://github.com/NIPE-SYSTEMS/turbo-bomber\00"
@.str.1 = [13 x i8] c"Made in 2016\00"
@.str.2 = [10 x i8] c"Features:\00"
@.str.3 = [40 x i8] c" - Command line game (based on ncurses)\00"
@.str.4 = [14 x i8] c" - Animations\00"
@.str.5 = [36 x i8] c" - Complex cutscenes (made by hand)\00"
@.str.6 = [25 x i8] c" - Colors (more or less)\00"
@.str.7 = [13 x i8] c" - ASCII art\00"
@.str.8 = [23 x i8] c" - Cheats (TURBO-MODE)\00"
@.str.9 = [39 x i8] c" - Sprite rendering (based on ncurses)\00"
@.str.10 = [37 x i8] c" - Dynamic sprite reading (file I/O)\00"
@.str.11 = [44 x i8] c" - Multilayered rendering (alpha rendering)\00"
@.str.12 = [27 x i8] c" - AI: Bomb spot selection\00"
@.str.13 = [42 x i8] c" - AI: Explosion simulation (array magic)\00"
@.str.14 = [41 x i8] c" - AI: Pathfinding (wavefront/floodfill)\00"
@.str.15 = [32 x i8] c" - AI: Job lists (linked lists)\00"
@.str.16 = [40 x i8] c" - Explosion algorithm (array magic v2)\00"
@.str.17 = [35 x i8] c" - Explosion triggers nearby bombs\00"
@.str.18 = [44 x i8] c" - Items, power ups (linked lists, structs)\00"
@.str.19 = [21 x i8] c" - Destroyable items\00"
@.str.20 = [22 x i8] c" - Destructable walls\00"
@.str.21 = [44 x i8] c" - Random drops (item drops, probabilities)\00"
@.str.22 = [49 x i8] c" - Game states (enums, controlled state changes)\00"
@.str.23 = [36 x i8] c" - Logging, debug output (file I/O)\00"
@.str.24 = [45 x i8] c" - Git, public repository with complete code\00"
@.str.25 = [36 x i8] c" - Modular code (many header files)\00"
@.str.26 = [22 x i8] c" - Game loop (timing)\00"
@.str.27 = [46 x i8] c" - Keyboard input handling (based on ncurses)\00"
@.str.28 = [28 x i8] c" - QR code (maybe this one)\00"
@.str.29 = [16 x i8] c" - Game pausing\00"
@.str.30 = [32 x i8] c" - Screenshot taking (file I/O)\00"
define void @graphics_render_qr_code() {
br label %1
1: ; preds = %0, %20
%2 = phi i64 [ 0, %0 ], [ %4, %20 ]
%3 = mul nuw nsw i64 %2, 31
%4 = add nuw nsw i64 %2, 1
%5 = trunc i64 %4 to i32
br label %6
6: ; preds = %1, %17
%7 = phi i64 [ 0, %1 ], [ %18, %17 ]
%8 = add nuw nsw i64 %7, %3
%9 = getelementptr inbounds [961 x i8], [961 x i8]* @__const.graphics_render_qr_code.qr_code, i64 0, i64 %8
%10 = load i8, i8* %9
%11 = icmp eq i8 %10, 1
br i1 %11, label %12, label %17
12: ; preds = %6
%13 = trunc i64 %7 to i32
%14 = shl i32 %13, 1
%15 = add i32 %14, 5
%16 = tail call i32 (i32, i32, i32, i32, ...) bitcast (i32 (...)* @graphics_sprites_render_box to i32 (i32, i32, i32, i32, ...)*)(i32 %15, i32 %5, i32 2, i32 1)
br label %17
17: ; preds = %6, %12
%18 = add nuw nsw i64 %7, 1
%19 = icmp eq i64 %18, 31
br i1 %19, label %20, label %6
20: ; preds = %17
%21 = icmp eq i64 %4, 31
br i1 %21, label %22, label %1
22: ; preds = %20
%23 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 34, i32 14, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str, i64 0, i64 0))
%24 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 36, i32 30, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0))
%25 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 1, i32 72, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.2, i64 0, i64 0))
%26 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 3, i32 72, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.3, i64 0, i64 0))
%27 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 4, i32 72, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0))
%28 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 5, i32 72, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.5, i64 0, i64 0))
%29 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 6, i32 72, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.6, i64 0, i64 0))
%30 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 7, i32 72, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.7, i64 0, i64 0))
%31 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 8, i32 72, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.8, i64 0, i64 0))
%32 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 9, i32 72, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.9, i64 0, i64 0))
%33 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 10, i32 72, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.10, i64 0, i64 0))
%34 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 11, i32 72, i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.11, i64 0, i64 0))
%35 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 12, i32 72, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0))
%36 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 13, i32 72, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.13, i64 0, i64 0))
%37 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 14, i32 72, i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.14, i64 0, i64 0))
%38 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 15, i32 72, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.15, i64 0, i64 0))
%39 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 16, i32 72, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.16, i64 0, i64 0))
%40 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 17, i32 72, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.17, i64 0, i64 0))
%41 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 18, i32 72, i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.18, i64 0, i64 0))
%42 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 19, i32 72, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.19, i64 0, i64 0))
%43 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 20, i32 72, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.20, i64 0, i64 0))
%44 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 21, i32 72, i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.21, i64 0, i64 0))
%45 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 22, i32 72, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.22, i64 0, i64 0))
%46 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 23, i32 72, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.23, i64 0, i64 0))
%47 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 24, i32 72, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.24, i64 0, i64 0))
%48 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 25, i32 72, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.25, i64 0, i64 0))
%49 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 26, i32 72, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.26, i64 0, i64 0))
%50 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 27, i32 72, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.27, i64 0, i64 0))
%51 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 28, i32 72, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.28, i64 0, i64 0))
%52 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 29, i32 72, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.29, i64 0, i64 0))
%53 = tail call i32 (i32, i32, i8*, ...) bitcast (i32 (...)* @mvprintw to i32 (i32, i32, i8*, ...)*)(i32 30, i32 72, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.30, i64 0, i64 0))
ret void
}