40de59:	8b 48 04             	mov    0x4(%eax),%ecx
40de5c:	83 60 08 00          	andl   $0x0,0x8(%eax)
40de60:	89 08                	mov    %ecx,(%eax)
40de62:	8b 45 08             	mov    0x8(%ebp),%eax
40de65:	8b 40 0c             	mov    0xc(%eax),%eax
40de68:	90                   	nop
40de69:	c1 e8 02             	shr    $0x2,%eax
40de6c:	a8 01                	test   $0x1,%al
40de6e:	8b 45 08             	mov    0x8(%ebp),%eax
40de71:	74 0b                	je     0x40de7e
40de73:	6a fc                	push   $0xfffffffc
40de75:	59                   	pop    %ecx
40de76:	83 c0 0c             	add    $0xc,%eax
40de79:	f0 21 08             	lock and %ecx,(%eax)
40de7c:	eb 23                	jmp    0x40dea1
40de7e:	8b 40 0c             	mov    0xc(%eax),%eax
40de81:	90                   	nop
40de82:	83 e0 41             	and    $0x41,%eax
40de85:	3c 41                	cmp    $0x41,%al
40de87:	75 18                	jne    0x40dea1
40de89:	8b 45 08             	mov    0x8(%ebp),%eax
40de8c:	8b 40 0c             	mov    0xc(%eax),%eax
40de8f:	90                   	nop
40de90:	c1 e8 08             	shr    $0x8,%eax
40de93:	a8 01                	test   $0x1,%al
40de95:	75 0a                	jne    0x40dea1
40de97:	8b 45 08             	mov    0x8(%ebp),%eax
40de9a:	c7 40 18 00 02 00 00 	movl   $0x200,0x18(%eax)
40dea1:	8b 45 08             	mov    0x8(%ebp),%eax
40dea4:	8b 40 10             	mov    0x10(%eax),%eax
40dea7:	90                   	nop
40dea8:	56                   	push   %esi
40dea9:	57                   	push   %edi
40deaa:	53                   	push   %ebx
40deab:	50                   	push   %eax
40deac:	e8 9c 9e 00 00       	call   0x417d4d
40deb1:	23 c2                	and    %edx,%eax
40deb3:	83 c4 10             	add    $0x10,%esp
40deb6:	83 f8 ff             	cmp    $0xffffffff,%eax
40deb9:	75 04                	jne    0x40debf
40debb:	0b c0                	or     %eax,%eax
40debd:	eb 02                	jmp    0x40dec1
40debf:	33 c0                	xor    %eax,%eax
40dec1:	5f                   	pop    %edi
40dec2:	5e                   	pop    %esi
40dec3:	5b                   	pop    %ebx
40dec4:	5d                   	pop    %ebp
40dec5:	c3                   	ret
40dec6:	8b ff                	mov    %edi,%edi
40dec8:	55                   	push   %ebp
40dec9:	8b ec                	mov    %esp,%ebp
40decb:	ff 75 14             	push   0x14(%ebp)
40dece:	ff 75 10             	push   0x10(%ebp)
40ded1:	ff 75 0c             	push   0xc(%ebp)
40ded4:	ff 75 08             	push   0x8(%ebp)
40ded7:	e8 a8 fd ff ff       	call   0x40dc84
40dedc:	83 c4 10             	add    $0x10,%esp
40dedf:	5d                   	pop    %ebp
40dee0:	c3                   	ret
40dee1:	6a 0c                	push   $0xc
40dee3:	68 b8 15 43 00       	push   $0x4315b8
40dee8:	e8 d3 a0 ff ff       	call   0x407fc0
40deed:	83 65 e4 00          	andl   $0x0,-0x1c(%ebp)
40def1:	8b 45 08             	mov    0x8(%ebp),%eax
40def4:	ff 30                	push   (%eax)
40def6:	e8 8b d8 ff ff       	call   0x40b786
40defb:	59                   	pop    %ecx
40defc:	83 65 fc 00          	andl   $0x0,-0x4(%ebp)
40df00:	8b 4d 0c             	mov    0xc(%ebp),%ecx
40df03:	e8 34 00 00 00       	call   0x40df3c
40df08:	8b f0                	mov    %eax,%esi
40df0a:	89 75 e4             	mov    %esi,-0x1c(%ebp)
40df0d:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
40df14:	e8 17 00 00 00       	call   0x40df30
40df19:	8b c6                	mov    %esi,%eax
40df1b:	8b 4d f0             	mov    -0x10(%ebp),%ecx
40df1e:	64 89 0d 00 00 00 00 	mov    %ecx,%fs:0x0
40df25:	59                   	pop    %ecx
40df26:	5f                   	pop    %edi
40df27:	5e                   	pop    %esi
40df28:	5b                   	pop    %ebx
40df29:	c9                   	leave
40df2a:	c2 0c 00             	ret    $0xc
40df2d:	8b 75 e4             	mov    -0x1c(%ebp),%esi
40df30:	8b 45 10             	mov    0x10(%ebp),%eax
40df33:	ff 30                	push   (%eax)
40df35:	e8 60 d8 ff ff       	call   0x40b79a
40df3a:	59                   	pop    %ecx
40df3b:	c3                   	ret
40df3c:	8b ff                	mov    %edi,%edi
40df3e:	55                   	push   %ebp
40df3f:	8b ec                	mov    %esp,%ebp
40df41:	51                   	push   %ecx
40df42:	56                   	push   %esi
40df43:	8b f1                	mov    %ecx,%esi
40df45:	57                   	push   %edi
40df46:	8b 06                	mov    (%esi),%eax
40df48:	8b 38                	mov    (%eax),%edi
40df4a:	57                   	push   %edi
40df4b:	e8 b5 70 00 00       	call   0x415005
40df50:	88 45 fc             	mov    %al,-0x4(%ebp)
40df53:	8b 06                	mov    (%esi),%eax
40df55:	ff 30                	push   (%eax)
40df57:	8b 46 0c             	mov    0xc(%esi),%eax
40df5a:	ff 30                	push   (%eax)
40df5c:	8b 46 08             	mov    0x8(%esi),%eax
40df5f:	ff 30                	push   (%eax)
40df61:	8b 46 04             	mov    0x4(%esi),%eax
40df64:	ff 30                	push   (%eax)
40df66:	e8 14 00 00 00       	call   0x40df7f
40df6b:	57                   	push   %edi
40df6c:	ff 75 fc             	push   -0x4(%ebp)
40df6f:	8b f0                	mov    %eax,%esi
40df71:	e8 3b 71 00 00       	call   0x4150b1
40df76:	83 c4 1c             	add    $0x1c,%esp
40df79:	8b c6                	mov    %esi,%eax
40df7b:	5f                   	pop    %edi
40df7c:	5e                   	pop    %esi
40df7d:	c9                   	leave
40df7e:	c3                   	ret
40df7f:	8b ff                	mov    %edi,%edi
40df81:	55                   	push   %ebp
40df82:	8b ec                	mov    %esp,%ebp
40df84:	83 ec 0c             	sub    $0xc,%esp
40df87:	53                   	push   %ebx
40df88:	8b 5d 0c             	mov    0xc(%ebp),%ebx
40df8b:	56                   	push   %esi
40df8c:	57                   	push   %edi
40df8d:	85 db                	test   %ebx,%ebx
40df8f:	74 1e                	je     0x40dfaf
40df91:	8b 75 10             	mov    0x10(%ebp),%esi
40df94:	85 f6                	test   %esi,%esi
40df96:	74 17                	je     0x40dfaf
40df98:	8b 7d 14             	mov    0x14(%ebp),%edi
40df9b:	85 ff                	test   %edi,%edi
40df9d:	75 17                	jne    0x40dfb6
40df9f:	e8 57 0e 00 00       	call   0x40edfb
40dfa4:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40dfaa:	e8 d2 f0 ff ff       	call   0x40d081
40dfaf:	33 c0                	xor    %eax,%eax
40dfb1:	5f                   	pop    %edi
40dfb2:	5e                   	pop    %esi
40dfb3:	5b                   	pop    %ebx
40dfb4:	c9                   	leave
40dfb5:	c3                   	ret
40dfb6:	83 7d 08 00          	cmpl   $0x0,0x8(%ebp)
40dfba:	74 e3                	je     0x40df9f
40dfbc:	83 c8 ff             	or     $0xffffffff,%eax
40dfbf:	33 d2                	xor    %edx,%edx
40dfc1:	f7 f3                	div    %ebx
40dfc3:	3b f0                	cmp    %eax,%esi
40dfc5:	77 d8                	ja     0x40df9f
40dfc7:	8d 47 0c             	lea    0xc(%edi),%eax
40dfca:	89 45 f4             	mov    %eax,-0xc(%ebp)
40dfcd:	8b 00                	mov    (%eax),%eax
40dfcf:	90                   	nop
40dfd0:	a9 c0 04 00 00       	test   $0x4c0,%eax
40dfd5:	74 05                	je     0x40dfdc
40dfd7:	8b 4f 18             	mov    0x18(%edi),%ecx
40dfda:	eb 05                	jmp    0x40dfe1
40dfdc:	b9 00 10 00 00       	mov    $0x1000,%ecx
40dfe1:	0f af de             	imul   %esi,%ebx
40dfe4:	89 4d fc             	mov    %ecx,-0x4(%ebp)
40dfe7:	8b f3                	mov    %ebx,%esi
40dfe9:	85 db                	test   %ebx,%ebx
40dfeb:	0f 84 f0 00 00 00    	je     0x40e0e1
40dff1:	8b 55 08             	mov    0x8(%ebp),%edx
40dff4:	8b 47 0c             	mov    0xc(%edi),%eax
40dff7:	90                   	nop
40dff8:	a8 c0                	test   $0xc0,%al
40dffa:	74 40                	je     0x40e03c
40dffc:	8b 47 08             	mov    0x8(%edi),%eax
40dfff:	85 c0                	test   %eax,%eax
40e001:	74 39                	je     0x40e03c
40e003:	0f 88 e0 00 00 00    	js     0x40e0e9
40e009:	8b 47 0c             	mov    0xc(%edi),%eax
40e00c:	90                   	nop
40e00d:	a8 01                	test   $0x1,%al
40e00f:	0f 85 dd 00 00 00    	jne    0x40e0f2
40e015:	8b 47 08             	mov    0x8(%edi),%eax
40e018:	89 45 f8             	mov    %eax,-0x8(%ebp)
40e01b:	3b f0                	cmp    %eax,%esi
40e01d:	73 05                	jae    0x40e024
40e01f:	8b c6                	mov    %esi,%eax
40e021:	89 75 f8             	mov    %esi,-0x8(%ebp)
40e024:	50                   	push   %eax
40e025:	52                   	push   %edx
40e026:	ff 37                	push   (%edi)
40e028:	e8 43 a9 ff ff       	call   0x408970
40e02d:	8b 45 f8             	mov    -0x8(%ebp),%eax
40e030:	83 c4 0c             	add    $0xc,%esp
40e033:	29 47 08             	sub    %eax,0x8(%edi)
40e036:	2b f0                	sub    %eax,%esi
40e038:	01 07                	add    %eax,(%edi)
40e03a:	eb 6b                	jmp    0x40e0a7
40e03c:	3b f1                	cmp    %ecx,%esi
40e03e:	72 6c                	jb     0x40e0ac
40e040:	8b 47 0c             	mov    0xc(%edi),%eax
40e043:	90                   	nop
40e044:	a8 c0                	test   $0xc0,%al
40e046:	74 12                	je     0x40e05a
40e048:	57                   	push   %edi
40e049:	e8 83 f4 ff ff       	call   0x40d4d1
40e04e:	59                   	pop    %ecx
40e04f:	85 c0                	test   %eax,%eax
40e051:	0f 85 9b 00 00 00    	jne    0x40e0f2
40e057:	8b 4d fc             	mov    -0x4(%ebp),%ecx
40e05a:	8b c6                	mov    %esi,%eax
40e05c:	85 c9                	test   %ecx,%ecx
40e05e:	74 0d                	je     0x40e06d
40e060:	33 d2                	xor    %edx,%edx
40e062:	f7 f1                	div    %ecx
40e064:	8b c6                	mov    %esi,%eax
40e066:	2b c2                	sub    %edx,%eax
40e068:	89 45 f8             	mov    %eax,-0x8(%ebp)
40e06b:	eb 03                	jmp    0x40e070
40e06d:	89 75 f8             	mov    %esi,-0x8(%ebp)
40e070:	83 f8 fe             	cmp    $0xfffffffe,%eax
40e073:	72 06                	jb     0x40e07b
40e075:	6a fe                	push   $0xfffffffe
40e077:	58                   	pop    %eax
40e078:	89 45 f8             	mov    %eax,-0x8(%ebp)
40e07b:	50                   	push   %eax
40e07c:	ff 75 08             	push   0x8(%ebp)
40e07f:	57                   	push   %edi
40e080:	e8 09 6f 00 00       	call   0x414f8e
40e085:	59                   	pop    %ecx
40e086:	50                   	push   %eax
40e087:	e8 f1 84 00 00       	call   0x41657d
40e08c:	8b d0                	mov    %eax,%edx
40e08e:	83 c4 0c             	add    $0xc,%esp
40e091:	83 fa ff             	cmp    $0xffffffff,%edx
40e094:	74 53                	je     0x40e0e9
40e096:	8b 4d f8             	mov    -0x8(%ebp),%ecx
40e099:	8b c1                	mov    %ecx,%eax
40e09b:	3b d1                	cmp    %ecx,%edx
40e09d:	77 02                	ja     0x40e0a1
40e09f:	8b c2                	mov    %edx,%eax
40e0a1:	2b f0                	sub    %eax,%esi
40e0a3:	3b d1                	cmp    %ecx,%edx
40e0a5:	72 42                	jb     0x40e0e9
40e0a7:	8b 4d fc             	mov    -0x4(%ebp),%ecx
40e0aa:	eb 25                	jmp    0x40e0d1
40e0ac:	0f be 02             	movsbl (%edx),%eax
40e0af:	57                   	push   %edi
40e0b0:	50                   	push   %eax
40e0b1:	e8 50 91 00 00       	call   0x417206
40e0b6:	59                   	pop    %ecx
40e0b7:	59                   	pop    %ecx
40e0b8:	83 f8 ff             	cmp    $0xffffffff,%eax
40e0bb:	74 35                	je     0x40e0f2
40e0bd:	8b 4f 18             	mov    0x18(%edi),%ecx
40e0c0:	4e                   	dec    %esi
40e0c1:	33 c0                	xor    %eax,%eax
40e0c3:	89 4d fc             	mov    %ecx,-0x4(%ebp)
40e0c6:	85 c9                	test   %ecx,%ecx
40e0c8:	7f 06                	jg     0x40e0d0
40e0ca:	33 c9                	xor    %ecx,%ecx
40e0cc:	41                   	inc    %ecx
40e0cd:	89 4d fc             	mov    %ecx,-0x4(%ebp)
40e0d0:	40                   	inc    %eax
40e0d1:	8b 55 08             	mov    0x8(%ebp),%edx
40e0d4:	03 d0                	add    %eax,%edx
40e0d6:	89 55 08             	mov    %edx,0x8(%ebp)
40e0d9:	85 f6                	test   %esi,%esi
40e0db:	0f 85 13 ff ff ff    	jne    0x40dff4
40e0e1:	8b 45 10             	mov    0x10(%ebp),%eax
40e0e4:	e9 c8 fe ff ff       	jmp    0x40dfb1
40e0e9:	8b 45 f4             	mov    -0xc(%ebp),%eax
40e0ec:	6a 10                	push   $0x10
40e0ee:	59                   	pop    %ecx
40e0ef:	f0 09 08             	lock or %ecx,(%eax)
40e0f2:	2b de                	sub    %esi,%ebx
40e0f4:	33 d2                	xor    %edx,%edx
40e0f6:	8b c3                	mov    %ebx,%eax
40e0f8:	f7 75 0c             	divl   0xc(%ebp)
40e0fb:	e9 b1 fe ff ff       	jmp    0x40dfb1
40e100:	8b ff                	mov    %edi,%edi
40e102:	55                   	push   %ebp
40e103:	8b ec                	mov    %esp,%ebp
40e105:	83 ec 1c             	sub    $0x1c,%esp
40e108:	83 7d 0c 00          	cmpl   $0x0,0xc(%ebp)
40e10c:	74 1d                	je     0x40e12b
40e10e:	83 7d 10 00          	cmpl   $0x0,0x10(%ebp)
40e112:	74 17                	je     0x40e12b
40e114:	8b 45 14             	mov    0x14(%ebp),%eax
40e117:	85 c0                	test   %eax,%eax
40e119:	75 14                	jne    0x40e12f
40e11b:	e8 db 0c 00 00       	call   0x40edfb
40e120:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40e126:	e8 56 ef ff ff       	call   0x40d081
40e12b:	33 c0                	xor    %eax,%eax
40e12d:	c9                   	leave
40e12e:	c3                   	ret
40e12f:	8d 4d 14             	lea    0x14(%ebp),%ecx
40e132:	89 45 f8             	mov    %eax,-0x8(%ebp)
40e135:	89 4d e4             	mov    %ecx,-0x1c(%ebp)
40e138:	8d 4d 08             	lea    0x8(%ebp),%ecx
40e13b:	89 45 f4             	mov    %eax,-0xc(%ebp)
40e13e:	8d 45 f8             	lea    -0x8(%ebp),%eax
40e141:	89 4d e8             	mov    %ecx,-0x18(%ebp)
40e144:	8d 4d 0c             	lea    0xc(%ebp),%ecx
40e147:	50                   	push   %eax
40e148:	89 4d ec             	mov    %ecx,-0x14(%ebp)
40e14b:	8d 45 e4             	lea    -0x1c(%ebp),%eax
40e14e:	50                   	push   %eax
40e14f:	8d 4d 10             	lea    0x10(%ebp),%ecx
40e152:	8d 45 f4             	lea    -0xc(%ebp),%eax
40e155:	89 4d f0             	mov    %ecx,-0x10(%ebp)
40e158:	50                   	push   %eax
40e159:	8d 4d ff             	lea    -0x1(%ebp),%ecx
40e15c:	e8 80 fd ff ff       	call   0x40dee1
40e161:	c9                   	leave
40e162:	c3                   	ret
40e163:	6a 0c                	push   $0xc
40e165:	68 d8 15 43 00       	push   $0x4315d8
40e16a:	e8 51 9e ff ff       	call   0x407fc0
40e16f:	83 65 e4 00          	andl   $0x0,-0x1c(%ebp)
40e173:	8b 45 08             	mov    0x8(%ebp),%eax
40e176:	ff 30                	push   (%eax)
40e178:	e8 09 d6 ff ff       	call   0x40b786
40e17d:	59                   	pop    %ecx
40e17e:	83 65 fc 00          	andl   $0x0,-0x4(%ebp)
40e182:	8b 4d 0c             	mov    0xc(%ebp),%ecx
40e185:	e8 34 00 00 00       	call   0x40e1be
40e18a:	8b f0                	mov    %eax,%esi
40e18c:	89 75 e4             	mov    %esi,-0x1c(%ebp)
40e18f:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
40e196:	e8 17 00 00 00       	call   0x40e1b2
40e19b:	8b c6                	mov    %esi,%eax
40e19d:	8b 4d f0             	mov    -0x10(%ebp),%ecx
40e1a0:	64 89 0d 00 00 00 00 	mov    %ecx,%fs:0x0
40e1a7:	59                   	pop    %ecx
40e1a8:	5f                   	pop    %edi
40e1a9:	5e                   	pop    %esi
40e1aa:	5b                   	pop    %ebx
40e1ab:	c9                   	leave
40e1ac:	c2 0c 00             	ret    $0xc
40e1af:	8b 75 e4             	mov    -0x1c(%ebp),%esi
40e1b2:	8b 45 10             	mov    0x10(%ebp),%eax
40e1b5:	ff 30                	push   (%eax)
40e1b7:	e8 de d5 ff ff       	call   0x40b79a
40e1bc:	59                   	pop    %ecx
40e1bd:	c3                   	ret
40e1be:	8b ff                	mov    %edi,%edi
40e1c0:	53                   	push   %ebx
40e1c1:	56                   	push   %esi
40e1c2:	8b f1                	mov    %ecx,%esi
40e1c4:	57                   	push   %edi
40e1c5:	8b 06                	mov    (%esi),%eax