	.file	"117328944.c"
	.intel_syntax noprefix
	.text
	.local	global_buf
	.comm	global_buf,2048,32
	.local	verbose
	.comm	verbose,4,4
	.local	bidirectional
	.comm	bidirectional,4,4
	.section	.rodata
.LC0:
	.string	"ChinaDNS"
	.section	.data.rel.local,"aw"
	.align 8
	.type	version, @object
	.size	version, 8
version:
	.quad	.LC0
	.section	.rodata
	.align 8
.LC1:
	.string	"114.114.114.114,8.8.8.8,208.67.222.222:443,208.67.222.222"
	.section	.data.rel.local
	.align 8
	.type	default_dns_servers, @object
	.size	default_dns_servers, 8
default_dns_servers:
	.quad	.LC1
	.local	dns_servers
	.comm	dns_servers,8,8
	.local	dns_servers_len
	.comm	dns_servers_len,4,4
	.local	dns_server_addrs
	.comm	dns_server_addrs,8,8
	.section	.rodata
.LC2:
	.string	"0.0.0.0"
	.section	.data.rel.local
	.align 8
	.type	default_listen_addr, @object
	.size	default_listen_addr, 8
default_listen_addr:
	.quad	.LC2
	.section	.rodata
.LC3:
	.string	"53"
	.section	.data.rel.local
	.align 8
	.type	default_listen_port, @object
	.size	default_listen_port, 8
default_listen_port:
	.quad	.LC3
	.local	listen_addr
	.comm	listen_addr,8,8
	.local	listen_port
	.comm	listen_port,8,8
	.section	.rodata
.LC4:
	.string	"iplist.txt"
	.section	.data.rel.local
	.align 8
	.type	default_ip_list_file, @object
	.size	default_ip_list_file, 8
default_ip_list_file:
	.quad	.LC4
	.local	ip_list_file
	.comm	ip_list_file,8,8
	.local	ip_list
	.comm	ip_list,16,16
	.local	chnroute_file
	.comm	chnroute_file,8,8
	.local	chnroute_list
	.comm	chnroute_list,16,16
	.local	id_addr_queue
	.comm	id_addr_queue,3072,32
	.local	id_addr_queue_pos
	.comm	id_addr_queue_pos,4,4
	.local	delay_queue
	.comm	delay_queue,1280,32
	.local	delay_queue_first
	.comm	delay_queue_first,4,4
	.local	delay_queue_last
	.comm	delay_queue_last,4,4
	.local	local_sock
	.comm	local_sock,4,4
	.local	remote_sock
	.comm	remote_sock,4,4
	.section	.rodata
	.align 8
.LC5:
	.ascii	"usage: chinadns [-h] [-l IPLIST_FILE] [-b BIND_ADDR] [-p BIN"
	.ascii	"D_PORT]\n       [-c CHNROUTE_FILE] [-s DNS] [-v]\nForward DN"
	.ascii	"S requests.\n\n  -h, --help            show this help messag"
	.ascii	"e and exit\n  -l IPLIST_FILE        path to ip blacklist fil"
	.ascii	"e\n  -c CHNROUTE_FILE      path to china route file\n       "
	.ascii	"                 if not specified, CHNRoute will be turned o"
	.ascii	"ff\n  -d                    enable bi-directional CHNRoute f"
	.ascii	"ilter\n  -b BIND_ADDR          address that listens, default"
	.ascii	": 127.0.0.1\n  -p BIND_PORT "
	.string	"         port that listens, default: 53\n  -s DNS                DNS servers to use, default:\n                        114.114.114.114,208.67.222.222:443,8.8.8.8\n  -v                    verbose logging\n\nOnline help: <https://github.com/clowwindy/ChinaDNS-C>\n"
	.section	.data.rel.local
	.align 8
	.type	help_message, @object
	.size	help_message, 8
help_message:
	.quad	.LC5
	.section	.rodata
.LC6:
	.string	"the_stack_data/117328944.c"
.LC7:
	.string	"%s %s:%d "
.LC8:
	.string	"select"
.LC9:
	.string	"%s "
.LC10:
	.string	"local_sock error\n"
.LC11:
	.string	"remote_sock error\n"
	.text
	.globl	main
	.type	main, @function
main:
.LFB6:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 368
	mov	DWORD PTR -356[rbp], edi
	mov	QWORD PTR -368[rbp], rsi
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	edx, 3072
	mov	esi, 0
	lea	rdi, id_addr_queue[rip]
	call	memset@PLT
	mov	edx, 1280
	mov	esi, 0
	lea	rdi, delay_queue[rip]
	call	memset@PLT
	mov	rdx, QWORD PTR -368[rbp]
	mov	eax, DWORD PTR -356[rbp]
	mov	rsi, rdx
	mov	edi, eax
	call	parse_args
	test	eax, eax
	je	.L2
	mov	eax, 1
	jmp	.L19
.L2:
	mov	eax, 0
	call	parse_ip_list
	test	eax, eax
	je	.L4
	mov	eax, 1
	jmp	.L19
.L4:
	mov	eax, 0
	call	parse_chnroute
	test	eax, eax
	je	.L5
	mov	eax, 1
	jmp	.L19
.L5:
	mov	eax, 0
	call	resolve_dns_servers
	test	eax, eax
	je	.L6
	mov	eax, 1
	jmp	.L19
.L6:
	mov	eax, 0
	call	dns_init_sockets
	test	eax, eax
	je	.L7
	mov	eax, 1
	jmp	.L19
.L7:
	mov	rax, QWORD PTR version[rip]
	mov	rdi, rax
	call	puts@PLT
	mov	edx, DWORD PTR remote_sock[rip]
	mov	eax, DWORD PTR local_sock[rip]
	cmp	edx, eax
	cmovge	eax, edx
	add	eax, 1
	mov	DWORD PTR -340[rbp], eax
.L18:
	mov	eax, 0
	mov	ecx, 16
	lea	rdx, -272[rbp]
	mov	rdi, rdx
#APP
# 184 "the_stack_data/117328944.c" 1
	cld; rep; stosq
# 0 "" 2
#NO_APP
	mov	eax, edi
	mov	edx, ecx
	mov	DWORD PTR -336[rbp], edx
	mov	DWORD PTR -332[rbp], eax
	mov	eax, 0
	mov	ecx, 16
	lea	rdx, -144[rbp]
	mov	rdi, rdx
#APP
# 185 "the_stack_data/117328944.c" 1
	cld; rep; stosq
# 0 "" 2
#NO_APP
	mov	eax, edi
	mov	edx, ecx
	mov	DWORD PTR -328[rbp], edx
	mov	DWORD PTR -324[rbp], eax
	mov	eax, DWORD PTR local_sock[rip]
	lea	edx, 63[rax]
	test	eax, eax
	cmovs	eax, edx
	sar	eax, 6
	mov	esi, eax
	movsx	rax, esi
	mov	rdi, QWORD PTR -272[rbp+rax*8]
	mov	eax, DWORD PTR local_sock[rip]
	cdq
	shr	edx, 26
	add	eax, edx
	and	eax, 63
	sub	eax, edx
	mov	edx, 1
	mov	ecx, eax
	sal	rdx, cl
	mov	rax, rdx
	or	rdi, rax
	mov	rdx, rdi
	movsx	rax, esi
	mov	QWORD PTR -272[rbp+rax*8], rdx
	mov	eax, DWORD PTR local_sock[rip]
	lea	edx, 63[rax]
	test	eax, eax
	cmovs	eax, edx
	sar	eax, 6
	mov	esi, eax
	movsx	rax, esi
	mov	rdi, QWORD PTR -144[rbp+rax*8]
	mov	eax, DWORD PTR local_sock[rip]
	cdq
	shr	edx, 26
	add	eax, edx
	and	eax, 63
	sub	eax, edx
	mov	edx, 1
	mov	ecx, eax
	sal	rdx, cl
	mov	rax, rdx
	or	rdi, rax
	mov	rdx, rdi
	movsx	rax, esi
	mov	QWORD PTR -144[rbp+rax*8], rdx
	mov	eax, DWORD PTR remote_sock[rip]
	lea	edx, 63[rax]
	test	eax, eax
	cmovs	eax, edx
	sar	eax, 6
	mov	esi, eax
	movsx	rax, esi
	mov	rdi, QWORD PTR -272[rbp+rax*8]
	mov	eax, DWORD PTR remote_sock[rip]
	cdq
	shr	edx, 26
	add	eax, edx
	and	eax, 63
	sub	eax, edx
	mov	edx, 1
	mov	ecx, eax
	sal	rdx, cl
	mov	rax, rdx
	or	rdi, rax
	mov	rdx, rdi
	movsx	rax, esi
	mov	QWORD PTR -272[rbp+rax*8], rdx
	mov	eax, DWORD PTR remote_sock[rip]
	lea	edx, 63[rax]
	test	eax, eax
	cmovs	eax, edx
	sar	eax, 6
	mov	esi, eax
	movsx	rax, esi
	mov	rdi, QWORD PTR -144[rbp+rax*8]
	mov	eax, DWORD PTR remote_sock[rip]
	cdq
	shr	edx, 26
	add	eax, edx
	and	eax, 63
	sub	eax, edx
	mov	edx, 1
	mov	ecx, eax
	sal	rdx, cl
	mov	rax, rdx
	or	rdi, rax
	mov	rdx, rdi
	movsx	rax, esi
	mov	QWORD PTR -144[rbp+rax*8], rdx
	mov	QWORD PTR -288[rbp], 1
	mov	QWORD PTR -280[rbp], 0
	lea	rcx, -288[rbp]
	lea	rdx, -144[rbp]
	lea	rsi, -272[rbp]
	mov	eax, DWORD PTR -340[rbp]
	mov	r8, rcx
	mov	rcx, rdx
	mov	edx, 0
	mov	edi, eax
	call	select@PLT
	cmp	eax, -1
	jne	.L8
	lea	rax, -320[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -320[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -296[rbp], rax
	mov	rax, QWORD PTR -296[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -296[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -296[rbp]
	mov	r8d, 195
	lea	rcx, .LC6[rip]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	lea	rdi, .LC8[rip]
	call	perror@PLT
	mov	eax, 1
	jmp	.L19
.L8:
	mov	eax, 0
	call	check_and_send_delay
	mov	eax, DWORD PTR local_sock[rip]
	lea	edx, 63[rax]
	test	eax, eax
	cmovs	eax, edx
	sar	eax, 6
	cdqe
	mov	rsi, QWORD PTR -144[rbp+rax*8]
	mov	eax, DWORD PTR local_sock[rip]
	cdq
	shr	edx, 26
	add	eax, edx
	and	eax, 63
	sub	eax, edx
	mov	edx, 1
	mov	ecx, eax
	sal	rdx, cl
	mov	rax, rdx
	and	rax, rsi
	test	rax, rax
	je	.L10
	lea	rax, -320[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -320[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -304[rbp], rax
	mov	rax, QWORD PTR -304[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -304[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rdx, QWORD PTR stdout[rip]
	mov	rax, QWORD PTR stderr[rip]
	cmp	rdx, rax
	jne	.L11
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L12
.L11:
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -304[rbp]
	lea	rsi, .LC9[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rcx, rax
	mov	edx, 17
	mov	esi, 1
	lea	rdi, .LC10[rip]
	call	fwrite@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rdi, rax
	call	fflush@PLT
.L12:
	mov	eax, 1
	jmp	.L19
.L10:
	mov	eax, DWORD PTR remote_sock[rip]
	lea	edx, 63[rax]
	test	eax, eax
	cmovs	eax, edx
	sar	eax, 6
	cdqe
	mov	rsi, QWORD PTR -144[rbp+rax*8]
	mov	eax, DWORD PTR remote_sock[rip]
	cdq
	shr	edx, 26
	add	eax, edx
	and	eax, 63
	sub	eax, edx
	mov	edx, 1
	mov	ecx, eax
	sal	rdx, cl
	mov	rax, rdx
	and	rax, rsi
	test	rax, rax
	je	.L13
	lea	rax, -320[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -320[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -312[rbp], rax
	mov	rax, QWORD PTR -312[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -312[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rdx, QWORD PTR stdout[rip]
	mov	rax, QWORD PTR stderr[rip]
	cmp	rdx, rax
	jne	.L14
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L15
.L14:
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -312[rbp]
	lea	rsi, .LC9[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rcx, rax
	mov	edx, 18
	mov	esi, 1
	lea	rdi, .LC11[rip]
	call	fwrite@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rdi, rax
	call	fflush@PLT
.L15:
	mov	eax, 1
	jmp	.L19
.L13:
	mov	eax, DWORD PTR local_sock[rip]
	lea	edx, 63[rax]
	test	eax, eax
	cmovs	eax, edx
	sar	eax, 6
	cdqe
	mov	rsi, QWORD PTR -272[rbp+rax*8]
	mov	eax, DWORD PTR local_sock[rip]
	cdq
	shr	edx, 26
	add	eax, edx
	and	eax, 63
	sub	eax, edx
	mov	edx, 1
	mov	ecx, eax
	sal	rdx, cl
	mov	rax, rdx
	and	rax, rsi
	test	rax, rax
	je	.L16
	mov	eax, 0
	call	dns_handle_local
.L16:
	mov	eax, DWORD PTR remote_sock[rip]
	lea	edx, 63[rax]
	test	eax, eax
	cmovs	eax, edx
	sar	eax, 6
	cdqe
	mov	rsi, QWORD PTR -272[rbp+rax*8]
	mov	eax, DWORD PTR remote_sock[rip]
	cdq
	shr	edx, 26
	add	eax, edx
	and	eax, 63
	sub	eax, edx
	mov	edx, 1
	mov	ecx, eax
	sal	rdx, cl
	mov	rax, rdx
	and	rax, rsi
	test	rax, rax
	je	.L18
	mov	eax, 0
	call	dns_handle_remote
	jmp	.L18
.L19:
	mov	rcx, QWORD PTR -8[rbp]
	sub	rcx, QWORD PTR fs:40
	je	.L20
	call	__stack_chk_fail@PLT
.L20:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	main, .-main
	.section	.rodata
.LC12:
	.string	"fcntl"
	.text
	.type	setnonblock, @function
setnonblock:
.LFB7:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 64
	mov	DWORD PTR -52[rbp], edi
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	eax, DWORD PTR -52[rbp]
	mov	edx, 0
	mov	esi, 3
	mov	edi, eax
	mov	eax, 0
	call	fcntl@PLT
	mov	DWORD PTR -36[rbp], eax
	cmp	DWORD PTR -36[rbp], -1
	jne	.L22
	lea	rax, -32[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -32[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -16[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -16[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -16[rbp]
	mov	r8d, 221
	lea	rcx, .LC6[rip]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	lea	rdi, .LC12[rip]
	call	perror@PLT
	mov	eax, -1
	jmp	.L23
.L22:
	mov	eax, DWORD PTR -36[rbp]
	or	ah, 8
	mov	edx, eax
	mov	eax, DWORD PTR -52[rbp]
	mov	esi, 4
	mov	edi, eax
	mov	eax, 0
	call	fcntl@PLT
	cmp	eax, -1
	jne	.L24
	lea	rax, -32[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -32[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -24[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -24[rbp]
	mov	r8d, 225
	lea	rcx, .LC6[rip]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	lea	rdi, .LC12[rip]
	call	perror@PLT
	mov	eax, -1
	jmp	.L23
.L24:
	mov	eax, 0
.L23:
	mov	rcx, QWORD PTR -8[rbp]
	sub	rcx, QWORD PTR fs:40
	je	.L25
	call	__stack_chk_fail@PLT
.L25:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE7:
	.size	setnonblock, .-setnonblock
	.section	.rodata
.LC13:
	.string	"%s"
.LC14:
	.string	"hb:p:s:l:c:dv"
	.text
	.type	parse_args, @function
parse_args:
.LFB8:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	DWORD PTR -20[rbp], edi
	mov	QWORD PTR -32[rbp], rsi
	mov	rax, QWORD PTR default_dns_servers[rip]
	mov	rdi, rax
	call	strdup@PLT
	mov	QWORD PTR dns_servers[rip], rax
	mov	rax, QWORD PTR default_ip_list_file[rip]
	mov	rdi, rax
	call	strdup@PLT
	mov	QWORD PTR ip_list_file[rip], rax
	mov	rax, QWORD PTR default_listen_addr[rip]
	mov	rdi, rax
	call	strdup@PLT
	mov	QWORD PTR listen_addr[rip], rax
	mov	rax, QWORD PTR default_listen_port[rip]
	mov	rdi, rax
	call	strdup@PLT
	mov	QWORD PTR listen_port[rip], rax
	jmp	.L27
.L38:
	mov	eax, DWORD PTR -4[rbp]
	sub	eax, 98
	cmp	eax, 20
	ja	.L28
	mov	eax, eax
	lea	rdx, 0[0+rax*4]
	lea	rax, .L30[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cdqe
	lea	rdx, .L30[rip]
	add	rax, rdx
	notrack jmp	rax
	.section	.rodata
	.align 4
	.align 4
.L30:
	.long	.L37-.L30
	.long	.L36-.L30
	.long	.L35-.L30
	.long	.L28-.L30
	.long	.L28-.L30
	.long	.L28-.L30
	.long	.L34-.L30
	.long	.L28-.L30
	.long	.L28-.L30
	.long	.L28-.L30
	.long	.L33-.L30
	.long	.L28-.L30
	.long	.L28-.L30
	.long	.L28-.L30
	.long	.L32-.L30
	.long	.L28-.L30
	.long	.L28-.L30
	.long	.L31-.L30
	.long	.L28-.L30
	.long	.L28-.L30
	.long	.L29-.L30
	.text
.L34:
	mov	rax, QWORD PTR help_message[rip]
	mov	rsi, rax
	lea	rdi, .LC13[rip]
	mov	eax, 0
	call	printf@PLT
	mov	edi, 0
	call	exit@PLT
.L37:
	mov	rax, QWORD PTR optarg[rip]
	mov	rdi, rax
	call	strdup@PLT
	mov	QWORD PTR listen_addr[rip], rax
	jmp	.L27
.L32:
	mov	rax, QWORD PTR optarg[rip]
	mov	rdi, rax
	call	strdup@PLT
	mov	QWORD PTR listen_port[rip], rax
	jmp	.L27
.L31:
	mov	rax, QWORD PTR optarg[rip]
	mov	rdi, rax
	call	strdup@PLT
	mov	QWORD PTR dns_servers[rip], rax
	jmp	.L27
.L36:
	mov	rax, QWORD PTR optarg[rip]
	mov	rdi, rax
	call	strdup@PLT
	mov	QWORD PTR chnroute_file[rip], rax
	jmp	.L27
.L33:
	mov	rax, QWORD PTR optarg[rip]
	mov	rdi, rax
	call	strdup@PLT
	mov	QWORD PTR ip_list_file[rip], rax
	jmp	.L27
.L35:
	mov	DWORD PTR bidirectional[rip], 1
	jmp	.L27
.L29:
	mov	DWORD PTR verbose[rip], 1
	jmp	.L27
.L28:
	mov	rax, QWORD PTR help_message[rip]
	mov	rsi, rax
	lea	rdi, .LC13[rip]
	mov	eax, 0
	call	printf@PLT
	mov	edi, 1
	call	exit@PLT
.L27:
	mov	rcx, QWORD PTR -32[rbp]
	mov	eax, DWORD PTR -20[rbp]
	lea	rdx, .LC14[rip]
	mov	rsi, rcx
	mov	edi, eax
	call	getopt@PLT
	mov	DWORD PTR -4[rbp], eax
	cmp	DWORD PTR -4[rbp], -1
	jne	.L38
	mov	eax, DWORD PTR optind[rip]
	sub	DWORD PTR -20[rbp], eax
	mov	eax, DWORD PTR optind[rip]
	cdqe
	sal	rax, 3
	add	QWORD PTR -32[rbp], rax
	mov	eax, 0
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	parse_args, .-parse_args
	.section	.rodata
.LC15:
	.string	","
.LC16:
	.string	"%s:%s\n"
	.align 8
.LC17:
	.string	"You should have at least one Chinese DNS and one foreign DNS when chnroutes is enabled\n"
	.text
	.type	resolve_dns_servers, @function
resolve_dns_servers:
.LFB9:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 144
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	DWORD PTR -136[rbp], 0
	mov	rax, QWORD PTR dns_servers[rip]
	mov	esi, 44
	mov	rdi, rax
	call	strchr@PLT
	mov	QWORD PTR -96[rbp], rax
	mov	DWORD PTR -132[rbp], 0
	mov	DWORD PTR -128[rbp], 0
	mov	DWORD PTR dns_servers_len[rip], 1
	jmp	.L41
.L42:
	mov	eax, DWORD PTR dns_servers_len[rip]
	add	eax, 1
	mov	DWORD PTR dns_servers_len[rip], eax
	mov	rax, QWORD PTR -96[rbp]
	add	rax, 1
	mov	esi, 44
	mov	rdi, rax
	call	strchr@PLT
	mov	QWORD PTR -96[rbp], rax
.L41:
	cmp	QWORD PTR -96[rbp], 0
	jne	.L42
	mov	eax, DWORD PTR dns_servers_len[rip]
	cdqe
	mov	esi, 24
	mov	rdi, rax
	call	calloc@PLT
	mov	QWORD PTR dns_server_addrs[rip], rax
	lea	rax, -64[rbp]
	mov	edx, 48
	mov	esi, 0
	mov	rdi, rax
	call	memset@PLT
	mov	DWORD PTR -60[rbp], 2
	mov	DWORD PTR -56[rbp], 2
	mov	rax, QWORD PTR dns_servers[rip]
	lea	rsi, .LC15[rip]
	mov	rdi, rax
	call	strtok@PLT
	mov	QWORD PTR -104[rbp], rax
	jmp	.L43
.L51:
	mov	edx, 2048
	mov	esi, 0
	lea	rdi, global_buf[rip]
	call	memset@PLT
	mov	rax, QWORD PTR -104[rbp]
	mov	edx, 2047
	mov	rsi, rax
	lea	rdi, global_buf[rip]
	call	strncpy@PLT
	mov	esi, 58
	lea	rdi, global_buf[rip]
	call	strrchr@PLT
	mov	QWORD PTR -88[rbp], rax
	cmp	QWORD PTR -88[rbp], 0
	je	.L44
	mov	rax, QWORD PTR -88[rbp]
	mov	BYTE PTR [rax], 0
	add	QWORD PTR -88[rbp], 1
	jmp	.L45
.L44:
	lea	rax, .LC3[rip]
	mov	QWORD PTR -88[rbp], rax
.L45:
	lea	rcx, -120[rbp]
	lea	rdx, -64[rbp]
	mov	rax, QWORD PTR -88[rbp]
	mov	rsi, rax
	lea	rdi, global_buf[rip]
	call	getaddrinfo@PLT
	mov	DWORD PTR -124[rbp], eax
	cmp	DWORD PTR -124[rbp], 0
	je	.L46
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -72[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -72[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rdx, QWORD PTR stdout[rip]
	mov	rax, QWORD PTR stderr[rip]
	cmp	rdx, rax
	jne	.L47
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L48
.L47:
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -72[rbp]
	lea	rsi, .LC9[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	eax, DWORD PTR -124[rbp]
	mov	edi, eax
	call	gai_strerror@PLT
	mov	rsi, rax
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -104[rbp]
	mov	rcx, rdx
	mov	rdx, rsi
	lea	rsi, .LC16[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rdi, rax
	call	fflush@PLT
.L48:
	mov	eax, -1
	jmp	.L56
.L46:
	mov	rdx, QWORD PTR -120[rbp]
	mov	rsi, QWORD PTR dns_server_addrs[rip]
	mov	eax, DWORD PTR -136[rbp]
	movsx	rcx, eax
	mov	rax, rcx
	add	rax, rax
	add	rax, rcx
	sal	rax, 3
	lea	rcx, [rsi+rax]
	mov	rax, QWORD PTR 24[rdx]
	mov	QWORD PTR 8[rcx], rax
	mov	rdx, QWORD PTR -120[rbp]
	mov	rsi, QWORD PTR dns_server_addrs[rip]
	mov	eax, DWORD PTR -136[rbp]
	movsx	rcx, eax
	mov	rax, rcx
	add	rax, rax
	add	rax, rcx
	sal	rax, 3
	lea	rcx, [rsi+rax]
	mov	eax, DWORD PTR 16[rdx]
	mov	DWORD PTR 16[rcx], eax
	add	DWORD PTR -136[rbp], 1
	lea	rsi, .LC15[rip]
	mov	edi, 0
	call	strtok@PLT
	mov	QWORD PTR -104[rbp], rax
	mov	rax, QWORD PTR -120[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	eax, DWORD PTR 4[rax]
	lea	rsi, chnroute_list[rip]
	mov	edi, eax
	call	test_ip_in_list
	test	eax, eax
	je	.L50
	mov	DWORD PTR -132[rbp], 1
	jmp	.L43
.L50:
	mov	DWORD PTR -128[rbp], 1
.L43:
	cmp	QWORD PTR -104[rbp], 0
	jne	.L51
	mov	rax, QWORD PTR chnroute_file[rip]
	test	rax, rax
	je	.L52
	cmp	DWORD PTR -132[rbp], 0
	je	.L53
	cmp	DWORD PTR -128[rbp], 0
	jne	.L52
.L53:
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -80[rbp], rax
	mov	rax, QWORD PTR -80[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -80[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rdx, QWORD PTR stdout[rip]
	mov	rax, QWORD PTR stderr[rip]
	cmp	rdx, rax
	jne	.L54
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L55
.L54:
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -80[rbp]
	lea	rsi, .LC9[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rcx, rax
	mov	edx, 87
	mov	esi, 1
	lea	rdi, .LC17[rip]
	call	fwrite@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rdi, rax
	call	fflush@PLT
.L55:
	mov	eax, 1
	jmp	.L56
.L52:
	mov	eax, 0
.L56:
	mov	rcx, QWORD PTR -8[rbp]
	sub	rcx, QWORD PTR fs:40
	je	.L57
	call	__stack_chk_fail@PLT
.L57:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE9:
	.size	resolve_dns_servers, .-resolve_dns_servers
	.type	cmp_in_addr, @function
cmp_in_addr:
.LFB10:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -32[rbp]
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -16[rbp]
	mov	edx, DWORD PTR [rax]
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	edx, eax
	jne	.L59
	mov	eax, 0
	jmp	.L60
.L59:
	mov	rax, QWORD PTR -16[rbp]
	mov	edx, DWORD PTR [rax]
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	edx, eax
	jbe	.L61
	mov	eax, 1
	jmp	.L60
.L61:
	mov	eax, -1
.L60:
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE10:
	.size	cmp_in_addr, .-cmp_in_addr
	.section	.rodata
.LC18:
	.string	"rb"
.LC19:
	.string	"fopen"
.LC20:
	.string	"Can't open ip list: %s\n"
.LC21:
	.string	"fseek"
	.text
	.type	parse_ip_list, @function
parse_ip_list:
.LFB11:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	add	rsp, -128
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	QWORD PTR -104[rbp], 0
	mov	QWORD PTR -96[rbp], 32
	mov	DWORD PTR ip_list[rip], 0
	mov	DWORD PTR -116[rbp], 0
	mov	rax, QWORD PTR ip_list_file[rip]
	lea	rsi, .LC18[rip]
	mov	rdi, rax
	call	fopen@PLT
	mov	QWORD PTR -88[rbp], rax
	cmp	QWORD PTR -88[rbp], 0
	jne	.L67
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -64[rbp], rax
	mov	rax, QWORD PTR -64[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -64[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -64[rbp]
	mov	r8d, 350
	lea	rcx, .LC6[rip]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	lea	rdi, .LC19[rip]
	call	perror@PLT
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -56[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rdx, QWORD PTR stdout[rip]
	mov	rax, QWORD PTR stderr[rip]
	cmp	rdx, rax
	jne	.L64
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L65
.L64:
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -56[rbp]
	lea	rsi, .LC9[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rdx, QWORD PTR ip_list_file[rip]
	mov	rax, QWORD PTR stderr[rip]
	lea	rsi, .LC20[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rdi, rax
	call	fflush@PLT
.L65:
	mov	eax, -1
	jmp	.L76
.L68:
	mov	eax, DWORD PTR ip_list[rip]
	add	eax, 1
	mov	DWORD PTR ip_list[rip], eax
.L67:
	mov	rax, QWORD PTR -96[rbp]
	mov	ecx, eax
	mov	rdx, QWORD PTR -88[rbp]
	lea	rax, -48[rbp]
	mov	esi, ecx
	mov	rdi, rax
	call	fgets@PLT
	mov	QWORD PTR -104[rbp], rax
	cmp	QWORD PTR -104[rbp], 0
	jne	.L68
	mov	eax, DWORD PTR ip_list[rip]
	cdqe
	mov	esi, 4
	mov	rdi, rax
	call	calloc@PLT
	mov	QWORD PTR ip_list[rip+8], rax
	mov	rax, QWORD PTR -88[rbp]
	mov	edx, 0
	mov	esi, 0
	mov	rdi, rax
	call	fseek@PLT
	test	eax, eax
	je	.L72
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -72[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -72[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rdx, QWORD PTR stdout[rip]
	mov	rax, QWORD PTR stderr[rip]
	cmp	rdx, rax
	jne	.L70
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L71
.L70:
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -72[rbp]
	lea	rsi, .LC9[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rcx, rax
	mov	edx, 5
	mov	esi, 1
	lea	rdi, .LC21[rip]
	call	fwrite@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rdi, rax
	call	fflush@PLT
.L71:
	mov	eax, -1
	jmp	.L76
.L75:
	mov	rax, QWORD PTR -104[rbp]
	mov	esi, 13
	mov	rdi, rax
	call	strchr@PLT
	mov	QWORD PTR -80[rbp], rax
	cmp	QWORD PTR -80[rbp], 0
	je	.L73
	mov	rax, QWORD PTR -80[rbp]
	mov	BYTE PTR [rax], 0
.L73:
	mov	rax, QWORD PTR -104[rbp]
	mov	esi, 10
	mov	rdi, rax
	call	strchr@PLT
	mov	QWORD PTR -80[rbp], rax
	cmp	QWORD PTR -80[rbp], 0
	je	.L74
	mov	rax, QWORD PTR -80[rbp]
	mov	BYTE PTR [rax], 0
.L74:
	mov	rdx, QWORD PTR ip_list[rip+8]
	mov	eax, DWORD PTR -116[rbp]
	cdqe
	sal	rax, 2
	add	rdx, rax
	mov	rax, QWORD PTR -104[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	inet_aton@PLT
	add	DWORD PTR -116[rbp], 1
.L72:
	mov	rax, QWORD PTR -96[rbp]
	mov	ecx, eax
	mov	rdx, QWORD PTR -88[rbp]
	lea	rax, -48[rbp]
	mov	esi, ecx
	mov	rdi, rax
	call	fgets@PLT
	mov	QWORD PTR -104[rbp], rax
	cmp	QWORD PTR -104[rbp], 0
	jne	.L75
	mov	eax, DWORD PTR ip_list[rip]
	movsx	rsi, eax
	mov	rax, QWORD PTR ip_list[rip+8]
	lea	rcx, cmp_in_addr[rip]
	mov	edx, 4
	mov	rdi, rax
	call	qsort@PLT
	mov	rax, QWORD PTR -88[rbp]
	mov	rdi, rax
	call	fclose@PLT
	mov	eax, 0
.L76:
	mov	rcx, QWORD PTR -8[rbp]
	sub	rcx, QWORD PTR fs:40
	je	.L77
	call	__stack_chk_fail@PLT
.L77:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE11:
	.size	parse_ip_list, .-parse_ip_list
	.type	cmp_net_mask, @function
cmp_net_mask:
.LFB12:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	push	rbx
	sub	rsp, 40
	.cfi_offset 3, -24
	mov	QWORD PTR -40[rbp], rdi
	mov	QWORD PTR -48[rbp], rsi
	mov	rax, QWORD PTR -40[rbp]
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -32[rbp]
	mov	edx, DWORD PTR [rax]
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	edx, eax
	jne	.L79
	mov	eax, 0
	jmp	.L80
.L79:
	mov	rax, QWORD PTR -32[rbp]
	mov	eax, DWORD PTR [rax]
	mov	edi, eax
	call	ntohl@PLT
	mov	ebx, eax
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	mov	edi, eax
	call	ntohl@PLT
	cmp	ebx, eax
	jbe	.L81
	mov	eax, 1
	jmp	.L80
.L81:
	mov	eax, -1
.L80:
	mov	rbx, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE12:
	.size	cmp_net_mask, .-cmp_net_mask
	.section	.rodata
	.align 8
.LC22:
	.string	"CHNROUTE_FILE not specified, CHNRoute is disabled\n"
.LC23:
	.string	"Can't open chnroute: %s\n"
.LC24:
	.string	"invalid addr %s in %s:%d\n"
	.text
	.type	parse_chnroute, @function
parse_chnroute:
.LFB13:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 144
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	QWORD PTR -120[rbp], 32
	mov	DWORD PTR chnroute_list[rip], 0
	mov	DWORD PTR -132[rbp], 0
	mov	rax, QWORD PTR chnroute_file[rip]
	test	rax, rax
	jne	.L83
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -56[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rdx, QWORD PTR stdout[rip]
	mov	rax, QWORD PTR stderr[rip]
	cmp	rdx, rax
	jne	.L84
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L85
.L84:
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -56[rbp]
	lea	rsi, .LC9[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rcx, rax
	mov	edx, 50
	mov	esi, 1
	lea	rdi, .LC22[rip]
	call	fwrite@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rdi, rax
	call	fflush@PLT
.L85:
	mov	eax, 0
	jmp	.L104
.L83:
	mov	rax, QWORD PTR chnroute_file[rip]
	lea	rsi, .LC18[rip]
	mov	rdi, rax
	call	fopen@PLT
	mov	QWORD PTR -112[rbp], rax
	cmp	QWORD PTR -112[rbp], 0
	jne	.L90
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -72[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -72[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -72[rbp]
	mov	r8d, 406
	lea	rcx, .LC6[rip]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	lea	rdi, .LC19[rip]
	call	perror@PLT
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -64[rbp], rax
	mov	rax, QWORD PTR -64[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -64[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rdx, QWORD PTR stdout[rip]
	mov	rax, QWORD PTR stderr[rip]
	cmp	rdx, rax
	jne	.L88
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L89
.L88:
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -64[rbp]
	lea	rsi, .LC9[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rdx, QWORD PTR chnroute_file[rip]
	mov	rax, QWORD PTR stderr[rip]
	lea	rsi, .LC23[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rdi, rax
	call	fflush@PLT
.L89:
	mov	eax, -1
	jmp	.L104
.L91:
	mov	eax, DWORD PTR chnroute_list[rip]
	add	eax, 1
	mov	DWORD PTR chnroute_list[rip], eax
.L90:
	mov	rax, QWORD PTR -120[rbp]
	mov	ecx, eax
	mov	rdx, QWORD PTR -112[rbp]
	lea	rax, -48[rbp]
	mov	esi, ecx
	mov	rdi, rax
	call	fgets@PLT
	mov	QWORD PTR -104[rbp], rax
	cmp	QWORD PTR -104[rbp], 0
	jne	.L91
	mov	eax, DWORD PTR chnroute_list[rip]
	cdqe
	mov	esi, 8
	mov	rdi, rax
	call	calloc@PLT
	mov	QWORD PTR chnroute_list[rip+8], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	edx, 0
	mov	esi, 0
	mov	rdi, rax
	call	fseek@PLT
	test	eax, eax
	je	.L95
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -80[rbp], rax
	mov	rax, QWORD PTR -80[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -80[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rdx, QWORD PTR stdout[rip]
	mov	rax, QWORD PTR stderr[rip]
	cmp	rdx, rax
	jne	.L93
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L94
.L93:
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -80[rbp]
	lea	rsi, .LC9[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rcx, rax
	mov	edx, 5
	mov	esi, 1
	lea	rdi, .LC21[rip]
	call	fwrite@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rdi, rax
	call	fflush@PLT
.L94:
	mov	eax, -1
	jmp	.L104
.L103:
	mov	rax, QWORD PTR -104[rbp]
	mov	esi, 13
	mov	rdi, rax
	call	strchr@PLT
	mov	QWORD PTR -96[rbp], rax
	cmp	QWORD PTR -96[rbp], 0
	je	.L96
	mov	rax, QWORD PTR -96[rbp]
	mov	BYTE PTR [rax], 0
.L96:
	mov	rax, QWORD PTR -104[rbp]
	mov	esi, 10
	mov	rdi, rax
	call	strchr@PLT
	mov	QWORD PTR -96[rbp], rax
	cmp	QWORD PTR -96[rbp], 0
	je	.L97
	mov	rax, QWORD PTR -96[rbp]
	mov	BYTE PTR [rax], 0
.L97:
	mov	rax, QWORD PTR -104[rbp]
	mov	esi, 47
	mov	rdi, rax
	call	strchr@PLT
	mov	QWORD PTR -96[rbp], rax
	cmp	QWORD PTR -96[rbp], 0
	je	.L98
	mov	rax, QWORD PTR -96[rbp]
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR -96[rbp]
	add	rax, 1
	mov	rdi, rax
	call	atoi@PLT
	mov	edx, eax
	mov	eax, 32
	sub	eax, edx
	mov	edx, 1
	mov	ecx, eax
	sal	edx, cl
	mov	eax, edx
	lea	edx, -1[rax]
	mov	rcx, QWORD PTR chnroute_list[rip+8]
	mov	eax, DWORD PTR -132[rbp]
	cdqe
	sal	rax, 3
	add	rax, rcx
	mov	DWORD PTR 4[rax], edx
	jmp	.L99
.L98:
	mov	rdx, QWORD PTR chnroute_list[rip+8]
	mov	eax, DWORD PTR -132[rbp]
	cdqe
	sal	rax, 3
	add	rax, rdx
	mov	DWORD PTR 4[rax], -1
.L99:
	mov	rdx, QWORD PTR chnroute_list[rip+8]
	mov	eax, DWORD PTR -132[rbp]
	cdqe
	sal	rax, 3
	add	rax, rdx
	mov	rdx, rax
	mov	rax, QWORD PTR -104[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	inet_aton@PLT
	test	eax, eax
	jne	.L100
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -88[rbp], rax
	mov	rax, QWORD PTR -88[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -88[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rdx, QWORD PTR stdout[rip]
	mov	rax, QWORD PTR stderr[rip]
	cmp	rdx, rax
	jne	.L101
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L102
.L101:
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -88[rbp]
	lea	rsi, .LC9[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	eax, DWORD PTR -132[rbp]
	lea	esi, 1[rax]
	mov	rcx, QWORD PTR chnroute_file[rip]
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -104[rbp]
	mov	r8d, esi
	lea	rsi, .LC24[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rdi, rax
	call	fflush@PLT
.L102:
	mov	eax, 1
	jmp	.L104
.L100:
	add	DWORD PTR -132[rbp], 1
.L95:
	mov	rax, QWORD PTR -120[rbp]
	mov	ecx, eax
	mov	rdx, QWORD PTR -112[rbp]
	lea	rax, -48[rbp]
	mov	esi, ecx
	mov	rdi, rax
	call	fgets@PLT
	mov	QWORD PTR -104[rbp], rax
	cmp	QWORD PTR -104[rbp], 0
	jne	.L103
	mov	eax, DWORD PTR chnroute_list[rip]
	movsx	rsi, eax
	mov	rax, QWORD PTR chnroute_list[rip+8]
	lea	rcx, cmp_net_mask[rip]
	mov	edx, 8
	mov	rdi, rax
	call	qsort@PLT
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	fclose@PLT
	mov	eax, 0
.L104:
	mov	rcx, QWORD PTR -8[rbp]
	sub	rcx, QWORD PTR fs:40
	je	.L105
	call	__stack_chk_fail@PLT
.L105:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE13:
	.size	parse_chnroute, .-parse_chnroute
	.type	test_ip_in_list, @function
test_ip_in_list:
.LFB14:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	push	rbx
	sub	rsp, 56
	.cfi_offset 3, -24
	mov	DWORD PTR -52[rbp], edi
	mov	QWORD PTR -64[rbp], rsi
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -24[rbp], rax
	xor	eax, eax
	mov	DWORD PTR -48[rbp], 0
	mov	rax, QWORD PTR -64[rbp]
	mov	eax, DWORD PTR [rax]
	sub	eax, 1
	mov	DWORD PTR -44[rbp], eax
	mov	rax, QWORD PTR -64[rbp]
	mov	eax, DWORD PTR [rax]
	test	eax, eax
	jne	.L107
	mov	eax, 0
	jmp	.L116
.L107:
	mov	eax, DWORD PTR -52[rbp]
	mov	DWORD PTR -32[rbp], eax
	jmp	.L109
.L114:
	mov	edx, DWORD PTR -48[rbp]
	mov	eax, DWORD PTR -44[rbp]
	add	eax, edx
	mov	edx, eax
	shr	edx, 31
	add	eax, edx
	sar	eax
	mov	DWORD PTR -40[rbp], eax
	mov	rax, QWORD PTR -64[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	eax, DWORD PTR -40[rbp]
	cdqe
	sal	rax, 3
	add	rdx, rax
	lea	rax, -32[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	cmp_net_mask
	mov	DWORD PTR -36[rbp], eax
	cmp	DWORD PTR -36[rbp], -1
	jne	.L110
	mov	eax, DWORD PTR -44[rbp]
	cmp	eax, DWORD PTR -40[rbp]
	je	.L118
	mov	eax, DWORD PTR -40[rbp]
	mov	DWORD PTR -44[rbp], eax
	jmp	.L109
.L110:
	mov	eax, DWORD PTR -48[rbp]
	cmp	eax, DWORD PTR -40[rbp]
	je	.L119
	mov	eax, DWORD PTR -40[rbp]
	mov	DWORD PTR -48[rbp], eax
.L109:
	mov	eax, DWORD PTR -48[rbp]
	cmp	eax, DWORD PTR -44[rbp]
	jne	.L114
	jmp	.L112
.L118:
	nop
	jmp	.L112
.L119:
	nop
.L112:
	mov	rax, QWORD PTR -64[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	eax, DWORD PTR -48[rbp]
	cdqe
	sal	rax, 3
	add	rax, rdx
	mov	eax, DWORD PTR [rax]
	mov	edi, eax
	call	ntohl@PLT
	mov	ebx, eax
	mov	eax, DWORD PTR -52[rbp]
	mov	edi, eax
	call	ntohl@PLT
	mov	ecx, ebx
	xor	ecx, eax
	mov	rax, QWORD PTR -64[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	eax, DWORD PTR -48[rbp]
	cdqe
	sal	rax, 3
	add	rax, rdx
	mov	eax, DWORD PTR 4[rax]
	not	eax
	and	eax, ecx
	test	eax, eax
	je	.L115
	mov	eax, 0
	jmp	.L116
.L115:
	mov	eax, 1
.L116:
	mov	rsi, QWORD PTR -24[rbp]
	sub	rsi, QWORD PTR fs:40
	je	.L117
	call	__stack_chk_fail@PLT
.L117:
	mov	rbx, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE14:
	.size	test_ip_in_list, .-test_ip_in_list
	.section	.rodata
.LC25:
	.string	"%s:%s:%s\n"
.LC26:
	.string	"bind"
.LC27:
	.string	"Can't bind address %s:%s\n"
	.text
	.type	dns_init_sockets, @function
dns_init_sockets:
.LFB15:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	push	r12
	push	rbx
	sub	rsp, 112
	.cfi_offset 12, -24
	.cfi_offset 3, -32
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -24[rbp], rax
	xor	eax, eax
	mov	edx, 17
	mov	esi, 2
	mov	edi, 2
	call	socket@PLT
	mov	DWORD PTR local_sock[rip], eax
	mov	eax, DWORD PTR local_sock[rip]
	mov	edi, eax
	call	setnonblock
	test	eax, eax
	je	.L121
	mov	eax, -1
	jmp	.L130
.L121:
	lea	rax, -80[rbp]
	mov	edx, 48
	mov	esi, 0
	mov	rdi, rax
	call	memset@PLT
	mov	DWORD PTR -76[rbp], 2
	mov	DWORD PTR -72[rbp], 2
	mov	rsi, QWORD PTR listen_port[rip]
	mov	rax, QWORD PTR listen_addr[rip]
	lea	rcx, -120[rbp]
	lea	rdx, -80[rbp]
	mov	rdi, rax
	call	getaddrinfo@PLT
	mov	DWORD PTR -124[rbp], eax
	cmp	DWORD PTR -124[rbp], 0
	je	.L123
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -88[rbp], rax
	mov	rax, QWORD PTR -88[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -88[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rdx, QWORD PTR stdout[rip]
	mov	rax, QWORD PTR stderr[rip]
	cmp	rdx, rax
	jne	.L124
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L125
.L124:
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -88[rbp]
	lea	rsi, .LC9[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	r12, QWORD PTR listen_port[rip]
	mov	rbx, QWORD PTR listen_addr[rip]
	mov	eax, DWORD PTR -124[rbp]
	mov	edi, eax
	call	gai_strerror@PLT
	mov	rdx, rax
	mov	rax, QWORD PTR stderr[rip]
	mov	r8, r12
	mov	rcx, rbx
	lea	rsi, .LC25[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rdi, rax
	call	fflush@PLT
.L125:
	mov	eax, -1
	jmp	.L130
.L123:
	mov	rax, QWORD PTR -120[rbp]
	mov	edx, DWORD PTR 16[rax]
	mov	rax, QWORD PTR -120[rbp]
	mov	rcx, QWORD PTR 24[rax]
	mov	eax, DWORD PTR local_sock[rip]
	mov	rsi, rcx
	mov	edi, eax
	call	bind@PLT
	test	eax, eax
	je	.L126
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -104[rbp], rax
	mov	rax, QWORD PTR -104[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -104[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -104[rbp]
	mov	r8d, 498
	lea	rcx, .LC6[rip]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	lea	rdi, .LC26[rip]
	call	perror@PLT
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -112[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -96[rbp], rax
	mov	rax, QWORD PTR -96[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -96[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rdx, QWORD PTR stdout[rip]
	mov	rax, QWORD PTR stderr[rip]
	cmp	rdx, rax
	jne	.L127
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L128
.L127:
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -96[rbp]
	lea	rsi, .LC9[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rcx, QWORD PTR listen_port[rip]
	mov	rdx, QWORD PTR listen_addr[rip]
	mov	rax, QWORD PTR stderr[rip]
	lea	rsi, .LC27[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR stderr[rip]
	mov	rdi, rax
	call	fflush@PLT
.L128:
	mov	eax, -1
	jmp	.L130
.L126:
	mov	rax, QWORD PTR -120[rbp]
	mov	rdi, rax
	call	freeaddrinfo@PLT
	mov	edx, 17
	mov	esi, 2
	mov	edi, 2
	call	socket@PLT
	mov	DWORD PTR remote_sock[rip], eax
	mov	eax, DWORD PTR remote_sock[rip]
	mov	edi, eax
	call	setnonblock
	test	eax, eax
	je	.L129
	mov	eax, -1
	jmp	.L130
.L129:
	mov	eax, 0
.L130:
	mov	rbx, QWORD PTR -24[rbp]
	sub	rbx, QWORD PTR fs:40
	je	.L131
	call	__stack_chk_fail@PLT
.L131:
	add	rsp, 112
	pop	rbx
	pop	r12
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE15:
	.size	dns_init_sockets, .-dns_init_sockets
	.section	.rodata
.LC28:
	.string	"ns_initparse"
.LC29:
	.string	"request %s\n"
.LC30:
	.string	"sendto"
.LC31:
	.string	"recvfrom"
	.text
	.type	dns_handle_local, @function
dns_handle_local:
.LFB16:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 208
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	edi, 16
	call	malloc@PLT
	mov	QWORD PTR -168[rbp], rax
	mov	DWORD PTR -200[rbp], 16
	mov	eax, DWORD PTR local_sock[rip]
	lea	rcx, -200[rbp]
	mov	rdx, QWORD PTR -168[rbp]
	mov	r9, rcx
	mov	r8, rdx
	mov	ecx, 0
	mov	edx, 2048
	lea	rsi, global_buf[rip]
	mov	edi, eax
	call	recvfrom@PLT
	mov	QWORD PTR -176[rbp], rax
	cmp	QWORD PTR -176[rbp], 0
	jle	.L133
	mov	rax, QWORD PTR -176[rbp]
	mov	ecx, eax
	lea	rax, -96[rbp]
	mov	rdx, rax
	mov	esi, ecx
	lea	rdi, global_buf[rip]
	call	ns_initparse@PLT
	test	eax, eax
	jns	.L134
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -136[rbp], rax
	mov	rax, QWORD PTR -136[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -136[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -136[rbp]
	mov	r8d, 520
	lea	rcx, .LC6[rip]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	lea	rdi, .LC28[rip]
	call	perror@PLT
	mov	rax, QWORD PTR -168[rbp]
	mov	rdi, rax
	call	free@PLT
	jmp	.L132
.L134:
	movzx	eax, WORD PTR -80[rbp]
	mov	WORD PTR -202[rbp], ax
	push	QWORD PTR -24[rbp]
	push	QWORD PTR -32[rbp]
	push	QWORD PTR -40[rbp]
	push	QWORD PTR -48[rbp]
	push	QWORD PTR -56[rbp]
	push	QWORD PTR -64[rbp]
	push	QWORD PTR -72[rbp]
	push	QWORD PTR -80[rbp]
	push	QWORD PTR -88[rbp]
	push	QWORD PTR -96[rbp]
	call	hostname_from_question
	add	rsp, 80
	mov	QWORD PTR -160[rbp], rax
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -152[rbp], rax
	mov	rax, QWORD PTR -152[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -152[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L136
	mov	rax, QWORD PTR stdout[rip]
	mov	rdx, QWORD PTR -152[rbp]
	lea	rsi, .LC9[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR stdout[rip]
	mov	rdx, QWORD PTR -160[rbp]
	lea	rsi, .LC29[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR stdout[rip]
	mov	rdi, rax
	call	fflush@PLT
.L136:
	movzx	eax, WORD PTR -202[rbp]
	mov	WORD PTR -128[rbp], ax
	mov	rax, QWORD PTR -168[rbp]
	mov	QWORD PTR -120[rbp], rax
	mov	eax, DWORD PTR -200[rbp]
	mov	DWORD PTR -112[rbp], eax
	sub	rsp, 8
	push	QWORD PTR -112[rbp]
	push	QWORD PTR -120[rbp]
	push	QWORD PTR -128[rbp]
	call	queue_add
	add	rsp, 32
	mov	DWORD PTR -196[rbp], 0
	jmp	.L137
.L139:
	mov	rcx, QWORD PTR dns_server_addrs[rip]
	mov	eax, DWORD PTR -196[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 3
	add	rax, rcx
	mov	esi, DWORD PTR 16[rax]
	mov	rcx, QWORD PTR dns_server_addrs[rip]
	mov	eax, DWORD PTR -196[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 3
	add	rax, rcx
	mov	rcx, QWORD PTR 8[rax]
	mov	rdx, QWORD PTR -176[rbp]
	mov	eax, DWORD PTR remote_sock[rip]
	mov	r9d, esi
	mov	r8, rcx
	mov	ecx, 0
	lea	rsi, global_buf[rip]
	mov	edi, eax
	call	sendto@PLT
	cmp	rax, -1
	jne	.L138
	lea	rax, -192[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -192[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -144[rbp], rax
	mov	rax, QWORD PTR -144[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -144[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -144[rbp]
	mov	r8d, 537
	lea	rcx, .LC6[rip]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	lea	rdi, .LC30[rip]
	call	perror@PLT
.L138:
	add	DWORD PTR -196[rbp], 1
.L137:
	mov	eax, DWORD PTR dns_servers_len[rip]
	cmp	DWORD PTR -196[rbp], eax
	jl	.L139
	jmp	.L132
.L133:
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -128[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -184[rbp], rax
	mov	rax, QWORD PTR -184[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -184[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -184[rbp]
	mov	r8d, 541
	lea	rcx, .LC6[rip]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	lea	rdi, .LC31[rip]
	call	perror@PLT
.L132:
	mov	rax, QWORD PTR -8[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L141
	call	__stack_chk_fail@PLT
.L141:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE16:
	.size	dns_handle_local, .-dns_handle_local
	.section	.rodata
.LC32:
	.string	"response %s from %s:%d - "
.LC33:
	.string	"pass"
.LC34:
	.string	"delay"
.LC35:
	.string	"filter"
.LC36:
	.string	"skip"
	.text
	.type	dns_handle_remote, @function
dns_handle_remote:
.LFB17:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	push	rbx
	sub	rsp, 200
	.cfi_offset 3, -24
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -24[rbp], rax
	xor	eax, eax
	mov	edi, 16
	call	malloc@PLT
	mov	QWORD PTR -160[rbp], rax
	mov	DWORD PTR -192[rbp], 16
	mov	eax, DWORD PTR remote_sock[rip]
	lea	rcx, -192[rbp]
	mov	rdx, QWORD PTR -160[rbp]
	mov	r9, rcx
	mov	r8, rdx
	mov	ecx, 0
	mov	edx, 2048
	lea	rsi, global_buf[rip]
	mov	edi, eax
	call	recvfrom@PLT
	mov	QWORD PTR -168[rbp], rax
	cmp	QWORD PTR -168[rbp], 0
	jle	.L143
	mov	rax, QWORD PTR -168[rbp]
	mov	ecx, eax
	lea	rax, -112[rbp]
	mov	rdx, rax
	mov	esi, ecx
	lea	rdi, global_buf[rip]
	call	ns_initparse@PLT
	test	eax, eax
	jns	.L144
	lea	rax, -184[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -184[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -120[rbp], rax
	mov	rax, QWORD PTR -120[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -120[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -120[rbp]
	mov	r8d, 555
	lea	rcx, .LC6[rip]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	lea	rdi, .LC28[rip]
	call	perror@PLT
	mov	rax, QWORD PTR -160[rbp]
	mov	rdi, rax
	call	free@PLT
	jmp	.L142
.L144:
	movzx	eax, WORD PTR -96[rbp]
	mov	WORD PTR -194[rbp], ax
	push	QWORD PTR -40[rbp]
	push	QWORD PTR -48[rbp]
	push	QWORD PTR -56[rbp]
	push	QWORD PTR -64[rbp]
	push	QWORD PTR -72[rbp]
	push	QWORD PTR -80[rbp]
	push	QWORD PTR -88[rbp]
	push	QWORD PTR -96[rbp]
	push	QWORD PTR -104[rbp]
	push	QWORD PTR -112[rbp]
	call	hostname_from_question
	add	rsp, 80
	mov	QWORD PTR -152[rbp], rax
	cmp	QWORD PTR -152[rbp], 0
	je	.L146
	lea	rax, -184[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -184[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -144[rbp], rax
	mov	rax, QWORD PTR -144[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -144[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L146
	mov	rax, QWORD PTR stdout[rip]
	mov	rdx, QWORD PTR -144[rbp]
	lea	rsi, .LC9[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -160[rbp]
	movzx	eax, WORD PTR 2[rax]
	movzx	eax, ax
	mov	edi, eax
	call	htons@PLT
	movzx	ebx, ax
	mov	rax, QWORD PTR -160[rbp]
	mov	eax, DWORD PTR 4[rax]
	mov	edi, eax
	call	inet_ntoa@PLT
	mov	rcx, rax
	mov	rax, QWORD PTR stdout[rip]
	mov	rdx, QWORD PTR -152[rbp]
	mov	r8d, ebx
	lea	rsi, .LC32[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR stdout[rip]
	mov	rdi, rax
	call	fflush@PLT
.L146:
	movzx	eax, WORD PTR -194[rbp]
	mov	edi, eax
	call	queue_lookup
	mov	QWORD PTR -136[rbp], rax
	cmp	QWORD PTR -136[rbp], 0
	je	.L148
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	WORD PTR [rax], 2
	mov	rax, QWORD PTR -160[rbp]
	mov	eax, DWORD PTR 4[rax]
	push	QWORD PTR -40[rbp]
	push	QWORD PTR -48[rbp]
	push	QWORD PTR -56[rbp]
	push	QWORD PTR -64[rbp]
	push	QWORD PTR -72[rbp]
	push	QWORD PTR -80[rbp]
	push	QWORD PTR -88[rbp]
	push	QWORD PTR -96[rbp]
	push	QWORD PTR -104[rbp]
	push	QWORD PTR -112[rbp]
	mov	edi, eax
	call	should_filter_query
	add	rsp, 80
	mov	DWORD PTR -188[rbp], eax
	cmp	DWORD PTR -188[rbp], 0
	jne	.L149
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L150
	lea	rdi, .LC33[rip]
	call	puts@PLT
.L150:
	mov	rax, QWORD PTR -136[rbp]
	mov	esi, DWORD PTR 16[rax]
	mov	rax, QWORD PTR -136[rbp]
	mov	rcx, QWORD PTR 8[rax]
	mov	rdx, QWORD PTR -168[rbp]
	mov	eax, DWORD PTR local_sock[rip]
	mov	r9d, esi
	mov	r8, rcx
	mov	ecx, 0
	lea	rsi, global_buf[rip]
	mov	edi, eax
	call	sendto@PLT
	cmp	rax, -1
	jne	.L151
	lea	rax, -184[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -184[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -128[rbp], rax
	mov	rax, QWORD PTR -128[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -128[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -128[rbp]
	mov	r8d, 577
	lea	rcx, .LC6[rip]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	lea	rdi, .LC30[rip]
	call	perror@PLT
	jmp	.L151
.L149:
	cmp	DWORD PTR -188[rbp], -1
	jne	.L152
	mov	rax, QWORD PTR -136[rbp]
	mov	ecx, DWORD PTR 16[rax]
	mov	rax, QWORD PTR -136[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -168[rbp]
	mov	rsi, rax
	lea	rdi, global_buf[rip]
	call	schedule_delay
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L151
	lea	rdi, .LC34[rip]
	call	puts@PLT
	jmp	.L151
.L152:
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L151
	lea	rdi, .LC35[rip]
	call	puts@PLT
	jmp	.L151
.L148:
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L151
	lea	rdi, .LC36[rip]
	call	puts@PLT
.L151:
	mov	rax, QWORD PTR -160[rbp]
	mov	rdi, rax
	call	free@PLT
	jmp	.L142
.L143:
	lea	rax, -184[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -184[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -176[rbp], rax
	mov	rax, QWORD PTR -176[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -176[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -176[rbp]
	mov	r8d, 593
	lea	rcx, .LC6[rip]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	lea	rdi, .LC31[rip]
	call	perror@PLT
.L142:
	mov	rax, QWORD PTR -24[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L154
	call	__stack_chk_fail@PLT
.L154:
	mov	rbx, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE17:
	.size	dns_handle_remote, .-dns_handle_remote
	.type	queue_add, @function
queue_add:
.LFB18:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	eax, DWORD PTR id_addr_queue_pos[rip]
	add	eax, 1
	cdq
	shr	edx, 25
	add	eax, edx
	and	eax, 127
	sub	eax, edx
	mov	DWORD PTR id_addr_queue_pos[rip], eax
	mov	eax, DWORD PTR id_addr_queue_pos[rip]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 3
	mov	rsi, rax
	lea	rcx, id_addr_queue[rip]
	mov	rax, QWORD PTR [rsi+rcx]
	mov	rdx, QWORD PTR 8[rsi+rcx]
	mov	QWORD PTR -32[rbp], rax
	mov	QWORD PTR -24[rbp], rdx
	mov	rax, QWORD PTR 16[rsi+rcx]
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	free@PLT
	mov	eax, DWORD PTR id_addr_queue_pos[rip]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 3
	mov	rsi, rax
	lea	rcx, id_addr_queue[rip]
	mov	rax, QWORD PTR 16[rbp]
	mov	rdx, QWORD PTR 24[rbp]
	mov	QWORD PTR [rsi+rcx], rax
	mov	QWORD PTR 8[rsi+rcx], rdx
	mov	rax, QWORD PTR 32[rbp]
	mov	QWORD PTR 16[rsi+rcx], rax
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE18:
	.size	queue_add, .-queue_add
	.type	queue_lookup, @function
queue_lookup:
.LFB19:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	eax, edi
	mov	WORD PTR -20[rbp], ax
	mov	DWORD PTR -4[rbp], 0
	jmp	.L157
.L160:
	mov	eax, DWORD PTR -4[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 3
	mov	rdx, rax
	lea	rax, id_addr_queue[rip]
	movzx	eax, WORD PTR [rdx+rax]
	cmp	WORD PTR -20[rbp], ax
	jne	.L158
	mov	eax, DWORD PTR -4[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 3
	mov	rdx, rax
	lea	rax, id_addr_queue[rip]
	add	rax, rdx
	jmp	.L159
.L158:
	add	DWORD PTR -4[rbp], 1
.L157:
	cmp	DWORD PTR -4[rbp], 127
	jle	.L160
	mov	eax, 0
.L159:
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE19:
	.size	queue_lookup, .-queue_lookup
	.local	hostname_buf
	.comm	hostname_buf,8,8
	.local	hostname_buflen
	.comm	hostname_buflen,8,8
	.section	.rodata
.LC37:
	.string	"ns_parserr"
.LC38:
	.string	"."
	.text
	.type	hostname_from_question, @function
hostname_from_question:
.LFB20:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 1104
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	movzx	eax, WORD PTR 36[rbp]
	movzx	eax, ax
	mov	DWORD PTR -1092[rbp], eax
	cmp	DWORD PTR -1092[rbp], 0
	jne	.L162
	mov	eax, 0
	jmp	.L169
.L162:
	mov	DWORD PTR -1088[rbp], 0
	mov	eax, DWORD PTR -1088[rbp]
	cmp	eax, DWORD PTR -1092[rbp]
	jge	.L164
	lea	rdx, -1056[rbp]
	mov	eax, DWORD PTR -1088[rbp]
	mov	rcx, rdx
	mov	edx, eax
	mov	esi, 0
	lea	rdi, 16[rbp]
	call	ns_parserr@PLT
	test	eax, eax
	je	.L165
	lea	rax, -1080[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -1080[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -1064[rbp], rax
	mov	rax, QWORD PTR -1064[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -1064[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -1064[rbp]
	mov	r8d, 626
	lea	rcx, .LC6[rip]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	lea	rdi, .LC37[rip]
	call	perror@PLT
	mov	eax, 0
	jmp	.L169
.L165:
	movzx	eax, BYTE PTR -1056[rbp]
	test	al, al
	je	.L166
	lea	rax, -1056[rbp]
	jmp	.L167
.L166:
	lea	rax, .LC38[rip]
.L167:
	mov	QWORD PTR -1072[rbp], rax
	mov	rax, QWORD PTR -1072[rbp]
	mov	rdi, rax
	call	strlen@PLT
	add	eax, 1
	mov	DWORD PTR -1084[rbp], eax
	mov	eax, DWORD PTR -1084[rbp]
	movsx	rdx, eax
	mov	rax, QWORD PTR hostname_buflen[rip]
	cmp	rdx, rax
	jbe	.L168
	mov	eax, DWORD PTR -1084[rbp]
	add	eax, eax
	cdqe
	mov	QWORD PTR hostname_buflen[rip], rax
	mov	rdx, QWORD PTR hostname_buflen[rip]
	mov	rax, QWORD PTR hostname_buf[rip]
	mov	rsi, rdx
	mov	rdi, rax
	call	realloc@PLT
	mov	QWORD PTR hostname_buf[rip], rax
.L168:
	mov	eax, DWORD PTR -1084[rbp]
	movsx	rdx, eax
	mov	rax, QWORD PTR hostname_buf[rip]
	mov	rcx, QWORD PTR -1072[rbp]
	mov	rsi, rcx
	mov	rdi, rax
	call	memcpy@PLT
	mov	rax, QWORD PTR hostname_buf[rip]
	jmp	.L169
.L164:
	mov	eax, 0
.L169:
	mov	rcx, QWORD PTR -8[rbp]
	sub	rcx, QWORD PTR fs:40
	je	.L170
	call	__stack_chk_fail@PLT
.L170:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE20:
	.size	hostname_from_question, .-hostname_from_question
	.section	.rodata
.LC39:
	.string	"%s, "
	.text
	.type	should_filter_query, @function
should_filter_query:
.LFB21:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 1136
	mov	DWORD PTR -1124[rbp], edi
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	DWORD PTR -1104[rbp], 0
	mov	DWORD PTR -1100[rbp], 0
	mov	rax, QWORD PTR chnroute_file[rip]
	test	rax, rax
	je	.L172
	mov	eax, DWORD PTR dns_servers_len[rip]
	cmp	eax, 1
	jle	.L172
	mov	eax, DWORD PTR -1124[rbp]
	lea	rsi, chnroute_list[rip]
	mov	edi, eax
	call	test_ip_in_list
	mov	DWORD PTR -1104[rbp], eax
	cmp	DWORD PTR -1104[rbp], 0
	sete	al
	movzx	eax, al
	mov	DWORD PTR -1100[rbp], eax
.L172:
	movzx	eax, WORD PTR 38[rbp]
	movzx	eax, ax
	mov	DWORD PTR -1096[rbp], eax
	cmp	DWORD PTR -1096[rbp], 0
	jne	.L173
	mov	eax, -1
	jmp	.L182
.L173:
	mov	DWORD PTR -1108[rbp], 0
	jmp	.L175
.L181:
	lea	rdx, -1056[rbp]
	mov	eax, DWORD PTR -1108[rbp]
	mov	rcx, rdx
	mov	edx, eax
	mov	esi, 1
	lea	rdi, 16[rbp]
	call	ns_parserr@PLT
	test	eax, eax
	je	.L176
	lea	rax, -1088[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -1088[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -1064[rbp], rax
	mov	rax, QWORD PTR -1064[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -1064[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -1064[rbp]
	mov	r8d, 657
	lea	rcx, .LC6[rip]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	lea	rdi, .LC37[rip]
	call	perror@PLT
	mov	eax, 0
	jmp	.L182
.L176:
	movzx	eax, WORD PTR -30[rbp]
	movzx	eax, ax
	mov	DWORD PTR -1092[rbp], eax
	mov	rax, QWORD PTR -16[rbp]
	mov	QWORD PTR -1080[rbp], rax
	cmp	DWORD PTR -1092[rbp], 1
	jne	.L177
	mov	eax, DWORD PTR verbose[rip]
	test	eax, eax
	je	.L178
	mov	rax, QWORD PTR -1080[rbp]
	mov	edi, DWORD PTR [rax]
	call	inet_ntoa@PLT
	mov	rsi, rax
	lea	rdi, .LC39[rip]
	mov	eax, 0
	call	printf@PLT
.L178:
	mov	eax, DWORD PTR ip_list[rip]
	movsx	rdx, eax
	mov	rsi, QWORD PTR ip_list[rip+8]
	mov	rax, QWORD PTR -1080[rbp]
	lea	r8, cmp_in_addr[rip]
	mov	ecx, 4
	mov	rdi, rax
	call	bsearch@PLT
	mov	QWORD PTR -1072[rbp], rax
	cmp	QWORD PTR -1072[rbp], 0
	je	.L179
	mov	eax, 1
	jmp	.L182
.L179:
	mov	rax, QWORD PTR -1080[rbp]
	lea	rsi, chnroute_list[rip]
	mov	edi, DWORD PTR [rax]
	call	test_ip_in_list
	test	eax, eax
	je	.L180
	cmp	DWORD PTR -1100[rbp], 0
	je	.L177
	mov	eax, DWORD PTR bidirectional[rip]
	test	eax, eax
	je	.L177
	mov	eax, 1
	jmp	.L182
.L180:
	cmp	DWORD PTR -1104[rbp], 0
	je	.L177
	mov	eax, 1
	jmp	.L182
.L177:
	add	DWORD PTR -1108[rbp], 1
.L175:
	mov	eax, DWORD PTR -1108[rbp]
	cmp	eax, DWORD PTR -1096[rbp]
	jl	.L181
	mov	eax, 0
.L182:
	mov	rcx, QWORD PTR -8[rbp]
	sub	rcx, QWORD PTR fs:40
	je	.L183
	call	__stack_chk_fail@PLT
.L183:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE21:
	.size	should_filter_query, .-should_filter_query
	.type	schedule_delay, @function
schedule_delay:
.LFB22:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 64
	mov	QWORD PTR -40[rbp], rdi
	mov	QWORD PTR -48[rbp], rsi
	mov	QWORD PTR -56[rbp], rdx
	mov	DWORD PTR -60[rbp], ecx
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	lea	rax, -24[rbp]
	mov	rdi, rax
	call	time@PLT
	mov	eax, DWORD PTR delay_queue_last[rip]
	movsx	rdx, eax
	mov	rax, rdx
	sal	rax, 2
	add	rax, rdx
	sal	rax, 3
	lea	rdx, delay_queue[rip]
	add	rax, rdx
	mov	QWORD PTR -16[rbp], rax
	mov	rdx, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR -16[rbp]
	mov	QWORD PTR [rax], rdx
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	malloc@PLT
	mov	rdx, rax
	mov	rax, QWORD PTR -16[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdx, QWORD PTR -48[rbp]
	mov	rcx, QWORD PTR -40[rbp]
	mov	rsi, rcx
	mov	rdi, rax
	call	memcpy@PLT
	mov	rax, QWORD PTR -16[rbp]
	mov	rdx, QWORD PTR -48[rbp]
	mov	QWORD PTR 16[rax], rdx
	mov	eax, DWORD PTR -60[rbp]
	mov	rdi, rax
	call	malloc@PLT
	mov	rdx, rax
	mov	rax, QWORD PTR -16[rbp]
	mov	QWORD PTR 24[rax], rdx
	mov	edx, DWORD PTR -60[rbp]
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rcx, QWORD PTR -56[rbp]
	mov	rsi, rcx
	mov	rdi, rax
	call	memcpy@PLT
	mov	rax, QWORD PTR -16[rbp]
	mov	edx, DWORD PTR -60[rbp]
	mov	DWORD PTR 32[rax], edx
	mov	eax, DWORD PTR delay_queue_last[rip]
	add	eax, 1
	cdq
	shr	edx, 27
	add	eax, edx
	and	eax, 31
	sub	eax, edx
	mov	DWORD PTR delay_queue_last[rip], eax
	mov	edx, DWORD PTR delay_queue_last[rip]
	mov	eax, DWORD PTR delay_queue_first[rip]
	cmp	edx, eax
	jne	.L187
	mov	eax, DWORD PTR delay_queue_first[rip]
	mov	edi, eax
	call	free_delay
	mov	eax, DWORD PTR delay_queue_first[rip]
	add	eax, 1
	cdq
	shr	edx, 27
	add	eax, edx
	and	eax, 31
	sub	eax, edx
	mov	DWORD PTR delay_queue_first[rip], eax
.L187:
	nop
	mov	rax, QWORD PTR -8[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L186
	call	__stack_chk_fail@PLT
.L186:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE22:
	.size	schedule_delay, .-schedule_delay
	.type	check_and_send_delay, @function
check_and_send_delay:
.LFB23:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	lea	rax, -40[rbp]
	mov	rdi, rax
	call	time@PLT
	mov	rax, QWORD PTR -40[rbp]
	sub	rax, 3
	mov	QWORD PTR -40[rbp], rax
	mov	eax, DWORD PTR delay_queue_first[rip]
	mov	DWORD PTR -44[rbp], eax
	jmp	.L189
.L194:
	mov	eax, DWORD PTR -44[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	sal	rax, 2
	add	rax, rdx
	sal	rax, 3
	lea	rdx, delay_queue[rip]
	add	rax, rdx
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR -40[rbp]
	cmp	rdx, rax
	jge	.L196
	mov	rax, QWORD PTR -24[rbp]
	mov	edi, DWORD PTR 32[rax]
	mov	rax, QWORD PTR -24[rbp]
	mov	rcx, QWORD PTR 24[rax]
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR 16[rax]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, QWORD PTR 8[rax]
	mov	eax, DWORD PTR local_sock[rip]
	mov	r9d, edi
	mov	r8, rcx
	mov	ecx, 0
	mov	edi, eax
	call	sendto@PLT
	cmp	rax, -1
	jne	.L191
	lea	rax, -32[rbp]
	mov	rdi, rax
	call	time@PLT
	lea	rax, -32[rbp]
	mov	rdi, rax
	call	ctime@PLT
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -16[rbp]
	mov	rdi, rax
	call	strlen@PLT
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -16[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	mov	rax, QWORD PTR stderr[rip]
	mov	rdx, QWORD PTR -16[rbp]
	mov	r8d, 724
	lea	rcx, .LC6[rip]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	lea	rdi, .LC30[rip]
	call	perror@PLT
.L191:
	mov	eax, DWORD PTR -44[rbp]
	mov	edi, eax
	call	free_delay
	mov	eax, DWORD PTR delay_queue_first[rip]
	add	eax, 1
	cdq
	shr	edx, 27
	add	eax, edx
	and	eax, 31
	sub	eax, edx
	mov	DWORD PTR delay_queue_first[rip], eax
	mov	eax, DWORD PTR -44[rbp]
	add	eax, 1
	cdq
	shr	edx, 27
	add	eax, edx
	and	eax, 31
	sub	eax, edx
	mov	DWORD PTR -44[rbp], eax
.L189:
	mov	eax, DWORD PTR delay_queue_last[rip]
	cmp	DWORD PTR -44[rbp], eax
	jne	.L194
	jmp	.L193
.L196:
	nop
.L193:
	nop
	mov	rax, QWORD PTR -8[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L195
	call	__stack_chk_fail@PLT
.L195:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE23:
	.size	check_and_send_delay, .-check_and_send_delay
	.type	free_delay, @function
free_delay:
.LFB24:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 16
	mov	DWORD PTR -4[rbp], edi
	mov	eax, DWORD PTR -4[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	sal	rax, 2
	add	rax, rdx
	sal	rax, 3
	mov	rdx, rax
	lea	rax, delay_queue[rip+8]
	mov	rax, QWORD PTR [rdx+rax]
	mov	rdi, rax
	call	free@PLT
	mov	eax, DWORD PTR -4[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	sal	rax, 2
	add	rax, rdx
	sal	rax, 3
	mov	rdx, rax
	lea	rax, delay_queue[rip+24]
	mov	rax, QWORD PTR [rdx+rax]
	mov	rdi, rax
	call	free@PLT
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE24:
	.size	free_delay, .-free_delay
	.ident	"GCC: (Ubuntu 10.5.0-1ubuntu1~20.04) 10.5.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	 1f - 0f
	.long	 4f - 1f
	.long	 5
0:
	.string	 "GNU"
1:
	.align 8
	.long	 0xc0000002
	.long	 3f - 2f
2:
	.long	 0x3
3:
	.align 8
4:

	.arch armv5t
	.eabi_attribute 20, 1
	.eabi_attribute 21, 1
	.eabi_attribute 23, 3
	.eabi_attribute 24, 1
	.eabi_attribute 25, 1
	.eabi_attribute 26, 2
	.eabi_attribute 30, 6
	.eabi_attribute 34, 0
	.eabi_attribute 18, 4
	.file	"117328944.c"
	.text
	.local	global_buf
	.comm	global_buf,2048,4
	.local	verbose
	.comm	verbose,4,4
	.local	bidirectional
	.comm	bidirectional,4,4
	.section	.rodata
	.align	2
.LC0:
	.ascii	"ChinaDNS\000"
	.data
	.align	2
	.type	version, %object
	.size	version, 4
version:
	.word	.LC0
	.section	.rodata
	.align	2
.LC1:
	.ascii	"114.114.114.114,8.8.8.8,208.67.222.222:443,208.67.2"
	.ascii	"22.222\000"
	.data
	.align	2
	.type	default_dns_servers, %object
	.size	default_dns_servers, 4
default_dns_servers:
	.word	.LC1
	.local	dns_servers
	.comm	dns_servers,4,4
	.local	dns_servers_len
	.comm	dns_servers_len,4,4
	.local	dns_server_addrs
	.comm	dns_server_addrs,4,4
	.section	.rodata
	.align	2
.LC2:
	.ascii	"0.0.0.0\000"
	.data
	.align	2
	.type	default_listen_addr, %object
	.size	default_listen_addr, 4
default_listen_addr:
	.word	.LC2
	.section	.rodata
	.align	2
.LC3:
	.ascii	"53\000"
	.data
	.align	2
	.type	default_listen_port, %object
	.size	default_listen_port, 4
default_listen_port:
	.word	.LC3
	.local	listen_addr
	.comm	listen_addr,4,4
	.local	listen_port
	.comm	listen_port,4,4
	.section	.rodata
	.align	2
.LC4:
	.ascii	"iplist.txt\000"
	.data
	.align	2
	.type	default_ip_list_file, %object
	.size	default_ip_list_file, 4
default_ip_list_file:
	.word	.LC4
	.local	ip_list_file
	.comm	ip_list_file,4,4
	.local	ip_list
	.comm	ip_list,8,4
	.local	chnroute_file
	.comm	chnroute_file,4,4
	.local	chnroute_list
	.comm	chnroute_list,8,4
	.local	id_addr_queue
	.comm	id_addr_queue,1536,4
	.local	id_addr_queue_pos
	.comm	id_addr_queue_pos,4,4
	.local	delay_queue
	.comm	delay_queue,640,4
	.local	delay_queue_first
	.comm	delay_queue_first,4,4
	.local	delay_queue_last
	.comm	delay_queue_last,4,4
	.local	local_sock
	.comm	local_sock,4,4
	.local	remote_sock
	.comm	remote_sock,4,4
	.section	.rodata
	.align	2
.LC5:
	.ascii	"usage: chinadns [-h] [-l IPLIST_FILE] [-b BIND_ADDR"
	.ascii	"] [-p BIND_PORT]\012       [-c CHNROUTE_FILE] [-s D"
	.ascii	"NS] [-v]\012Forward DNS requests.\012\012  -h, --he"
	.ascii	"lp            show this help message and exit\012  "
	.ascii	"-l IPLIST_FILE        path to ip blacklist file\012"
	.ascii	"  -c CHNROUTE_FILE      path to china route file\012"
	.ascii	"                        if not specified, CHNRoute "
	.ascii	"will be turned off\012  -d                    enabl"
	.ascii	"e bi-directional CHNRoute filter\012  -b BIND_ADDR "
	.ascii	"         address that listens, default: 127.0.0.1\012"
	.ascii	"  -p BIND_PORT          port that listens, default:"
	.ascii	" 53\012  -s DNS                DNS servers to use, "
	.ascii	"default:\012                        114.114.114.114"
	.ascii	",208.67.222.222:443,8.8.8.8\012  -v                "
	.ascii	"    verbose logging\012\012Online help: <https://gi"
	.ascii	"thub.com/clowwindy/ChinaDNS-C>\012\000"
	.data
	.align	2
	.type	help_message, %object
	.size	help_message, 4
help_message:
	.word	.LC5
	.section	.rodata
	.align	2
.LC6:
	.ascii	"the_stack_data/117328944.c\000"
	.align	2
.LC7:
	.ascii	"%s %s:%d \000"
	.align	2
.LC8:
	.ascii	"select\000"
	.align	2
.LC9:
	.ascii	"%s \000"
	.align	2
.LC10:
	.ascii	"local_sock error\012\000"
	.align	2
.LC11:
	.ascii	"remote_sock error\012\000"
	.align	2
.LC12:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	main
	.syntax unified
	.arm
	.fpu softvfp
	.type	main, %function
main:
	@ args = 0, pretend = 0, frame = 312
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #320
	str	r0, [fp, #-312]
	str	r1, [fp, #-316]
	ldr	r3, .L25
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r2, #1536
	mov	r1, #0
	ldr	r0, .L25+4
	bl	memset
	mov	r2, #640
	mov	r1, #0
	ldr	r0, .L25+8
	bl	memset
	ldr	r1, [fp, #-316]
	ldr	r0, [fp, #-312]
	bl	parse_args
	mov	r3, r0
	cmp	r3, #0
	beq	.L2
	mov	r3, #1
	b	.L23
.L2:
	bl	parse_ip_list
	mov	r3, r0
	cmp	r3, #0
	beq	.L4
	mov	r3, #1
	b	.L23
.L4:
	bl	parse_chnroute
	mov	r3, r0
	cmp	r3, #0
	beq	.L5
	mov	r3, #1
	b	.L23
.L5:
	bl	resolve_dns_servers
	mov	r3, r0
	cmp	r3, #0
	beq	.L6
	mov	r3, #1
	b	.L23
.L6:
	bl	dns_init_sockets
	mov	r3, r0
	cmp	r3, #0
	beq	.L7
	mov	r3, #1
	b	.L23
.L7:
	ldr	r3, .L25+12
	ldr	r3, [r3]
	mov	r0, r3
	bl	puts
	ldr	r3, .L25+16
	ldr	r2, [r3]
	ldr	r3, .L25+20
	ldr	r3, [r3]
	cmp	r2, r3
	movge	r3, r2
	movlt	r3, r3
	add	r3, r3, #1
	str	r3, [fp, #-296]
.L22:
	sub	r3, fp, #264
	str	r3, [fp, #-292]
	mov	r3, #0
	str	r3, [fp, #-300]
	b	.L8
.L9:
	ldr	r3, [fp, #-292]
	ldr	r2, [fp, #-300]
	mov	r1, #0
	str	r1, [r3, r2, lsl #2]
	ldr	r3, [fp, #-300]
	add	r3, r3, #1
	str	r3, [fp, #-300]
.L8:
	ldr	r3, [fp, #-300]
	cmp	r3, #31
	bls	.L9
	sub	r3, fp, #136
	str	r3, [fp, #-288]
	mov	r3, #0
	str	r3, [fp, #-304]
	b	.L10
.L11:
	ldr	r3, [fp, #-288]
	ldr	r2, [fp, #-304]
	mov	r1, #0
	str	r1, [r3, r2, lsl #2]
	ldr	r3, [fp, #-304]
	add	r3, r3, #1
	str	r3, [fp, #-304]
.L10:
	ldr	r3, [fp, #-304]
	cmp	r3, #31
	bls	.L11
	ldr	r3, .L25+20
	ldr	r3, [r3]
	add	r2, r3, #31
	cmp	r3, #0
	movlt	r3, r2
	movge	r3, r3
	asr	r3, r3, #5
	mov	r2, r3
	lsl	r3, r2, #2
	sub	r1, fp, #4
	add	r3, r1, r3
	ldr	r1, [r3, #-260]
	ldr	r3, .L25+20
	ldr	r3, [r3]
	rsbs	r0, r3, #0
	and	r3, r3, #31
	and	r0, r0, #31
	rsbpl	r3, r0, #0
	mov	r0, #1
	lsl	r3, r0, r3
	orr	r1, r1, r3
	lsl	r3, r2, #2
	sub	r2, fp, #4
	add	r3, r2, r3
	str	r1, [r3, #-260]
	ldr	r3, .L25+20
	ldr	r3, [r3]
	add	r2, r3, #31
	cmp	r3, #0
	movlt	r3, r2
	movge	r3, r3
	asr	r3, r3, #5
	mov	r2, r3
	lsl	r3, r2, #2
	sub	r1, fp, #4
	add	r3, r1, r3
	ldr	r1, [r3, #-132]
	ldr	r3, .L25+20
	ldr	r3, [r3]
	rsbs	r0, r3, #0
	and	r3, r3, #31
	and	r0, r0, #31
	rsbpl	r3, r0, #0
	mov	r0, #1
	lsl	r3, r0, r3
	orr	r1, r1, r3
	lsl	r3, r2, #2
	sub	r2, fp, #4
	add	r3, r2, r3
	str	r1, [r3, #-132]
	ldr	r3, .L25+16
	ldr	r3, [r3]
	add	r2, r3, #31
	cmp	r3, #0
	movlt	r3, r2
	movge	r3, r3
	asr	r3, r3, #5
	mov	r2, r3
	lsl	r3, r2, #2
	sub	r1, fp, #4
	add	r3, r1, r3
	ldr	r1, [r3, #-260]
	ldr	r3, .L25+16
	ldr	r3, [r3]
	rsbs	r0, r3, #0
	and	r3, r3, #31
	and	r0, r0, #31
	rsbpl	r3, r0, #0
	mov	r0, #1
	lsl	r3, r0, r3
	orr	r1, r1, r3
	lsl	r3, r2, #2
	sub	r2, fp, #4
	add	r3, r2, r3
	str	r1, [r3, #-260]
	ldr	r3, .L25+16
	ldr	r3, [r3]
	add	r2, r3, #31
	cmp	r3, #0
	movlt	r3, r2
	movge	r3, r3
	asr	r3, r3, #5
	mov	r2, r3
	lsl	r3, r2, #2
	sub	r1, fp, #4
	add	r3, r1, r3
	ldr	r1, [r3, #-132]
	ldr	r3, .L25+16
	ldr	r3, [r3]
	rsbs	r0, r3, #0
	and	r3, r3, #31
	and	r0, r0, #31
	rsbpl	r3, r0, #0
	mov	r0, #1
	lsl	r3, r0, r3
	orr	r1, r1, r3
	lsl	r3, r2, #2
	sub	r2, fp, #4
	add	r3, r2, r3
	str	r1, [r3, #-132]
	mov	r3, #1
	str	r3, [fp, #-272]
	mov	r3, #0
	str	r3, [fp, #-268]
	sub	r2, fp, #136
	sub	r1, fp, #264
	sub	r3, fp, #272
	str	r3, [sp]
	mov	r3, r2
	mov	r2, #0
	ldr	r0, [fp, #-296]
	bl	select
	mov	r3, r0
	cmn	r3, #1
	bne	.L12
	sub	r3, fp, #308
	mov	r0, r3
	bl	time
	sub	r3, fp, #308
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-276]
	ldr	r0, [fp, #-276]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-276]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L25+24
	ldr	r0, [r3]
	mov	r3, #195
	str	r3, [sp]
	ldr	r3, .L25+28
	ldr	r2, [fp, #-276]
	ldr	r1, .L25+32
	bl	fprintf
	ldr	r0, .L25+36
	bl	perror
	mov	r3, #1
	b	.L23
.L12:
	bl	check_and_send_delay
	ldr	r3, .L25+20
	ldr	r3, [r3]
	add	r2, r3, #31
	cmp	r3, #0
	movlt	r3, r2
	movge	r3, r3
	asr	r3, r3, #5
	lsl	r3, r3, #2
	sub	r2, fp, #4
	add	r3, r2, r3
	ldr	r2, [r3, #-132]
	ldr	r3, .L25+20
	ldr	r3, [r3]
	rsbs	r1, r3, #0
	and	r3, r3, #31
	and	r1, r1, #31
	rsbpl	r3, r1, #0
	mov	r1, #1
	lsl	r3, r1, r3
	and	r3, r3, r2
	cmp	r3, #0
	beq	.L14
	sub	r3, fp, #308
	mov	r0, r3
	bl	time
	sub	r3, fp, #308
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-280]
	ldr	r0, [fp, #-280]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-280]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L25+40
	ldr	r2, [r3]
	ldr	r3, .L25+24
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L15
	ldr	r3, .L25+44
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L16
.L15:
	ldr	r3, .L25+24
	ldr	r3, [r3]
	ldr	r2, [fp, #-280]
	ldr	r1, .L25+48
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L25+24
	ldr	r3, [r3]
	mov	r2, #17
	mov	r1, #1
	ldr	r0, .L25+52
	bl	fwrite
	ldr	r3, .L25+24
	ldr	r3, [r3]
	mov	r0, r3
	bl	fflush
.L16:
	mov	r3, #1
	b	.L23
.L14:
	ldr	r3, .L25+16
	ldr	r3, [r3]
	add	r2, r3, #31
	cmp	r3, #0
	movlt	r3, r2
	movge	r3, r3
	asr	r3, r3, #5
	lsl	r3, r3, #2
	sub	r2, fp, #4
	add	r3, r2, r3
	ldr	r2, [r3, #-132]
	ldr	r3, .L25+16
	ldr	r3, [r3]
	rsbs	r1, r3, #0
	and	r3, r3, #31
	and	r1, r1, #31
	rsbpl	r3, r1, #0
	mov	r1, #1
	lsl	r3, r1, r3
	and	r3, r3, r2
	cmp	r3, #0
	beq	.L17
	sub	r3, fp, #308
	mov	r0, r3
	bl	time
	sub	r3, fp, #308
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-284]
	ldr	r0, [fp, #-284]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-284]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L25+40
	ldr	r2, [r3]
	ldr	r3, .L25+24
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L18
	ldr	r3, .L25+44
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L19
.L18:
	ldr	r3, .L25+24
	ldr	r3, [r3]
	ldr	r2, [fp, #-284]
	ldr	r1, .L25+48
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L25+24
	ldr	r3, [r3]
	mov	r2, #18
	mov	r1, #1
	ldr	r0, .L25+56
	bl	fwrite
	ldr	r3, .L25+24
	ldr	r3, [r3]
	mov	r0, r3
	bl	fflush
.L19:
	mov	r3, #1
	b	.L23
.L17:
	ldr	r3, .L25+20
	ldr	r3, [r3]
	add	r2, r3, #31
	cmp	r3, #0
	movlt	r3, r2
	movge	r3, r3
	asr	r3, r3, #5
	lsl	r3, r3, #2
	sub	r2, fp, #4
	add	r3, r2, r3
	ldr	r2, [r3, #-260]
	ldr	r3, .L25+20
	ldr	r3, [r3]
	rsbs	r1, r3, #0
	and	r3, r3, #31
	and	r1, r1, #31
	rsbpl	r3, r1, #0
	mov	r1, #1
	lsl	r3, r1, r3
	and	r3, r3, r2
	cmp	r3, #0
	beq	.L20
	bl	dns_handle_local
.L20:
	ldr	r3, .L25+16
	ldr	r3, [r3]
	add	r2, r3, #31
	cmp	r3, #0
	movlt	r3, r2
	movge	r3, r3
	asr	r3, r3, #5
	lsl	r3, r3, #2
	sub	r2, fp, #4
	add	r3, r2, r3
	ldr	r2, [r3, #-260]
	ldr	r3, .L25+16
	ldr	r3, [r3]
	rsbs	r1, r3, #0
	and	r3, r3, #31
	and	r1, r1, #31
	rsbpl	r3, r1, #0
	mov	r1, #1
	lsl	r3, r1, r3
	and	r3, r3, r2
	cmp	r3, #0
	beq	.L22
	bl	dns_handle_remote
	b	.L22
.L23:
	ldr	r2, .L25
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L24
	bl	__stack_chk_fail
.L24:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L26:
	.align	2
.L25:
	.word	.LC12
	.word	id_addr_queue
	.word	delay_queue
	.word	version
	.word	remote_sock
	.word	local_sock
	.word	stderr
	.word	.LC6
	.word	.LC7
	.word	.LC8
	.word	stdout
	.word	verbose
	.word	.LC9
	.word	.LC10
	.word	.LC11
	.size	main, .-main
	.section	.rodata
	.align	2
.LC13:
	.ascii	"fcntl\000"
	.align	2
.LC14:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	setnonblock, %function
setnonblock:
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #40
	str	r0, [fp, #-32]
	ldr	r3, .L32
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r2, #0
	mov	r1, #3
	ldr	r0, [fp, #-32]
	bl	fcntl
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	cmn	r3, #1
	bne	.L28
	sub	r3, fp, #24
	mov	r0, r3
	bl	time
	sub	r3, fp, #24
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-12]
	ldr	r0, [fp, #-12]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-12]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L32+4
	ldr	r0, [r3]
	mov	r3, #221
	str	r3, [sp]
	ldr	r3, .L32+8
	ldr	r2, [fp, #-12]
	ldr	r1, .L32+12
	bl	fprintf
	ldr	r0, .L32+16
	bl	perror
	mvn	r3, #0
	b	.L29
.L28:
	ldr	r3, [fp, #-16]
	orr	r3, r3, #2048
	mov	r2, r3
	mov	r1, #4
	ldr	r0, [fp, #-32]
	bl	fcntl
	mov	r3, r0
	cmn	r3, #1
	bne	.L30
	sub	r3, fp, #24
	mov	r0, r3
	bl	time
	sub	r3, fp, #24
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-20]
	ldr	r0, [fp, #-20]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-20]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L32+4
	ldr	r0, [r3]
	mov	r3, #225
	str	r3, [sp]
	ldr	r3, .L32+8
	ldr	r2, [fp, #-20]
	ldr	r1, .L32+12
	bl	fprintf
	ldr	r0, .L32+16
	bl	perror
	mvn	r3, #0
	b	.L29
.L30:
	mov	r3, #0
.L29:
	ldr	r2, .L32
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L31
	bl	__stack_chk_fail
.L31:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L33:
	.align	2
.L32:
	.word	.LC14
	.word	stderr
	.word	.LC6
	.word	.LC7
	.word	.LC13
	.size	setnonblock, .-setnonblock
	.section	.rodata
	.align	2
.LC15:
	.ascii	"%s\000"
	.align	2
.LC16:
	.ascii	"hb:p:s:l:c:dv\000"
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_args, %function
parse_args:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	ldr	r3, .L48
	ldr	r3, [r3]
	mov	r0, r3
	bl	strdup
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L48+4
	str	r2, [r3]
	ldr	r3, .L48+8
	ldr	r3, [r3]
	mov	r0, r3
	bl	strdup
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L48+12
	str	r2, [r3]
	ldr	r3, .L48+16
	ldr	r3, [r3]
	mov	r0, r3
	bl	strdup
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L48+20
	str	r2, [r3]
	ldr	r3, .L48+24
	ldr	r3, [r3]
	mov	r0, r3
	bl	strdup
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L48+28
	str	r2, [r3]
	b	.L35
.L46:
	ldr	r3, [fp, #-8]
	sub	r3, r3, #98
	cmp	r3, #20
	ldrls	pc, [pc, r3, asl #2]
	b	.L36
.L38:
	.word	.L45
	.word	.L44
	.word	.L43
	.word	.L36
	.word	.L36
	.word	.L36
	.word	.L42
	.word	.L36
	.word	.L36
	.word	.L36
	.word	.L41
	.word	.L36
	.word	.L36
	.word	.L36
	.word	.L40
	.word	.L36
	.word	.L36
	.word	.L39
	.word	.L36
	.word	.L36
	.word	.L37
.L42:
	ldr	r3, .L48+32
	ldr	r3, [r3]
	mov	r1, r3
	ldr	r0, .L48+36
	bl	printf
	mov	r0, #0
	bl	exit
.L45:
	ldr	r3, .L48+40
	ldr	r3, [r3]
	mov	r0, r3
	bl	strdup
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L48+20
	str	r2, [r3]
	b	.L35
.L40:
	ldr	r3, .L48+40
	ldr	r3, [r3]
	mov	r0, r3
	bl	strdup
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L48+28
	str	r2, [r3]
	b	.L35
.L39:
	ldr	r3, .L48+40
	ldr	r3, [r3]
	mov	r0, r3
	bl	strdup
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L48+4
	str	r2, [r3]
	b	.L35
.L44:
	ldr	r3, .L48+40
	ldr	r3, [r3]
	mov	r0, r3
	bl	strdup
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L48+44
	str	r2, [r3]
	b	.L35
.L41:
	ldr	r3, .L48+40
	ldr	r3, [r3]
	mov	r0, r3
	bl	strdup
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L48+12
	str	r2, [r3]
	b	.L35
.L43:
	ldr	r3, .L48+48
	mov	r2, #1
	str	r2, [r3]
	b	.L35
.L37:
	ldr	r3, .L48+52
	mov	r2, #1
	str	r2, [r3]
	b	.L35
.L36:
	ldr	r3, .L48+32
	ldr	r3, [r3]
	mov	r1, r3
	ldr	r0, .L48+36
	bl	printf
	mov	r0, #1
	bl	exit
.L35:
	ldr	r2, .L48+56
	ldr	r1, [fp, #-20]
	ldr	r0, [fp, #-16]
	bl	getopt
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmn	r3, #1
	bne	.L46
	ldr	r3, .L48+60
	ldr	r3, [r3]
	ldr	r2, [fp, #-16]
	sub	r3, r2, r3
	str	r3, [fp, #-16]
	ldr	r3, .L48+60
	ldr	r3, [r3]
	lsl	r3, r3, #2
	ldr	r2, [fp, #-20]
	add	r3, r2, r3
	str	r3, [fp, #-20]
	mov	r3, #0
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L49:
	.align	2
.L48:
	.word	default_dns_servers
	.word	dns_servers
	.word	default_ip_list_file
	.word	ip_list_file
	.word	default_listen_addr
	.word	listen_addr
	.word	default_listen_port
	.word	listen_port
	.word	help_message
	.word	.LC15
	.word	optarg
	.word	chnroute_file
	.word	bidirectional
	.word	verbose
	.word	.LC16
	.word	optind
	.size	parse_args, .-parse_args
	.section	.rodata
	.align	2
.LC17:
	.ascii	",\000"
	.align	2
.LC18:
	.ascii	"%s:%s\012\000"
	.align	2
.LC19:
	.ascii	"You should have at least one Chinese DNS and one fo"
	.ascii	"reign DNS when chnroutes is enabled\012\000"
	.align	2
.LC20:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	resolve_dns_servers, %function
resolve_dns_servers:
	@ args = 0, pretend = 0, frame = 80
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, fp, lr}
	add	fp, sp, #8
	sub	sp, sp, #84
	ldr	r3, .L68
	ldr	r3, [r3]
	str	r3, [fp, #-16]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-84]
	ldr	r3, .L68+4
	ldr	r3, [r3]
	mov	r1, #44
	mov	r0, r3
	bl	strchr
	str	r0, [fp, #-76]
	mov	r3, #0
	str	r3, [fp, #-72]
	mov	r3, #0
	str	r3, [fp, #-68]
	ldr	r3, .L68+8
	mov	r2, #1
	str	r2, [r3]
	b	.L51
.L52:
	ldr	r3, .L68+8
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L68+8
	str	r3, [r2]
	ldr	r3, [fp, #-76]
	add	r3, r3, #1
	mov	r1, #44
	mov	r0, r3
	bl	strchr
	str	r0, [fp, #-76]
.L51:
	ldr	r3, [fp, #-76]
	cmp	r3, #0
	bne	.L52
	ldr	r3, .L68+8
	ldr	r3, [r3]
	mov	r1, #12
	mov	r0, r3
	bl	calloc
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L68+12
	str	r2, [r3]
	sub	r3, fp, #48
	mov	r2, #32
	mov	r1, #0
	mov	r0, r3
	bl	memset
	mov	r3, #2
	str	r3, [fp, #-44]
	mov	r3, #2
	str	r3, [fp, #-40]
	ldr	r3, .L68+4
	ldr	r3, [r3]
	ldr	r1, .L68+16
	mov	r0, r3
	bl	strtok
	str	r0, [fp, #-80]
	b	.L53
.L61:
	mov	r2, #2048
	mov	r1, #0
	ldr	r0, .L68+20
	bl	memset
	ldr	r2, .L68+24
	ldr	r1, [fp, #-80]
	ldr	r0, .L68+20
	bl	strncpy
	mov	r1, #58
	ldr	r0, .L68+20
	bl	strrchr
	str	r0, [fp, #-64]
	ldr	r3, [fp, #-64]
	cmp	r3, #0
	beq	.L54
	ldr	r3, [fp, #-64]
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, [fp, #-64]
	add	r3, r3, #1
	str	r3, [fp, #-64]
	b	.L55
.L54:
	ldr	r3, .L68+28
	str	r3, [fp, #-64]
.L55:
	sub	r3, fp, #92
	sub	r2, fp, #48
	ldr	r1, [fp, #-64]
	ldr	r0, .L68+20
	bl	getaddrinfo
	str	r0, [fp, #-56]
	ldr	r3, [fp, #-56]
	cmp	r3, #0
	beq	.L56
	sub	r3, fp, #88
	mov	r0, r3
	bl	time
	sub	r3, fp, #88
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-52]
	ldr	r0, [fp, #-52]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-52]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L68+32
	ldr	r2, [r3]
	ldr	r3, .L68+36
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L57
	ldr	r3, .L68+40
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L58
.L57:
	ldr	r3, .L68+36
	ldr	r3, [r3]
	ldr	r2, [fp, #-52]
	ldr	r1, .L68+44
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L68+36
	ldr	r4, [r3]
	ldr	r0, [fp, #-56]
	bl	gai_strerror
	mov	r2, r0
	ldr	r3, [fp, #-80]
	ldr	r1, .L68+48
	mov	r0, r4
	bl	fprintf
	ldr	r3, .L68+36
	ldr	r3, [r3]
	mov	r0, r3
	bl	fflush
.L58:
	mvn	r3, #0
	b	.L66
.L56:
	ldr	r1, [fp, #-92]
	ldr	r3, .L68+12
	ldr	r0, [r3]
	ldr	r2, [fp, #-84]
	mov	r3, r2
	lsl	r3, r3, #1
	add	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r0, r3
	ldr	r2, [r1, #20]
	str	r2, [r3, #4]
	ldr	r1, [fp, #-92]
	ldr	r3, .L68+12
	ldr	r0, [r3]
	ldr	r2, [fp, #-84]
	mov	r3, r2
	lsl	r3, r3, #1
	add	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r0, r3
	ldr	r2, [r1, #16]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-84]
	add	r3, r3, #1
	str	r3, [fp, #-84]
	ldr	r1, .L68+16
	mov	r0, #0
	bl	strtok
	str	r0, [fp, #-80]
	ldr	r3, [fp, #-92]
	ldr	r3, [r3, #20]
	ldr	r1, .L68+52
	ldr	r0, [r3, #4]
	bl	test_ip_in_list
	mov	r3, r0
	cmp	r3, #0
	beq	.L60
	mov	r3, #1
	str	r3, [fp, #-72]
	b	.L53
.L60:
	mov	r3, #1
	str	r3, [fp, #-68]
.L53:
	ldr	r3, [fp, #-80]
	cmp	r3, #0
	bne	.L61
	ldr	r3, .L68+56
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L62
	ldr	r3, [fp, #-72]
	cmp	r3, #0
	beq	.L63
	ldr	r3, [fp, #-68]
	cmp	r3, #0
	bne	.L62
.L63:
	sub	r3, fp, #88
	mov	r0, r3
	bl	time
	sub	r3, fp, #88
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-60]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-60]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L68+32
	ldr	r2, [r3]
	ldr	r3, .L68+36
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L64
	ldr	r3, .L68+40
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L65
.L64:
	ldr	r3, .L68+36
	ldr	r3, [r3]
	ldr	r2, [fp, #-60]
	ldr	r1, .L68+44
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L68+36
	ldr	r3, [r3]
	mov	r2, #87
	mov	r1, #1
	ldr	r0, .L68+60
	bl	fwrite
	ldr	r3, .L68+36
	ldr	r3, [r3]
	mov	r0, r3
	bl	fflush
.L65:
	mov	r3, #1
	b	.L66
.L62:
	mov	r3, #0
.L66:
	ldr	r2, .L68
	ldr	r1, [r2]
	ldr	r2, [fp, #-16]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L67
	bl	__stack_chk_fail
.L67:
	mov	r0, r3
	sub	sp, fp, #8
	@ sp needed
	pop	{r4, fp, pc}
.L69:
	.align	2
.L68:
	.word	.LC20
	.word	dns_servers
	.word	dns_servers_len
	.word	dns_server_addrs
	.word	.LC17
	.word	global_buf
	.word	2047
	.word	.LC3
	.word	stdout
	.word	stderr
	.word	verbose
	.word	.LC9
	.word	.LC18
	.word	chnroute_list
	.word	chnroute_file
	.word	.LC19
	.size	resolve_dns_servers, .-resolve_dns_servers
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	cmp_in_addr, %function
cmp_in_addr:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	ldr	r3, [fp, #-16]
	str	r3, [fp, #-12]
	ldr	r3, [fp, #-20]
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-12]
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L71
	mov	r3, #0
	b	.L72
.L71:
	ldr	r3, [fp, #-12]
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r3, [r3]
	cmp	r2, r3
	bls	.L73
	mov	r3, #1
	b	.L72
.L73:
	mvn	r3, #0
.L72:
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
	.size	cmp_in_addr, .-cmp_in_addr
	.section	.rodata
	.align	2
.LC21:
	.ascii	"rb\000"
	.align	2
.LC22:
	.ascii	"fopen\000"
	.align	2
.LC23:
	.ascii	"Can't open ip list: %s\012\000"
	.align	2
.LC24:
	.ascii	"fseek\000"
	.align	2
.LC25:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_ip_list, %function
parse_ip_list:
	@ args = 0, pretend = 0, frame = 72
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #80
	ldr	r3, .L90
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-68]
	mov	r3, #32
	str	r3, [fp, #-64]
	ldr	r3, .L90+4
	mov	r2, #0
	str	r2, [r3]
	mov	r3, #0
	str	r3, [fp, #-72]
	ldr	r3, .L90+8
	ldr	r3, [r3]
	ldr	r1, .L90+12
	mov	r0, r3
	bl	fopen
	str	r0, [fp, #-60]
	ldr	r3, [fp, #-60]
	cmp	r3, #0
	bne	.L79
	sub	r3, fp, #76
	mov	r0, r3
	bl	time
	sub	r3, fp, #76
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-48]
	ldr	r0, [fp, #-48]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-48]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L90+16
	ldr	r0, [r3]
	ldr	r3, .L90+20
	str	r3, [sp]
	ldr	r3, .L90+24
	ldr	r2, [fp, #-48]
	ldr	r1, .L90+28
	bl	fprintf
	ldr	r0, .L90+32
	bl	perror
	sub	r3, fp, #76
	mov	r0, r3
	bl	time
	sub	r3, fp, #76
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-44]
	ldr	r0, [fp, #-44]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-44]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L90+36
	ldr	r2, [r3]
	ldr	r3, .L90+16
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L76
	ldr	r3, .L90+40
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L77
.L76:
	ldr	r3, .L90+16
	ldr	r3, [r3]
	ldr	r2, [fp, #-44]
	ldr	r1, .L90+44
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L90+16
	ldr	r3, [r3]
	ldr	r2, .L90+8
	ldr	r2, [r2]
	ldr	r1, .L90+48
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L90+16
	ldr	r3, [r3]
	mov	r0, r3
	bl	fflush
.L77:
	mvn	r3, #0
	b	.L88
.L80:
	ldr	r3, .L90+4
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L90+4
	str	r3, [r2]
.L79:
	ldr	r1, [fp, #-64]
	sub	r3, fp, #40
	ldr	r2, [fp, #-60]
	mov	r0, r3
	bl	fgets
	str	r0, [fp, #-68]
	ldr	r3, [fp, #-68]
	cmp	r3, #0
	bne	.L80
	ldr	r3, .L90+4
	ldr	r3, [r3]
	mov	r1, #4
	mov	r0, r3
	bl	calloc
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L90+4
	str	r2, [r3, #4]
	mov	r2, #0
	mov	r1, #0
	ldr	r0, [fp, #-60]
	bl	fseek
	mov	r3, r0
	cmp	r3, #0
	beq	.L84
	sub	r3, fp, #76
	mov	r0, r3
	bl	time
	sub	r3, fp, #76
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-52]
	ldr	r0, [fp, #-52]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-52]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L90+36
	ldr	r2, [r3]
	ldr	r3, .L90+16
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L82
	ldr	r3, .L90+40
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L83
.L82:
	ldr	r3, .L90+16
	ldr	r3, [r3]
	ldr	r2, [fp, #-52]
	ldr	r1, .L90+44
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L90+16
	ldr	r3, [r3]
	mov	r2, #5
	mov	r1, #1
	ldr	r0, .L90+52
	bl	fwrite
	ldr	r3, .L90+16
	ldr	r3, [r3]
	mov	r0, r3
	bl	fflush
.L83:
	mvn	r3, #0
	b	.L88
.L87:
	mov	r1, #13
	ldr	r0, [fp, #-68]
	bl	strchr
	str	r0, [fp, #-56]
	ldr	r3, [fp, #-56]
	cmp	r3, #0
	beq	.L85
	ldr	r3, [fp, #-56]
	mov	r2, #0
	strb	r2, [r3]
.L85:
	mov	r1, #10
	ldr	r0, [fp, #-68]
	bl	strchr
	str	r0, [fp, #-56]
	ldr	r3, [fp, #-56]
	cmp	r3, #0
	beq	.L86
	ldr	r3, [fp, #-56]
	mov	r2, #0
	strb	r2, [r3]
.L86:
	ldr	r3, .L90+4
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-72]
	lsl	r3, r3, #2
	add	r3, r2, r3
	mov	r1, r3
	ldr	r0, [fp, #-68]
	bl	inet_aton
	ldr	r3, [fp, #-72]
	add	r3, r3, #1
	str	r3, [fp, #-72]
.L84:
	ldr	r1, [fp, #-64]
	sub	r3, fp, #40
	ldr	r2, [fp, #-60]
	mov	r0, r3
	bl	fgets
	str	r0, [fp, #-68]
	ldr	r3, [fp, #-68]
	cmp	r3, #0
	bne	.L87
	ldr	r3, .L90+4
	ldr	r0, [r3, #4]
	ldr	r3, .L90+4
	ldr	r3, [r3]
	mov	r1, r3
	ldr	r3, .L90+56
	mov	r2, #4
	bl	qsort
	ldr	r0, [fp, #-60]
	bl	fclose
	mov	r3, #0
.L88:
	ldr	r2, .L90
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L89
	bl	__stack_chk_fail
.L89:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L91:
	.align	2
.L90:
	.word	.LC25
	.word	ip_list
	.word	ip_list_file
	.word	.LC21
	.word	stderr
	.word	350
	.word	.LC6
	.word	.LC7
	.word	.LC22
	.word	stdout
	.word	verbose
	.word	.LC9
	.word	.LC23
	.word	.LC24
	.word	cmp_in_addr
	.size	parse_ip_list, .-parse_ip_list
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	cmp_net_mask, %function
cmp_net_mask:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, fp, lr}
	add	fp, sp, #8
	sub	sp, sp, #20
	str	r0, [fp, #-24]
	str	r1, [fp, #-28]
	ldr	r3, [fp, #-24]
	str	r3, [fp, #-20]
	ldr	r3, [fp, #-28]
	str	r3, [fp, #-16]
	ldr	r3, [fp, #-20]
	ldr	r2, [r3]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L93
	mov	r3, #0
	b	.L94
.L93:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	mov	r0, r3
	bl	ntohl
	mov	r4, r0
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	mov	r0, r3
	bl	ntohl
	mov	r3, r0
	cmp	r4, r3
	bls	.L95
	mov	r3, #1
	b	.L94
.L95:
	mvn	r3, #0
.L94:
	mov	r0, r3
	sub	sp, fp, #8
	@ sp needed
	pop	{r4, fp, pc}
	.size	cmp_net_mask, .-cmp_net_mask
	.section	.rodata
	.align	2
.LC26:
	.ascii	"CHNROUTE_FILE not specified, CHNRoute is disabled\012"
	.ascii	"\000"
	.align	2
.LC27:
	.ascii	"Can't open chnroute: %s\012\000"
	.align	2
.LC28:
	.ascii	"invalid addr %s in %s:%d\012\000"
	.align	2
.LC29:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_chnroute, %function
parse_chnroute:
	@ args = 0, pretend = 0, frame = 80
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #88
	ldr	r3, .L120
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #32
	str	r3, [fp, #-76]
	ldr	r3, .L120+4
	mov	r2, #0
	str	r2, [r3]
	mov	r3, #0
	str	r3, [fp, #-80]
	ldr	r3, .L120+8
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L97
	sub	r3, fp, #84
	mov	r0, r3
	bl	time
	sub	r3, fp, #84
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-44]
	ldr	r0, [fp, #-44]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-44]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L120+12
	ldr	r2, [r3]
	ldr	r3, .L120+16
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L98
	ldr	r3, .L120+20
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L99
.L98:
	ldr	r3, .L120+16
	ldr	r3, [r3]
	ldr	r2, [fp, #-44]
	ldr	r1, .L120+24
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L120+16
	ldr	r3, [r3]
	mov	r2, #50
	mov	r1, #1
	ldr	r0, .L120+28
	bl	fwrite
	ldr	r3, .L120+16
	ldr	r3, [r3]
	mov	r0, r3
	bl	fflush
.L99:
	mov	r3, #0
	b	.L118
.L97:
	ldr	r3, .L120+8
	ldr	r3, [r3]
	ldr	r1, .L120+32
	mov	r0, r3
	bl	fopen
	str	r0, [fp, #-72]
	ldr	r3, [fp, #-72]
	cmp	r3, #0
	bne	.L104
	sub	r3, fp, #84
	mov	r0, r3
	bl	time
	sub	r3, fp, #84
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-52]
	ldr	r0, [fp, #-52]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-52]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L120+16
	ldr	r0, [r3]
	ldr	r3, .L120+36
	str	r3, [sp]
	ldr	r3, .L120+40
	ldr	r2, [fp, #-52]
	ldr	r1, .L120+44
	bl	fprintf
	ldr	r0, .L120+48
	bl	perror
	sub	r3, fp, #84
	mov	r0, r3
	bl	time
	sub	r3, fp, #84
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-48]
	ldr	r0, [fp, #-48]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-48]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L120+12
	ldr	r2, [r3]
	ldr	r3, .L120+16
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L102
	ldr	r3, .L120+20
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L103
.L102:
	ldr	r3, .L120+16
	ldr	r3, [r3]
	ldr	r2, [fp, #-48]
	ldr	r1, .L120+24
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L120+16
	ldr	r3, [r3]
	ldr	r2, .L120+8
	ldr	r2, [r2]
	ldr	r1, .L120+52
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L120+16
	ldr	r3, [r3]
	mov	r0, r3
	bl	fflush
.L103:
	mvn	r3, #0
	b	.L118
.L105:
	ldr	r3, .L120+4
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L120+4
	str	r3, [r2]
.L104:
	ldr	r1, [fp, #-76]
	sub	r3, fp, #40
	ldr	r2, [fp, #-72]
	mov	r0, r3
	bl	fgets
	str	r0, [fp, #-68]
	ldr	r3, [fp, #-68]
	cmp	r3, #0
	bne	.L105
	ldr	r3, .L120+4
	ldr	r3, [r3]
	mov	r1, #8
	mov	r0, r3
	bl	calloc
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L120+4
	str	r2, [r3, #4]
	mov	r2, #0
	mov	r1, #0
	ldr	r0, [fp, #-72]
	bl	fseek
	mov	r3, r0
	cmp	r3, #0
	beq	.L109
	sub	r3, fp, #84
	mov	r0, r3
	bl	time
	sub	r3, fp, #84
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-56]
	ldr	r0, [fp, #-56]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-56]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L120+12
	ldr	r2, [r3]
	ldr	r3, .L120+16
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L107
	ldr	r3, .L120+20
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L108
.L107:
	ldr	r3, .L120+16
	ldr	r3, [r3]
	ldr	r2, [fp, #-56]
	ldr	r1, .L120+24
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L120+16
	ldr	r3, [r3]
	mov	r2, #5
	mov	r1, #1
	ldr	r0, .L120+56
	bl	fwrite
	ldr	r3, .L120+16
	ldr	r3, [r3]
	mov	r0, r3
	bl	fflush
.L108:
	mvn	r3, #0
	b	.L118
.L117:
	mov	r1, #13
	ldr	r0, [fp, #-68]
	bl	strchr
	str	r0, [fp, #-64]
	ldr	r3, [fp, #-64]
	cmp	r3, #0
	beq	.L110
	ldr	r3, [fp, #-64]
	mov	r2, #0
	strb	r2, [r3]
.L110:
	mov	r1, #10
	ldr	r0, [fp, #-68]
	bl	strchr
	str	r0, [fp, #-64]
	ldr	r3, [fp, #-64]
	cmp	r3, #0
	beq	.L111
	ldr	r3, [fp, #-64]
	mov	r2, #0
	strb	r2, [r3]
.L111:
	mov	r1, #47
	ldr	r0, [fp, #-68]
	bl	strchr
	str	r0, [fp, #-64]
	ldr	r3, [fp, #-64]
	cmp	r3, #0
	beq	.L112
	ldr	r3, [fp, #-64]
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, [fp, #-64]
	add	r3, r3, #1
	mov	r0, r3
	bl	atoi
	mov	r3, r0
	rsb	r3, r3, #32
	mov	r2, #1
	lsl	r3, r2, r3
	sub	r1, r3, #1
	ldr	r3, .L120+4
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-80]
	lsl	r3, r3, #3
	add	r3, r2, r3
	mov	r2, r1
	str	r2, [r3, #4]
	b	.L113
.L112:
	ldr	r3, .L120+4
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-80]
	lsl	r3, r3, #3
	add	r3, r2, r3
	mvn	r2, #0
	str	r2, [r3, #4]
.L113:
	ldr	r3, .L120+4
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-80]
	lsl	r3, r3, #3
	add	r3, r2, r3
	mov	r1, r3
	ldr	r0, [fp, #-68]
	bl	inet_aton
	mov	r3, r0
	cmp	r3, #0
	bne	.L114
	sub	r3, fp, #84
	mov	r0, r3
	bl	time
	sub	r3, fp, #84
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-60]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-60]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L120+12
	ldr	r2, [r3]
	ldr	r3, .L120+16
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L115
	ldr	r3, .L120+20
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L116
.L115:
	ldr	r3, .L120+16
	ldr	r3, [r3]
	ldr	r2, [fp, #-60]
	ldr	r1, .L120+24
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L120+16
	ldr	r0, [r3]
	ldr	r3, .L120+8
	ldr	r2, [r3]
	ldr	r3, [fp, #-80]
	add	r3, r3, #1
	str	r3, [sp]
	mov	r3, r2
	ldr	r2, [fp, #-68]
	ldr	r1, .L120+60
	bl	fprintf
	ldr	r3, .L120+16
	ldr	r3, [r3]
	mov	r0, r3
	bl	fflush
.L116:
	mov	r3, #1
	b	.L118
.L114:
	ldr	r3, [fp, #-80]
	add	r3, r3, #1
	str	r3, [fp, #-80]
.L109:
	ldr	r1, [fp, #-76]
	sub	r3, fp, #40
	ldr	r2, [fp, #-72]
	mov	r0, r3
	bl	fgets
	str	r0, [fp, #-68]
	ldr	r3, [fp, #-68]
	cmp	r3, #0
	bne	.L117
	ldr	r3, .L120+4
	ldr	r0, [r3, #4]
	ldr	r3, .L120+4
	ldr	r3, [r3]
	mov	r1, r3
	ldr	r3, .L120+64
	mov	r2, #8
	bl	qsort
	ldr	r0, [fp, #-72]
	bl	fclose
	mov	r3, #0
.L118:
	ldr	r2, .L120
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L119
	bl	__stack_chk_fail
.L119:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L121:
	.align	2
.L120:
	.word	.LC29
	.word	chnroute_list
	.word	chnroute_file
	.word	stdout
	.word	stderr
	.word	verbose
	.word	.LC9
	.word	.LC26
	.word	.LC21
	.word	406
	.word	.LC6
	.word	.LC7
	.word	.LC22
	.word	.LC27
	.word	.LC24
	.word	.LC28
	.word	cmp_net_mask
	.size	parse_chnroute, .-parse_chnroute
	.section	.rodata
	.align	2
.LC30:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	test_ip_in_list, %function
test_ip_in_list:
	@ args = 0, pretend = 0, frame = 40
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, fp, lr}
	add	fp, sp, #8
	sub	sp, sp, #44
	str	r0, [fp, #-48]
	str	r1, [fp, #-52]
	ldr	r3, .L136
	ldr	r3, [r3]
	str	r3, [fp, #-16]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-40]
	ldr	r3, [fp, #-52]
	ldr	r3, [r3]
	sub	r3, r3, #1
	str	r3, [fp, #-36]
	ldr	r3, [fp, #-52]
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L123
	mov	r3, #0
	b	.L132
.L123:
	ldr	r3, [fp, #-48]
	str	r3, [fp, #-24]
	b	.L125
.L130:
	ldr	r2, [fp, #-40]
	ldr	r3, [fp, #-36]
	add	r3, r2, r3
	lsr	r2, r3, #31
	add	r3, r2, r3
	asr	r3, r3, #1
	str	r3, [fp, #-32]
	ldr	r3, [fp, #-52]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-32]
	lsl	r3, r3, #3
	add	r2, r2, r3
	sub	r3, fp, #24
	mov	r1, r2
	mov	r0, r3
	bl	cmp_net_mask
	str	r0, [fp, #-28]
	ldr	r3, [fp, #-28]
	cmn	r3, #1
	bne	.L126
	ldr	r2, [fp, #-36]
	ldr	r3, [fp, #-32]
	cmp	r2, r3
	beq	.L134
	ldr	r3, [fp, #-32]
	str	r3, [fp, #-36]
	b	.L125
.L126:
	ldr	r2, [fp, #-40]
	ldr	r3, [fp, #-32]
	cmp	r2, r3
	beq	.L135
	ldr	r3, [fp, #-32]
	str	r3, [fp, #-40]
.L125:
	ldr	r2, [fp, #-40]
	ldr	r3, [fp, #-36]
	cmp	r2, r3
	bne	.L130
	b	.L128
.L134:
	nop
	b	.L128
.L135:
	nop
.L128:
	ldr	r3, [fp, #-52]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-40]
	lsl	r3, r3, #3
	add	r3, r2, r3
	ldr	r3, [r3]
	mov	r0, r3
	bl	ntohl
	mov	r4, r0
	ldr	r3, [fp, #-48]
	mov	r0, r3
	bl	ntohl
	mov	r3, r0
	eor	r2, r4, r3
	ldr	r3, [fp, #-52]
	ldr	r1, [r3, #4]
	ldr	r3, [fp, #-40]
	lsl	r3, r3, #3
	add	r3, r1, r3
	ldr	r3, [r3, #4]
	mvn	r3, r3
	and	r3, r3, r2
	cmp	r3, #0
	beq	.L131
	mov	r3, #0
	b	.L132
.L131:
	mov	r3, #1
.L132:
	ldr	r2, .L136
	ldr	r1, [r2]
	ldr	r2, [fp, #-16]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L133
	bl	__stack_chk_fail
.L133:
	mov	r0, r3
	sub	sp, fp, #8
	@ sp needed
	pop	{r4, fp, pc}
.L137:
	.align	2
.L136:
	.word	.LC30
	.size	test_ip_in_list, .-test_ip_in_list
	.section	.rodata
	.align	2
.LC31:
	.ascii	"%s:%s:%s\012\000"
	.align	2
.LC32:
	.ascii	"bind\000"
	.align	2
.LC33:
	.ascii	"Can't bind address %s:%s\012\000"
	.align	2
.LC34:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	dns_init_sockets, %function
dns_init_sockets:
	@ args = 0, pretend = 0, frame = 64
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, fp, lr}
	add	fp, sp, #8
	sub	sp, sp, #76
	ldr	r3, .L150
	ldr	r3, [r3]
	str	r3, [fp, #-16]
	mov	r3,#0
	mov	r2, #17
	mov	r1, #2
	mov	r0, #2
	bl	socket
	mov	r3, r0
	ldr	r2, .L150+4
	str	r3, [r2]
	ldr	r3, .L150+4
	ldr	r3, [r3]
	mov	r0, r3
	bl	setnonblock
	mov	r3, r0
	cmp	r3, #0
	beq	.L139
	mvn	r3, #0
	b	.L148
.L139:
	sub	r3, fp, #48
	mov	r2, #32
	mov	r1, #0
	mov	r0, r3
	bl	memset
	mov	r3, #2
	str	r3, [fp, #-44]
	mov	r3, #2
	str	r3, [fp, #-40]
	ldr	r3, .L150+8
	ldr	r0, [r3]
	ldr	r3, .L150+12
	ldr	r1, [r3]
	sub	r3, fp, #72
	sub	r2, fp, #48
	bl	getaddrinfo
	str	r0, [fp, #-64]
	ldr	r3, [fp, #-64]
	cmp	r3, #0
	beq	.L141
	sub	r3, fp, #68
	mov	r0, r3
	bl	time
	sub	r3, fp, #68
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-52]
	ldr	r0, [fp, #-52]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-52]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L150+16
	ldr	r2, [r3]
	ldr	r3, .L150+20
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L142
	ldr	r3, .L150+24
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L143
.L142:
	ldr	r3, .L150+20
	ldr	r3, [r3]
	ldr	r2, [fp, #-52]
	ldr	r1, .L150+28
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L150+20
	ldr	r4, [r3]
	ldr	r0, [fp, #-64]
	bl	gai_strerror
	mov	r1, r0
	ldr	r3, .L150+8
	ldr	r2, [r3]
	ldr	r3, .L150+12
	ldr	r3, [r3]
	str	r3, [sp]
	mov	r3, r2
	mov	r2, r1
	ldr	r1, .L150+32
	mov	r0, r4
	bl	fprintf
	ldr	r3, .L150+20
	ldr	r3, [r3]
	mov	r0, r3
	bl	fflush
.L143:
	mvn	r3, #0
	b	.L148
.L141:
	ldr	r3, .L150+4
	ldr	r0, [r3]
	ldr	r3, [fp, #-72]
	ldr	r1, [r3, #20]
	ldr	r3, [fp, #-72]
	ldr	r3, [r3, #16]
	mov	r2, r3
	bl	bind
	mov	r3, r0
	cmp	r3, #0
	beq	.L144
	sub	r3, fp, #68
	mov	r0, r3
	bl	time
	sub	r3, fp, #68
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-60]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-60]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L150+20
	ldr	r0, [r3]
	ldr	r3, .L150+36
	str	r3, [sp]
	ldr	r3, .L150+40
	ldr	r2, [fp, #-60]
	ldr	r1, .L150+44
	bl	fprintf
	ldr	r0, .L150+48
	bl	perror
	sub	r3, fp, #68
	mov	r0, r3
	bl	time
	sub	r3, fp, #68
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-56]
	ldr	r0, [fp, #-56]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-56]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L150+16
	ldr	r2, [r3]
	ldr	r3, .L150+20
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L145
	ldr	r3, .L150+24
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L146
.L145:
	ldr	r3, .L150+20
	ldr	r3, [r3]
	ldr	r2, [fp, #-56]
	ldr	r1, .L150+28
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L150+20
	ldr	r0, [r3]
	ldr	r3, .L150+8
	ldr	r2, [r3]
	ldr	r3, .L150+12
	ldr	r3, [r3]
	ldr	r1, .L150+52
	bl	fprintf
	ldr	r3, .L150+20
	ldr	r3, [r3]
	mov	r0, r3
	bl	fflush
.L146:
	mvn	r3, #0
	b	.L148
.L144:
	ldr	r3, [fp, #-72]
	mov	r0, r3
	bl	freeaddrinfo
	mov	r2, #17
	mov	r1, #2
	mov	r0, #2
	bl	socket
	mov	r3, r0
	ldr	r2, .L150+56
	str	r3, [r2]
	ldr	r3, .L150+56
	ldr	r3, [r3]
	mov	r0, r3
	bl	setnonblock
	mov	r3, r0
	cmp	r3, #0
	beq	.L147
	mvn	r3, #0
	b	.L148
.L147:
	mov	r3, #0
.L148:
	ldr	r2, .L150
	ldr	r1, [r2]
	ldr	r2, [fp, #-16]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L149
	bl	__stack_chk_fail
.L149:
	mov	r0, r3
	sub	sp, fp, #8
	@ sp needed
	pop	{r4, fp, pc}
.L151:
	.align	2
.L150:
	.word	.LC34
	.word	local_sock
	.word	listen_addr
	.word	listen_port
	.word	stdout
	.word	stderr
	.word	verbose
	.word	.LC9
	.word	.LC31
	.word	498
	.word	.LC6
	.word	.LC7
	.word	.LC32
	.word	.LC33
	.word	remote_sock
	.size	dns_init_sockets, .-dns_init_sockets
	.section	.rodata
	.align	2
.LC35:
	.ascii	"ns_initparse\000"
	.align	2
.LC36:
	.ascii	"request %s\012\000"
	.align	2
.LC37:
	.ascii	"sendto\000"
	.align	2
.LC38:
	.ascii	"recvfrom\000"
	.align	2
.LC39:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	dns_handle_local, %function
dns_handle_local:
	@ args = 0, pretend = 0, frame = 112
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #144
	ldr	r3, .L162
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r0, #16
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-92]
	mov	r3, #16
	str	r3, [fp, #-108]
	ldr	r3, .L162+4
	ldr	r0, [r3]
	sub	r3, fp, #108
	str	r3, [sp, #4]
	ldr	r3, [fp, #-92]
	str	r3, [sp]
	mov	r3, #0
	mov	r2, #2048
	ldr	r1, .L162+8
	bl	recvfrom
	str	r0, [fp, #-96]
	ldr	r3, [fp, #-96]
	cmp	r3, #0
	ble	.L153
	sub	r3, fp, #56
	mov	r2, r3
	ldr	r1, [fp, #-96]
	ldr	r0, .L162+8
	bl	ns_initparse
	mov	r3, r0
	cmp	r3, #0
	bge	.L154
	sub	r3, fp, #68
	mov	r0, r3
	bl	time
	sub	r3, fp, #68
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-72]
	ldr	r0, [fp, #-72]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-72]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L162+12
	ldr	r0, [r3]
	mov	r3, #520
	str	r3, [sp]
	ldr	r3, .L162+16
	ldr	r2, [fp, #-72]
	ldr	r1, .L162+20
	bl	fprintf
	ldr	r0, .L162+24
	bl	perror
	ldr	r0, [fp, #-92]
	bl	free
	b	.L152
.L154:
	ldrh	r3, [fp, #-48]	@ movhi
	strh	r3, [fp, #-110]	@ movhi
	mov	lr, sp
	sub	ip, fp, #40
	ldmia	ip!, {r0, r1, r2, r3}
	stmia	lr!, {r0, r1, r2, r3}
	ldm	ip, {r0, r1, r2, r3}
	stm	lr, {r0, r1, r2, r3}
	sub	r3, fp, #56
	ldm	r3, {r0, r1, r2, r3}
	bl	hostname_from_question
	str	r0, [fp, #-84]
	sub	r3, fp, #68
	mov	r0, r3
	bl	time
	sub	r3, fp, #68
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-80]
	ldr	r0, [fp, #-80]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-80]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L162+28
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L156
	ldr	r3, .L162+32
	ldr	r3, [r3]
	ldr	r2, [fp, #-80]
	ldr	r1, .L162+36
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L162+32
	ldr	r3, [r3]
	ldr	r2, [fp, #-84]
	ldr	r1, .L162+40
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L162+32
	ldr	r3, [r3]
	mov	r0, r3
	bl	fflush
.L156:
	ldrh	r3, [fp, #-110]	@ movhi
	strh	r3, [fp, #-68]	@ movhi
	ldr	r3, [fp, #-92]
	str	r3, [fp, #-64]
	ldr	r3, [fp, #-108]
	str	r3, [fp, #-60]
	sub	r3, fp, #68
	ldm	r3, {r0, r1, r2}
	bl	queue_add
	mov	r3, #0
	str	r3, [fp, #-88]
	b	.L157
.L159:
	ldr	r3, .L162+44
	ldr	ip, [r3]
	ldr	lr, [fp, #-96]
	ldr	r3, .L162+48
	ldr	r1, [r3]
	ldr	r2, [fp, #-88]
	mov	r3, r2
	lsl	r3, r3, #1
	add	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r1, r3
	ldr	r1, [r3, #4]
	ldr	r3, .L162+48
	ldr	r0, [r3]
	ldr	r2, [fp, #-88]
	mov	r3, r2
	lsl	r3, r3, #1
	add	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r0, r3
	ldr	r3, [r3, #8]
	str	r3, [sp, #4]
	str	r1, [sp]
	mov	r3, #0
	mov	r2, lr
	ldr	r1, .L162+8
	mov	r0, ip
	bl	sendto
	mov	r3, r0
	cmn	r3, #1
	bne	.L158
	sub	r3, fp, #104
	mov	r0, r3
	bl	time
	sub	r3, fp, #104
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-76]
	ldr	r0, [fp, #-76]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-76]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L162+12
	ldr	r0, [r3]
	ldr	r3, .L162+52
	str	r3, [sp]
	ldr	r3, .L162+16
	ldr	r2, [fp, #-76]
	ldr	r1, .L162+20
	bl	fprintf
	ldr	r0, .L162+56
	bl	perror
.L158:
	ldr	r3, [fp, #-88]
	add	r3, r3, #1
	str	r3, [fp, #-88]
.L157:
	ldr	r3, .L162+60
	ldr	r3, [r3]
	ldr	r2, [fp, #-88]
	cmp	r2, r3
	blt	.L159
	b	.L152
.L153:
	sub	r3, fp, #68
	mov	r0, r3
	bl	time
	sub	r3, fp, #68
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-100]
	ldr	r0, [fp, #-100]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-100]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L162+12
	ldr	r0, [r3]
	ldr	r3, .L162+64
	str	r3, [sp]
	ldr	r3, .L162+16
	ldr	r2, [fp, #-100]
	ldr	r1, .L162+20
	bl	fprintf
	ldr	r0, .L162+68
	bl	perror
.L152:
	ldr	r3, .L162
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L161
	bl	__stack_chk_fail
.L161:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L163:
	.align	2
.L162:
	.word	.LC39
	.word	local_sock
	.word	global_buf
	.word	stderr
	.word	.LC6
	.word	.LC7
	.word	.LC35
	.word	verbose
	.word	stdout
	.word	.LC9
	.word	.LC36
	.word	remote_sock
	.word	dns_server_addrs
	.word	537
	.word	.LC37
	.word	dns_servers_len
	.word	541
	.word	.LC38
	.size	dns_handle_local, .-dns_handle_local
	.section	.rodata
	.align	2
.LC40:
	.ascii	"response %s from %s:%d - \000"
	.align	2
.LC41:
	.ascii	"pass\000"
	.align	2
.LC42:
	.ascii	"delay\000"
	.align	2
.LC43:
	.ascii	"filter\000"
	.align	2
.LC44:
	.ascii	"skip\000"
	.align	2
.LC45:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	dns_handle_remote, %function
dns_handle_remote:
	@ args = 0, pretend = 0, frame = 104
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, r5, fp, lr}
	add	fp, sp, #12
	sub	sp, sp, #144
	ldr	r3, .L177
	ldr	r3, [r3]
	str	r3, [fp, #-16]
	mov	r3,#0
	mov	r0, #16
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-92]
	mov	r3, #16
	str	r3, [fp, #-108]
	ldr	r3, .L177+4
	ldr	r0, [r3]
	sub	r3, fp, #108
	str	r3, [sp, #4]
	ldr	r3, [fp, #-92]
	str	r3, [sp]
	mov	r3, #0
	mov	r2, #2048
	ldr	r1, .L177+8
	bl	recvfrom
	str	r0, [fp, #-96]
	ldr	r3, [fp, #-96]
	cmp	r3, #0
	ble	.L165
	sub	r3, fp, #64
	mov	r2, r3
	ldr	r1, [fp, #-96]
	ldr	r0, .L177+8
	bl	ns_initparse
	mov	r3, r0
	cmp	r3, #0
	bge	.L166
	sub	r3, fp, #104
	mov	r0, r3
	bl	time
	sub	r3, fp, #104
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-68]
	ldr	r0, [fp, #-68]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-68]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L177+12
	ldr	r0, [r3]
	ldr	r3, .L177+16
	str	r3, [sp]
	ldr	r3, .L177+20
	ldr	r2, [fp, #-68]
	ldr	r1, .L177+24
	bl	fprintf
	ldr	r0, .L177+28
	bl	perror
	ldr	r0, [fp, #-92]
	bl	free
	b	.L164
.L166:
	ldrh	r3, [fp, #-56]	@ movhi
	strh	r3, [fp, #-110]	@ movhi
	mov	lr, sp
	sub	ip, fp, #48
	ldmia	ip!, {r0, r1, r2, r3}
	stmia	lr!, {r0, r1, r2, r3}
	ldm	ip, {r0, r1, r2, r3}
	stm	lr, {r0, r1, r2, r3}
	sub	r3, fp, #64
	ldm	r3, {r0, r1, r2, r3}
	bl	hostname_from_question
	str	r0, [fp, #-88]
	ldr	r3, [fp, #-88]
	cmp	r3, #0
	beq	.L168
	sub	r3, fp, #104
	mov	r0, r3
	bl	time
	sub	r3, fp, #104
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-84]
	ldr	r0, [fp, #-84]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-84]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L177+32
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L168
	ldr	r3, .L177+36
	ldr	r3, [r3]
	ldr	r2, [fp, #-84]
	ldr	r1, .L177+40
	mov	r0, r3
	bl	fprintf
	ldr	r3, .L177+36
	ldr	r4, [r3]
	ldr	r3, [fp, #-92]
	ldr	r0, [r3, #4]
	bl	inet_ntoa
	mov	r5, r0
	ldr	r3, [fp, #-92]
	ldrh	r3, [r3, #2]
	mov	r0, r3
	bl	htons
	mov	r3, r0
	str	r3, [sp]
	mov	r3, r5
	ldr	r2, [fp, #-88]
	ldr	r1, .L177+44
	mov	r0, r4
	bl	fprintf
	ldr	r3, .L177+36
	ldr	r3, [r3]
	mov	r0, r3
	bl	fflush
.L168:
	ldrh	r3, [fp, #-110]
	mov	r0, r3
	bl	queue_lookup
	str	r0, [fp, #-80]
	ldr	r3, [fp, #-80]
	cmp	r3, #0
	beq	.L170
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #4]
	mov	r2, #2
	strh	r2, [r3]	@ movhi
	ldr	r3, [fp, #-92]
	ldr	r3, [r3, #4]
	str	r3, [sp, #32]
	mov	lr, sp
	sub	ip, fp, #48
	ldmia	ip!, {r0, r1, r2, r3}
	stmia	lr!, {r0, r1, r2, r3}
	ldm	ip, {r0, r1, r2, r3}
	stm	lr, {r0, r1, r2, r3}
	sub	r3, fp, #64
	ldm	r3, {r0, r1, r2, r3}
	bl	should_filter_query
	str	r0, [fp, #-76]
	ldr	r3, [fp, #-76]
	cmp	r3, #0
	bne	.L171
	ldr	r3, .L177+32
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L172
	ldr	r0, .L177+48
	bl	puts
.L172:
	ldr	r3, .L177+52
	ldr	r0, [r3]
	ldr	r1, [fp, #-96]
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #4]
	ldr	r2, [fp, #-80]
	ldr	r2, [r2, #8]
	str	r2, [sp, #4]
	str	r3, [sp]
	mov	r3, #0
	mov	r2, r1
	ldr	r1, .L177+8
	bl	sendto
	mov	r3, r0
	cmn	r3, #1
	bne	.L173
	sub	r3, fp, #104
	mov	r0, r3
	bl	time
	sub	r3, fp, #104
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-72]
	ldr	r0, [fp, #-72]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-72]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L177+12
	ldr	r0, [r3]
	ldr	r3, .L177+56
	str	r3, [sp]
	ldr	r3, .L177+20
	ldr	r2, [fp, #-72]
	ldr	r1, .L177+24
	bl	fprintf
	ldr	r0, .L177+60
	bl	perror
	b	.L173
.L171:
	ldr	r3, [fp, #-76]
	cmn	r3, #1
	bne	.L174
	ldr	r1, [fp, #-96]
	ldr	r3, [fp, #-80]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #8]
	ldr	r0, .L177+8
	bl	schedule_delay
	ldr	r3, .L177+32
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L173
	ldr	r0, .L177+64
	bl	puts
	b	.L173
.L174:
	ldr	r3, .L177+32
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L173
	ldr	r0, .L177+68
	bl	puts
	b	.L173
.L170:
	ldr	r3, .L177+32
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L173
	ldr	r0, .L177+72
	bl	puts
.L173:
	ldr	r0, [fp, #-92]
	bl	free
	b	.L164
.L165:
	sub	r3, fp, #104
	mov	r0, r3
	bl	time
	sub	r3, fp, #104
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-100]
	ldr	r0, [fp, #-100]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-100]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L177+12
	ldr	r0, [r3]
	ldr	r3, .L177+76
	str	r3, [sp]
	ldr	r3, .L177+20
	ldr	r2, [fp, #-100]
	ldr	r1, .L177+24
	bl	fprintf
	ldr	r0, .L177+80
	bl	perror
.L164:
	ldr	r3, .L177
	ldr	r2, [r3]
	ldr	r3, [fp, #-16]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L176
	bl	__stack_chk_fail
.L176:
	sub	sp, fp, #12
	@ sp needed
	pop	{r4, r5, fp, pc}
.L178:
	.align	2
.L177:
	.word	.LC45
	.word	remote_sock
	.word	global_buf
	.word	stderr
	.word	555
	.word	.LC6
	.word	.LC7
	.word	.LC35
	.word	verbose
	.word	stdout
	.word	.LC9
	.word	.LC40
	.word	.LC41
	.word	local_sock
	.word	577
	.word	.LC37
	.word	.LC42
	.word	.LC43
	.word	.LC44
	.word	593
	.word	.LC38
	.size	dns_handle_remote, .-dns_handle_remote
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	queue_add, %function
queue_add:
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #32
	sub	r3, fp, #32
	stm	r3, {r0, r1, r2}
	ldr	r3, .L180
	ldr	r3, [r3]
	add	r3, r3, #1
	rsbs	r2, r3, #0
	and	r3, r3, #127
	and	r2, r2, #127
	rsbpl	r3, r2, #0
	ldr	r2, .L180
	str	r3, [r2]
	ldr	r3, .L180
	ldr	r2, [r3]
	ldr	r1, .L180+4
	mov	r3, r2
	lsl	r3, r3, #1
	add	r3, r3, r2
	lsl	r3, r3, #2
	add	r2, r1, r3
	sub	r3, fp, #16
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	ldr	r3, [fp, #-12]
	mov	r0, r3
	bl	free
	ldr	r3, .L180
	ldr	r2, [r3]
	ldr	r1, .L180+4
	mov	r3, r2
	lsl	r3, r3, #1
	add	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r1, r3
	mov	ip, r3
	sub	r3, fp, #32
	ldm	r3, {r0, r1, r2}
	stm	ip, {r0, r1, r2}
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L181:
	.align	2
.L180:
	.word	id_addr_queue_pos
	.word	id_addr_queue
	.size	queue_add, .-queue_add
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	queue_lookup, %function
queue_lookup:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	mov	r3, r0
	strh	r3, [fp, #-14]	@ movhi
	mov	r3, #0
	str	r3, [fp, #-8]
	b	.L183
.L186:
	ldr	r1, .L187
	ldr	r2, [fp, #-8]
	mov	r3, r2
	lsl	r3, r3, #1
	add	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r1, r3
	ldrh	r3, [r3]
	ldrh	r2, [fp, #-14]
	cmp	r2, r3
	bne	.L184
	ldr	r2, [fp, #-8]
	mov	r3, r2
	lsl	r3, r3, #1
	add	r3, r3, r2
	lsl	r3, r3, #2
	mov	r2, r3
	ldr	r3, .L187
	add	r3, r2, r3
	b	.L185
.L184:
	ldr	r3, [fp, #-8]
	add	r3, r3, #1
	str	r3, [fp, #-8]
.L183:
	ldr	r3, [fp, #-8]
	cmp	r3, #127
	ble	.L186
	mov	r3, #0
.L185:
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L188:
	.align	2
.L187:
	.word	id_addr_queue
	.size	queue_lookup, .-queue_lookup
	.local	hostname_buf
	.comm	hostname_buf,4,4
	.local	hostname_buflen
	.comm	hostname_buflen,4,4
	.section	.rodata
	.align	2
.LC46:
	.ascii	"ns_parserr\000"
	.align	2
.LC47:
	.ascii	".\000"
	.align	2
.LC48:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	hostname_from_question, %function
hostname_from_question:
	@ args = 48, pretend = 16, frame = 1072
	@ frame_needed = 1, uses_anonymous_args = 0
	sub	sp, sp, #16
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #1072
	sub	sp, sp, #8
	add	ip, fp, #4
	stm	ip, {r0, r1, r2, r3}
	ldr	r3, .L199
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	ldrh	r3, [fp, #16]
	str	r3, [fp, #-1072]
	ldr	r3, [fp, #-1072]
	cmp	r3, #0
	bne	.L190
	mov	r3, #0
	b	.L197
.L190:
	mov	r3, #0
	str	r3, [fp, #-1068]
	ldr	r2, [fp, #-1068]
	ldr	r3, [fp, #-1072]
	cmp	r2, r3
	bge	.L192
	sub	r3, fp, #1040
	sub	r3, r3, #4
	sub	r3, r3, #8
	ldr	r2, [fp, #-1068]
	mov	r1, #0
	add	r0, fp, #4
	bl	ns_parserr
	mov	r3, r0
	cmp	r3, #0
	beq	.L193
	sub	r3, fp, #1072
	sub	r3, r3, #4
	mov	r0, r3
	bl	time
	sub	r3, fp, #1072
	sub	r3, r3, #4
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-1056]
	ldr	r0, [fp, #-1056]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-1056]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L199+4
	ldr	r0, [r3]
	ldr	r3, .L199+8
	str	r3, [sp]
	ldr	r3, .L199+12
	ldr	r2, [fp, #-1056]
	ldr	r1, .L199+16
	bl	fprintf
	ldr	r0, .L199+20
	bl	perror
	mov	r3, #0
	b	.L197
.L193:
	ldrb	r3, [fp, #-1052]	@ zero_extendqisi2
	cmp	r3, #0
	beq	.L194
	sub	r3, fp, #1040
	sub	r3, r3, #4
	sub	r3, r3, #8
	b	.L195
.L194:
	ldr	r3, .L199+24
.L195:
	str	r3, [fp, #-1064]
	ldr	r0, [fp, #-1064]
	bl	strlen
	mov	r3, r0
	add	r3, r3, #1
	str	r3, [fp, #-1060]
	ldr	r2, [fp, #-1060]
	ldr	r3, .L199+28
	ldr	r3, [r3]
	cmp	r2, r3
	bls	.L196
	ldr	r3, [fp, #-1060]
	lsl	r3, r3, #1
	mov	r2, r3
	ldr	r3, .L199+28
	str	r2, [r3]
	ldr	r3, .L199+32
	ldr	r3, [r3]
	ldr	r2, .L199+28
	ldr	r2, [r2]
	mov	r1, r2
	mov	r0, r3
	bl	realloc
	mov	r3, r0
	ldr	r2, .L199+32
	str	r3, [r2]
.L196:
	ldr	r3, .L199+32
	ldr	r3, [r3]
	ldr	r2, [fp, #-1060]
	ldr	r1, [fp, #-1064]
	mov	r0, r3
	bl	memcpy
	ldr	r3, .L199+32
	ldr	r3, [r3]
	b	.L197
.L192:
	mov	r3, #0
.L197:
	ldr	r2, .L199
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L198
	bl	__stack_chk_fail
.L198:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, lr}
	add	sp, sp, #16
	bx	lr
.L200:
	.align	2
.L199:
	.word	.LC48
	.word	stderr
	.word	626
	.word	.LC6
	.word	.LC7
	.word	.LC46
	.word	.LC47
	.word	hostname_buflen
	.word	hostname_buf
	.size	hostname_from_question, .-hostname_from_question
	.section	.rodata
	.align	2
.LC49:
	.ascii	"%s, \000"
	.align	2
.LC50:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	should_filter_query, %function
should_filter_query:
	@ args = 52, pretend = 16, frame = 1088
	@ frame_needed = 1, uses_anonymous_args = 0
	sub	sp, sp, #16
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #1088
	sub	sp, sp, #8
	add	ip, fp, #4
	stm	ip, {r0, r1, r2, r3}
	ldr	r3, .L214
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-1080]
	mov	r3, #0
	str	r3, [fp, #-1076]
	ldr	r3, .L214+4
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L202
	ldr	r3, .L214+8
	ldr	r3, [r3]
	cmp	r3, #1
	ble	.L202
	ldr	r1, .L214+12
	ldr	r0, [fp, #52]
	bl	test_ip_in_list
	str	r0, [fp, #-1080]
	ldr	r3, [fp, #-1080]
	cmp	r3, #0
	moveq	r3, #1
	movne	r3, #0
	and	r3, r3, #255
	str	r3, [fp, #-1076]
.L202:
	ldrh	r3, [fp, #18]
	str	r3, [fp, #-1072]
	ldr	r3, [fp, #-1072]
	cmp	r3, #0
	bne	.L203
	mvn	r3, #0
	b	.L212
.L203:
	mov	r3, #0
	str	r3, [fp, #-1084]
	b	.L205
.L211:
	sub	r3, fp, #1040
	sub	r3, r3, #4
	sub	r3, r3, #8
	ldr	r2, [fp, #-1084]
	mov	r1, #1
	add	r0, fp, #4
	bl	ns_parserr
	mov	r3, r0
	cmp	r3, #0
	beq	.L206
	sub	r3, fp, #1072
	sub	r3, r3, #4
	sub	r3, r3, #12
	mov	r0, r3
	bl	time
	sub	r3, fp, #1072
	sub	r3, r3, #4
	sub	r3, r3, #12
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-1056]
	ldr	r0, [fp, #-1056]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-1056]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L214+16
	ldr	r0, [r3]
	ldr	r3, .L214+20
	str	r3, [sp]
	ldr	r3, .L214+24
	ldr	r2, [fp, #-1056]
	ldr	r1, .L214+28
	bl	fprintf
	ldr	r0, .L214+32
	bl	perror
	mov	r3, #0
	b	.L212
.L206:
	sub	r3, fp, #4
	sub	r3, r3, #1040
	sub	r3, r3, #8
	add	r3, r3, #1024
	add	r3, r3, #2
	ldrh	r3, [r3]
	str	r3, [fp, #-1068]
	ldr	r3, [fp, #-12]
	str	r3, [fp, #-1064]
	ldr	r3, [fp, #-1068]
	cmp	r3, #1
	bne	.L207
	ldr	r3, .L214+36
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L208
	ldr	r3, [fp, #-1064]
	ldr	r0, [r3]
	bl	inet_ntoa
	mov	r3, r0
	mov	r1, r3
	ldr	r0, .L214+40
	bl	printf
.L208:
	ldr	r3, .L214+44
	ldr	r1, [r3, #4]
	ldr	r3, .L214+44
	ldr	r3, [r3]
	mov	r2, r3
	ldr	r3, .L214+48
	str	r3, [sp]
	mov	r3, #4
	ldr	r0, [fp, #-1064]
	bl	bsearch
	str	r0, [fp, #-1060]
	ldr	r3, [fp, #-1060]
	cmp	r3, #0
	beq	.L209
	mov	r3, #1
	b	.L212
.L209:
	ldr	r3, [fp, #-1064]
	ldr	r1, .L214+12
	ldr	r0, [r3]
	bl	test_ip_in_list
	mov	r3, r0
	cmp	r3, #0
	beq	.L210
	ldr	r3, [fp, #-1076]
	cmp	r3, #0
	beq	.L207
	ldr	r3, .L214+52
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L207
	mov	r3, #1
	b	.L212
.L210:
	ldr	r3, [fp, #-1080]
	cmp	r3, #0
	beq	.L207
	mov	r3, #1
	b	.L212
.L207:
	ldr	r3, [fp, #-1084]
	add	r3, r3, #1
	str	r3, [fp, #-1084]
.L205:
	ldr	r2, [fp, #-1084]
	ldr	r3, [fp, #-1072]
	cmp	r2, r3
	blt	.L211
	mov	r3, #0
.L212:
	ldr	r2, .L214
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L213
	bl	__stack_chk_fail
.L213:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, lr}
	add	sp, sp, #16
	bx	lr
.L215:
	.align	2
.L214:
	.word	.LC50
	.word	chnroute_file
	.word	dns_servers_len
	.word	chnroute_list
	.word	stderr
	.word	657
	.word	.LC6
	.word	.LC7
	.word	.LC46
	.word	verbose
	.word	.LC49
	.word	ip_list
	.word	cmp_in_addr
	.word	bidirectional
	.size	should_filter_query, .-should_filter_query
	.section	.rodata
	.align	2
.LC51:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	schedule_delay, %function
schedule_delay:
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #32
	str	r0, [fp, #-24]
	str	r1, [fp, #-28]
	str	r2, [fp, #-32]
	str	r3, [fp, #-36]
	ldr	r3, .L220
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	sub	r3, fp, #16
	mov	r0, r3
	bl	time
	ldr	r3, .L220+4
	ldr	r2, [r3]
	mov	r3, r2
	lsl	r3, r3, #2
	add	r3, r3, r2
	lsl	r3, r3, #2
	ldr	r2, .L220+8
	add	r3, r3, r2
	str	r3, [fp, #-12]
	ldr	r2, [fp, #-16]
	ldr	r3, [fp, #-12]
	str	r2, [r3]
	ldr	r0, [fp, #-28]
	bl	malloc
	mov	r3, r0
	mov	r2, r3
	ldr	r3, [fp, #-12]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-12]
	ldr	r3, [r3, #4]
	ldr	r2, [fp, #-28]
	ldr	r1, [fp, #-24]
	mov	r0, r3
	bl	memcpy
	ldr	r3, [fp, #-12]
	ldr	r2, [fp, #-28]
	str	r2, [r3, #8]
	ldr	r0, [fp, #-36]
	bl	malloc
	mov	r3, r0
	mov	r2, r3
	ldr	r3, [fp, #-12]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-12]
	ldr	r3, [r3, #12]
	ldr	r2, [fp, #-36]
	ldr	r1, [fp, #-32]
	mov	r0, r3
	bl	memcpy
	ldr	r3, [fp, #-12]
	ldr	r2, [fp, #-36]
	str	r2, [r3, #16]
	ldr	r3, .L220+4
	ldr	r3, [r3]
	add	r3, r3, #1
	rsbs	r2, r3, #0
	and	r3, r3, #31
	and	r2, r2, #31
	rsbpl	r3, r2, #0
	ldr	r2, .L220+4
	str	r3, [r2]
	ldr	r3, .L220+4
	ldr	r2, [r3]
	ldr	r3, .L220+12
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L219
	ldr	r3, .L220+12
	ldr	r3, [r3]
	mov	r0, r3
	bl	free_delay
	ldr	r3, .L220+12
	ldr	r3, [r3]
	add	r3, r3, #1
	rsbs	r2, r3, #0
	and	r3, r3, #31
	and	r2, r2, #31
	rsbpl	r3, r2, #0
	ldr	r2, .L220+12
	str	r3, [r2]
.L219:
	nop
	ldr	r3, .L220
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L218
	bl	__stack_chk_fail
.L218:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L221:
	.align	2
.L220:
	.word	.LC51
	.word	delay_queue_last
	.word	delay_queue
	.word	delay_queue_first
	.size	schedule_delay, .-schedule_delay
	.section	.rodata
	.align	2
.LC52:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	check_and_send_delay, %function
check_and_send_delay:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #32
	ldr	r3, .L231
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	sub	r3, fp, #28
	mov	r0, r3
	bl	time
	ldr	r3, [fp, #-28]
	sub	r3, r3, #3
	str	r3, [fp, #-28]
	ldr	r3, .L231+4
	ldr	r3, [r3]
	str	r3, [fp, #-20]
	b	.L223
.L228:
	ldr	r2, [fp, #-20]
	mov	r3, r2
	lsl	r3, r3, #2
	add	r3, r3, r2
	lsl	r3, r3, #2
	ldr	r2, .L231+8
	add	r3, r3, r2
	str	r3, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [r3]
	ldr	r3, [fp, #-28]
	cmp	r2, r3
	bge	.L230
	ldr	r3, .L231+12
	ldr	r0, [r3]
	ldr	r3, [fp, #-16]
	ldr	r1, [r3, #4]
	ldr	r3, [fp, #-16]
	ldr	ip, [r3, #8]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	ldr	r2, [fp, #-16]
	ldr	r2, [r2, #16]
	str	r2, [sp, #4]
	str	r3, [sp]
	mov	r3, #0
	mov	r2, ip
	bl	sendto
	mov	r3, r0
	cmn	r3, #1
	bne	.L225
	sub	r3, fp, #24
	mov	r0, r3
	bl	time
	sub	r3, fp, #24
	mov	r0, r3
	bl	ctime
	str	r0, [fp, #-12]
	ldr	r0, [fp, #-12]
	bl	strlen
	mov	r3, r0
	sub	r3, r3, #1
	ldr	r2, [fp, #-12]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, .L231+16
	ldr	r0, [r3]
	mov	r3, #724
	str	r3, [sp]
	ldr	r3, .L231+20
	ldr	r2, [fp, #-12]
	ldr	r1, .L231+24
	bl	fprintf
	ldr	r0, .L231+28
	bl	perror
.L225:
	ldr	r0, [fp, #-20]
	bl	free_delay
	ldr	r3, .L231+4
	ldr	r3, [r3]
	add	r3, r3, #1
	rsbs	r2, r3, #0
	and	r3, r3, #31
	and	r2, r2, #31
	rsbpl	r3, r2, #0
	ldr	r2, .L231+4
	str	r3, [r2]
	ldr	r3, [fp, #-20]
	add	r3, r3, #1
	rsbs	r2, r3, #0
	and	r3, r3, #31
	and	r2, r2, #31
	rsbpl	r3, r2, #0
	str	r3, [fp, #-20]
.L223:
	ldr	r3, .L231+32
	ldr	r3, [r3]
	ldr	r2, [fp, #-20]
	cmp	r2, r3
	bne	.L228
	b	.L227
.L230:
	nop
.L227:
	nop
	ldr	r3, .L231
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L229
	bl	__stack_chk_fail
.L229:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L232:
	.align	2
.L231:
	.word	.LC52
	.word	delay_queue_first
	.word	delay_queue
	.word	local_sock
	.word	stderr
	.word	.LC6
	.word	.LC7
	.word	.LC37
	.word	delay_queue_last
	.size	check_and_send_delay, .-check_and_send_delay
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	free_delay, %function
free_delay:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #8
	str	r0, [fp, #-8]
	ldr	r1, .L234
	ldr	r2, [fp, #-8]
	mov	r3, r2
	lsl	r3, r3, #2
	add	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r1, r3
	add	r3, r3, #4
	ldr	r3, [r3]
	mov	r0, r3
	bl	free
	ldr	r1, .L234
	ldr	r2, [fp, #-8]
	mov	r3, r2
	lsl	r3, r3, #2
	add	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r1, r3
	add	r3, r3, #12
	ldr	r3, [r3]
	mov	r0, r3
	bl	free
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L235:
	.align	2
.L234:
	.word	delay_queue
	.size	free_delay, .-free_delay
	.ident	"GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0"
	.section	.note.GNU-stack,"",%progbits
