// File: deadshot465[P]OwoifyCpp/./owoify.h
// Function: Owoifier::owoify(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, Owoifier::OwoifyLevel)
static std::wstring owoify(const std::string& value, OwoifyLevel level = OwoifyLevel::Owo)
	{
		auto word_regex = std::basic_regex(L"[^\\s]+", std::regex_constants::ECMAScript | std::regex_constants::optimize);
		
		auto w_value = stringToWstring(value);
		
		auto word_begin = std::wsregex_iterator(w_value.cbegin(), w_value.cend(), word_regex);
		auto word_end = std::wsregex_iterator();

		auto space_regex = std::basic_regex(L"\\s+", std::regex_constants::ECMAScript | std::regex_constants::optimize);

		auto space_begin = std::wsregex_iterator(w_value.cbegin(), w_value.cend(), space_regex);
		auto space_end = std::wsregex_iterator();

		auto words = std::deque<Word>();
		std::transform(word_begin, word_end, std::back_inserter(words),
			[&](const std::wsmatch& match) {
				return Word(match.str());
			});

		auto spaces = std::deque<Word>();
		std::transform(space_begin, space_end, std::back_inserter(spaces),
			[&](const std::wsmatch& match) {
				return Word(match.str());
			});

		auto transformed_words = std::deque<Word>();
		std::transform(words.begin(), words.end(), std::back_inserter(transformed_words),
			[&](Word& word) {

				for (const auto& func : Utility::m_specificWordMappingList)
				{
					word = func(word);
				}

				switch (level)
				{
				case Owoifier::OwoifyLevel::Uvu:
					for (const auto& func : Utility::m_uvuMappingList)
					{
						word = func(word);
					}
				case Owoifier::OwoifyLevel::Uwu:
					for (const auto& func : Utility::m_uwuMappingList)
					{
						word = func(word);
					}
				case Owoifier::OwoifyLevel::Owo:
					for (const auto& func : Utility::m_owoMappingList)
					{
						word = func(word);
					}
					break;
				default:
					break;
				}
				
				return word;
			});

		auto result = Utility::interleaveArrays(words, spaces);
		return join(result);
	}

// Assembly:
subq $0x4d8, %rsp            # imm = 0x4D8
movq %rdi, 0x48(%rsp)
movq %rdi, %rax
movq %rax, 0x50(%rsp)
movq %rdi, 0x4d0(%rsp)
movq %rsi, 0x4c8(%rsp)
movl %edx, 0x4c4(%rsp)
movl $0x10, %edi
movl $0x4, %esi
callq 0x9c80
movl %eax, %edx
leaq 0x38c5d(%rip), %rsi     # 0x45ec0
leaq 0x4a0(%rsp), %rdi
callq 0x9ca0
movq 0x4c8(%rsp), %rsi
leaq 0x480(%rsp), %rdi
callq 0x1eb10
jmp 0xd287
leaq 0x480(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0x6110
movq 0x40(%rsp), %rdi
movq %rax, 0x428(%rsp)
callq 0x6470
movq %rax, 0x420(%rsp)
movq 0x428(%rsp), %rsi
movq 0x420(%rsp), %rdx
leaq 0x430(%rsp), %rdi
leaq 0x4a0(%rsp), %rcx
xorl %r8d, %r8d
callq 0xe070
jmp 0xd2dd
xorps %xmm0, %xmm0
movaps %xmm0, 0x410(%rsp)
movaps %xmm0, 0x400(%rsp)
movaps %xmm0, 0x3f0(%rsp)
movaps %xmm0, 0x3e0(%rsp)
leaq 0x3e0(%rsp), %rdi
callq 0xe1b0
jmp 0xd30f
movl $0x10, %edi
movl $0x4, %esi
callq 0x9c80
movl %eax, %edx
leaq 0x38bb5(%rip), %rsi     # 0x45edc
leaq 0x3c0(%rsp), %rdi
callq 0x9ca0
jmp 0xd336
leaq 0x480(%rsp), %rdi
movq %rdi, 0x38(%rsp)
callq 0x6110
movq 0x38(%rsp), %rdi
movq %rax, 0x378(%rsp)
callq 0x6470
movq %rax, 0x370(%rsp)
movq 0x378(%rsp), %rsi
movq 0x370(%rsp), %rdx
leaq 0x380(%rsp), %rdi
leaq 0x3c0(%rsp), %rcx
xorl %r8d, %r8d
callq 0xe070
jmp 0xd38c
xorps %xmm0, %xmm0
movaps %xmm0, 0x360(%rsp)
movaps %xmm0, 0x350(%rsp)
movaps %xmm0, 0x340(%rsp)
movaps %xmm0, 0x330(%rsp)
leaq 0x330(%rsp), %rdi
callq 0xe1b0
jmp 0xd3be
xorps %xmm0, %xmm0
movaps %xmm0, 0x320(%rsp)
movaps %xmm0, 0x310(%rsp)
movaps %xmm0, 0x300(%rsp)
movaps %xmm0, 0x2f0(%rsp)
movaps %xmm0, 0x2e0(%rsp)
leaq 0x2e0(%rsp), %rdi
callq 0x1ec00
jmp 0xd3f8
leaq 0x2a0(%rsp), %rdi
leaq 0x430(%rsp), %rsi
callq 0xe210
jmp 0xd40f
leaq 0x260(%rsp), %rdi
leaq 0x3e0(%rsp), %rsi
callq 0xe210
jmp 0xd426
leaq 0x2e0(%rsp), %rdi
callq 0x1ed00
movq %rax, 0x30(%rsp)
jmp 0xd43a
movq 0x30(%rsp), %rax
movq %rax, 0x258(%rsp)
movq 0x258(%rsp), %rdx
leaq 0x2a0(%rsp), %rdi
leaq 0x260(%rsp), %rsi
callq 0x1ec10
movq %rax, 0x28(%rsp)
jmp 0xd46b
movq 0x28(%rsp), %rax
movq %rax, 0x248(%rsp)
leaq 0x260(%rsp), %rdi
callq 0xe5e0
leaq 0x2a0(%rsp), %rdi
callq 0xe5e0
xorps %xmm0, %xmm0
movaps %xmm0, 0x230(%rsp)
movaps %xmm0, 0x220(%rsp)
movaps %xmm0, 0x210(%rsp)
movaps %xmm0, 0x200(%rsp)
movaps %xmm0, 0x1f0(%rsp)
leaq 0x1f0(%rsp), %rdi
callq 0x1ec00
jmp 0xd4cc
leaq 0x1b0(%rsp), %rdi
leaq 0x380(%rsp), %rsi
callq 0xe210
jmp 0xd4e3
leaq 0x170(%rsp), %rdi
leaq 0x330(%rsp), %rsi
callq 0xe210
jmp 0xd4fa
leaq 0x1f0(%rsp), %rdi
callq 0x1ed00
movq %rax, 0x20(%rsp)
jmp 0xd50e
movq 0x20(%rsp), %rax
movq %rax, 0x168(%rsp)
movq 0x168(%rsp), %rdx
leaq 0x1b0(%rsp), %rdi
leaq 0x170(%rsp), %rsi
callq 0x1ed30
movq %rax, 0x18(%rsp)
jmp 0xd53f
movq 0x18(%rsp), %rax
movq %rax, 0x158(%rsp)
leaq 0x170(%rsp), %rdi
callq 0xe5e0
leaq 0x1b0(%rsp), %rdi
callq 0xe5e0
xorps %xmm0, %xmm0
movaps %xmm0, 0x140(%rsp)
movaps %xmm0, 0x130(%rsp)
movaps %xmm0, 0x120(%rsp)
movaps %xmm0, 0x110(%rsp)
movaps %xmm0, 0x100(%rsp)
leaq 0x100(%rsp), %rdi
callq 0x1ec00
jmp 0xd5a0
leaq 0xe0(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
movq %rsi, 0x8(%rsp)
callq 0x1ef10
movq 0x8(%rsp), %rsi
leaq 0xc0(%rsp), %rdi
callq 0x1ef40
leaq 0x100(%rsp), %rdi
callq 0x1ed00
movq %rax, 0x10(%rsp)
jmp 0xd5e0
movq 0x10(%rsp), %rax
movq %rax, 0xb8(%rsp)
leaq 0x4c4(%rsp), %rax
movq %rax, 0xb0(%rsp)
movq 0xb8(%rsp), %rdx
movq 0xb0(%rsp), %rcx
leaq 0xe0(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
callq 0x1ee20
movq %rax, (%rsp)
jmp 0xd628
movq (%rsp), %rax
movq %rax, 0xa8(%rsp)
leaq 0x58(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
leaq 0x1f0(%rsp), %rdx
callq 0x1ef70
jmp 0xd650
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x1f180
jmp 0xd661
leaq 0x58(%rsp), %rdi
callq 0x1f270
leaq 0x100(%rsp), %rdi
callq 0x1f270
leaq 0x1f0(%rsp), %rdi
callq 0x1f270
leaq 0x2e0(%rsp), %rdi
callq 0x1f270
leaq 0x330(%rsp), %rdi
callq 0xe5e0
leaq 0x380(%rsp), %rdi
callq 0xe5e0
leaq 0x3c0(%rsp), %rdi
callq 0x9d50
leaq 0x3e0(%rsp), %rdi
callq 0xe5e0
leaq 0x430(%rsp), %rdi
callq 0xe5e0
leaq 0x480(%rsp), %rdi
callq 0x6720
leaq 0x4a0(%rsp), %rdi
callq 0x9d50
movq 0x50(%rsp), %rax
addq $0x4d8, %rsp            # imm = 0x4D8
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
jmp 0xd913
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
jmp 0xd906
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
jmp 0xd8f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
jmp 0xd8ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
jmp 0xd8df
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
jmp 0xd8d2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
jmp 0xd8c5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
jmp 0xd8b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
jmp 0xd7f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
leaq 0x260(%rsp), %rdi
callq 0xe5e0
leaq 0x2a0(%rsp), %rdi
callq 0xe5e0
jmp 0xd8b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
jmp 0xd8ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
jmp 0xd85b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
leaq 0x170(%rsp), %rdi
callq 0xe5e0
leaq 0x1b0(%rsp), %rdi
callq 0xe5e0
jmp 0xd8ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
jmp 0xd89e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x478(%rsp)
movl %eax, 0x474(%rsp)
leaq 0x58(%rsp), %rdi
callq 0x1f270
leaq 0x100(%rsp), %rdi
callq 0x1f270
leaq 0x1f0(%rsp), %rdi
callq 0x1f270
leaq 0x2e0(%rsp), %rdi
callq 0x1f270
leaq 0x330(%rsp), %rdi
callq 0xe5e0
leaq 0x380(%rsp), %rdi
callq 0xe5e0
leaq 0x3c0(%rsp), %rdi
callq 0x9d50
leaq 0x3e0(%rsp), %rdi
callq 0xe5e0
leaq 0x430(%rsp), %rdi
callq 0xe5e0
leaq 0x480(%rsp), %rdi
callq 0x6720
leaq 0x4a0(%rsp), %rdi
callq 0x9d50
movq 0x478(%rsp), %rdi
callq 0x67b0
nopl (%rax)