// File: /workspace/github_c_makefile_star2_O2/kaiserschmarrn0[P]mywm/mywm.c
// Function: main
int main(void) {
	signal(SIGINT, catch);
	signal(SIGTERM, catch);

	dpy = XOpenDisplay(0);
	conn = XGetXCBConnection(dpy);
	XSetEventQueueOwner(dpy, XCBOwnsEventQueue);
	scr = xcb_setup_roots_iterator(xcb_get_setup(conn)).data;

	XVisualInfo xv, *res = NULL;
	xv.depth = 32;
	int flag = 0;
	res = XGetVisualInfo(dpy, VisualDepthMask, &xv, &flag);
	if (flag > 0) {
		vis_ptr = res->visual;
		vis = res->visualid;
	} else {
		vis_ptr = DefaultVisual(dpy, 0);
		vis = scr->root_visual;
	}

	cm = xcb_generate_id(conn);
	xcb_create_colormap(conn, XCB_COLORMAP_ALLOC_NONE, cm, scr->root, vis);

	depth = (vis == scr->root_visual) ? XCB_COPY_FROM_PARENT : 32;

	for (int i = 0; i < LEN(fonts); i++) {
		xfts[i] = XftFontOpenName(dpy, 0, fonts[i]);
	}

	for (int i = 0; i < LEN(controls); i++) {
		for (int j = 0; j < PM_COUNT; j++) {
			pixmaps[i][j] = xcb_generate_id(conn);
			xcb_create_pixmap(conn, depth, pixmaps[i][j], scr->root,
					controls[i].geom.width, controls[i].geom.height);

			int w = controls[i].geom.width;
			int h = controls[i].geom.height;

			xcb_gcontext_t gc = xcb_generate_id(conn);
			uint32_t mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES;
			uint32_t vals[2];
			vals[0] = controls[i].colors[PM_BG(j)];
			vals[1] = 0;
			xcb_create_gc(conn, gc, pixmaps[i][j], mask, vals);

			xcb_rectangle_t rect = { 0, 0, w, h };
			xcb_poly_fill_rectangle_checked(conn, pixmaps[i][j], gc, 1, &rect);

			xcb_free_gc(conn, gc);

			XftFont *font = xfts[controls[i].font_index];
			char *icon = controls[i].shape_fg;
			int len = strlen(icon);

			XGlyphInfo ret;
			XftTextExtentsUtf8(dpy, font, (XftChar8 *)icon, len, &ret);
			int x = (w - ret.width) / 2;
			int y = (controls[i].geom.height + font->ascent - font->descent) / 2;

			XftDraw *draw = XftDrawCreate(dpy, pixmaps[i][j], vis_ptr, cm);
			XftColor fg = xft_color(controls[i].colors[PM_FG(j)]);

			XftDrawStringUtf8(draw, &fg, font, x, y, (XftChar8 *)icon, len);
		}
	}

	uint32_t mask = XCB_CW_EVENT_MASK;
	uint32_t val = XCB_EVENT_MASK_POINTER_MOTION | XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT;

	xcb_change_window_attributes(conn, scr->root, mask, &val);
	xcb_flush(conn);
	
	const xcb_query_extension_reply_t *shape_reply = xcb_get_extension_data(conn, &xcb_shape_id);
	if (!shape_reply->present) {
		fprintf(stderr, "x server doesn't have xshape\n");
		return 1;
	}

	ewmh = calloc(1, sizeof(xcb_ewmh_connection_t));
	if (!ewmh) {
		fprintf(stderr, "couldn't allocate ewmh connection\n");
		return 1;
	}
	xcb_ewmh_init_atoms_replies(ewmh, xcb_ewmh_init_atoms(conn, ewmh), (void *)0);

	const char *wm_atom_name[3]; 
	wm_atom_name[0] = "WM_PROTOCOLS";
	wm_atom_name[1] = "WM_DELETE_WINDOW";
	wm_atom_name[2] = "WM_STATE";
	get_atoms(wm_atom_name, wm_atoms, WM_COUNT);

	const char *net_atom_name[1];
	net_atom_name[0] = "_NET_WM_STATE_FOCUSED";
	get_atoms(net_atom_name, &ewmh__NET_WM_STATE_FOCUSED, 0);

	xcb_atom_t supported_atoms[] = {
		ewmh->_NET_SUPPORTED,
		ewmh->_NET_WM_STATE,
		ewmh->_NET_WM_STATE_FULLSCREEN,
		ewmh->_NET_WM_STATE_STICKY,
		ewmh->_NET_WM_STATE_ABOVE,
		ewmh->_NET_WM_STATE_HIDDEN,
		ewmh->_NET_WM_WINDOW_TYPE,
		ewmh->_NET_WM_WINDOW_TYPE_DOCK,
		ewmh->_NET_FRAME_EXTENTS,

		ewmh__NET_WM_STATE_FOCUSED,

		wm_atoms[WM_PROTOCOLS],
		wm_atoms[WM_DELETE_WINDOW],
		wm_atoms[WM_STATE],
	};

	xcb_ewmh_set_supported(ewmh, 0, LEN(supported_atoms), supported_atoms);
	xcb_ewmh_set_wm_name(ewmh, scr->root, 4, "mywm");
	
	mask = XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE;
	for (int i = 0; i < LEN(grab_buttons); i++) {
		xcb_grab_button(conn, 0, scr->root, mask, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC,
				scr->root, XCB_NONE, grab_buttons[i].button, grab_buttons[i].mod);
	}

	grab_keys();

	for (int i = 0; i < XCB_NO_OPERATION; i++) events[i] = NULL;

	events[XCB_BUTTON_PRESS]      = button_press;
	events[XCB_CLIENT_MESSAGE]    = client_message;
	events[XCB_CONFIGURE_REQUEST] = configure_request;
	events[XCB_KEY_PRESS]         = key_press;
	events[XCB_KEY_RELEASE]       = key_release;
	events[XCB_MAP_REQUEST]       = map_request;
	events[XCB_UNMAP_NOTIFY]      = unmap_notify;
	events[XCB_DESTROY_NOTIFY]    = destroy_notify;
	events[XCB_ENTER_NOTIFY]      = enter_notify;
	events[XCB_LEAVE_NOTIFY]      = leave_notify;
	events[XCB_MAPPING_NOTIFY]    = mapping_notify;
	events[XCB_EXPOSE]            = expose;
	events[XCB_FOCUS_IN]          = focus_in;

	keysyms = xcb_key_symbols_alloc(conn);

#ifdef ROUNDED
	init_rounded_corners();
#endif
	
	create_snap_regions();
	create_margins();
	cursor_init();
	
	xcb_query_tree_reply_t *tr_reply = xcb_query_tree_reply(conn,
			xcb_query_tree(conn, scr->root), 0);

	stack[0].fwin = NULL;
	stack[1].fwin = NULL;
	stack[2].fwin = NULL;
	stack[3].fwin = NULL;

#ifdef PICKUP
	int ch_len = xcb_query_tree_children_length(tr_reply);
	xcb_window_t *children = xcb_query_tree_children(tr_reply);

	for (int i = 0; i < ch_len; i++) {
		xcb_get_window_attributes_reply_t *attr = xcb_get_window_attributes_reply(conn,
				xcb_get_window_attributes_unchecked(conn, children[i]), NULL);

		if (!attr || attr->override_redirect || attr->map_state != XCB_MAP_STATE_VIEWABLE) {
			continue;
		}

		create_window_existing(children[i]);
	}

	free(tr_reply);
#endif

	struct pollfd fd;
	fd.fd = xcb_get_file_descriptor(conn);
	fd.events = POLLIN;

	xcb_flush(conn);
	for (; !xcb_connection_has_error(conn) && sigcode == 0;) {
		if (poll(&fd, 1, -1) == -1) {
			break;
		}

		xcb_generic_event_t *ev;
		while((ev = xcb_poll_for_event(conn))) {
			if (ev->response_type == 0) {
				xcb_generic_error_t *error = (xcb_generic_error_t *) ev;
				printf("mywm: error:\n\terror_code: %d\n\tmajor_code: "
						"%d\n\tminor_code: %d\n", error->error_code,
						error->major_code, error->minor_code);
			}
	
			if (events[ev->response_type & ~0x80]) {
				events[ev->response_type & ~0x80](ev);
			}
			free(ev);
			
			xcb_flush(conn);
		}
	}

	die();

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xf8, %rsp
leaq 0x788(%rip), %rbx       # 0x419c
pushq $0x2
popq %rdi
movq %rbx, %rsi
callq 0x33c0
pushq $0xf
popq %rdi
movq %rbx, %rsi
callq 0x33c0
xorl %edi, %edi
callq 0x3220
movq %rax, 0x9a68(%rip)      # 0xd4a0
movq %rax, %rdi
callq 0x3070
movq %rax, 0x9a01(%rip)      # 0xd448
movq 0x9a52(%rip), %rdi      # 0xd4a0
pushq $0x1
popq %rsi
callq 0x3470
movq 0x99eb(%rip), %rdi      # 0xd448
callq 0x32b0
movq %rax, %rdi
callq 0x3240
movq %rax, 0x99df(%rip)      # 0xd450
leaq -0x120(%rbp), %rdx
movl $0x20, 0x14(%rdx)
leaq -0x80(%rbp), %rbx
andl $0x0, (%rbx)
movq 0x9a13(%rip), %rdi      # 0xd4a0
pushq $0x4
popq %rsi
movq %rbx, %rcx
callq 0x3510
cmpl $0x0, (%rbx)
jle 0x3aa2
movl 0x8(%rax), %ecx
jmp 0x3abe
movq 0x99f7(%rip), %rax      # 0xd4a0
movq 0xe8(%rax), %rax
addq $0x40, %rax
movq 0x9995(%rip), %rcx      # 0xd450
movl 0x20(%rcx), %ecx
movq (%rax), %rax
movq %rax, 0x99e8(%rip)      # 0xd4b0
movl %ecx, 0x99ea(%rip)      # 0xd4b8
movq 0x9973(%rip), %rdi      # 0xd448
callq 0x3550
movl %eax, 0x99dc(%rip)      # 0xd4bc
movq 0x9961(%rip), %rdi      # 0xd448
movq 0x9962(%rip), %rcx      # 0xd450
movl (%rcx), %ecx
movl 0x99c1(%rip), %r8d      # 0xd4b8
xorl %ebx, %ebx
xorl %esi, %esi
movl %eax, %edx
callq 0x3430
movl 0x99b0(%rip), %eax      # 0xd4b8
movq 0x9941(%rip), %rcx      # 0xd450
xorl %edx, %edx
cmpl 0x20(%rcx), %eax
setne %dl
shll $0x5, %edx
movl %edx, 0x99a0(%rip)      # 0xd4c0
movq 0x9979(%rip), %rdi      # 0xd4a0
leaq 0x55b7(%rip), %rdx      # 0x90e5
xorl %esi, %esi
callq 0x3420
movq %rax, 0x996c(%rip)      # 0xd4a8
leaq 0x8ef1(%rip), %rax      # 0xca34
movq %rax, -0x58(%rbp)
leaq 0x9932(%rip), %rax      # 0xd480
movq %rax, -0x50(%rbp)
pushq $0x1
popq %rax
movl %eax, -0x2c(%rbp)
cmpq $0x2, %rbx
je 0x3d09
movq %rbx, -0x68(%rbp)
imulq $0x50, %rbx, %rcx
leaq 0x8e8f(%rip), %rax      # 0xca00
addq %rax, %rcx
movq %rcx, -0x70(%rbp)
xorl %r14d, %r14d
cmpq $0x4, %r14
je 0x3cf3
movq 0x98bc(%rip), %rdi      # 0xd448
callq 0x3550
movq -0x50(%rbp), %r12
movl %eax, (%r12,%r14,4)
movq 0x98a8(%rip), %rdi      # 0xd448
movzbl 0x9919(%rip), %esi      # 0xd4c0
movq 0x98a2(%rip), %rcx      # 0xd450
movl (%rcx), %ecx
movl %eax, %edx
pushq $0x20
popq %r15
movl %r15d, %r8d
movl %r15d, %r9d
callq 0x30f0
movq 0x9880(%rip), %rdi      # 0xd448
callq 0x3550
movq -0x58(%rbp), %rdx
movl (%rdx,%r14,8), %ecx
movl %ecx, -0x40(%rbp)
andl $0x0, -0x3c(%rbp)
movl %eax, %ebx
movl -0x4(%rdx,%r14,8), %eax
movl %eax, -0x38(%rbp)
movq 0x985b(%rip), %rdi      # 0xd448
movl (%r12,%r14,4), %edx
movl %ebx, %esi
movl $0x10004, %ecx          # imm = 0x10004
leaq -0x40(%rbp), %r8
callq 0x3480
movabsq $0x20002000000000, %rax # imm = 0x20002000000000
movq %rax, -0x60(%rbp)
movq 0x9832(%rip), %rdi      # 0xd448
movl (%r12,%r14,4), %esi
movl %ebx, %edx
pushq $0x1
popq %rcx
leaq -0x60(%rbp), %r8
callq 0x3490
movq 0x9819(%rip), %rdi      # 0xd448
movl %ebx, %esi
callq 0x3190
movq 0x986b(%rip), %rbx      # 0xd4a8
movq -0x70(%rbp), %rax
movq 0x10(%rax), %r13
movq %r13, %rdi
callq 0x3280
movq %rax, -0x78(%rbp)
movq 0x9848(%rip), %rdi      # 0xd4a0
movq %rbx, %rsi
movq %r13, %rdx
movl %eax, %ecx
leaq -0xa0(%rbp), %r8
callq 0x34e0
movzwl -0xa0(%rbp), %ecx
subl %ecx, %r15d
movl %r15d, %eax
cltd
pushq $0x2
popq %rcx
idivl %ecx
movl %eax, -0x48(%rbp)
movl (%rbx), %eax
subl 0x4(%rbx), %eax
addl $0x20, %eax
cltd
idivl %ecx
movl %eax, -0x44(%rbp)
movq 0x9809(%rip), %rdi      # 0xd4a0
movl (%r12,%r14,4), %esi
movq 0x980e(%rip), %rdx      # 0xd4b0
movl 0x9814(%rip), %ecx      # 0xd4bc
callq 0x35d0
movq %rax, %r15
movl -0x38(%rbp), %edi
callq 0x809d
movq %rax, -0xe0(%rbp)
movq %rdx, -0xd8(%rbp)
subq $0x8, %rsp
movq %r15, %rdi
leaq -0xe0(%rbp), %rsi
movq %rbx, %rdx
movl -0x48(%rbp), %ecx
movl -0x44(%rbp), %r8d
movq %r13, %r9
pushq -0x78(%rbp)
callq 0x3180
popq %rax
popq %rcx
incq %r14
jmp 0x3b7b
movq -0x68(%rbp), %rbx
incq %rbx
addq $0x50, -0x58(%rbp)
addq $0x10, -0x50(%rbp)
jmp 0x3b58
leaq -0x7c(%rbp), %rcx
movl $0x180040, (%rcx)       # imm = 0x180040
movq 0x972e(%rip), %rdi      # 0xd448
movq 0x972f(%rip), %rax      # 0xd450
movl (%rax), %esi
movl $0x800, %edx            # imm = 0x800
callq 0x33a0
movq 0x9714(%rip), %rdi      # 0xd448
callq 0x3350
movq 0x9708(%rip), %rdi      # 0xd448
movq 0x9299(%rip), %rsi      # 0xcfe0
callq 0x3170
cmpb $0x0, 0x8(%rax)
je 0x4169
pushq $0x1
popq %rdi
movl $0x168, %esi            # imm = 0x168
callq 0x34c0
movq %rax, 0x96ee(%rip)      # 0xd458
testq %rax, %rax
je 0x417e
movq %rax, %rbx
movq 0x96cb(%rip), %rdi      # 0xd448
movq %rax, %rsi
callq 0x3200
xorl %r15d, %r15d
movq %rbx, %rdi
movq %rax, %rsi
xorl %edx, %edx
callq 0x32a0
leaq 0x52c9(%rip), %rax      # 0x9065
leaq -0xa0(%rbp), %rdi
movq %rax, (%rdi)
leaq 0x52c5(%rip), %rax      # 0x9072
movq %rax, 0x8(%rdi)
leaq 0x52cb(%rip), %rax      # 0x9083
movq %rax, 0x10(%rdi)
leaq 0x969d(%rip), %rsi      # 0xd460
pushq $0x3
popq %rdx
callq 0x41a8
leaq 0x52ba(%rip), %rax      # 0x908c
leaq -0x40(%rbp), %rdi
movq %rax, (%rdi)
leaq 0x96e4(%rip), %rsi      # 0xd4c4
xorl %edx, %edx
callq 0x41a8
movq 0x966a(%rip), %rdi      # 0xd458
movl 0x20(%rdi), %eax
leaq -0xe0(%rbp), %rcx
movl %eax, (%rcx)
movl 0x84(%rdi), %eax
movl %eax, 0x4(%rcx)
movl 0x128(%rdi), %eax
movl %eax, 0x8(%rcx)
movl 0x10c(%rdi), %eax
movl %eax, 0xc(%rcx)
movl 0x12c(%rdi), %eax
movl %eax, 0x10(%rcx)
movl 0x124(%rdi), %eax
movl %eax, 0x14(%rcx)
movl 0x80(%rdi), %eax
movl %eax, 0x18(%rcx)
movl 0xd4(%rdi), %eax
movl %eax, 0x1c(%rcx)
movl 0xac(%rdi), %eax
movl %eax, 0x20(%rcx)
movl 0x967c(%rip), %eax      # 0xd4c4
movl %eax, 0x24(%rcx)
movl 0x960f(%rip), %eax      # 0xd460
movl %eax, 0x28(%rcx)
movl 0x960a(%rip), %eax      # 0xd464
movl %eax, 0x2c(%rcx)
movl 0x9605(%rip), %eax      # 0xd468
movl %eax, 0x30(%rcx)
pushq $0xd
popq %rdx
xorl %esi, %esi
callq 0x34a0
movq 0x95e1(%rip), %rdi      # 0xd458
movq 0x95d2(%rip), %rax      # 0xd450
movl (%rax), %esi
leaq 0x521b(%rip), %rcx      # 0x90a2
pushq $0x4
popq %rdx
callq 0x33b0
leaq 0x8c0a(%rip), %r12      # 0xcaa0
pushq $0xc
popq %rbx
pushq $0x1
popq %r14
cmpq $0x20, %r15
je 0x3ed8
movq 0x959e(%rip), %rdi      # 0xd448
movq 0x959f(%rip), %rax      # 0xd450
movl (%rax), %edx
movzbl 0x4(%r15,%r12), %eax
xorl %esi, %esi
movl %ebx, %ecx
movl %r14d, %r8d
movl %r14d, %r9d
pushq $0x40
pushq %rax
pushq $0x0
pushq %rdx
callq 0x32c0
addq $0x20, %rsp
addq $0x10, %r15
jmp 0x3e9d
callq 0x48a6
xorl %eax, %eax
leaq 0x95ea(%rip), %rbx      # 0xd4d0
cmpq $0x3f8, %rax            # imm = 0x3F8
je 0x3ef9
andq $0x0, (%rax,%rbx)
addq $0x8, %rax
jmp 0x3ee6
leaq 0x357(%rip), %rax       # 0x4257
movq %rax, 0x95e9(%rip)      # 0xd4f0
leaq 0x5ef(%rip), %rax       # 0x44fd
movq %rax, 0x96c3(%rip)      # 0xd5d8
leaq 0x66e(%rip), %rax       # 0x458a
movq %rax, 0x9665(%rip)      # 0xd588
leaq 0x7ba(%rip), %rax       # 0x46e4
movq %rax, 0x95af(%rip)      # 0xd4e0
leaq 0x81b(%rip), %rax       # 0x4753
movq %rax, 0x95a9(%rip)      # 0xd4e8
leaq 0x83e(%rip), %rax       # 0x4784
movq %rax, 0x9623(%rip)      # 0xd570
leaq 0x861(%rip), %rax       # 0x47b5
movq %rax, 0x9605(%rip)      # 0xd560
leaq 0x89c(%rip), %rax       # 0x47fe
movq %rax, 0x95ef(%rip)      # 0xd558
leaq -0x762(%rip), %rax      # 0x380e
movq %rax, 0x9591(%rip)      # 0xd508
leaq -0x6cc(%rip), %rax      # 0x38b2
movq %rax, 0x958b(%rip)      # 0xd510
leaq 0x8a0(%rip), %rax       # 0x482c
movq %rax, 0x964d(%rip)      # 0xd5e0
leaq 0x8bc(%rip), %rax       # 0x4856
movq %rax, 0x958f(%rip)      # 0xd530
leaq 0x8ed(%rip), %rax       # 0x4895
movq %rax, 0x9569(%rip)      # 0xd518
movq 0x9492(%rip), %rdi      # 0xd448
callq 0x32f0
movq %rax, 0x94ae(%rip)      # 0xd470
xorl %r13d, %r13d
xorl %eax, %eax
callq 0x7a68
xorl %eax, %eax
callq 0x7c14
callq 0x56b1
movq 0x9469(%rip), %r14      # 0xd448
movq 0x946a(%rip), %rax      # 0xd450
movl (%rax), %esi
movq %r14, %rdi
callq 0x31e0
movq %r14, %rdi
movl %eax, %esi
xorl %edx, %edx
callq 0x3310
leaq 0x992d(%rip), %rcx      # 0xd930
andq $0x0, 0x48(%rcx)
andq $0x0, 0x98(%rcx)
andq $0x0, 0xe8(%rcx)
movq %rax, %r15
andq $0x0, 0x138(%rcx)
movq %rax, %rdi
callq 0x35e0
movl %eax, %r14d
movq %r15, -0x38(%rbp)
movq %r15, %rdi
callq 0x3400
movq %rax, %r15
testl %r14d, %r14d
cmovlel %r13d, %r14d
cmpq %r13, %r14
je 0x4087
movq 0x93f8(%rip), %r12      # 0xd448
movl (%r15,%r13,4), %esi
movq %r12, %rdi
callq 0x3590
movq %r12, %rdi
movl %eax, %esi
xorl %edx, %edx
callq 0x3290
testq %rax, %rax
je 0x4082
cmpb $0x0, 0x1b(%rax)
jne 0x4082
cmpb $0x2, 0x1a(%rax)
jne 0x4082
movl (%r15,%r13,4), %edi
callq 0x6011
incq %r13
jmp 0x4044
movq -0x38(%rbp), %rdi
callq 0x3270
movq 0x93b1(%rip), %rdi      # 0xd448
callq 0x31f0
leaq -0x60(%rbp), %r14
movl %eax, (%r14)
movw $0x1, 0x4(%r14)
movq 0x9397(%rip), %rdi      # 0xd448
callq 0x3350
pushq $-0x1
popq %r15
leaq 0x4fe6(%rip), %r12      # 0x90a7
movq 0x9380(%rip), %rdi      # 0xd448
callq 0x30a0
orl 0x936d(%rip), %eax      # 0xd440
jne 0x4148
movq %r14, %rdi
pushq $0x1
popq %rsi
movl %r15d, %edx
callq 0x3330
cmpl $-0x1, %eax
je 0x4148
movq 0x9359(%rip), %rdi      # 0xd448
callq 0x3380
testq %rax, %rax
je 0x40c1
movq %rax, %r13
movb (%rax), %al
testb %al, %al
jne 0x411f
movzbl 0x1(%r13), %esi
movzbl 0xa(%r13), %edx
movzwl 0x8(%r13), %ecx
movq %r12, %rdi
xorl %eax, %eax
callq 0x3060
movb (%r13), %al
andb $0x7f, %al
movzbl %al, %eax
movq (%rbx,%rax,8), %rax
testq %rax, %rax
je 0x4132
movq %r13, %rdi
callq *%rax
movq %r13, %rdi
callq 0x3270
movq 0x9307(%rip), %rdi      # 0xd448
callq 0x3350
jmp 0x40e8
callq 0x3924
movl $0x0, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
addq $0xf8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x8e80(%rip), %rax      # 0xcff0
movq (%rax), %rcx
leaq 0x4eaa(%rip), %rdi      # 0x9024
pushq $0x1d
jmp 0x4191
movq 0x8e6b(%rip), %rax      # 0xcff0
movq (%rax), %rcx
leaq 0x4eb3(%rip), %rdi      # 0x9042
pushq $0x22
popq %rsi
pushq $0x1
popq %rdx
callq 0x35a0
jmp 0x4154