// File: /workspace/github_cpp_makefile_star2_O3/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:
pushq %r14
pushq %rbx
subq $0x3f8, %rsp            # imm = 0x3F8
movq %rsi, %r14
movq %rdi, %rbx
movl %edx, 0xc(%rsp)
leaq 0x13d6b(%rip), %rsi     # 0x1de30
leaq 0xd0(%rsp), %rdi
movl $0x14, %edx
callq 0x7a02
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0xfd66
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rax
leaq (%rsi,%rax,4), %rdx
leaq 0x200(%rsp), %rdi
leaq 0xd0(%rsp), %rcx
xorl %r8d, %r8d
callq 0xabfa
xorps %xmm0, %xmm0
movaps %xmm0, 0xa0(%rsp)
movaps %xmm0, 0x90(%rsp)
movaps %xmm0, 0x80(%rsp)
movaps %xmm0, 0x70(%rsp)
leaq 0x13d1b(%rip), %rsi     # 0x1de4c
leaq 0xb0(%rsp), %rdi
movl $0x14, %edx
callq 0x7a02
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rax
leaq (%rsi,%rax,4), %rdx
leaq 0x1c0(%rsp), %rdi
leaq 0xb0(%rsp), %rcx
xorl %r8d, %r8d
callq 0xabfa
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
movaps %xmm0, 0x40(%rsp)
movaps %xmm0, 0x30(%rsp)
leaq 0xf0(%rsp), %rdi
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
xorl %esi, %esi
callq 0x1048a
leaq 0x220(%rsp), %rsi
movups -0x20(%rsi), %xmm0
movups -0x14(%rsi), %xmm1
leaq 0x1a0(%rsp), %rdi
movups %xmm1, -0x14(%rdi)
movaps %xmm0, -0x20(%rdi)
callq 0xbc5e
leaq 0x90(%rsp), %rsi
movq 0x238(%rsp), %rax
movq %rax, 0x1b8(%rsp)
movaps -0x20(%rsi), %xmm0
leaq 0x2a0(%rsp), %rdi
movaps %xmm0, -0x20(%rdi)
movups -0x14(%rsi), %xmm0
movups %xmm0, -0x14(%rdi)
callq 0xbc5e
movq 0xa8(%rsp), %rax
leaq 0x280(%rsp), %rsi
movq %rax, 0x38(%rsi)
leaq 0x180(%rsp), %rdi
leaq 0xf0(%rsp), %rdx
callq 0xfdea
movq 0x2a0(%rsp), %rdi
testq %rdi, %rdi
je 0xa242
movq 0x2b0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
movq 0x1a0(%rsp), %rdi
testq %rdi, %rdi
je 0xa25f
movq 0x1b0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
xorps %xmm0, %xmm0
leaq 0x2c0(%rsp), %rdi
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
xorl %esi, %esi
callq 0x1048a
leaq 0x1e0(%rsp), %rsi
movups -0x20(%rsi), %xmm0
movups -0x14(%rsi), %xmm1
leaq 0x160(%rsp), %rdi
movups %xmm1, -0x14(%rdi)
movaps %xmm0, -0x20(%rdi)
callq 0xbc5e
leaq 0x50(%rsp), %rsi
movq 0x1f8(%rsp), %rax
movq %rax, 0x178(%rsp)
movaps -0x20(%rsi), %xmm0
leaq 0x260(%rsp), %rdi
movaps %xmm0, -0x20(%rdi)
movups -0x14(%rsi), %xmm0
movups %xmm0, -0x14(%rdi)
callq 0xbc5e
movq 0x68(%rsp), %rax
leaq 0x240(%rsp), %rsi
movq %rax, 0x38(%rsi)
leaq 0x140(%rsp), %rdi
leaq 0x2c0(%rsp), %rdx
callq 0xff0d
movq 0x260(%rsp), %rdi
testq %rdi, %rdi
je 0xa31e
movq 0x270(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
movq 0x160(%rsp), %rdi
testq %rdi, %rdi
je 0xa33b
movq 0x170(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
xorps %xmm0, %xmm0
leaq 0x310(%rsp), %rdi
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
xorl %esi, %esi
callq 0x1048a
movaps 0x100(%rsp), %xmm0
movaps 0x110(%rsp), %xmm1
movaps 0x120(%rsp), %xmm2
movaps 0x130(%rsp), %xmm3
leaq 0x3d0(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm1, 0x10(%rdi)
leaq 0x3b0(%rsp), %rsi
movaps %xmm2, (%rsi)
movaps %xmm3, 0x10(%rsi)
leaq 0x310(%rsp), %rdx
leaq 0xc(%rsp), %rcx
callq 0x10030
leaq 0x360(%rsp), %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x2c0(%rsp), %rdx
callq 0x10102
leaq 0x360(%rsp), %rsi
movq %rbx, %rdi
callq 0x10370
leaq 0x360(%rsp), %rdi
callq 0x10440
leaq 0x310(%rsp), %rdi
callq 0x10440
leaq 0x2c0(%rsp), %rdi
callq 0x10440
leaq 0xf0(%rsp), %rdi
callq 0x10440
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0xa428
movq 0x60(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0xa445
movq 0x1f0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
leaq 0xb0(%rsp), %rdi
callq 0x7a6a
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0xa46f
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
movq 0x220(%rsp), %rdi
testq %rdi, %rdi
je 0xa48c
movq 0x230(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa4ac
movq 0x20(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x5300
leaq 0xd0(%rsp), %rdi
callq 0x7a6a
movq %rbx, %rax
addq $0x3f8, %rsp            # imm = 0x3F8
popq %rbx
popq %r14
retq
movq %rax, %rbx
leaq 0x360(%rsp), %rdi
callq 0x10440
jmp 0xa4de
jmp 0xa4db
movq %rax, %rbx
leaq 0x310(%rsp), %rdi
callq 0x10440
jmp 0xa536
jmp 0xa533
movq %rax, %rbx
movq 0x260(%rsp), %rdi
testq %rdi, %rdi
je 0xa514
movq 0x270(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
jmp 0xa514
movq %rax, %rbx
movq 0x160(%rsp), %rdi
testq %rdi, %rdi
je 0xa536
movq 0x170(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
jmp 0xa536
movq %rax, %rbx
leaq 0x2c0(%rsp), %rdi
callq 0x10440
jmp 0xa58e
jmp 0xa58b
movq %rax, %rbx
movq 0x2a0(%rsp), %rdi
testq %rdi, %rdi
je 0xa56c
movq 0x2b0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
jmp 0xa56c
movq %rax, %rbx
movq 0x1a0(%rsp), %rdi
testq %rdi, %rdi
je 0xa58e
movq 0x1b0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
jmp 0xa58e
movq %rax, %rbx
leaq 0xf0(%rsp), %rdi
callq 0x10440
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0xa5b2
movq 0x60(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0xa5cf
movq 0x1f0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
leaq 0xb0(%rsp), %rdi
callq 0x7a6a
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0xa5f9
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
movq 0x220(%rsp), %rdi
testq %rdi, %rdi
je 0xa616
movq 0x230(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa636
movq 0x20(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x5300
leaq 0xd0(%rsp), %rdi
callq 0x7a6a
movq %rbx, %rdi
callq 0x5470
movq %rax, %rbx
jmp 0xa59b
movq %rax, %rbx
jmp 0xa5cf
movq %rax, %rbx
jmp 0xa5dc
movq %rax, %rbx
jmp 0xa616
movq %rax, %rbx
jmp 0xa636
nop