// File: Lut99[P]RayTracer/src/RayTracer.cpp
// Function: create_default_renderworld()
RenderWorld* create_default_renderworld() {
    RenderWorld* world = new RenderWorld();
    world->add_object(new Sphere(Vec3(0, 0, -1), 0.5, new Lambertian(Vec3(0.1, 0.2, 0.5))));
    world->add_object(new Sphere(Vec3(0, -100.5, -1), 100, new Lambertian(Vec3(0.8, 0.8, 0.0))));
    world->add_object(new Sphere(Vec3(1, 0, -1), 0.5, new Metal(Vec3(0.8, 0.6, 0.2), 0.0)));
    world->add_object(new Sphere(Vec3(-1, 0, -1), 0.5, new Dielectric(Vec3(1.0, 1.0, 1.0), 1.5)));
    world->optimize();

    return world;
}

// Assembly:
subq $0x188, %rsp            # imm = 0x188
movl $0x10, %edi
callq 0xd05d0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x68(%rsp)
callq 0x1629c0
jmp 0xd3bc3
movq 0x68(%rsp), %rax
movq %rax, 0x180(%rsp)
movq 0x180(%rsp), %rax
movq %rax, 0x58(%rsp)
movl $0x90, %edi
callq 0xd05d0
movq %rax, 0x60(%rsp)
leaq 0x150(%rsp), %rdi
xorps %xmm1, %xmm1
movsd 0x9c409(%rip), %xmm2    # 0x170008
movaps %xmm1, %xmm0
callq 0x154750
jmp 0xd3c09
movl $0x30, %edi
callq 0xd05d0
movq %rax, 0x50(%rsp)
jmp 0xd3c1a
leaq 0x130(%rsp), %rdi
movsd 0x9c3e6(%rip), %xmm0    # 0x170010
movsd 0x9c3e6(%rip), %xmm1    # 0x170018
movsd 0x9c3e6(%rip), %xmm2    # 0x170020
callq 0x154750
jmp 0xd3c41
movq 0x50(%rsp), %rdi
leaq 0x130(%rsp), %rsi
callq 0x1661e0
jmp 0xd3c55
movq 0x50(%rsp), %rdx
movq 0x60(%rsp), %rdi
leaq 0x150(%rsp), %rsi
movsd 0x9c3b1(%rip), %xmm0    # 0x170020
callq 0x15acf0
jmp 0xd3c76
movq 0x60(%rsp), %rsi
movq 0x58(%rsp), %rdi
callq 0x162b90
movq 0x180(%rsp), %rax
movq %rax, 0x40(%rsp)
movl $0x90, %edi
callq 0xd05d0
movq %rax, 0x48(%rsp)
leaq 0x110(%rsp), %rdi
xorps %xmm0, %xmm0
movsd 0x9c374(%rip), %xmm1    # 0x170028
movsd 0x9c34c(%rip), %xmm2    # 0x170008
callq 0x154750
jmp 0xd3cc3
movl $0x30, %edi
callq 0xd05d0
movq %rax, 0x38(%rsp)
jmp 0xd3cd4
leaq 0xf0(%rsp), %rdi
movsd 0x9c34c(%rip), %xmm1    # 0x170030
xorps %xmm2, %xmm2
movaps %xmm1, %xmm0
callq 0x154750
jmp 0xd3cf1
movq 0x38(%rsp), %rdi
leaq 0xf0(%rsp), %rsi
callq 0x1661e0
jmp 0xd3d05
movq 0x38(%rsp), %rdx
movq 0x48(%rsp), %rdi
leaq 0x110(%rsp), %rsi
movsd 0x9c319(%rip), %xmm0    # 0x170038
callq 0x15acf0
jmp 0xd3d26
movq 0x48(%rsp), %rsi
movq 0x40(%rsp), %rdi
callq 0x162b90
movq 0x180(%rsp), %rax
movq %rax, 0x28(%rsp)
movl $0x90, %edi
callq 0xd05d0
movq %rax, 0x30(%rsp)
leaq 0xd0(%rsp), %rdi
movsd 0x9c2df(%rip), %xmm0    # 0x170040
xorps %xmm1, %xmm1
movsd 0x9c29c(%rip), %xmm2    # 0x170008
callq 0x154750
jmp 0xd3d73
movl $0x38, %edi
callq 0xd05d0
movq %rax, 0x20(%rsp)
jmp 0xd3d84
leaq 0xb0(%rsp), %rdi
movsd 0x9c29c(%rip), %xmm0    # 0x170030
movsd 0x9c2ac(%rip), %xmm1    # 0x170048
movsd 0x9c274(%rip), %xmm2    # 0x170018
callq 0x154750
jmp 0xd3dab
movq 0x20(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
xorps %xmm0, %xmm0
callq 0x1669c0
jmp 0xd3dc2
movq 0x20(%rsp), %rdx
movq 0x30(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
movsd 0x9c244(%rip), %xmm0    # 0x170020
callq 0x15acf0
jmp 0xd3de3
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdi
callq 0x162b90
movq 0x180(%rsp), %rax
movq %rax, 0x10(%rsp)
movl $0x90, %edi
callq 0xd05d0
movq %rax, 0x18(%rsp)
leaq 0x90(%rsp), %rdi
xorps %xmm1, %xmm1
movsd 0x9c1e7(%rip), %xmm2    # 0x170008
movaps %xmm2, %xmm0
callq 0x154750
jmp 0xd3e2b
movl $0x38, %edi
callq 0xd05d0
movq %rax, 0x8(%rsp)
jmp 0xd3e3c
leaq 0x70(%rsp), %rdi
movsd 0x9c1f7(%rip), %xmm2    # 0x170040
movaps %xmm2, %xmm0
movaps %xmm2, %xmm1
callq 0x154750
jmp 0xd3e56
movq 0x8(%rsp), %rdi
leaq 0x70(%rsp), %rsi
movsd 0x9c1e8(%rip), %xmm0    # 0x170050
callq 0x167720
jmp 0xd3e6f
movq 0x8(%rsp), %rdx
movq 0x18(%rsp), %rdi
leaq 0x90(%rsp), %rsi
movsd 0x9c197(%rip), %xmm0    # 0x170020
callq 0x15acf0
jmp 0xd3e90
movq 0x18(%rsp), %rsi
movq 0x10(%rsp), %rdi
callq 0x162b90
movq 0x180(%rsp), %rdi
callq 0x163030
movq 0x180(%rsp), %rax
addq $0x188, %rsp            # imm = 0x188
retq
movq 0x68(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x178(%rsp)
movl %eax, 0x174(%rsp)
movl $0x10, %esi
callq 0xd05e0
jmp 0xd4010
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x178(%rsp)
movl %eax, 0x174(%rsp)
jmp 0xd3f1d
movq 0x50(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x178(%rsp)
movl %eax, 0x174(%rsp)
movl $0x30, %esi
callq 0xd05e0
movq 0x60(%rsp), %rdi
movl $0x90, %esi
callq 0xd05e0
jmp 0xd4010
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x178(%rsp)
movl %eax, 0x174(%rsp)
jmp 0xd3f6a
movq 0x38(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x178(%rsp)
movl %eax, 0x174(%rsp)
movl $0x30, %esi
callq 0xd05e0
movq 0x48(%rsp), %rdi
movl $0x90, %esi
callq 0xd05e0
jmp 0xd4010
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x178(%rsp)
movl %eax, 0x174(%rsp)
jmp 0xd3fb7
movq 0x20(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x178(%rsp)
movl %eax, 0x174(%rsp)
movl $0x38, %esi
callq 0xd05e0
movq 0x30(%rsp), %rdi
movl $0x90, %esi
callq 0xd05e0
jmp 0xd4010
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x178(%rsp)
movl %eax, 0x174(%rsp)
jmp 0xd4001
movq 0x8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x178(%rsp)
movl %eax, 0x174(%rsp)
movl $0x38, %esi
callq 0xd05e0
movq 0x18(%rsp), %rdi
movl $0x90, %esi
callq 0xd05e0
movq 0x178(%rsp), %rdi
callq 0xd0a10
nopl (%rax)