// File: talyerushalmy[P]SimpleFileSystem/src/FileSystem.cpp
// Function: FileSystem::getDirectoryFromPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
Directory* FileSystem::getDirectoryFromPath(std::string path)
{
	try
	{
		if (path == "")
			return &this->getWorkingDirectory();

		Directory* directory = &this->getWorkingDirectory();

		if (path[0] == '/')
			directory = &this->getRootDirectory();

		for (std::string name : StringTools::split(path, "/"))
		{
			name = StringTools::trim(name);
			if (name == "" || name == ".")
				continue;
			if (name == "..")
			{
				if (directory == &this->getRootDirectory())
					continue;
				directory = directory->getParent();
			}
			else if (directory->childExists(name))
			{
				if (Directory* d = dynamic_cast<Directory*>(directory->getChildByName(name)))
				{
					directory = d;
				}
				else return NULL;
			}
			else return NULL;
		}
		return directory;
	}
	catch(int e)
	{
		return NULL;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1d0, %rsp            # imm = 0x1D0
movq %rsi, -0x158(%rbp)
movq %rdi, %rax
movq -0x158(%rbp), %rdi
movq %rdi, -0x150(%rbp)
movq %rax, -0x10(%rbp)
movq %rdi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x148(%rbp)
leaq 0x5f1f(%rip), %rsi      # 0x1414c
callq 0xd980
movb %al, -0x13d(%rbp)
jmp 0xe23a
movb -0x13d(%rbp), %al
testb $0x1, %al
jne 0xe246
jmp 0xe26c
movq -0x148(%rbp), %rdi
callq 0xe1b0
movq %rax, -0x8(%rbp)
jmp 0xe741
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0xe703
movq -0x148(%rbp), %rdi
callq 0xe1b0
movq -0x150(%rbp), %rdi
movq %rax, -0x30(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0x3330
movq %rax, -0x160(%rbp)
jmp 0xe295
movq -0x160(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2f, %eax
jne 0xe2b4
movq -0x148(%rbp), %rdi
callq 0xe190
movq %rax, -0x30(%rbp)
movq -0x150(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0x30e0
jmp 0xe2c6
leaq -0x91(%rbp), %rdi
movq %rdi, -0x168(%rbp)
callq 0x3310
movq -0x168(%rbp), %rdx
leaq 0x5ef4(%rip), %rsi      # 0x141db
leaq -0x90(%rbp), %rdi
callq 0x3260
jmp 0xe2f5
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rsi
leaq -0x90(%rbp), %rdx
callq 0x3550
jmp 0xe30b
leaq -0x90(%rbp), %rdi
callq 0x3130
leaq -0x91(%rbp), %rdi
callq 0x3200
leaq -0x70(%rbp), %rdi
callq 0x3130
leaq -0x50(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdi
callq 0x3ef0
movq %rax, -0xa0(%rbp)
movq -0x38(%rbp), %rdi
callq 0x3d70
movq %rax, -0xa8(%rbp)
leaq -0xa0(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0xdb80
testb $0x1, %al
jne 0xe3ba
movl $0x2, -0xac(%rbp)
jmp 0xe6e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0xe3a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x3130
leaq -0x91(%rbp), %rdi
callq 0x3200
leaq -0x70(%rbp), %rdi
callq 0x3130
jmp 0xe703
leaq -0xa0(%rbp), %rdi
callq 0xdbc0
movq %rax, %rsi
leaq -0xd0(%rbp), %rdi
callq 0x30e0
jmp 0xe3d7
leaq -0xf0(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x36c0
jmp 0xe3ec
leaq -0xd0(%rbp), %rdi
movq %rdi, -0x178(%rbp)
leaq -0xf0(%rbp), %rsi
movq %rsi, -0x180(%rbp)
callq 0x3230
movq -0x180(%rbp), %rdi
callq 0x3130
movq -0x178(%rbp), %rdi
leaq 0x5d25(%rip), %rsi      # 0x1414c
callq 0xd980
movb %al, -0x169(%rbp)
jmp 0xe434
movb -0x169(%rbp), %al
testb $0x1, %al
jne 0xe467
jmp 0xe440
leaq 0x5da4(%rip), %rsi      # 0x141eb
leaq -0xd0(%rbp), %rdi
callq 0xd980
movb %al, -0x181(%rbp)
jmp 0xe45b
movb -0x181(%rbp), %al
testb $0x1, %al
jne 0xe467
jmp 0xe498
movl $0x3, -0xac(%rbp)
jmp 0xe696
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0xe6fa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0xe6d4
leaq 0x5d4b(%rip), %rsi      # 0x141ea
leaq -0xd0(%rbp), %rdi
callq 0xd980
movb %al, -0x182(%rbp)
jmp 0xe4b3
movb -0x182(%rbp), %al
testb $0x1, %al
jne 0xe4bf
jmp 0xe516
movq -0x148(%rbp), %rdi
movq -0x30(%rbp), %rax
movq %rax, -0x190(%rbp)
callq 0xe190
movq %rax, %rcx
movq -0x190(%rbp), %rax
cmpq %rcx, %rax
jne 0xe4f4
movl $0x3, -0xac(%rbp)
jmp 0xe696
movq -0x30(%rbp), %rdi
callq 0xf570
movq %rax, -0x198(%rbp)
jmp 0xe506
movq -0x198(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0xe68c
movq -0x30(%rbp), %rax
movq %rax, -0x1a0(%rbp)
leaq -0x110(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x30e0
jmp 0xe536
movq -0x1a0(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0xf6a0
movb %al, -0x1a1(%rbp)
jmp 0xe551
leaq -0x110(%rbp), %rdi
callq 0x3130
movb -0x1a1(%rbp), %al
testb $0x1, %al
jne 0xe56c
jmp 0xe676
movq -0x30(%rbp), %rax
movq %rax, -0x1b0(%rbp)
leaq -0x138(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x30e0
jmp 0xe58c
movq -0x1b0(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0xfde0
movq %rax, -0x1b8(%rbp)
jmp 0xe5a8
movq -0x1b8(%rbp), %rax
cmpq $0x0, %rax
je 0xe616
movq -0x1b8(%rbp), %rdi
leaq 0xd79d(%rip), %rsi      # 0x1bd60
leaq 0xd7a6(%rip), %rdx      # 0x1bd70
xorl %eax, %eax
movl %eax, %ecx
callq 0x3210
movq %rax, -0x1c0(%rbp)
jmp 0xe621
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x3130
jmp 0xe6d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x3130
jmp 0xe6d4
xorl %eax, %eax
movq %rax, -0x1c0(%rbp)
jmp 0xe621
movq -0x1c0(%rbp), %rax
movq %rax, -0x1c8(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x3130
movq -0x1c8(%rbp), %rax
movq %rax, -0x118(%rbp)
cmpq $0x0, -0x118(%rbp)
je 0xe660
movq -0x118(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0xe674
movq $0x0, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0xe696
jmp 0xe68a
movq $0x0, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0xe696
jmp 0xe68c
movl $0x0, -0xac(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x3130
movl -0xac(%rbp), %eax
movl %eax, -0x1cc(%rbp)
testl %eax, %eax
je 0xe6c1
jmp 0xe6b4
movl -0x1cc(%rbp), %eax
subl $0x3, %eax
je 0xe6c3
jmp 0xe6e2
jmp 0xe6c3
leaq -0xa0(%rbp), %rdi
callq 0xdbe0
jmp 0xe354
leaq -0xd0(%rbp), %rdi
callq 0x3130
jmp 0xe6fa
leaq -0x50(%rbp), %rdi
callq 0x37e0
movl -0xac(%rbp), %eax
subl $0x1, %eax
je 0xe741
jmp 0xe6f8
jmp 0xe739
leaq -0x50(%rbp), %rdi
callq 0x37e0
movl -0x24(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0xe74e
movq -0x20(%rbp), %rdi
callq 0x30c0
movl (%rax), %eax
movl %eax, -0x13c(%rbp)
movq $0x0, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
callq 0x32e0
jmp 0xe741
movq -0x30(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x1d0, %rsp            # imm = 0x1D0
popq %rbp
retq
movq -0x20(%rbp), %rdi
callq 0x3300
nopw (%rax,%rax)