40ab6e:	8b c1                	mov    %ecx,%eax
40ab70:	99                   	cltd
40ab71:	56                   	push   %esi
40ab72:	83 e2 07             	and    $0x7,%edx
40ab75:	03 c2                	add    %edx,%eax
40ab77:	83 e1 07             	and    $0x7,%ecx
40ab7a:	57                   	push   %edi
40ab7b:	8b f0                	mov    %eax,%esi
40ab7d:	8b c1                	mov    %ecx,%eax
40ab7f:	6a 20                	push   $0x20
40ab81:	59                   	pop    %ecx
40ab82:	2b 4d 14             	sub    0x14(%ebp),%ecx
40ab85:	83 ca ff             	or     $0xffffffff,%edx
40ab88:	d3 ea                	shr    %cl,%edx
40ab8a:	8b c8                	mov    %eax,%ecx
40ab8c:	8b 45 08             	mov    0x8(%ebp),%eax
40ab8f:	d3 65 0c             	shll   %cl,0xc(%ebp)
40ab92:	d3 e2                	shl    %cl,%edx
40ab94:	c1 fe 03             	sar    $0x3,%esi
40ab97:	33 ff                	xor    %edi,%edi
40ab99:	03 f0                	add    %eax,%esi
40ab9b:	f7 d2                	not    %edx
40ab9d:	8a 04 3e             	mov    (%esi,%edi,1),%al
40aba0:	22 c2                	and    %dl,%al
40aba2:	0a 45 0c             	or     0xc(%ebp),%al
40aba5:	c1 6d 0c 08          	shrl   $0x8,0xc(%ebp)
40aba9:	c1 ea 08             	shr    $0x8,%edx
40abac:	81 ca 00 00 00 ff    	or     $0xff000000,%edx
40abb2:	88 04 3e             	mov    %al,(%esi,%edi,1)
40abb5:	47                   	inc    %edi
40abb6:	83 ff 04             	cmp    $0x4,%edi
40abb9:	72 e2                	jb     0x40ab9d
40abbb:	5f                   	pop    %edi
40abbc:	5e                   	pop    %esi
40abbd:	5d                   	pop    %ebp
40abbe:	c2 10 00             	ret    $0x10
40abc1:	8b 44 24 04          	mov    0x4(%esp),%eax
40abc5:	56                   	push   %esi
40abc6:	8b f1                	mov    %ecx,%esi
40abc8:	01 46 04             	add    %eax,0x4(%esi)
40abcb:	8b 4e 04             	mov    0x4(%esi),%ecx
40abce:	3b 4e 08             	cmp    0x8(%esi),%ecx
40abd1:	76 64                	jbe    0x40ac37
40abd3:	8b 46 0c             	mov    0xc(%esi),%eax
40abd6:	53                   	push   %ebx
40abd7:	55                   	push   %ebp
40abd8:	57                   	push   %edi
40abd9:	bd 74 2a 43 00       	mov    $0x432a74,%ebp
40abde:	85 c0                	test   %eax,%eax
40abe0:	74 1a                	je     0x40abfc
40abe2:	3b c8                	cmp    %eax,%ecx
40abe4:	76 16                	jbe    0x40abfc
40abe6:	50                   	push   %eax
40abe7:	68 f0 a3 42 00       	push   $0x42a3f0
40abec:	55                   	push   %ebp
40abed:	e8 6b b9 ff ff       	call   0x40655d
40abf2:	83 c4 0c             	add    $0xc,%esp
40abf5:	8b cd                	mov    %ebp,%ecx
40abf7:	e8 0c b9 ff ff       	call   0x406508
40abfc:	8b 46 08             	mov    0x8(%esi),%eax
40abff:	8b c8                	mov    %eax,%ecx
40ac01:	c1 e9 02             	shr    $0x2,%ecx
40ac04:	8d 44 01 20          	lea    0x20(%ecx,%eax,1),%eax
40ac08:	8b 4e 04             	mov    0x4(%esi),%ecx
40ac0b:	8b d9                	mov    %ecx,%ebx
40ac0d:	3b c8                	cmp    %eax,%ecx
40ac0f:	77 02                	ja     0x40ac13
40ac11:	8b d8                	mov    %eax,%ebx
40ac13:	8b c3                	mov    %ebx,%eax
40ac15:	6b c0 28             	imul   $0x28,%eax,%eax
40ac18:	50                   	push   %eax
40ac19:	ff 36                	push   (%esi)
40ac1b:	e8 50 f3 00 00       	call   0x419f70
40ac20:	8b f8                	mov    %eax,%edi
40ac22:	59                   	pop    %ecx
40ac23:	59                   	pop    %ecx
40ac24:	85 ff                	test   %edi,%edi
40ac26:	75 07                	jne    0x40ac2f
40ac28:	8b cd                	mov    %ebp,%ecx
40ac2a:	e8 d9 b8 ff ff       	call   0x406508
40ac2f:	89 3e                	mov    %edi,(%esi)
40ac31:	5f                   	pop    %edi
40ac32:	5d                   	pop    %ebp
40ac33:	89 5e 08             	mov    %ebx,0x8(%esi)
40ac36:	5b                   	pop    %ebx
40ac37:	5e                   	pop    %esi
40ac38:	c2 04 00             	ret    $0x4
40ac3b:	55                   	push   %ebp
40ac3c:	8b ec                	mov    %esp,%ebp
40ac3e:	53                   	push   %ebx
40ac3f:	56                   	push   %esi
40ac40:	57                   	push   %edi
40ac41:	8b f9                	mov    %ecx,%edi
40ac43:	83 67 04 00          	andl   $0x0,0x4(%edi)
40ac47:	83 27 00             	andl   $0x0,(%edi)
40ac4a:	b8 00 80 00 00       	mov    $0x8000,%eax
40ac4f:	39 45 0c             	cmp    %eax,0xc(%ebp)
40ac52:	73 03                	jae    0x40ac57
40ac54:	8b 45 0c             	mov    0xc(%ebp),%eax
40ac57:	8b 75 08             	mov    0x8(%ebp),%esi
40ac5a:	50                   	push   %eax
40ac5b:	56                   	push   %esi
40ac5c:	ff 77 0c             	push   0xc(%edi)
40ac5f:	e8 0c 10 01 00       	call   0x41bc70
40ac64:	33 c0                	xor    %eax,%eax
40ac66:	40                   	inc    %eax
40ac67:	83 c4 0c             	add    $0xc,%esp
40ac6a:	32 db                	xor    %bl,%bl
40ac6c:	39 45 0c             	cmp    %eax,0xc(%ebp)
40ac6f:	76 09                	jbe    0x40ac7a
40ac71:	32 1c 30             	xor    (%eax,%esi,1),%bl
40ac74:	40                   	inc    %eax
40ac75:	3b 45 0c             	cmp    0xc(%ebp),%eax
40ac78:	72 f7                	jb     0x40ac71
40ac7a:	6a 08                	push   $0x8
40ac7c:	8b cf                	mov    %edi,%ecx
40ac7e:	e8 b5 ea ff ff       	call   0x409738
40ac83:	8b 75 10             	mov    0x10(%ebp),%esi
40ac86:	8b 45 08             	mov    0x8(%ebp),%eax
40ac89:	83 66 14 00          	andl   $0x0,0x14(%esi)
40ac8d:	3a 18                	cmp    (%eax),%bl
40ac8f:	75 47                	jne    0x40acd8
40ac91:	ff 75 0c             	push   0xc(%ebp)
40ac94:	8b cf                	mov    %edi,%ecx
40ac96:	50                   	push   %eax
40ac97:	e8 3b fe ff ff       	call   0x40aad7
40ac9c:	8b f8                	mov    %eax,%edi
40ac9e:	85 ff                	test   %edi,%edi
40aca0:	74 36                	je     0x40acd8
40aca2:	6a 01                	push   $0x1
40aca4:	8b ce                	mov    %esi,%ecx
40aca6:	e8 16 ff ff ff       	call   0x40abc1
40acab:	8b 46 14             	mov    0x14(%esi),%eax
40acae:	8d 48 01             	lea    0x1(%eax),%ecx
40acb1:	6b c0 28             	imul   $0x28,%eax,%eax
40acb4:	03 06                	add    (%esi),%eax
40acb6:	89 4e 14             	mov    %ecx,0x14(%esi)
40acb9:	8d 48 0c             	lea    0xc(%eax),%ecx
40acbc:	89 39                	mov    %edi,(%ecx)
40acbe:	89 48 14             	mov    %ecx,0x14(%eax)
40acc1:	8d 48 1c             	lea    0x1c(%eax),%ecx
40acc4:	6a 03                	push   $0x3
40acc6:	89 48 24             	mov    %ecx,0x24(%eax)
40acc9:	59                   	pop    %ecx
40acca:	c7 00 28 00 00 00    	movl   $0x28,(%eax)
40acd0:	89 48 18             	mov    %ecx,0x18(%eax)
40acd3:	89 48 08             	mov    %ecx,0x8(%eax)
40acd6:	eb 60                	jmp    0x40ad38
40acd8:	6a 01                	push   $0x1
40acda:	8b ce                	mov    %esi,%ecx
40acdc:	e8 e0 fe ff ff       	call   0x40abc1
40ace1:	8b 46 14             	mov    0x14(%esi),%eax
40ace4:	8d 48 01             	lea    0x1(%eax),%ecx
40ace7:	6b c0 28             	imul   $0x28,%eax,%eax
40acea:	03 06                	add    (%esi),%eax
40acec:	89 4e 14             	mov    %ecx,0x14(%esi)
40acef:	8d 48 0c             	lea    0xc(%eax),%ecx
40acf2:	89 48 14             	mov    %ecx,0x14(%eax)
40acf5:	8d 48 1c             	lea    0x1c(%eax),%ecx
40acf8:	89 48 24             	mov    %ecx,0x24(%eax)
40acfb:	6a 03                	push   $0x3
40acfd:	59                   	pop    %ecx
40acfe:	89 48 18             	mov    %ecx,0x18(%eax)
40ad01:	89 48 08             	mov    %ecx,0x8(%eax)
40ad04:	33 d2                	xor    %edx,%edx
40ad06:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40ad0c:	33 c9                	xor    %ecx,%ecx
40ad0e:	39 56 14             	cmp    %edx,0x14(%esi)
40ad11:	7e 25                	jle    0x40ad38
40ad13:	33 ff                	xor    %edi,%edi
40ad15:	8b 06                	mov    (%esi),%eax
40ad17:	03 c7                	add    %edi,%eax
40ad19:	39 50 14             	cmp    %edx,0x14(%eax)
40ad1c:	75 06                	jne    0x40ad24
40ad1e:	8d 58 0c             	lea    0xc(%eax),%ebx
40ad21:	89 58 14             	mov    %ebx,0x14(%eax)
40ad24:	39 50 24             	cmp    %edx,0x24(%eax)
40ad27:	75 06                	jne    0x40ad2f
40ad29:	8d 58 1c             	lea    0x1c(%eax),%ebx
40ad2c:	89 58 24             	mov    %ebx,0x24(%eax)
40ad2f:	41                   	inc    %ecx
40ad30:	83 c7 28             	add    $0x28,%edi
40ad33:	3b 4e 14             	cmp    0x14(%esi),%ecx
40ad36:	7c dd                	jl     0x40ad15
40ad38:	5f                   	pop    %edi
40ad39:	5e                   	pop    %esi
40ad3a:	5b                   	pop    %ebx
40ad3b:	5d                   	pop    %ebp
40ad3c:	c2 0c 00             	ret    $0xc
40ad3f:	55                   	push   %ebp
40ad40:	8b ec                	mov    %esp,%ebp
40ad42:	8b 55 08             	mov    0x8(%ebp),%edx
40ad45:	83 ec 50             	sub    $0x50,%esp
40ad48:	56                   	push   %esi
40ad49:	8b f1                	mov    %ecx,%esi
40ad4b:	85 d2                	test   %edx,%edx
40ad4d:	0f 8e 8b 04 00 00    	jle    0x40b1de
40ad53:	83 fa 02             	cmp    $0x2,%edx
40ad56:	53                   	push   %ebx
40ad57:	57                   	push   %edi
40ad58:	0f 8e 18 04 00 00    	jle    0x40b176
40ad5e:	83 fa 03             	cmp    $0x3,%edx
40ad61:	0f 84 57 03 00 00    	je     0x40b0be
40ad67:	83 fa 04             	cmp    $0x4,%edx
40ad6a:	0f 84 32 02 00 00    	je     0x40afa2
40ad70:	83 fa 05             	cmp    $0x5,%edx
40ad73:	74 64                	je     0x40add9
40ad75:	83 fa 06             	cmp    $0x6,%edx
40ad78:	0f 85 5e 04 00 00    	jne    0x40b1dc
40ad7e:	8b 4e 24             	mov    0x24(%esi),%ecx
40ad81:	8b 46 14             	mov    0x14(%esi),%eax
40ad84:	8b 7e 10             	mov    0x10(%esi),%edi
40ad87:	33 db                	xor    %ebx,%ebx
40ad89:	89 45 e4             	mov    %eax,-0x1c(%ebp)
40ad8c:	8d 14 09             	lea    (%ecx,%ecx,1),%edx
40ad8f:	89 8f 20 c0 03 00    	mov    %ecx,0x3c020(%edi)
40ad95:	81 f9 00 e0 01 00    	cmp    $0x1e000,%ecx
40ad9b:	0f 83 3b 04 00 00    	jae    0x40b1dc
40ada1:	21 5d 08             	and    %ebx,0x8(%ebp)
40ada4:	85 c0                	test   %eax,%eax
40ada6:	0f 8e 30 04 00 00    	jle    0x40b1dc
40adac:	8b 7d 08             	mov    0x8(%ebp),%edi
40adaf:	32 c0                	xor    %al,%al
40adb1:	03 f9                	add    %ecx,%edi
40adb3:	eb 10                	jmp    0x40adc5
40adb5:	8b 56 10             	mov    0x10(%esi),%edx
40adb8:	2a 04 1a             	sub    (%edx,%ebx,1),%al
40adbb:	43                   	inc    %ebx
40adbc:	88 04 3a             	mov    %al,(%edx,%edi,1)
40adbf:	03 7d e4             	add    -0x1c(%ebp),%edi
40adc2:	8d 14 09             	lea    (%ecx,%ecx,1),%edx
40adc5:	3b fa                	cmp    %edx,%edi
40adc7:	7c ec                	jl     0x40adb5
40adc9:	ff 45 08             	incl   0x8(%ebp)
40adcc:	8b 45 08             	mov    0x8(%ebp),%eax
40adcf:	3b 45 e4             	cmp    -0x1c(%ebp),%eax
40add2:	7c d8                	jl     0x40adac
40add4:	e9 03 04 00 00       	jmp    0x40b1dc
40add9:	8b 7e 24             	mov    0x24(%esi),%edi
40addc:	8b 46 14             	mov    0x14(%esi),%eax
40addf:	8b 76 10             	mov    0x10(%esi),%esi
40ade2:	8d 0c 3e             	lea    (%esi,%edi,1),%ecx
40ade5:	89 7d d8             	mov    %edi,-0x28(%ebp)
40ade8:	89 45 d4             	mov    %eax,-0x2c(%ebp)
40adeb:	89 75 ec             	mov    %esi,-0x14(%ebp)
40adee:	89 4d d0             	mov    %ecx,-0x30(%ebp)
40adf1:	89 be 20 c0 03 00    	mov    %edi,0x3c020(%esi)
40adf7:	81 ff 00 e0 01 00    	cmp    $0x1e000,%edi
40adfd:	0f 83 d9 03 00 00    	jae    0x40b1dc
40ae03:	33 db                	xor    %ebx,%ebx
40ae05:	3b c3                	cmp    %ebx,%eax
40ae07:	89 5d f0             	mov    %ebx,-0x10(%ebp)
40ae0a:	0f 8e cc 03 00 00    	jle    0x40b1dc
40ae10:	eb 05                	jmp    0x40ae17
40ae12:	8b 7d d8             	mov    -0x28(%ebp),%edi
40ae15:	33 db                	xor    %ebx,%ebx
40ae17:	6a 1c                	push   $0x1c
40ae19:	8d 45 b0             	lea    -0x50(%ebp),%eax
40ae1c:	53                   	push   %ebx
40ae1d:	50                   	push   %eax
40ae1e:	89 5d dc             	mov    %ebx,-0x24(%ebp)
40ae21:	89 5d e0             	mov    %ebx,-0x20(%ebp)
40ae24:	89 5d f4             	mov    %ebx,-0xc(%ebp)
40ae27:	89 5d f8             	mov    %ebx,-0x8(%ebp)
40ae2a:	89 5d fc             	mov    %ebx,-0x4(%ebp)
40ae2d:	89 5d 08             	mov    %ebx,0x8(%ebp)
40ae30:	e8 cb f3 00 00       	call   0x41a200
40ae35:	8b 45 f0             	mov    -0x10(%ebp),%eax
40ae38:	83 65 e4 00          	andl   $0x0,-0x1c(%ebp)
40ae3c:	83 c4 0c             	add    $0xc,%esp
40ae3f:	3b c7                	cmp    %edi,%eax
40ae41:	e9 3f 01 00 00       	jmp    0x40af85
40ae46:	8b 45 e0             	mov    -0x20(%ebp),%eax
40ae49:	8b 55 fc             	mov    -0x4(%ebp),%edx
40ae4c:	8b c8                	mov    %eax,%ecx
40ae4e:	2b 4d f4             	sub    -0xc(%ebp),%ecx
40ae51:	8b fb                	mov    %ebx,%edi
40ae53:	8b d9                	mov    %ecx,%ebx
40ae55:	8b 4d ec             	mov    -0x14(%ebp),%ecx
40ae58:	0f af d3             	imul   %ebx,%edx
40ae5b:	0f b6 09             	movzbl (%ecx),%ecx
40ae5e:	8b f7                	mov    %edi,%esi
40ae60:	0f af 75 08          	imul   0x8(%ebp),%esi
40ae64:	03 f2                	add    %edx,%esi
40ae66:	8b 55 f8             	mov    -0x8(%ebp),%edx
40ae69:	0f af d0             	imul   %eax,%edx
40ae6c:	ff 45 ec             	incl   -0x14(%ebp)
40ae6f:	03 f2                	add    %edx,%esi
40ae71:	8b 55 dc             	mov    -0x24(%ebp),%edx
40ae74:	89 45 f4             	mov    %eax,-0xc(%ebp)
40ae77:	8d 04 d6             	lea    (%esi,%edx,8),%eax
40ae7a:	8b 75 d0             	mov    -0x30(%ebp),%esi
40ae7d:	c1 e8 03             	shr    $0x3,%eax
40ae80:	89 4d cc             	mov    %ecx,-0x34(%ebp)
40ae83:	25 ff 00 00 00       	and    $0xff,%eax
40ae88:	2b c1                	sub    %ecx,%eax
40ae8a:	8b 4d e8             	mov    -0x18(%ebp),%ecx
40ae8d:	88 04 31             	mov    %al,(%ecx,%esi,1)
40ae90:	0f be 75 cc          	movsbl -0x34(%ebp),%esi
40ae94:	8a c8                	mov    %al,%cl
40ae96:	2a ca                	sub    %dl,%cl
40ae98:	0f be c9             	movsbl %cl,%ecx
40ae9b:	c1 e6 03             	shl    $0x3,%esi
40ae9e:	56                   	push   %esi
40ae9f:	89 4d e0             	mov    %ecx,-0x20(%ebp)
40aea2:	89 45 dc             	mov    %eax,-0x24(%ebp)
40aea5:	e8 2b 1a 01 00       	call   0x41c8d5
40aeaa:	01 45 b0             	add    %eax,-0x50(%ebp)
40aead:	8b c6                	mov    %esi,%eax
40aeaf:	2b 45 f4             	sub    -0xc(%ebp),%eax
40aeb2:	50                   	push   %eax
40aeb3:	e8 1d 1a 01 00       	call   0x41c8d5
40aeb8:	01 45 b4             	add    %eax,-0x4c(%ebp)
40aebb:	8b 45 f4             	mov    -0xc(%ebp),%eax
40aebe:	03 c6                	add    %esi,%eax
40aec0:	50                   	push   %eax
40aec1:	e8 0f 1a 01 00       	call   0x41c8d5
40aec6:	01 45 b8             	add    %eax,-0x48(%ebp)
40aec9:	8b c6                	mov    %esi,%eax
40aecb:	2b c3                	sub    %ebx,%eax
40aecd:	50                   	push   %eax
40aece:	e8 02 1a 01 00       	call   0x41c8d5
40aed3:	01 45 bc             	add    %eax,-0x44(%ebp)
40aed6:	8d 04 1e             	lea    (%esi,%ebx,1),%eax
40aed9:	50                   	push   %eax
40aeda:	e8 f6 19 01 00       	call   0x41c8d5
40aedf:	01 45 c0             	add    %eax,-0x40(%ebp)
40aee2:	8b c6                	mov    %esi,%eax
40aee4:	2b c7                	sub    %edi,%eax
40aee6:	50                   	push   %eax
40aee7:	e8 e9 19 01 00       	call   0x41c8d5
40aeec:	01 45 c4             	add    %eax,-0x3c(%ebp)
40aeef:	03 f7                	add    %edi,%esi
40aef1:	56                   	push   %esi
40aef2:	e8 de 19 01 00       	call   0x41c8d5
40aef7:	01 45 c8             	add    %eax,-0x38(%ebp)
40aefa:	83 c4 1c             	add    $0x1c,%esp
40aefd:	f6 45 e4 1f          	testb  $0x1f,-0x1c(%ebp)
40af01:	75 76                	jne    0x40af79
40af03:	8b 55 b0             	mov    -0x50(%ebp),%edx
40af06:	33 ff                	xor    %edi,%edi
40af08:	33 c9                	xor    %ecx,%ecx
40af0a:	89 7d b0             	mov    %edi,-0x50(%ebp)
40af0d:	41                   	inc    %ecx
40af0e:	8d 44 8d b0          	lea    -0x50(%ebp,%ecx,4),%eax
40af12:	8b 30                	mov    (%eax),%esi
40af14:	3b f2                	cmp    %edx,%esi
40af16:	73 04                	jae    0x40af1c
40af18:	8b d6                	mov    %esi,%edx
40af1a:	8b f9                	mov    %ecx,%edi