40d7ad:	83 e8 01             	sub    $0x1,%eax
40d7b0:	0f 85 ab 2d 01 00    	jne    0x420561
40d7b6:	8b 45 08             	mov    0x8(%ebp),%eax
40d7b9:	89 38                	mov    %edi,(%eax)
40d7bb:	8b 0d 68 8e 43 00    	mov    0x438e68,%ecx
40d7c1:	c7 40 08 5c 8e 43 00 	movl   $0x438e5c,0x8(%eax)
40d7c8:	eb bf                	jmp    0x40d789
40d7ca:	8b ff                	mov    %edi,%edi
40d7cc:	55                   	push   %ebp
40d7cd:	8b ec                	mov    %esp,%ebp
40d7cf:	57                   	push   %edi
40d7d0:	8b b9 80 00 00 00    	mov    0x80(%ecx),%edi
40d7d6:	85 ff                	test   %edi,%edi
40d7d8:	78 0c                	js     0x40d7e6
40d7da:	8b 51 70             	mov    0x70(%ecx),%edx
40d7dd:	85 d2                	test   %edx,%edx
40d7df:	75 0c                	jne    0x40d7ed
40d7e1:	bf 02 40 00 80       	mov    $0x80004002,%edi
40d7e6:	8b c7                	mov    %edi,%eax
40d7e8:	5f                   	pop    %edi
40d7e9:	5d                   	pop    %ebp
40d7ea:	c2 04 00             	ret    $0x4
40d7ed:	8b 45 08             	mov    0x8(%ebp),%eax
40d7f0:	56                   	push   %esi
40d7f1:	89 10                	mov    %edx,(%eax)
40d7f3:	8b 49 70             	mov    0x70(%ecx),%ecx
40d7f6:	51                   	push   %ecx
40d7f7:	8b 11                	mov    (%ecx),%edx
40d7f9:	8b 72 04             	mov    0x4(%edx),%esi
40d7fc:	8b ce                	mov    %esi,%ecx
40d7fe:	ff 15 20 a5 43 00    	call   *0x43a520
40d804:	ff d6                	call   *%esi
40d806:	5e                   	pop    %esi
40d807:	eb dd                	jmp    0x40d7e6
40d809:	8b ff                	mov    %edi,%edi
40d80b:	55                   	push   %ebp
40d80c:	8b ec                	mov    %esp,%ebp
40d80e:	53                   	push   %ebx
40d80f:	8b 5d 0c             	mov    0xc(%ebp),%ebx
40d812:	56                   	push   %esi
40d813:	33 f6                	xor    %esi,%esi
40d815:	57                   	push   %edi
40d816:	8b 7d 08             	mov    0x8(%ebp),%edi
40d819:	85 db                	test   %ebx,%ebx
40d81b:	74 22                	je     0x40d83f
40d81d:	8d 4f 04             	lea    0x4(%edi),%ecx
40d820:	8b 01                	mov    (%ecx),%eax
40d822:	8d 57 08             	lea    0x8(%edi),%edx
40d825:	3b c2                	cmp    %edx,%eax
40d827:	74 12                	je     0x40d83b
40d829:	39 58 04             	cmp    %ebx,0x4(%eax)
40d82c:	75 42                	jne    0x40d870
40d82e:	85 c9                	test   %ecx,%ecx
40d830:	74 0d                	je     0x40d83f
40d832:	5f                   	pop    %edi
40d833:	8b c6                	mov    %esi,%eax
40d835:	5e                   	pop    %esi
40d836:	5b                   	pop    %ebx
40d837:	5d                   	pop    %ebp
40d838:	c2 08 00             	ret    $0x8
40d83b:	8b ce                	mov    %esi,%ecx
40d83d:	eb ef                	jmp    0x40d82e
40d83f:	8b 4b 78             	mov    0x78(%ebx),%ecx
40d842:	85 c9                	test   %ecx,%ecx
40d844:	0f 85 93 2d 01 00    	jne    0x4205dd
40d84a:	85 f6                	test   %esi,%esi
40d84c:	78 e4                	js     0x40d832
40d84e:	53                   	push   %ebx
40d84f:	e8 b8 f3 ff ff       	call   0x40cc0c
40d854:	8b d0                	mov    %eax,%edx
40d856:	85 d2                	test   %edx,%edx
40d858:	74 d8                	je     0x40d832
40d85a:	8b 4f 0c             	mov    0xc(%edi),%ecx
40d85d:	8b 01                	mov    (%ecx),%eax
40d85f:	89 02                	mov    %eax,(%edx)
40d861:	89 11                	mov    %edx,(%ecx)
40d863:	3b 4f 0c             	cmp    0xc(%edi),%ecx
40d866:	75 03                	jne    0x40d86b
40d868:	89 57 0c             	mov    %edx,0xc(%edi)
40d86b:	ff 47 10             	incl   0x10(%edi)
40d86e:	eb c2                	jmp    0x40d832
40d870:	8b c8                	mov    %eax,%ecx
40d872:	8b 00                	mov    (%eax),%eax
40d874:	eb af                	jmp    0x40d825
40d876:	6a 3c                	push   $0x3c
40d878:	b8 e7 e4 41 00       	mov    $0x41e4e7,%eax
40d87d:	e8 8c d5 00 00       	call   0x41ae0e
40d882:	8b 35 78 8a 43 00    	mov    0x438a78,%esi
40d888:	89 75 c8             	mov    %esi,-0x38(%ebp)
40d88b:	8d 46 28             	lea    0x28(%esi),%eax
40d88e:	50                   	push   %eax
40d88f:	89 45 c4             	mov    %eax,-0x3c(%ebp)
40d892:	ff 15 d4 a2 43 00    	call   *0x43a2d4
40d898:	8b 4d 08             	mov    0x8(%ebp),%ecx
40d89b:	8d 45 b8             	lea    -0x48(%ebp),%eax
40d89e:	83 65 fc 00          	andl   $0x0,-0x4(%ebp)
40d8a2:	33 db                	xor    %ebx,%ebx
40d8a4:	50                   	push   %eax
40d8a5:	89 5d ec             	mov    %ebx,-0x14(%ebp)
40d8a8:	e8 af fe ff ff       	call   0x40d75c
40d8ad:	8b 7e 08             	mov    0x8(%esi),%edi
40d8b0:	8d 45 b8             	lea    -0x48(%ebp),%eax
40d8b3:	50                   	push   %eax
40d8b4:	81 ff 50 df 40 00    	cmp    $0x40df50,%edi
40d8ba:	0f 85 34 2d 01 00    	jne    0x4205f4
40d8c0:	e8 8b 06 00 00       	call   0x40df50
40d8c5:	33 d2                	xor    %edx,%edx
40d8c7:	f7 76 0c             	divl   0xc(%esi)
40d8ca:	8d 45 b8             	lea    -0x48(%ebp),%eax
40d8cd:	c1 e2 04             	shl    $0x4,%edx
40d8d0:	03 56 24             	add    0x24(%esi),%edx
40d8d3:	50                   	push   %eax
40d8d4:	8b ca                	mov    %edx,%ecx
40d8d6:	e8 c0 05 00 00       	call   0x40de9b
40d8db:	8b 00                	mov    (%eax),%eax
40d8dd:	89 45 dc             	mov    %eax,-0x24(%ebp)
40d8e0:	85 c0                	test   %eax,%eax
40d8e2:	0f 84 6b 2e 01 00    	je     0x420753
40d8e8:	39 58 7c             	cmp    %ebx,0x7c(%eax)
40d8eb:	0f 84 ec 01 00 00    	je     0x40dadd
40d8f1:	33 ff                	xor    %edi,%edi
40d8f3:	89 7d d4             	mov    %edi,-0x2c(%ebp)
40d8f6:	89 7d e0             	mov    %edi,-0x20(%ebp)
40d8f9:	33 f6                	xor    %esi,%esi
40d8fb:	89 75 e4             	mov    %esi,-0x1c(%ebp)
40d8fe:	21 75 e8             	and    %esi,-0x18(%ebp)
40d901:	21 75 d8             	and    %esi,-0x28(%ebp)
40d904:	f6 45 30 40          	testb  $0x40,0x30(%ebp)
40d908:	c6 45 fc 05          	movb   $0x5,-0x4(%ebp)
40d90c:	0f 85 49 2d 01 00    	jne    0x42065b
40d912:	8d 4d d8             	lea    -0x28(%ebp),%ecx
40d915:	51                   	push   %ecx
40d916:	8b c8                	mov    %eax,%ecx
40d918:	e8 ad fe ff ff       	call   0x40d7ca
40d91d:	85 c0                	test   %eax,%eax
40d91f:	0f 89 37 01 00 00    	jns    0x40da5c
40d925:	8b 45 30             	mov    0x30(%ebp),%eax
40d928:	ba 00 00 03 00       	mov    $0x30000,%edx
40d92d:	32 c9                	xor    %cl,%cl
40d92f:	23 c2                	and    %edx,%eax
40d931:	88 4d f3             	mov    %cl,-0xd(%ebp)
40d934:	3b c2                	cmp    %edx,%eax
40d936:	0f 85 99 00 00 00    	jne    0x40d9d5
40d93c:	8b 75 dc             	mov    -0x24(%ebp),%esi
40d93f:	8d 45 e4             	lea    -0x1c(%ebp),%eax
40d942:	50                   	push   %eax
40d943:	8b ce                	mov    %esi,%ecx
40d945:	e8 09 f3 ff ff       	call   0x40cc53
40d94a:	85 c0                	test   %eax,%eax
40d94c:	0f 88 69 2d 01 00    	js     0x4206bb
40d952:	56                   	push   %esi
40d953:	ff 75 50             	push   0x50(%ebp)
40d956:	e8 ae fe ff ff       	call   0x40d809
40d95b:	8b 75 e4             	mov    -0x1c(%ebp),%esi
40d95e:	89 45 ec             	mov    %eax,-0x14(%ebp)
40d961:	85 c0                	test   %eax,%eax
40d963:	78 7c                	js     0x40d9e1
40d965:	8b 4d 30             	mov    0x30(%ebp),%ecx
40d968:	8d 45 e8             	lea    -0x18(%ebp),%eax
40d96b:	8b 55 30             	mov    0x30(%ebp),%edx
40d96e:	81 e1 00 04 00 00    	and    $0x400,%ecx
40d974:	8b 1e                	mov    (%esi),%ebx
40d976:	83 e2 10             	and    $0x10,%edx
40d979:	50                   	push   %eax
40d97a:	33 c0                	xor    %eax,%eax
40d97c:	89 4d d0             	mov    %ecx,-0x30(%ebp)
40d97f:	85 c9                	test   %ecx,%ecx
40d981:	89 55 cc             	mov    %edx,-0x34(%ebp)
40d984:	8b 4b 20             	mov    0x20(%ebx),%ecx
40d987:	0f 95 c0             	setne  %al
40d98a:	50                   	push   %eax
40d98b:	33 c0                	xor    %eax,%eax
40d98d:	85 d2                	test   %edx,%edx
40d98f:	0f 95 c0             	setne  %al
40d992:	50                   	push   %eax
40d993:	ff 75 58             	push   0x58(%ebp)
40d996:	ff 75 54             	push   0x54(%ebp)
40d999:	ff 75 08             	push   0x8(%ebp)
40d99c:	56                   	push   %esi
40d99d:	ff 15 20 a5 43 00    	call   *0x43a520
40d9a3:	ff 53 20             	call   *0x20(%ebx)
40d9a6:	8b d8                	mov    %eax,%ebx
40d9a8:	89 5d ec             	mov    %ebx,-0x14(%ebp)
40d9ab:	81 fb 01 40 00 80    	cmp    $0x80004001,%ebx
40d9b1:	0f 84 80 01 00 00    	je     0x40db37
40d9b7:	ff 75 e8             	push   -0x18(%ebp)
40d9ba:	8b 4d 48             	mov    0x48(%ebp),%ecx
40d9bd:	c6 45 f3 01          	movb   $0x1,-0xd(%ebp)
40d9c1:	e8 f3 e9 ff ff       	call   0x40c3b9
40d9c6:	8b 4d 48             	mov    0x48(%ebp),%ecx
40d9c9:	56                   	push   %esi
40d9ca:	8d 49 04             	lea    0x4(%ecx),%ecx
40d9cd:	e8 e7 e9 ff ff       	call   0x40c3b9
40d9d2:	8a 4d f3             	mov    -0xd(%ebp),%cl
40d9d5:	85 db                	test   %ebx,%ebx
40d9d7:	78 08                	js     0x40d9e1
40d9d9:	84 c9                	test   %cl,%cl
40d9db:	0f 84 42 01 00 00    	je     0x40db23
40d9e1:	c6 45 fc 07          	movb   $0x7,-0x4(%ebp)
40d9e5:	8b 45 d8             	mov    -0x28(%ebp),%eax
40d9e8:	85 c0                	test   %eax,%eax
40d9ea:	0f 85 d8 00 00 00    	jne    0x40dac8
40d9f0:	c6 45 fc 08          	movb   $0x8,-0x4(%ebp)
40d9f4:	8b 45 e8             	mov    -0x18(%ebp),%eax
40d9f7:	85 c0                	test   %eax,%eax
40d9f9:	74 10                	je     0x40da0b
40d9fb:	8b 08                	mov    (%eax),%ecx
40d9fd:	50                   	push   %eax
40d9fe:	8b 59 08             	mov    0x8(%ecx),%ebx
40da01:	8b cb                	mov    %ebx,%ecx
40da03:	ff 15 20 a5 43 00    	call   *0x43a520
40da09:	ff d3                	call   *%ebx
40da0b:	c6 45 fc 09          	movb   $0x9,-0x4(%ebp)
40da0f:	85 f6                	test   %esi,%esi
40da11:	74 10                	je     0x40da23
40da13:	8b 06                	mov    (%esi),%eax
40da15:	56                   	push   %esi
40da16:	8b 70 08             	mov    0x8(%eax),%esi
40da19:	8b ce                	mov    %esi,%ecx
40da1b:	ff 15 20 a5 43 00    	call   *0x43a520
40da21:	ff d6                	call   *%esi
40da23:	c6 45 fc 0a          	movb   $0xa,-0x4(%ebp)
40da27:	85 ff                	test   %edi,%edi
40da29:	0f 85 9f 01 00 00    	jne    0x40dbce
40da2f:	c6 45 fc 0b          	movb   $0xb,-0x4(%ebp)
40da33:	8b 45 d4             	mov    -0x2c(%ebp),%eax
40da36:	85 c0                	test   %eax,%eax
40da38:	0f 85 00 2d 01 00    	jne    0x42073e
40da3e:	8b 75 c8             	mov    -0x38(%ebp),%esi
40da41:	8b 5d ec             	mov    -0x14(%ebp),%ebx
40da44:	8d 46 28             	lea    0x28(%esi),%eax
40da47:	85 c0                	test   %eax,%eax
40da49:	74 07                	je     0x40da52
40da4b:	50                   	push   %eax
40da4c:	ff 15 9c a2 43 00    	call   *0x43a29c
40da52:	8b c3                	mov    %ebx,%eax
40da54:	e8 83 d3 00 00       	call   0x41addc
40da59:	c2 54 00             	ret    $0x54
40da5c:	8b 5d dc             	mov    -0x24(%ebp),%ebx
40da5f:	53                   	push   %ebx
40da60:	ff 75 50             	push   0x50(%ebp)
40da63:	e8 a1 fd ff ff       	call   0x40d809
40da68:	89 45 ec             	mov    %eax,-0x14(%ebp)
40da6b:	85 c0                	test   %eax,%eax
40da6d:	0f 88 6e ff ff ff    	js     0x40d9e1
40da73:	83 65 dc 00          	andl   $0x0,-0x24(%ebp)
40da77:	8d 45 dc             	lea    -0x24(%ebp),%eax
40da7a:	c6 45 fc 06          	movb   $0x6,-0x4(%ebp)
40da7e:	50                   	push   %eax
40da7f:	8b cb                	mov    %ebx,%ecx
40da81:	e8 98 d4 ff ff       	call   0x40af1e
40da86:	ff 75 58             	push   0x58(%ebp)
40da89:	8d 45 e8             	lea    -0x18(%ebp),%eax
40da8c:	ff 75 54             	push   0x54(%ebp)
40da8f:	50                   	push   %eax
40da90:	ff 75 dc             	push   -0x24(%ebp)
40da93:	ff 75 d8             	push   -0x28(%ebp)
40da96:	ff 75 48             	push   0x48(%ebp)
40da99:	ff 75 44             	push   0x44(%ebp)
40da9c:	51                   	push   %ecx
40da9d:	ff 75 34             	push   0x34(%ebp)
40daa0:	51                   	push   %ecx
40daa1:	ff 75 2c             	push   0x2c(%ebp)
40daa4:	ff 75 28             	push   0x28(%ebp)
40daa7:	83 ec 0c             	sub    $0xc,%esp
40daaa:	ff 75 18             	push   0x18(%ebp)
40daad:	83 ec 0c             	sub    $0xc,%esp
40dab0:	ff 75 08             	push   0x8(%ebp)
40dab3:	e8 88 ce ff ff       	call   0x40a940
40dab8:	8d 4d dc             	lea    -0x24(%ebp),%ecx
40dabb:	89 45 ec             	mov    %eax,-0x14(%ebp)
40dabe:	e8 3c e7 ff ff       	call   0x40c1ff
40dac3:	e9 19 ff ff ff       	jmp    0x40d9e1
40dac8:	8b 08                	mov    (%eax),%ecx
40daca:	50                   	push   %eax
40dacb:	8b 59 08             	mov    0x8(%ecx),%ebx
40dace:	8b cb                	mov    %ebx,%ecx
40dad0:	ff 15 20 a5 43 00    	call   *0x43a520
40dad6:	ff d3                	call   *%ebx
40dad8:	e9 13 ff ff ff       	jmp    0x40d9f0
40dadd:	ff 35 80 8d 43 00    	push   0x438d80
40dae3:	a3 38 8a 43 00       	mov    %eax,0x438a38
40dae8:	ff 15 b0 a2 43 00    	call   *0x43a2b0
40daee:	85 c0                	test   %eax,%eax
40daf0:	0f 84 41 2b 01 00    	je     0x420637
40daf6:	6a ff                	push   $0xffffffff
40daf8:	ff 35 74 8d 43 00    	push   0x438d74
40dafe:	ff 15 d0 a2 43 00    	call   *0x43a2d0
40db04:	85 c0                	test   %eax,%eax
40db06:	0f 85 f7 2a 01 00    	jne    0x420603
40db0c:	83 25 38 8a 43 00 00 	andl   $0x0,0x438a38
40db13:	85 db                	test   %ebx,%ebx
40db15:	0f 88 29 ff ff ff    	js     0x40da44
40db1b:	8b 45 dc             	mov    -0x24(%ebp),%eax
40db1e:	e9 ce fd ff ff       	jmp    0x40d8f1
40db23:	8b 45 30             	mov    0x30(%ebp),%eax
40db26:	25 00 04 00 00       	and    $0x400,%eax
40db2b:	89 45 d0             	mov    %eax,-0x30(%ebp)
40db2e:	8b 45 30             	mov    0x30(%ebp),%eax
40db31:	83 e0 10             	and    $0x10,%eax
40db34:	89 45 cc             	mov    %eax,-0x34(%ebp)
40db37:	8b 5d dc             	mov    -0x24(%ebp),%ebx
40db3a:	8d 45 e0             	lea    -0x20(%ebp),%eax
40db3d:	50                   	push   %eax
40db3e:	8b cb                	mov    %ebx,%ecx
40db40:	e8 5e dc ff ff       	call   0x40b7a3
40db45:	85 c0                	test   %eax,%eax
40db47:	0f 88 76 2b 01 00    	js     0x4206c3
40db4d:	53                   	push   %ebx
40db4e:	ff 75 50             	push   0x50(%ebp)
40db51:	e8 b3 fc ff ff       	call   0x40d809
40db56:	8b 7d e0             	mov    -0x20(%ebp),%edi
40db59:	89 45 ec             	mov    %eax,-0x14(%ebp)
40db5c:	85 c0                	test   %eax,%eax
40db5e:	0f 88 7d fe ff ff    	js     0x40d9e1
40db64:	8d 45 e8             	lea    -0x18(%ebp),%eax
40db67:	8b 1f                	mov    (%edi),%ebx
40db69:	50                   	push   %eax
40db6a:	ff 75 34             	push   0x34(%ebp)
40db6d:	33 c0                	xor    %eax,%eax
40db6f:	39 45 d0             	cmp    %eax,-0x30(%ebp)
40db72:	8b 4b 18             	mov    0x18(%ebx),%ecx
40db75:	0f 95 c0             	setne  %al
40db78:	50                   	push   %eax
40db79:	33 c0                	xor    %eax,%eax
40db7b:	39 45 cc             	cmp    %eax,-0x34(%ebp)
40db7e:	0f 95 c0             	setne  %al
40db81:	50                   	push   %eax
40db82:	ff 75 2c             	push   0x2c(%ebp)
40db85:	b8 cc 3f 40 00       	mov    $0x403fcc,%eax
40db8a:	ff 75 28             	push   0x28(%ebp)
40db8d:	ff 75 24             	push   0x24(%ebp)
40db90:	ff 75 20             	push   0x20(%ebp)
40db93:	ff 75 1c             	push   0x1c(%ebp)
40db96:	ff 75 58             	push   0x58(%ebp)
40db99:	ff 75 54             	push   0x54(%ebp)
40db9c:	ff 75 18             	push   0x18(%ebp)
40db9f:	50                   	push   %eax
40dba0:	50                   	push   %eax
40dba1:	6a 00                	push   $0x0
40dba3:	ff 75 08             	push   0x8(%ebp)
40dba6:	57                   	push   %edi
40dba7:	ff 15 20 a5 43 00    	call   *0x43a520
40dbad:	ff 53 18             	call   *0x18(%ebx)
40dbb0:	ff 75 e8             	push   -0x18(%ebp)
40dbb3:	8b 5d 48             	mov    0x48(%ebp),%ebx
40dbb6:	8b cb                	mov    %ebx,%ecx
40dbb8:	89 45 ec             	mov    %eax,-0x14(%ebp)
40dbbb:	e8 f9 e7 ff ff       	call   0x40c3b9
40dbc0:	57                   	push   %edi