// File: /workspace/github_c_makefile_star2_O3/mirth-lang[P]mirth/bin/mirth1.c
// Function: mw_mirth_elab_zaAB_worthzeslidingzeforzeaux
static bool mw_mirth_elab_zaAB_worthzeslidingzeforzeaux (struct mirth_mirth_zaMirth* in_zaMirth_1, struct mirth_arrow_Arrow* in_zaAB_2, struct std_list_List_1 in_List_3, struct std_list_List_1 in_List_4, struct mirth_mirth_zaMirth* *out_zaMirth_5, struct mirth_arrow_Arrow* *out_zaAB_6) {
	struct mirth_mirth_zaMirth* branch_zaMirth_8;
	struct mirth_arrow_Arrow* branch_zaAB_9;
	bool branch_Bool_10;
	switch ((in_List_4).tag) {
		case std_list_List_1_Nil: {
			decref(MK_std_list_List_1(in_List_3));
			bool v11 = false;
			branch_Bool_10 = v11;
			branch_zaAB_9 = in_zaAB_2;
			branch_zaMirth_8 = in_zaMirth_1;
		} break;
		case std_list_List_1_Cons: {
			struct std_list_List_1 v12;
			VAL v13 = mtp_std_list_List_1_Cons(in_List_4, &v12);
			struct mirth_mirth_zaMirth* branch_zaMirth_14;
			struct mirth_arrow_Arrow* branch_zaAB_15;
			bool branch_Bool_16;
			switch ((in_List_3).tag) {
				case std_list_List_1_Nil: {
					decref(v13);
					decref(MK_std_list_List_1(v12));
					bool v17 = false;
					branch_Bool_16 = v17;
					branch_zaAB_15 = in_zaAB_2;
					branch_zaMirth_14 = in_zaMirth_1;
				} break;
				case std_list_List_1_Cons: {
					struct std_list_List_1 v18;
					VAL v19 = mtp_std_list_List_1_Cons(in_List_3, &v18);
					incref(v13);
					struct mirth_mirth_zaMirth* v20;
					bool v21 = mw_mirth_tycon_Tycon_zd(in_zaMirth_1, V_mirth_tycon_Tycon(v19), V_mirth_tycon_Tycon(v13), &v20);
					struct mirth_mirth_zaMirth* branch_zaMirth_22;
					struct mirth_arrow_Arrow* branch_zaAB_23;
					bool branch_Bool_24;
					if (v21) {
						decref(v13);
						struct mirth_mirth_zaMirth* v25;
						struct mirth_arrow_Arrow* v26;
						bool v27 = mw_mirth_elab_zaAB_worthzeslidingzeforzeaux(v20, in_zaAB_2, v18, v12, &v25, &v26);
						branch_Bool_24 = v27;
						branch_zaAB_23 = v26;
						branch_zaMirth_22 = v25;
					} else {
						decref(MK_std_list_List_1(v12));
						struct std_maybe_Maybe_1 v28 = { .tag=std_maybe_Maybe_1_None };
						bool v29 = true;
						struct mirth_mirth_zaMirth* r30 = v20;
						VAL v31 = v13;
						struct std_maybe_Maybe_1 v32 = v28;
						struct std_list_List_1 v33 = v18;
						bool v34 = v29;
						bool v35 = v29;
						while (v35) {
							struct mirth_mirth_zaMirth* r36 = r30;
							VAL v37 = v31;
							struct std_maybe_Maybe_1 v38 = v32;
							struct std_list_List_1 v39 = v33;
							bool v40 = v34;
							struct std_list_List_1 v41;
							struct std_maybe_Maybe_1 v42 = mw_std_list_List_1_uncons(v39, &v41);
							struct mirth_mirth_zaMirth* branch_zaMirth_43;
							struct mirth_tycon_Tycon branch_Tycon_44;
							struct std_maybe_Maybe_1 branch_Maybe_45;
							struct std_list_List_1 branch_List_46;
							bool branch_Bool_47;
							switch ((v42).tag) {
								case std_maybe_Maybe_1_Some: {
									VAL v48 = mtp_std_maybe_Maybe_1_Some(v42);
									incref(v48);
									incref(v37);
									struct mirth_mirth_zaMirth* v49;
									bool v50 = mw_mirth_tycon_Tycon_zd(r36, V_mirth_tycon_Tycon(v37), V_mirth_tycon_Tycon(v48), &v49);
									struct mirth_mirth_zaMirth* branch_zaMirth_51;
									struct mirth_tycon_Tycon branch_Tycon_52;
									struct std_maybe_Maybe_1 branch_Maybe_53;
									if (v50) {
										struct std_maybe_Maybe_1 v54 = mtw_std_maybe_Maybe_1_Some(v48);
										branch_Maybe_53 = v54;
										branch_Tycon_52 = V_mirth_tycon_Tycon(v37);
										branch_zaMirth_51 = v49;
									} else {
										decref(v48);
										struct std_maybe_Maybe_1 v55 = { .tag=std_maybe_Maybe_1_None };
										branch_Maybe_53 = v55;
										branch_Tycon_52 = V_mirth_tycon_Tycon(v37);
										branch_zaMirth_51 = v49;
									}
									struct mirth_mirth_zaMirth* branch_zaMirth_56;
									struct mirth_tycon_Tycon branch_Tycon_57;
									struct std_maybe_Maybe_1 branch_Maybe_58;
									struct std_list_List_1 branch_List_59;
									switch ((branch_Maybe_53).tag) {
										case std_maybe_Maybe_1_None: {
											branch_List_59 = v41;
											branch_Maybe_58 = v38;
											branch_Tycon_57 = branch_Tycon_52;
											branch_zaMirth_56 = branch_zaMirth_51;
										} break;
										default: {
											decref(MK_std_list_List_1(v41));
											decref(MK_std_maybe_Maybe_1(v38));
											struct std_list_List_1 v60 = { .tag=std_list_List_1_Nil };
											branch_List_59 = v60;
											branch_Maybe_58 = branch_Maybe_53;
											branch_Tycon_57 = branch_Tycon_52;
											branch_zaMirth_56 = branch_zaMirth_51;
										} break;
									}
									bool v61 = true;
									branch_Bool_47 = v61;
									branch_List_46 = branch_List_59;
									branch_Maybe_45 = branch_Maybe_58;
									branch_Tycon_44 = branch_Tycon_57;
									branch_zaMirth_43 = branch_zaMirth_56;
								} break;
								case std_maybe_Maybe_1_None: {
									bool v62 = false;
									branch_Bool_47 = v62;
									branch_List_46 = v41;
									branch_Maybe_45 = v38;
									branch_Tycon_44 = V_mirth_tycon_Tycon(v37);
									branch_zaMirth_43 = r36;
								} break;
								default: {
									do_panic(str_make("unexpected fallthrough in match\n", 32));
								}
							}
							v35 = branch_Bool_47;
							v34 = branch_Bool_47;
							v33 = branch_List_46;
							v32 = branch_Maybe_45;
							v31 = MK_mirth_tycon_Tycon(branch_Tycon_44);
							r30 = branch_zaMirth_43;
						}
						decref(MK_std_list_List_1(v33));
						decref(v31);
						int64_t v63 = (v32).tag;
						decref(MK_std_maybe_Maybe_1(v32));
						INT v64 = WRAP_I63(0LL);
						INT v65 = v64;
						INT v66 = i64_to_int(v63);
						bool v67 = int_eq(v66, v65);
						bool v68 = !v67;
						branch_Bool_24 = v68;
						branch_zaAB_23 = in_zaAB_2;
						branch_zaMirth_22 = r30;
					}
					branch_Bool_16 = branch_Bool_24;
					branch_zaAB_15 = branch_zaAB_23;
					branch_zaMirth_14 = branch_zaMirth_22;
				} break;
				default: {
					do_panic(str_make("unexpected fallthrough in match\n", 32));
				}
			}
			branch_Bool_10 = branch_Bool_16;
			branch_zaAB_9 = branch_zaAB_15;
			branch_zaMirth_8 = branch_zaMirth_14;
		} break;
		default: {
			do_panic(str_make("unexpected fallthrough in match\n", 32));
		}
	}
	*out_zaAB_6 = branch_zaAB_9;
	*out_zaMirth_5 = branch_zaMirth_8;
	return branch_Bool_10;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
movq %rcx, %r12
movl %edx, %r13d
movq %rsi, %rbx
movq %rdi, %r14
cmpl $0x1, %r8d
je 0x55c3a
testl %r8d, %r8d
jne 0x56062
movabsq $0xfffffffffffc, %rax   # imm = 0xFFFFFFFFFFFC
andq %r12, %rax
sete %cl
testb $0x3, %r12b
setne %dl
orb %cl, %dl
jne 0x55c33
decl (%rax)
jne 0x55c33
shlq $0x30, %r13
orq %r12, %r13
leaq 0xbb64e(%rip), %rsi     # 0x111279
movq %r13, %rdi
callq 0xd13d
xorl %eax, %eax
jmp 0x56045
movq %rbx, -0x40(%rbp)
leaq -0x78(%rbp), %rsi
movq %r9, %rdi
callq 0xd0aa
movq %rdx, %rbx
movq %rax, %r15
cmpl $0x1, %r13d
je 0x55cce
testl %r13d, %r13d
jne 0x56062
movq %r14, %r12
movabsq $0xfffffffffffc, %r14   # imm = 0xFFFFFFFFFFFC
testb $0x1, %bl
je 0x55c91
andq %r14, %rax
sete %dl
testb $0x3, %r15b
setne %cl
orb %dl, %cl
jne 0x55c91
decl (%rax)
jne 0x55c91
movq %r15, %rdi
movq %rbx, %rsi
callq 0xd13d
movq -0x70(%rbp), %rax
andq %rax, %r14
sete %cl
testb $0x3, %al
setne %dl
orb %cl, %dl
jne 0x5603c
movl -0x78(%rbp), %edi
decl (%r14)
movq -0x40(%rbp), %rbx
jne 0x55cc7
shlq $0x30, %rdi
orq %rax, %rdi
leaq 0xbb5b7(%rip), %rsi     # 0x111279
callq 0xd13d
xorl %eax, %eax
jmp 0x56042
movq %r14, %r13
movabsq $0xfffffffffffc, %r14   # imm = 0xFFFFFFFFFFFC
leaq -0x90(%rbp), %rsi
movq %rax, -0x50(%rbp)
movq %r12, %rdi
callq 0xd0aa
movq -0x50(%rbp), %rdi
movq %r14, %r8
movq %rdi, %r12
andq %r14, %r12
testb $0x1, %bl
sete %r14b
je 0x55d19
testq %r12, %r12
sete %cl
testb $0x3, %r15b
setne %dl
orb %cl, %dl
jne 0x55d19
incl (%r12)
movq %rax, %rsi
shrq $0x30, %rsi
andq %r8, %rax
movq %rdi, %rcx
shrq $0x30, %rcx
leaq -0x80(%rbp), %r9
movq %r13, %rdi
movq %rax, %rdx
movq %r8, %r13
movq %r12, %r8
callq 0x19c76
testb %al, %al
je 0x55da6
testb $0x1, %bl
je 0x55d6a
testq %r12, %r12
sete %al
testb $0x3, %r15b
setne %cl
orb %al, %cl
jne 0x55d6a
decl (%r12)
jne 0x55d6a
movq %r15, %rdi
movq %rbx, %rsi
callq 0xd13d
movq -0x80(%rbp), %rdi
movl -0x90(%rbp), %edx
movq -0x88(%rbp), %rcx
movl -0x78(%rbp), %r8d
movq -0x70(%rbp), %r9
leaq -0x68(%rbp), %rbx
leaq -0x60(%rbp), %r14
movq -0x40(%rbp), %rsi
pushq %rbx
pushq %r14
callq 0x55bd2
addq $0x10, %rsp
movq (%rbx), %rbx
movq (%r14), %r14
jmp 0x56045
movq -0x70(%rbp), %rax
movq %rax, %rcx
andq %r13, %rcx
sete %dl
testb $0x3, %al
setne %sil
orb %dl, %sil
jne 0x55dd8
movl -0x78(%rbp), %edi
decl (%rcx)
jne 0x55dd8
shlq $0x30, %rdi
orq %rax, %rdi
leaq 0xbb4a6(%rip), %rsi     # 0x111279
callq 0xd13d
movq -0x80(%rbp), %rax
movq %rax, -0x48(%rbp)
movl -0x90(%rbp), %edi
movq -0x88(%rbp), %rsi
andq $-0x4, -0x50(%rbp)
movq $0x0, -0x38(%rbp)
movq $0x0, -0x30(%rbp)
leaq -0x60(%rbp), %rdx
callq 0x111eb
cmpl $0x1, %eax
jne 0x55f6f
movq %rdx, %rdi
callq 0xd745
movq %rax, %r13
movq %rdx, %rbx
movq %rax, %r12
testb $0x1, %bl
movabsq $0xfffffffffffc, %r8    # imm = 0xFFFFFFFFFFFC
je 0x55e4a
movq %r13, %rax
andq %r8, %rax
sete %cl
testb $0x3, %r12b
setne %dl
orb %cl, %dl
jne 0x55e4a
incl (%rax)
movq %r15, %rdx
andq %r8, %rdx
testb $0x1, %r14b
jne 0x55e69
testq %rdx, %rdx
sete %al
testb $0x3, %r15b
setne %cl
orb %al, %cl
jne 0x55e69
incl (%rdx)
shrq $0x30, %r15
movq %r13, %rcx
shrq $0x30, %rcx
andq %r8, %r13
movq -0x48(%rbp), %rdi
movl %r15d, %esi
movq %r8, %r15
movq %r13, %r8
leaq -0x68(%rbp), %r9
callq 0x19c76
testb %al, %al
je 0x55f2d
movq %r12, %rdi
movq %rbx, %rsi
callq 0x9353
movq %rdx, %rbx
movq -0x68(%rbp), %r14
movq -0x58(%rbp), %rax
movq %rax, %rcx
andq %r15, %rcx
sete %dl
testb $0x3, %al
setne %sil
orb %dl, %sil
jne 0x55ee3
movl -0x60(%rbp), %edi
decl (%rcx)
jne 0x55ee3
shlq $0x30, %rdi
orq %rax, %rdi
leaq 0xbb3a5(%rip), %rsi     # 0x111279
callq 0xd13d
movabsq $0xfffffffffffc, %r15   # imm = 0xFFFFFFFFFFFC
movq -0x38(%rbp), %rsi
movq %rsi, %rax
andq %r15, %rax
sete %cl
testb $0x3, %sil
setne %dl
orb %cl, %dl
movq %r14, -0x48(%rbp)
jne 0x55f1a
decl (%rax)
jne 0x55f1a
movq -0x30(%rbp), %rdi
shlq $0x30, %rdi
orq %rsi, %rdi
leaq 0xbb3ac(%rip), %rsi     # 0x1112c1
callq 0xd13d
xorl %edi, %edi
movl $0x1, %eax
movq %rax, -0x30(%rbp)
movq %rbx, -0x38(%rbp)
xorl %esi, %esi
jmp 0x55f63
testb $0x1, %bl
je 0x55f54
testq %r13, %r13
sete %al
testb $0x3, %r12b
setne %cl
orb %al, %cl
jne 0x55f54
decl (%r13)
jne 0x55f54
movq %r12, %rdi
movq %rbx, %rsi
callq 0xd13d
movq -0x68(%rbp), %rax
movq %rax, -0x48(%rbp)
movl -0x60(%rbp), %edi
movq -0x58(%rbp), %rsi
xorl %r14d, %r14d
movq -0x50(%rbp), %r15
jmp 0x55e02
testl %eax, %eax
jne 0x56062
movq -0x58(%rbp), %rax
movq %r15, %rbx
movabsq $0xfffffffffffc, %r8    # imm = 0xFFFFFFFFFFFC
andq %r8, %rbx
movq %rax, %rcx
andq %r8, %rcx
sete %dl
testb $0x3, %al
setne %sil
orb %dl, %sil
movq -0x48(%rbp), %r14
jne 0x55fc7
movl -0x60(%rbp), %edi
decl (%rcx)
jne 0x55fc7
shlq $0x30, %rdi
orq %rax, %rdi
leaq 0xbb2c1(%rip), %rsi     # 0x111279
callq 0xd13d
movabsq $0xfffffffffffc, %r8    # imm = 0xFFFFFFFFFFFC
testq %rbx, %rbx
je 0x55fed
decl (%rbx)
jne 0x55fed
andq $-0x4, %r15
movq %r15, %rdi
leaq 0xbb9a3(%rip), %rsi     # 0x111981
callq 0xd13d
movabsq $0xfffffffffffc, %r8    # imm = 0xFFFFFFFFFFFC
movl -0x30(%rbp), %ebx
movq -0x38(%rbp), %rdx
andq %rdx, %r8
sete %al
testb $0x3, %dl
setne %cl
orb %al, %cl
jne 0x5601f
decl (%r8)
jne 0x5601f
movq %rbx, %rdi
shlq $0x30, %rdi
orq %rdx, %rdi
leaq 0xbb2a7(%rip), %rsi     # 0x1112c1
callq 0xd13d
leaq 0x1(,%rbx,2), %rdi
movl $0x1, %esi
callq 0xe83a
testl %eax, %eax
setne %al
movq -0x40(%rbp), %rbx
jmp 0x56045
xorl %eax, %eax
movq -0x40(%rbp), %rbx
movq %r12, %r14
movq 0x18(%rbp), %rcx
movq 0x10(%rbp), %rdx
movq %rbx, (%rcx)
movq %r14, (%rdx)
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x20, %edi
callq 0xf5e4
movq $0x20, 0x10(%rax)
movups 0x8a652(%rip), %xmm0    # 0xe06cd
movups %xmm0, 0x18(%rax)
movups 0x8a657(%rip), %xmm0    # 0xe06dd
movups %xmm0, 0x28(%rax)
movq %rax, %rdi
callq 0x9302