40579a:	0f
40579b:	75 09                	jne    0x4057a6
40579d:	83 7c 24 08 ff       	cmpl   $0xffffffff,0x8(%esp)
4057a2:	76 04                	jbe    0x4057a8
4057a4:	eb 30                	jmp    0x4057d6
4057a6:	7f 2e                	jg     0x4057d6
4057a8:	8b c7                	mov    %edi,%eax
4057aa:	99                   	cltd
4057ab:	52                   	push   %edx
4057ac:	50                   	push   %eax
4057ad:	8b 44 24 10          	mov    0x10(%esp),%eax
4057b1:	8b 54 24 14          	mov    0x14(%esp),%edx
4057b5:	0f a4 c2 04          	shld   $0x4,%eax,%edx
4057b9:	c1 e0 04             	shl    $0x4,%eax
4057bc:	03 04 24             	add    (%esp),%eax
4057bf:	13 54 24 04          	adc    0x4(%esp),%edx
4057c3:	83 c4 08             	add    $0x8,%esp
4057c6:	89 44 24 08          	mov    %eax,0x8(%esp)
4057ca:	89 54 24 0c          	mov    %edx,0xc(%esp)
4057ce:	45                   	inc    %ebp
4057cf:	33 db                	xor    %ebx,%ebx
4057d1:	e9 7a ff ff ff       	jmp    0x405750
4057d6:	80 7c 24 10 00       	cmpb   $0x0,0x10(%esp)
4057db:	0f 84 cd 00 00 00    	je     0x4058ae
4057e1:	8b 44 24 08          	mov    0x8(%esp),%eax
4057e5:	8b 54 24 0c          	mov    0xc(%esp),%edx
4057e9:	f7 d8                	neg    %eax
4057eb:	83 d2 00             	adc    $0x0,%edx
4057ee:	f7 da                	neg    %edx
4057f0:	89 44 24 08          	mov    %eax,0x8(%esp)
4057f4:	89 54 24 0c          	mov    %edx,0xc(%esp)
4057f8:	e9 b1 00 00 00       	jmp    0x4058ae
4057fd:	0f b6 44 2e ff       	movzbl -0x1(%esi,%ebp,1),%eax
405802:	04 d0                	add    $0xd0,%al
405804:	2c 0a                	sub    $0xa,%al
405806:	73 5f                	jae    0x405867
405808:	0f b6 7c 2e ff       	movzbl -0x1(%esi,%ebp,1),%edi
40580d:	83 ef 30             	sub    $0x30,%edi
405810:	83 7c 24 0c 00       	cmpl   $0x0,0xc(%esp)
405815:	75 09                	jne    0x405820
405817:	83 7c 24 08 00       	cmpl   $0x0,0x8(%esp)
40581c:	72 49                	jb     0x405867
40581e:	eb 02                	jmp    0x405822
405820:	7c 45                	jl     0x405867
405822:	81 7c 24 0c cc cc cc 	cmpl   $0xccccccc,0xc(%esp)
405829:	0c
40582a:	75 0c                	jne    0x405838
40582c:	81 7c 24 08 cc cc cc 	cmpl   $0xcccccccc,0x8(%esp)
405833:	cc
405834:	76 04                	jbe    0x40583a
405836:	eb 2f                	jmp    0x405867
405838:	7f 2d                	jg     0x405867
40583a:	6a 00                	push   $0x0
40583c:	6a 0a                	push   $0xa
40583e:	8b 44 24 10          	mov    0x10(%esp),%eax
405842:	8b 54 24 14          	mov    0x14(%esp),%edx
405846:	e8 51 fe ff ff       	call   0x40569c
40584b:	52                   	push   %edx
40584c:	50                   	push   %eax
40584d:	8b c7                	mov    %edi,%eax
40584f:	99                   	cltd
405850:	03 04 24             	add    (%esp),%eax
405853:	13 54 24 04          	adc    0x4(%esp),%edx
405857:	83 c4 08             	add    $0x8,%esp
40585a:	89 44 24 08          	mov    %eax,0x8(%esp)
40585e:	89 54 24 0c          	mov    %edx,0xc(%esp)
405862:	45                   	inc    %ebp
405863:	33 db                	xor    %ebx,%ebx
405865:	eb 96                	jmp    0x4057fd
405867:	80 7c 24 10 00       	cmpb   $0x0,0x10(%esp)
40586c:	74 17                	je     0x405885
40586e:	8b 44 24 08          	mov    0x8(%esp),%eax
405872:	8b 54 24 0c          	mov    0xc(%esp),%edx
405876:	f7 d8                	neg    %eax
405878:	83 d2 00             	adc    $0x0,%edx
40587b:	f7 da                	neg    %edx
40587d:	89 44 24 08          	mov    %eax,0x8(%esp)
405881:	89 54 24 0c          	mov    %edx,0xc(%esp)
405885:	83 7c 24 0c 00       	cmpl   $0x0,0xc(%esp)
40588a:	75 05                	jne    0x405891
40588c:	83 7c 24 08 00       	cmpl   $0x0,0x8(%esp)
405891:	74 1b                	je     0x4058ae
405893:	83 7c 24 0c 00       	cmpl   $0x0,0xc(%esp)
405898:	75 0a                	jne    0x4058a4
40589a:	83 7c 24 08 00       	cmpl   $0x0,0x8(%esp)
40589f:	0f 92 c0             	setb   %al
4058a2:	eb 03                	jmp    0x4058a7
4058a4:	0f 9c c0             	setl   %al
4058a7:	3a 44 24 10          	cmp    0x10(%esp),%al
4058ab:	74 01                	je     0x4058ae
4058ad:	4d                   	dec    %ebp
4058ae:	80 7c 2e ff 00       	cmpb   $0x0,-0x1(%esi,%ebp,1)
4058b3:	0f 95 c0             	setne  %al
4058b6:	0a d8                	or     %al,%bl
4058b8:	74 07                	je     0x4058c1
4058ba:	8b 04 24             	mov    (%esp),%eax
4058bd:	89 28                	mov    %ebp,(%eax)
4058bf:	eb 07                	jmp    0x4058c8
4058c1:	8b 04 24             	mov    (%esp),%eax
4058c4:	33 d2                	xor    %edx,%edx
4058c6:	89 10                	mov    %edx,(%eax)
4058c8:	8b 44 24 08          	mov    0x8(%esp),%eax
4058cc:	8b 54 24 0c          	mov    0xc(%esp),%edx
4058d0:	83 c4 14             	add    $0x14,%esp
4058d3:	5d                   	pop    %ebp
4058d4:	5f                   	pop    %edi
4058d5:	5e                   	pop    %esi
4058d6:	5b                   	pop    %ebx
4058d7:	c3                   	ret
4058d8:	85 c0                	test   %eax,%eax
4058da:	74 03                	je     0x4058df
4058dc:	8b 40 fc             	mov    -0x4(%eax),%eax
4058df:	c3                   	ret
4058e0:	e8 f3 ff ff ff       	call   0x4058d8
4058e5:	48                   	dec    %eax
4058e6:	c3                   	ret
4058e7:	90                   	nop
4058e8:	55                   	push   %ebp
4058e9:	8b ec                	mov    %esp,%ebp
4058eb:	ff 75 08             	push   0x8(%ebp)
4058ee:	e8 39 fc ff ff       	call   0x40552c
4058f3:	5d                   	pop    %ebp
4058f4:	c2 04 00             	ret    $0x4
4058f7:	90                   	nop
4058f8:	e9 03 fa ff ff       	jmp    0x405300
4058fd:	c3                   	ret
4058fe:	8b c0                	mov    %eax,%eax
405900:	e8 9b 01 00 00       	call   0x405aa0
405905:	c3                   	ret
405906:	8b c0                	mov    %eax,%eax
405908:	55                   	push   %ebp
405909:	8b ec                	mov    %esp,%ebp
40590b:	83 c4 e0             	add    $0xffffffe0,%esp
40590e:	53                   	push   %ebx
40590f:	56                   	push   %esi
405910:	57                   	push   %edi
405911:	89 4d f8             	mov    %ecx,-0x8(%ebp)
405914:	8b f2                	mov    %edx,%esi
405916:	89 45 fc             	mov    %eax,-0x4(%ebp)
405919:	8b 5d fc             	mov    -0x4(%ebp),%ebx
40591c:	8b 1b                	mov    (%ebx),%ebx
40591e:	8b 45 08             	mov    0x8(%ebp),%eax
405921:	8b 38                	mov    (%eax),%edi
405923:	85 ff                	test   %edi,%edi
405925:	7f 1a                	jg     0x405941
405927:	85 ff                	test   %edi,%edi
405929:	7d 07                	jge    0x405932
40592b:	b0 04                	mov    $0x4,%al
40592d:	e8 1a d5 ff ff       	call   0x402e4c
405932:	8b 45 fc             	mov    -0x4(%ebp),%eax
405935:	8b d6                	mov    %esi,%edx
405937:	e8 c4 ff ff ff       	call   0x405900
40593c:	e9 49 01 00 00       	jmp    0x405a8a
405941:	33 c0                	xor    %eax,%eax
405943:	89 45 f0             	mov    %eax,-0x10(%ebp)
405946:	85 db                	test   %ebx,%ebx
405948:	74 0b                	je     0x405955
40594a:	83 eb 04             	sub    $0x4,%ebx
40594d:	8b 03                	mov    (%ebx),%eax
40594f:	89 45 f0             	mov    %eax,-0x10(%ebp)
405952:	83 eb 04             	sub    $0x4,%ebx
405955:	0f b6 46 01          	movzbl 0x1(%esi),%eax
405959:	01 c6                	add    %eax,%esi
40595b:	8b c6                	mov    %esi,%eax
40595d:	8b 50 02             	mov    0x2(%eax),%edx
405960:	89 55 e8             	mov    %edx,-0x18(%ebp)
405963:	8b 50 06             	mov    0x6(%eax),%edx
405966:	85 d2                	test   %edx,%edx
405968:	74 04                	je     0x40596e
40596a:	8b 32                	mov    (%edx),%esi
40596c:	eb 02                	jmp    0x405970
40596e:	33 f6                	xor    %esi,%esi
405970:	8b c7                	mov    %edi,%eax
405972:	f7 6d e8             	imull  -0x18(%ebp)
405975:	89 45 e4             	mov    %eax,-0x1c(%ebp)
405978:	8b 45 e4             	mov    -0x1c(%ebp),%eax
40597b:	99                   	cltd
40597c:	f7 ff                	idiv   %edi
40597e:	3b 45 e8             	cmp    -0x18(%ebp),%eax
405981:	74 07                	je     0x40598a
405983:	b0 04                	mov    $0x4,%al
405985:	e8 c2 d4 ff ff       	call   0x402e4c
40598a:	83 45 e4 08          	addl   $0x8,-0x1c(%ebp)
40598e:	85 db                	test   %ebx,%ebx
405990:	74 05                	je     0x405997
405992:	83 3b 01             	cmpl   $0x1,(%ebx)
405995:	75 35                	jne    0x4059cc
405997:	89 5d e0             	mov    %ebx,-0x20(%ebp)
40599a:	3b 7d f0             	cmp    -0x10(%ebp),%edi
40599d:	7d 1d                	jge    0x4059bc
40599f:	85 f6                	test   %esi,%esi
4059a1:	74 19                	je     0x4059bc
4059a3:	8b c3                	mov    %ebx,%eax
4059a5:	83 c0 08             	add    $0x8,%eax
4059a8:	8b d7                	mov    %edi,%edx
4059aa:	0f af 55 e8          	imul   -0x18(%ebp),%edx
4059ae:	03 c2                	add    %edx,%eax
4059b0:	8b 4d f0             	mov    -0x10(%ebp),%ecx
4059b3:	2b cf                	sub    %edi,%ecx
4059b5:	8b d6                	mov    %esi,%edx
4059b7:	e8 3c ff ff ff       	call   0x4058f8
4059bc:	8d 45 e0             	lea    -0x20(%ebp),%eax
4059bf:	8b 55 e4             	mov    -0x1c(%ebp),%edx
4059c2:	e8 69 d3 ff ff       	call   0x402d30
4059c7:	8b 5d e0             	mov    -0x20(%ebp),%ebx
4059ca:	eb 5e                	jmp    0x405a2a
4059cc:	ff 0b                	decl   (%ebx)
4059ce:	8b 45 e4             	mov    -0x1c(%ebp),%eax
4059d1:	e8 26 d3 ff ff       	call   0x402cfc
4059d6:	8b d8                	mov    %eax,%ebx
4059d8:	8b 45 f0             	mov    -0x10(%ebp),%eax
4059db:	89 45 ec             	mov    %eax,-0x14(%ebp)
4059de:	3b 7d ec             	cmp    -0x14(%ebp),%edi
4059e1:	7d 03                	jge    0x4059e6
4059e3:	89 7d ec             	mov    %edi,-0x14(%ebp)
4059e6:	85 f6                	test   %esi,%esi
4059e8:	74 2a                	je     0x405a14
4059ea:	8b 55 ec             	mov    -0x14(%ebp),%edx
4059ed:	0f af 55 e8          	imul   -0x18(%ebp),%edx
4059f1:	8b c3                	mov    %ebx,%eax
4059f3:	83 c0 08             	add    $0x8,%eax
4059f6:	33 c9                	xor    %ecx,%ecx
4059f8:	e8 5b d8 ff ff       	call   0x403258
4059fd:	8b 45 ec             	mov    -0x14(%ebp),%eax
405a00:	50                   	push   %eax
405a01:	8b 55 fc             	mov    -0x4(%ebp),%edx
405a04:	8b 12                	mov    (%edx),%edx
405a06:	8b c3                	mov    %ebx,%eax
405a08:	83 c0 08             	add    $0x8,%eax
405a0b:	8b ce                	mov    %esi,%ecx
405a0d:	e8 d6 fe ff ff       	call   0x4058e8
405a12:	eb 16                	jmp    0x405a2a
405a14:	8b 4d ec             	mov    -0x14(%ebp),%ecx
405a17:	0f af 4d e8          	imul   -0x18(%ebp),%ecx
405a1b:	8b d3                	mov    %ebx,%edx
405a1d:	83 c2 08             	add    $0x8,%edx
405a20:	8b 45 fc             	mov    -0x4(%ebp),%eax
405a23:	8b 00                	mov    (%eax),%eax
405a25:	e8 c2 d4 ff ff       	call   0x402eec
405a2a:	c7 03 01 00 00 00    	movl   $0x1,(%ebx)
405a30:	83 c3 04             	add    $0x4,%ebx
405a33:	89 3b                	mov    %edi,(%ebx)
405a35:	83 c3 04             	add    $0x4,%ebx
405a38:	8b d7                	mov    %edi,%edx
405a3a:	2b 55 f0             	sub    -0x10(%ebp),%edx
405a3d:	0f af 55 e8          	imul   -0x18(%ebp),%edx
405a41:	8b 45 e8             	mov    -0x18(%ebp),%eax
405a44:	0f af 45 f0          	imul   -0x10(%ebp),%eax
405a48:	03 c3                	add    %ebx,%eax
405a4a:	33 c9                	xor    %ecx,%ecx
405a4c:	e8 07 d8 ff ff       	call   0x403258
405a51:	83 7d f8 01          	cmpl   $0x1,-0x8(%ebp)
405a55:	7e 2e                	jle    0x405a85
405a57:	83 45 08 04          	addl   $0x4,0x8(%ebp)
405a5b:	ff 4d f8             	decl   -0x8(%ebp)
405a5e:	4f                   	dec    %edi
405a5f:	85 ff                	test   %edi,%edi
405a61:	7c 22                	jl     0x405a85
405a63:	47                   	inc    %edi
405a64:	c7 45 f4 00 00 00 00 	movl   $0x0,-0xc(%ebp)
405a6b:	8b 45 08             	mov    0x8(%ebp),%eax
405a6e:	50                   	push   %eax
405a6f:	8b 45 f4             	mov    -0xc(%ebp),%eax
405a72:	8d 04 83             	lea    (%ebx,%eax,4),%eax
405a75:	8b 4d f8             	mov    -0x8(%ebp),%ecx
405a78:	8b d6                	mov    %esi,%edx
405a7a:	e8 89 fe ff ff       	call   0x405908
405a7f:	ff 45 f4             	incl   -0xc(%ebp)
405a82:	4f                   	dec    %edi
405a83:	75 e6                	jne    0x405a6b
405a85:	8b 45 fc             	mov    -0x4(%ebp),%eax
405a88:	89 18                	mov    %ebx,(%eax)
405a8a:	5f                   	pop    %edi
405a8b:	5e                   	pop    %esi
405a8c:	5b                   	pop    %ebx
405a8d:	8b e5                	mov    %ebp,%esp
405a8f:	5d                   	pop    %ebp
405a90:	c2 04 00             	ret    $0x4
405a93:	90                   	nop
405a94:	54                   	push   %esp
405a95:	83 04 24 04          	addl   $0x4,(%esp)
405a99:	e8 6a fe ff ff       	call   0x405908
405a9e:	c3                   	ret
405a9f:	90                   	nop
405aa0:	8b 08                	mov    (%eax),%ecx
405aa2:	85 c9                	test   %ecx,%ecx
405aa4:	74 33                	je     0x405ad9
405aa6:	c7 00 00 00 00 00    	movl   $0x0,(%eax)
405aac:	f0 ff 49 f8          	lock decl -0x8(%ecx)
405ab0:	75 27                	jne    0x405ad9
405ab2:	50                   	push   %eax
405ab3:	89 c8                	mov    %ecx,%eax
405ab5:	31 c9                	xor    %ecx,%ecx
405ab7:	8a 4a 01             	mov    0x1(%edx),%cl
405aba:	8b 54 11 06          	mov    0x6(%ecx,%edx,1),%edx
405abe:	85 d2                	test   %edx,%edx
405ac0:	74 0e                	je     0x405ad0
405ac2:	8b 48 fc             	mov    -0x4(%eax),%ecx
405ac5:	85 c9                	test   %ecx,%ecx
405ac7:	74 07                	je     0x405ad0
405ac9:	8b 12                	mov    (%edx),%edx
405acb:	e8 30 f8 ff ff       	call   0x405300
405ad0:	83 e8 08             	sub    $0x8,%eax
405ad3:	e8 40 d2 ff ff       	call   0x402d18
405ad8:	58                   	pop    %eax
405ad9:	c3                   	ret
405ada:	8b c0                	mov    %eax,%eax
405adc:	53                   	push   %ebx
405add:	8b 18                	mov    (%eax),%ebx
405adf:	85 d2                	test   %edx,%edx
405ae1:	74 04                	je     0x405ae7
405ae3:	f0 ff 42 f8          	lock incl -0x8(%edx)
405ae7:	85 db                	test   %ebx,%ebx
405ae9:	74 14                	je     0x405aff
405aeb:	f0 ff 4b f8          	lock decl -0x8(%ebx)
405aef:	75 0e                	jne    0x405aff
405af1:	50                   	push   %eax
405af2:	52                   	push   %edx
405af3:	89 ca                	mov    %ecx,%edx
405af5:	ff 43 f8             	incl   -0x8(%ebx)
405af8:	e8 a3 ff ff ff       	call   0x405aa0
405afd:	5a                   	pop    %edx
405afe:	58                   	pop    %eax
405aff:	89 10                	mov    %edx,(%eax)
405b01:	5b                   	pop    %ebx
405b02:	c3                   	ret
405b03:	90                   	nop
405b04:	83 c4 e4             	add    $0xffffffe4,%esp
405b07:	6a 1c                	push   $0x1c
405b09:	8d 54 24 04          	lea    0x4(%esp),%edx
405b0d:	52                   	push   %edx
405b0e:	50                   	push   %eax
405b0f:	e8 30 b8 ff ff       	call   0x401344
405b14:	81 7c 24 10 00 10 00 	cmpl   $0x1000,0x10(%esp)
405b1b:	00
405b1c:	75 06                	jne    0x405b24
405b1e:	8b 44 24 04          	mov    0x4(%esp),%eax
405b22:	eb 02                	jmp    0x405b26
405b24:	33 c0                	xor    %eax,%eax
405b26:	83 c4 1c             	add    $0x1c,%esp
405b29:	c3                   	ret
405b2a:	8b c0                	mov    %eax,%eax
405b2c:	e8 d3 ff ff ff       	call   0x405b04
405b31:	c3                   	ret
405b32:	8b c0                	mov    %eax,%eax
405b34:	53                   	push   %ebx
405b35:	56                   	push   %esi
405b36:	81 c4 f8 fe ff ff    	add    $0xfffffef8,%esp
405b3c:	8b d8                	mov    %eax,%ebx
405b3e:	83 7b 10 00          	cmpl   $0x0,0x10(%ebx)