509838:	85 ff                	test   %edi,%edi
50983a:	75 34                	jne    0x509870
50983c:	ff 74 24 1c          	push   0x1c(%esp)
509840:	e8 fb 0a 00 00       	call   0x50a340
509845:	8b f0                	mov    %eax,%esi
509847:	83 c4 04             	add    $0x4,%esp
50984a:	85 f6                	test   %esi,%esi
50984c:	75 2b                	jne    0x509879
50984e:	68 cf 01 00 00       	push   $0x1cf
509853:	68 14 ae 62 00       	push   $0x62ae14
509858:	6a 3a                	push   $0x3a
50985a:	68 e5 00 00 00       	push   $0xe5
50985f:	6a 0d                	push   $0xd
509861:	e8 1a f7 fc ff       	call   0x4d8f80
509866:	83 c4 14             	add    $0x14,%esp
509869:	33 c0                	xor    %eax,%eax
50986b:	5f                   	pop    %edi
50986c:	5e                   	pop    %esi
50986d:	5d                   	pop    %ebp
50986e:	5b                   	pop    %ebx
50986f:	c3                   	ret
509870:	8b 44 24 1c          	mov    0x1c(%esp),%eax
509874:	8b f7                	mov    %edi,%esi
509876:	89 47 04             	mov    %eax,0x4(%edi)
509879:	8b 5c 24 14          	mov    0x14(%esp),%ebx
50987d:	53                   	push   %ebx
50987e:	e8 5d 04 fd ff       	call   0x4d9ce0
509883:	83 c4 04             	add    $0x4,%esp
509886:	85 c0                	test   %eax,%eax
509888:	74 14                	je     0x50989e
50988a:	53                   	push   %ebx
50988b:	e8 d0 04 fd ff       	call   0x4d9d60
509890:	83 c4 04             	add    $0x4,%esp
509893:	85 c0                	test   %eax,%eax
509895:	75 07                	jne    0x50989e
509897:	81 4e 04 02 01 00 00 	orl    $0x102,0x4(%esi)
50989e:	53                   	push   %ebx
50989f:	e8 7c 05 fd ff       	call   0x4d9e20
5098a4:	83 c0 07             	add    $0x7,%eax
5098a7:	99                   	cltd
5098a8:	83 e2 07             	and    $0x7,%edx
5098ab:	8d 2c 02             	lea    (%edx,%eax,1),%ebp
5098ae:	b8 01 00 00 00       	mov    $0x1,%eax
5098b3:	c1 fd 03             	sar    $0x3,%ebp
5098b6:	85 ed                	test   %ebp,%ebp
5098b8:	0f 44 e8             	cmove  %eax,%ebp
5098bb:	55                   	push   %ebp
5098bc:	6a 00                	push   $0x0
5098be:	56                   	push   %esi
5098bf:	e8 7c 09 00 00       	call   0x50a240
5098c4:	83 c4 10             	add    $0x10,%esp
5098c7:	85 c0                	test   %eax,%eax
5098c9:	75 2f                	jne    0x5098fa
5098cb:	68 dc 01 00 00       	push   $0x1dc
5098d0:	68 14 ae 62 00       	push   $0x62ae14
5098d5:	6a 41                	push   $0x41
5098d7:	68 e5 00 00 00       	push   $0xe5
5098dc:	6a 0d                	push   $0xd
5098de:	e8 9d f6 fc ff       	call   0x4d8f80
5098e3:	83 c4 14             	add    $0x14,%esp
5098e6:	3b f7                	cmp    %edi,%esi
5098e8:	74 09                	je     0x5098f3
5098ea:	56                   	push   %esi
5098eb:	e8 90 1e fe ff       	call   0x4eb780
5098f0:	83 c4 04             	add    $0x4,%esp
5098f3:	5f                   	pop    %edi
5098f4:	5e                   	pop    %esi
5098f5:	5d                   	pop    %ebp
5098f6:	33 c0                	xor    %eax,%eax
5098f8:	5b                   	pop    %ebx
5098f9:	c3                   	ret
5098fa:	53                   	push   %ebx
5098fb:	e8 60 04 fd ff       	call   0x4d9d60
509900:	8b 4e 08             	mov    0x8(%esi),%ecx
509903:	83 c4 04             	add    $0x4,%esp
509906:	85 c0                	test   %eax,%eax
509908:	74 0c                	je     0x509916
50990a:	5f                   	pop    %edi
50990b:	c6 01 00             	movb   $0x0,(%ecx)
50990e:	8b c6                	mov    %esi,%eax
509910:	89 2e                	mov    %ebp,(%esi)
509912:	5e                   	pop    %esi
509913:	5d                   	pop    %ebp
509914:	5b                   	pop    %ebx
509915:	c3                   	ret
509916:	51                   	push   %ecx
509917:	53                   	push   %ebx
509918:	e8 e3 fe fc ff       	call   0x4d9800
50991d:	83 c4 08             	add    $0x8,%esp
509920:	8b e8                	mov    %eax,%ebp
509922:	89 2e                	mov    %ebp,(%esi)
509924:	8b c6                	mov    %esi,%eax
509926:	5f                   	pop    %edi
509927:	5e                   	pop    %esi
509928:	5d                   	pop    %ebp
509929:	5b                   	pop    %ebx
50992a:	c3                   	ret
50992b:	cc                   	int3
50992c:	cc                   	int3
50992d:	cc                   	int3
50992e:	cc                   	int3
50992f:	cc                   	int3
509930:	b8 04 00 00 00       	mov    $0x4,%eax
509935:	e8 76 7e 0c 00       	call   0x5d17b0
50993a:	53                   	push   %ebx
50993b:	8b 5c 24 10          	mov    0x10(%esp),%ebx
50993f:	55                   	push   %ebp
509940:	8b 6c 24 18          	mov    0x18(%esp),%ebp
509944:	56                   	push   %esi
509945:	57                   	push   %edi
509946:	55                   	push   %ebp
509947:	ff 33                	push   (%ebx)
509949:	6a 00                	push   $0x0
50994b:	6a 00                	push   $0x0
50994d:	e8 ae 00 00 00       	call   0x509a00
509952:	83 c4 10             	add    $0x10,%esp
509955:	89 44 24 10          	mov    %eax,0x10(%esp)
509959:	85 c0                	test   %eax,%eax
50995b:	74 60                	je     0x5099bd
50995d:	8b 7c 24 18          	mov    0x18(%esp),%edi
509961:	85 ff                	test   %edi,%edi
509963:	74 06                	je     0x50996b
509965:	8b 37                	mov    (%edi),%esi
509967:	85 f6                	test   %esi,%esi
509969:	75 16                	jne    0x509981
50996b:	e8 c0 1e fe ff       	call   0x4eb830
509970:	8b f0                	mov    %eax,%esi
509972:	85 f6                	test   %esi,%esi
509974:	74 47                	je     0x5099bd
509976:	8b 44 24 10          	mov    0x10(%esp),%eax
50997a:	c7 46 04 02 00 00 00 	movl   $0x2,0x4(%esi)
509981:	50                   	push   %eax
509982:	6a 00                	push   $0x0
509984:	56                   	push   %esi
509985:	e8 b6 08 00 00       	call   0x50a240
50998a:	83 c4 0c             	add    $0xc,%esp
50998d:	85 c0                	test   %eax,%eax
50998f:	75 34                	jne    0x5099c5
509991:	68 39 01 00 00       	push   $0x139
509996:	68 14 ae 62 00       	push   $0x62ae14
50999b:	6a 41                	push   $0x41
50999d:	68 c2 00 00 00       	push   $0xc2
5099a2:	6a 0d                	push   $0xd
5099a4:	e8 d7 f5 fc ff       	call   0x4d8f80
5099a9:	83 c4 14             	add    $0x14,%esp
5099ac:	85 ff                	test   %edi,%edi
5099ae:	74 04                	je     0x5099b4
5099b0:	39 37                	cmp    %esi,(%edi)
5099b2:	74 09                	je     0x5099bd
5099b4:	56                   	push   %esi
5099b5:	e8 c6 1d fe ff       	call   0x4eb780
5099ba:	83 c4 04             	add    $0x4,%esp
5099bd:	5f                   	pop    %edi
5099be:	5e                   	pop    %esi
5099bf:	5d                   	pop    %ebp
5099c0:	33 c0                	xor    %eax,%eax
5099c2:	5b                   	pop    %ebx
5099c3:	59                   	pop    %ecx
5099c4:	c3                   	ret
5099c5:	55                   	push   %ebp
5099c6:	ff 33                	push   (%ebx)
5099c8:	8d 44 24 18          	lea    0x18(%esp),%eax
5099cc:	50                   	push   %eax
5099cd:	ff 76 08             	push   0x8(%esi)
5099d0:	e8 2b 00 00 00       	call   0x509a00
5099d5:	83 c4 10             	add    $0x10,%esp
5099d8:	83 7c 24 10 00       	cmpl   $0x0,0x10(%esp)
5099dd:	74 07                	je     0x5099e6
5099df:	81 4e 04 00 01 00 00 	orl    $0x100,0x4(%esi)
5099e6:	01 2b                	add    %ebp,(%ebx)
5099e8:	85 ff                	test   %edi,%edi
5099ea:	74 02                	je     0x5099ee
5099ec:	89 37                	mov    %esi,(%edi)
5099ee:	5f                   	pop    %edi
5099ef:	8b c6                	mov    %esi,%eax
5099f1:	5e                   	pop    %esi
5099f2:	5d                   	pop    %ebp
5099f3:	5b                   	pop    %ebx
5099f4:	59                   	pop    %ecx
5099f5:	c3                   	ret
5099f6:	cc                   	int3
5099f7:	cc                   	int3
5099f8:	cc                   	int3
5099f9:	cc                   	int3
5099fa:	cc                   	int3
5099fb:	cc                   	int3
5099fc:	cc                   	int3
5099fd:	cc                   	int3
5099fe:	cc                   	int3
5099ff:	cc                   	int3
509a00:	56                   	push   %esi
509a01:	8b 74 24 14          	mov    0x14(%esp),%esi
509a05:	85 f6                	test   %esi,%esi
509a07:	75 22                	jne    0x509a2b
509a09:	68 9a 00 00 00       	push   $0x9a
509a0e:	68 14 ae 62 00       	push   $0x62ae14
509a13:	68 de 00 00 00       	push   $0xde
509a18:	68 e2 00 00 00       	push   $0xe2
509a1d:	6a 0d                	push   $0xd
509a1f:	e8 5c f5 fc ff       	call   0x4d8f80
509a24:	83 c4 14             	add    $0x14,%esp
509a27:	33 c0                	xor    %eax,%eax
509a29:	5e                   	pop    %esi
509a2a:	c3                   	ret
509a2b:	8b 54 24 10          	mov    0x10(%esp),%edx
509a2f:	8b 44 24 0c          	mov    0xc(%esp),%eax
509a33:	53                   	push   %ebx
509a34:	0f b6 1a             	movzbl (%edx),%ebx
509a37:	81 e3 80 00 00 00    	and    $0x80,%ebx
509a3d:	85 c0                	test   %eax,%eax
509a3f:	74 02                	je     0x509a43
509a41:	89 18                	mov    %ebx,(%eax)
509a43:	83 fe 01             	cmp    $0x1,%esi
509a46:	75 1c                	jne    0x509a64
509a48:	8b 4c 24 0c          	mov    0xc(%esp),%ecx
509a4c:	85 c9                	test   %ecx,%ecx
509a4e:	74 0c                	je     0x509a5c
509a50:	8a 02                	mov    (%edx),%al
509a52:	85 db                	test   %ebx,%ebx
509a54:	74 04                	je     0x509a5a
509a56:	f6 d0                	not    %al
509a58:	fe c0                	inc    %al
509a5a:	88 01                	mov    %al,(%ecx)
509a5c:	5b                   	pop    %ebx
509a5d:	b8 01 00 00 00       	mov    $0x1,%eax
509a62:	5e                   	pop    %esi
509a63:	c3                   	ret
509a64:	8a 02                	mov    (%edx),%al
509a66:	33 c9                	xor    %ecx,%ecx
509a68:	89 4c 24 18          	mov    %ecx,0x18(%esp)
509a6c:	57                   	push   %edi
509a6d:	84 c0                	test   %al,%al
509a6f:	75 0e                	jne    0x509a7f
509a71:	b9 01 00 00 00       	mov    $0x1,%ecx
509a76:	89 4c 24 1c          	mov    %ecx,0x1c(%esp)
509a7a:	e9 9c 00 00 00       	jmp    0x509b1b
509a7f:	3c ff                	cmp    $0xff,%al
509a81:	0f 85 c5 00 00 00    	jne    0x509b4c
509a87:	33 ff                	xor    %edi,%edi
509a89:	8d 46 ff             	lea    -0x1(%esi),%eax
509a8c:	8d 4f 01             	lea    0x1(%edi),%ecx
509a8f:	3b f1                	cmp    %ecx,%esi
509a91:	76 79                	jbe    0x509b0c
509a93:	83 f8 08             	cmp    $0x8,%eax
509a96:	72 69                	jb     0x509b01
509a98:	83 e0 07             	and    $0x7,%eax
509a9b:	8b fe                	mov    %esi,%edi
509a9d:	2b f8                	sub    %eax,%edi
509a9f:	0f 57 db             	xorps  %xmm3,%xmm3
509aa2:	0f 57 d2             	xorps  %xmm2,%xmm2
509aa5:	66 66 66 0f 1f 84 00 	data16 data16 nopw 0x0(%eax,%eax,1)
509aac:	00 00 00 00
509ab0:	66 0f 6e 0c 11       	movd   (%ecx,%edx,1),%xmm1
509ab5:	0f 57 c0             	xorps  %xmm0,%xmm0
509ab8:	66 0f 60 c8          	punpcklbw %xmm0,%xmm1
509abc:	66 0f 61 c8          	punpcklwd %xmm0,%xmm1
509ac0:	66 0f eb d9          	por    %xmm1,%xmm3
509ac4:	66 0f 6e 4c 11 04    	movd   0x4(%ecx,%edx,1),%xmm1
509aca:	66 0f 60 c8          	punpcklbw %xmm0,%xmm1
509ace:	83 c1 08             	add    $0x8,%ecx
509ad1:	66 0f 61 c8          	punpcklwd %xmm0,%xmm1
509ad5:	66 0f eb d1          	por    %xmm1,%xmm2
509ad9:	3b cf                	cmp    %edi,%ecx
509adb:	72 d3                	jb     0x509ab0
509add:	66 0f eb d3          	por    %xmm3,%xmm2
509ae1:	0f 28 c2             	movaps %xmm2,%xmm0
509ae4:	66 0f 73 d8 08       	psrldq $0x8,%xmm0
509ae9:	66 0f eb d0          	por    %xmm0,%xmm2
509aed:	0f 10 c2             	movups %xmm2,%xmm0
509af0:	66 0f 73 d8 04       	psrldq $0x4,%xmm0
509af5:	66 0f eb d0          	por    %xmm0,%xmm2
509af9:	66 0f 7e d7          	movd   %xmm2,%edi
509afd:	3b ce                	cmp    %esi,%ecx
509aff:	73 0b                	jae    0x509b0c
509b01:	0f b6 04 11          	movzbl (%ecx,%edx,1),%eax
509b05:	41                   	inc    %ecx
509b06:	0b f8                	or     %eax,%edi
509b08:	3b ce                	cmp    %esi,%ecx
509b0a:	72 f5                	jb     0x509b01
509b0c:	33 c9                	xor    %ecx,%ecx
509b0e:	85 ff                	test   %edi,%edi
509b10:	0f 95 c1             	setne  %cl
509b13:	89 4c 24 1c          	mov    %ecx,0x1c(%esp)
509b17:	85 ff                	test   %edi,%edi
509b19:	74 31                	je     0x509b4c
509b1b:	0f b6 42 01          	movzbl 0x1(%edx),%eax
509b1f:	25 80 00 00 00       	and    $0x80,%eax
509b24:	3b d8                	cmp    %eax,%ebx
509b26:	75 24                	jne    0x509b4c
509b28:	68 bb 00 00 00       	push   $0xbb
509b2d:	68 14 ae 62 00       	push   $0x62ae14
509b32:	68 dd 00 00 00       	push   $0xdd
509b37:	68 e2 00 00 00       	push   $0xe2
509b3c:	6a 0d                	push   $0xd
509b3e:	e8 3d f4 fc ff       	call   0x4d8f80
509b43:	83 c4 14             	add    $0x14,%esp
509b46:	33 c0                	xor    %eax,%eax
509b48:	5f                   	pop    %edi
509b49:	5b                   	pop    %ebx
509b4a:	5e                   	pop    %esi
509b4b:	c3                   	ret
509b4c:	8b 7c 24 10          	mov    0x10(%esp),%edi
509b50:	2b f1                	sub    %ecx,%esi
509b52:	85 ff                	test   %edi,%edi
509b54:	74 19                	je     0x509b6f
509b56:	f7 db                	neg    %ebx
509b58:	1a db                	sbb    %bl,%bl
509b5a:	0f b6 cb             	movzbl %bl,%ecx
509b5d:	51                   	push   %ecx
509b5e:	8b 4c 24 20          	mov    0x20(%esp),%ecx
509b62:	56                   	push   %esi
509b63:	03 ca                	add    %edx,%ecx
509b65:	51                   	push   %ecx
509b66:	57                   	push   %edi
509b67:	e8 94 02 00 00       	call   0x509e00
509b6c:	83 c4 10             	add    $0x10,%esp
509b6f:	5f                   	pop    %edi
509b70:	5b                   	pop    %ebx
509b71:	8b c6                	mov    %esi,%eax
509b73:	5e                   	pop    %esi
509b74:	c3                   	ret
509b75:	cc                   	int3
509b76:	cc                   	int3
509b77:	cc                   	int3
509b78:	cc                   	int3
509b79:	cc                   	int3
509b7a:	cc                   	int3
509b7b:	cc                   	int3
509b7c:	cc                   	int3
509b7d:	cc                   	int3
509b7e:	cc                   	int3
509b7f:	cc                   	int3
509b80:	b8 0c 00 00 00       	mov    $0xc,%eax
509b85:	e8 26 7c 0c 00       	call   0x5d17b0
509b8a:	a1 c0 14 69 00       	mov    0x6914c0,%eax
509b8f:	33 c4                	xor    %esp,%eax
509b91:	89 44 24 08          	mov    %eax,0x8(%esp)
509b95:	8b 44 24 14          	mov    0x14(%esp),%eax
509b99:	55                   	push   %ebp
509b9a:	8b 6c 24 14          	mov    0x14(%esp),%ebp
509b9e:	56                   	push   %esi
509b9f:	57                   	push   %edi
509ba0:	8b 7c 24 24          	mov    0x24(%esp),%edi
509ba4:	ff 74 24 28          	push   0x28(%esp)
509ba8:	89 44 24 10          	mov    %eax,0x10(%esp)
509bac:	ff 37                	push   (%edi)
509bae:	6a 00                	push   $0x0
509bb0:	6a 00                	push   $0x0
509bb2:	e8 49 fe ff ff       	call   0x509a00
509bb7:	8b f0                	mov    %eax,%esi