// File: ClauParser[P]ClauParser/./include/clau_parser.h
// Function: clau_parser::LoadData::Merge(clau_parser::UserType*, clau_parser::UserType*, clau_parser::UserType**, clau_parser::UserType**)
static int Merge(UserType* next, UserType* ut, UserType** ut_next, UserType** out = nullptr)
		{
			//check!!
			while (ut->GetIListSize() >= 1 && ut->GetUserTypeListSize() >= 1
				&& (ut->GetUserTypeList(0)->GetName() == "#"sv))
			{
				ut = ut->GetUserTypeList(0);
			}

			bool chk_ut_next = false;
			UserType* temp = nullptr;

			while (true) {
				int itCount = 0;
				int utCount = 0;

				UserType* _ut = ut;
				UserType* _next = next;


				if (ut_next && _ut == *ut_next) {
					*ut_next = _next;
					temp = _next;
					chk_ut_next = true;
				}

				_next->ReserveItemList(_ut->GetItemListSize());

				for (size_t i = 0; i < _ut->GetIListSize(); ++i) {
					if (_ut->IsUserTypeList(i)) {
						if (_ut->GetUserTypeList(utCount)->GetName() == "#"sv) {
							_ut->GetUserTypeList(utCount)->SetName("");
						}
						else {
							{
								_next->LinkUserType(_ut->GetUserTypeList(utCount));
								_ut->GetUserTypeList(utCount) = nullptr;
							}
						}
						utCount++;
					}
					else if (_ut->IsItemList(i)) {
						_next->AddItemType(std::move(_ut->GetItemList(itCount)));
						itCount++;
					}
				}
				_ut->Remove();

				ut = ut->GetParent();

				next = next->GetParent();


				if (next && ut) {
					//
				}
				else {
					// right_depth > left_depth
					if (!next && ut) {
						return -1;
					}
					else if (next && !ut) {
						return 1;
					}

					return 0;
				}
			}
		}

// Assembly:
subq $0x108, %rsp            # imm = 0x108
movq %rdi, 0xf8(%rsp)
movq %rsi, 0xf0(%rsp)
movq %rdx, 0xe8(%rsp)
movq %rcx, 0xe0(%rsp)
movq 0xf0(%rsp), %rdi
callq 0x14090
movq %rax, %rcx
xorl %eax, %eax
cmpq $0x1, %rcx
movb %al, 0x3b(%rsp)
jb 0xc51e
movq 0xf0(%rsp), %rdi
callq 0x7940
movq %rax, %rcx
xorl %eax, %eax
cmpq $0x1, %rcx
movb %al, 0x3b(%rsp)
jb 0xc51e
movq 0xf0(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x7910
movq (%rax), %rdi
callq 0x7960
movq %rax, %rdi
callq 0x3280
movq %rax, 0xd0(%rsp)
movq %rdx, 0xd8(%rsp)
leaq 0xff7c(%rip), %rdi      # 0x1c457
movl $0x1, %esi
callq 0x1a930
movq %rax, 0xc0(%rsp)
movq %rdx, 0xc8(%rsp)
movq 0xd0(%rsp), %rdi
movq 0xd8(%rsp), %rsi
movq 0xc0(%rsp), %rdx
movq 0xc8(%rsp), %rcx
callq 0x1a8a0
movb %al, 0x3b(%rsp)
movb 0x3b(%rsp), %al
testb $0x1, %al
jne 0xc528
jmp 0xc549
movq 0xf0(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x7910
movq (%rax), %rax
movq %rax, 0xf0(%rsp)
jmp 0xc467
movb $0x0, 0xbf(%rsp)
movq $0x0, 0xb0(%rsp)
movl $0x0, 0xac(%rsp)
movl $0x0, 0xa8(%rsp)
movq 0xf0(%rsp), %rax
movq %rax, 0xa0(%rsp)
movq 0xf8(%rsp), %rax
movq %rax, 0x98(%rsp)
cmpq $0x0, 0xe8(%rsp)
je 0xc5de
movq 0xa0(%rsp), %rax
movq 0xe8(%rsp), %rcx
cmpq (%rcx), %rax
jne 0xc5de
movq 0x98(%rsp), %rcx
movq 0xe8(%rsp), %rax
movq %rcx, (%rax)
movq 0x98(%rsp), %rax
movq %rax, 0xb0(%rsp)
movb $0x1, 0xbf(%rsp)
movq 0x98(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0xa0(%rsp), %rdi
callq 0x140f0
movq 0x30(%rsp), %rdi
movq %rax, %rsi
callq 0x140b0
movq $0x0, 0x90(%rsp)
movq 0x90(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0xa0(%rsp), %rdi
callq 0x14090
movq %rax, %rcx
movq 0x28(%rsp), %rax
cmpq %rcx, %rax
jae 0xc84d
movq 0xa0(%rsp), %rdi
movq 0x90(%rsp), %rsi
callq 0x14400
testb $0x1, %al
jne 0xc65a
jmp 0xc7d5
movq 0xa0(%rsp), %rdi
movslq 0xa8(%rsp), %rsi
callq 0x7910
movq (%rax), %rdi
callq 0x7960
movq %rax, %rdi
callq 0x3280
movq %rax, 0x80(%rsp)
movq %rdx, 0x88(%rsp)
leaq 0xfdc1(%rip), %rdi      # 0x1c457
movl $0x1, %esi
callq 0x1a930
movq %rax, 0x70(%rsp)
movq %rdx, 0x78(%rsp)
movq 0x80(%rsp), %rdi
movq 0x88(%rsp), %rsi
movq 0x70(%rsp), %rdx
movq 0x78(%rsp), %rcx
callq 0x1a8a0
testb $0x1, %al
jne 0xc6d2
jmp 0xc777
movq 0xa0(%rsp), %rdi
movslq 0xa8(%rsp), %rsi
callq 0x7910
movq (%rax), %rax
movq %rax, 0x18(%rsp)
leaq 0x4f(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0x33e0
movq 0x20(%rsp), %rdx
leaq 0xfd25(%rip), %rsi      # 0x1c42f
leaq 0x50(%rsp), %rdi
callq 0x44e0
jmp 0xc716
movq 0x18(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x1a970
jmp 0xc727
leaq 0x50(%rsp), %rdi
callq 0x3160
leaq 0x4f(%rsp), %rdi
callq 0x3270
jmp 0xc7c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x40(%rsp)
movl %eax, 0x3c(%rsp)
jmp 0xc768
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x40(%rsp)
movl %eax, 0x3c(%rsp)
leaq 0x50(%rsp), %rdi
callq 0x3160
leaq 0x4f(%rsp), %rdi
callq 0x3270
jmp 0xc905
movq 0x98(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0xa0(%rsp), %rdi
movslq 0xa8(%rsp), %rsi
callq 0x7910
movq 0x10(%rsp), %rdi
movq (%rax), %rsi
callq 0x87a0
movq 0xa0(%rsp), %rdi
movslq 0xa8(%rsp), %rsi
callq 0x7910
movq $0x0, (%rax)
movl 0xa8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xa8(%rsp)
jmp 0xc832
movq 0xa0(%rsp), %rdi
movq 0x90(%rsp), %rsi
callq 0x1a9a0
testb $0x1, %al
jne 0xc7f0
jmp 0xc830
movq 0x98(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0xa0(%rsp), %rdi
movslq 0xac(%rsp), %rsi
callq 0x14490
movq 0x8(%rsp), %rdi
movq %rax, %rsi
callq 0x14430
movl 0xac(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xac(%rsp)
jmp 0xc832
jmp 0xc834
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0xc611
movq 0xa0(%rsp), %rdi
callq 0x144c0
movq 0xf0(%rsp), %rdi
callq 0xc430
movq %rax, 0xf0(%rsp)
movq 0xf8(%rsp), %rdi
callq 0xc430
movq %rax, 0xf8(%rsp)
cmpq $0x0, 0xf8(%rsp)
je 0xc89c
cmpq $0x0, 0xf0(%rsp)
je 0xc89c
jmp 0xc8f1
cmpq $0x0, 0xf8(%rsp)
jne 0xc8bf
cmpq $0x0, 0xf0(%rsp)
je 0xc8bf
movl $0xffffffff, 0x104(%rsp) # imm = 0xFFFFFFFF
jmp 0xc8f6
cmpq $0x0, 0xf8(%rsp)
je 0xc8e2
cmpq $0x0, 0xf0(%rsp)
jne 0xc8e2
movl $0x1, 0x104(%rsp)
jmp 0xc8f6
jmp 0xc8e4
movl $0x0, 0x104(%rsp)
jmp 0xc8f6
jmp 0xc55d
movl 0x104(%rsp), %eax
addq $0x108, %rsp            # imm = 0x108
retq
movq 0x40(%rsp), %rdi
callq 0x33d0
nop