407477:	83 e4 f8             	and    $0xfffffff8,%esp
40747a:	83 ec 64             	sub    $0x64,%esp
40747d:	8b 45 08             	mov    0x8(%ebp),%eax
407480:	53                   	push   %ebx
407481:	8b 00                	mov    (%eax),%eax
407483:	56                   	push   %esi
407484:	8b 32                	mov    (%edx),%esi
407486:	57                   	push   %edi
407487:	8b 7d 34             	mov    0x34(%ebp),%edi
40748a:	89 44 24 20          	mov    %eax,0x20(%esp)
40748e:	8b 45 30             	mov    0x30(%ebp),%eax
407491:	89 44 24 68          	mov    %eax,0x68(%esp)
407495:	6a fe                	push   $0xfffffffe
407497:	58                   	pop    %eax
407498:	89 4c 24 40          	mov    %ecx,0x40(%esp)
40749c:	33 c9                	xor    %ecx,%ecx
40749e:	89 54 24 50          	mov    %edx,0x50(%esp)
4074a2:	8b 55 18             	mov    0x18(%ebp),%edx
4074a5:	89 44 24 10          	mov    %eax,0x10(%esp)
4074a9:	89 44 24 30          	mov    %eax,0x30(%esp)
4074ad:	89 4c 24 44          	mov    %ecx,0x44(%esp)
4074b1:	89 4c 24 48          	mov    %ecx,0x48(%esp)
4074b5:	89 4c 24 1c          	mov    %ecx,0x1c(%esp)
4074b9:	89 4c 24 2c          	mov    %ecx,0x2c(%esp)
4074bd:	b8 85 00 00 00       	mov    $0x85,%eax
4074c2:	89 74 24 6c          	mov    %esi,0x6c(%esp)
4074c6:	8d 4a 04             	lea    0x4(%edx),%ecx
4074c9:	89 74 24 14          	mov    %esi,0x14(%esp)
4074cd:	89 74 24 4c          	mov    %esi,0x4c(%esp)
4074d1:	89 4c 24 0c          	mov    %ecx,0xc(%esp)
4074d5:	66 39 06             	cmp    %ax,(%esi)
4074d8:	0f 84 95 01 00 00    	je     0x407673
4074de:	8d 46 02             	lea    0x2(%esi),%eax
4074e1:	33 db                	xor    %ebx,%ebx
4074e3:	89 44 24 5c          	mov    %eax,0x5c(%esp)
4074e7:	66 89 18             	mov    %bx,(%eax)
4074ea:	8d 04 55 04 00 00 00 	lea    0x4(,%edx,2),%eax
4074f1:	89 44 24 54          	mov    %eax,0x54(%esp)
4074f5:	03 f0                	add    %eax,%esi
4074f7:	8b 47 40             	mov    0x40(%edi),%eax
4074fa:	6a 7c                	push   $0x7c
4074fc:	89 44 24 38          	mov    %eax,0x38(%esp)
407500:	89 44 24 5c          	mov    %eax,0x5c(%esp)
407504:	5a                   	pop    %edx
407505:	83 7d 14 00          	cmpl   $0x0,0x14(%ebp)
407509:	89 74 24 18          	mov    %esi,0x18(%esp)
40750d:	0f 85 87 02 00 00    	jne    0x40779a
407513:	83 7d 10 00          	cmpl   $0x0,0x10(%ebp)
407517:	0f 85 ea af 07 00    	jne    0x482507
40751d:	8b 5d 38             	mov    0x38(%ebp),%ebx
407520:	8b c3                	mov    %ebx,%eax
407522:	f7 d8                	neg    %eax
407524:	1b c0                	sbb    %eax,%eax
407526:	8d 4c 24 0c          	lea    0xc(%esp),%ecx
40752a:	23 c1                	and    %ecx,%eax
40752c:	50                   	push   %eax
40752d:	57                   	push   %edi
40752e:	ff 75 1c             	push   0x1c(%ebp)
407531:	8d 44 24 74          	lea    0x74(%esp),%eax
407535:	50                   	push   %eax
407536:	8d 44 24 34          	lea    0x34(%esp),%eax
40753a:	50                   	push   %eax
40753b:	8d 44 24 3c          	lea    0x3c(%esp),%eax
40753f:	50                   	push   %eax
407540:	8d 44 24 50          	lea    0x50(%esp),%eax
407544:	50                   	push   %eax
407545:	8d 44 24 58          	lea    0x58(%esp),%eax
407549:	50                   	push   %eax
40754a:	ff 75 0c             	push   0xc(%ebp)
40754d:	8d 44 24 44          	lea    0x44(%esp),%eax
407551:	50                   	push   %eax
407552:	8d 54 24 40          	lea    0x40(%esp),%edx
407556:	8d 4c 24 68          	lea    0x68(%esp),%ecx
40755a:	e8 51 02 00 00       	call   0x4077b0
40755f:	83 c4 28             	add    $0x28,%esp
407562:	85 c0                	test   %eax,%eax
407564:	0f 84 20 b0 07 00    	je     0x48258a
40756a:	8b 44 24 34          	mov    0x34(%esp),%eax
40756e:	39 47 40             	cmp    %eax,0x40(%edi)
407571:	0f 87 43 01 00 00    	ja     0x4076ba
407577:	8b 74 24 18          	mov    0x18(%esp),%esi
40757b:	85 db                	test   %ebx,%ebx
40757d:	75 3a                	jne    0x4075b9
40757f:	8b 44 24 14          	mov    0x14(%esp),%eax
407583:	6a 77                	push   $0x77
407585:	59                   	pop    %ecx
407586:	66 39 08             	cmp    %cx,(%eax)
407589:	0f 84 62 01 00 00    	je     0x4076f1
40758f:	8b 4c 24 3c          	mov    0x3c(%esp),%ecx
407593:	8b 54 24 28          	mov    0x28(%esp),%edx
407597:	89 4c 24 2c          	mov    %ecx,0x2c(%esp)
40759b:	8b 4c 24 38          	mov    0x38(%esp),%ecx
40759f:	89 4c 24 30          	mov    %ecx,0x30(%esp)
4075a3:	8b 4c 24 24          	mov    0x24(%esp),%ecx
4075a7:	89 54 24 1c          	mov    %edx,0x1c(%esp)
4075ab:	89 4c 24 10          	mov    %ecx,0x10(%esp)
4075af:	83 7d 10 00          	cmpl   $0x0,0x10(%ebp)
4075b3:	0f 85 70 af 07 00    	jne    0x482529
4075b9:	8b 5c 24 20          	mov    0x20(%esp),%ebx
4075bd:	6a 7c                	push   $0x7c
4075bf:	5a                   	pop    %edx
4075c0:	66 39 13             	cmp    %dx,(%ebx)
4075c3:	0f 84 fd 00 00 00    	je     0x4076c6
4075c9:	83 7d 38 00          	cmpl   $0x0,0x38(%ebp)
4075cd:	75 22                	jne    0x4075f1
4075cf:	8b 7c 24 14          	mov    0x14(%esp),%edi
4075d3:	8b d6                	mov    %esi,%edx
4075d5:	2b d7                	sub    %edi,%edx
4075d7:	d1 fa                	sar    $1,%edx
4075d9:	0f b7 4f 02          	movzwl 0x2(%edi),%ecx
4075dd:	8b c1                	mov    %ecx,%eax
4075df:	f7 d8                	neg    %eax
4075e1:	66 89 57 02          	mov    %dx,0x2(%edi)
4075e5:	8b d1                	mov    %ecx,%edx
4075e7:	8d 3c 47             	lea    (%edi,%eax,2),%edi
4075ea:	85 c9                	test   %ecx,%ecx
4075ec:	7f eb                	jg     0x4075d9
4075ee:	8b 7d 34             	mov    0x34(%ebp),%edi
4075f1:	8b 4c 24 4c          	mov    0x4c(%esp),%ecx
4075f5:	6a 78                	push   $0x78
4075f7:	58                   	pop    %eax
4075f8:	66 89 06             	mov    %ax,(%esi)
4075fb:	8b c6                	mov    %esi,%eax
4075fd:	2b c1                	sub    %ecx,%eax
4075ff:	d1 f8                	sar    $1,%eax
407601:	66 89 46 02          	mov    %ax,0x2(%esi)
407605:	83 c6 04             	add    $0x4,%esi
407608:	83 7c 24 48 00       	cmpl   $0x0,0x48(%esp)
40760d:	0f 8f 87 00 00 00    	jg     0x40769a
407613:	8b 4c 24 0c          	mov    0xc(%esp),%ecx
407617:	8b 44 24 34          	mov    0x34(%esp),%eax
40761b:	8b 54 24 2c          	mov    0x2c(%esp),%edx
40761f:	89 47 40             	mov    %eax,0x40(%edi)
407622:	8b 44 24 50          	mov    0x50(%esp),%eax
407626:	89 30                	mov    %esi,(%eax)
407628:	8b 45 08             	mov    0x8(%ebp),%eax
40762b:	89 18                	mov    %ebx,(%eax)
40762d:	8b 45 20             	mov    0x20(%ebp),%eax
407630:	8b 5c 24 10          	mov    0x10(%esp),%ebx
407634:	89 10                	mov    %edx,(%eax)
407636:	8b 45 24             	mov    0x24(%ebp),%eax
407639:	8b 54 24 30          	mov    0x30(%esp),%edx
40763d:	89 10                	mov    %edx,(%eax)
40763f:	8b 45 28             	mov    0x28(%ebp),%eax
407642:	8b 54 24 1c          	mov    0x1c(%esp),%edx
407646:	89 10                	mov    %edx,(%eax)
407648:	8b 45 2c             	mov    0x2c(%ebp),%eax
40764b:	89 18                	mov    %ebx,(%eax)
40764d:	8b 5d 38             	mov    0x38(%ebp),%ebx
407650:	85 db                	test   %ebx,%ebx
407652:	74 15                	je     0x407669
407654:	8b 13                	mov    (%ebx),%edx
407656:	b8 eb ff ff 7f       	mov    $0x7fffffeb,%eax
40765b:	2b c2                	sub    %edx,%eax
40765d:	3b c1                	cmp    %ecx,%eax
40765f:	0f 8c 7e af 07 00    	jl     0x4825e3
407665:	03 ca                	add    %edx,%ecx
407667:	89 0b                	mov    %ecx,(%ebx)
407669:	33 c0                	xor    %eax,%eax
40766b:	40                   	inc    %eax
40766c:	5f                   	pop    %edi
40766d:	5e                   	pop    %esi
40766e:	5b                   	pop    %ebx
40766f:	8b e5                	mov    %ebp,%esp
407671:	5d                   	pop    %ebp
407672:	c3                   	ret
407673:	0f b7 5e 04          	movzwl 0x4(%esi),%ebx
407677:	8b 47 24             	mov    0x24(%edi),%eax
40767a:	89 44 24 60          	mov    %eax,0x60(%esp)
40767e:	33 c0                	xor    %eax,%eax
407680:	66 89 44 24 66       	mov    %ax,0x66(%esp)
407685:	8d 44 24 60          	lea    0x60(%esp),%eax
407689:	89 5c 24 48          	mov    %ebx,0x48(%esp)
40768d:	66 89 5c 24 64       	mov    %bx,0x64(%esp)
407692:	89 47 24             	mov    %eax,0x24(%edi)
407695:	e9 44 fe ff ff       	jmp    0x4074de
40769a:	8b 47 24             	mov    0x24(%edi),%eax
40769d:	33 d2                	xor    %edx,%edx
40769f:	66 39 50 06          	cmp    %dx,0x6(%eax)
4076a3:	0f 85 f1 ae 07 00    	jne    0x48259a
4076a9:	8b 4c 24 0c          	mov    0xc(%esp),%ecx
4076ad:	8b 47 24             	mov    0x24(%edi),%eax
4076b0:	8b 00                	mov    (%eax),%eax
4076b2:	89 47 24             	mov    %eax,0x24(%edi)
4076b5:	e9 5d ff ff ff       	jmp    0x407617
4076ba:	8b 47 40             	mov    0x40(%edi),%eax
4076bd:	89 44 24 34          	mov    %eax,0x34(%esp)
4076c1:	e9 b1 fe ff ff       	jmp    0x407577
4076c6:	83 7d 38 00          	cmpl   $0x0,0x38(%ebp)
4076ca:	8b 4c 24 0c          	mov    0xc(%esp),%ecx
4076ce:	74 64                	je     0x407734
4076d0:	8b 44 24 50          	mov    0x50(%esp),%eax
4076d4:	8b 30                	mov    (%eax),%esi
4076d6:	03 74 24 54          	add    0x54(%esp),%esi
4076da:	83 c1 02             	add    $0x2,%ecx
4076dd:	89 4c 24 0c          	mov    %ecx,0xc(%esp)
4076e1:	8b 44 24 58          	mov    0x58(%esp),%eax
4076e5:	83 c3 02             	add    $0x2,%ebx
4076e8:	89 5c 24 20          	mov    %ebx,0x20(%esp)
4076ec:	e9 14 fe ff ff       	jmp    0x407505
4076f1:	8b 4c 24 30          	mov    0x30(%esp),%ecx
4076f5:	8b 44 24 38          	mov    0x38(%esp),%eax
4076f9:	8b 54 24 3c          	mov    0x3c(%esp),%edx
4076fd:	85 c9                	test   %ecx,%ecx
4076ff:	79 52                	jns    0x407753
407701:	85 c0                	test   %eax,%eax
407703:	78 5c                	js     0x407761
407705:	8b 4c 24 24          	mov    0x24(%esp),%ecx
407709:	85 c9                	test   %ecx,%ecx
40770b:	79 58                	jns    0x407765
40770d:	8b c8                	mov    %eax,%ecx
40770f:	89 54 24 28          	mov    %edx,0x28(%esp)
407713:	89 4c 24 24          	mov    %ecx,0x24(%esp)
407717:	8b 5c 24 10          	mov    0x10(%esp),%ebx
40771b:	8b c1                	mov    %ecx,%eax
40771d:	33 c3                	xor    %ebx,%eax
40771f:	a9 fd ff ff ff       	test   $0xfffffffd,%eax
407724:	74 62                	je     0x407788
407726:	83 4c 24 10 ff       	orl    $0xffffffff,0x10(%esp)
40772b:	8b 44 24 14          	mov    0x14(%esp),%eax
40772f:	e9 7b fe ff ff       	jmp    0x4075af
407734:	6a 77                	push   $0x77
407736:	58                   	pop    %eax
407737:	66 89 06             	mov    %ax,(%esi)
40773a:	8b c6                	mov    %esi,%eax
40773c:	2b 44 24 14          	sub    0x14(%esp),%eax
407740:	89 74 24 14          	mov    %esi,0x14(%esp)
407744:	d1 f8                	sar    $1,%eax
407746:	66 89 46 02          	mov    %ax,0x2(%esi)
40774a:	89 74 24 6c          	mov    %esi,0x6c(%esp)
40774e:	83 c6 04             	add    $0x4,%esi
407751:	eb 8e                	jmp    0x4076e1
407753:	39 54 24 2c          	cmp    %edx,0x2c(%esp)
407757:	75 12                	jne    0x40776b
407759:	3b c8                	cmp    %eax,%ecx
40775b:	75 0e                	jne    0x40776b
40775d:	85 c9                	test   %ecx,%ecx
40775f:	78 a0                	js     0x407701
407761:	8b 4c 24 24          	mov    0x24(%esp),%ecx
407765:	8b 54 24 28          	mov    0x28(%esp),%edx
407769:	eb ac                	jmp    0x407717
40776b:	8b 5c 24 10          	mov    0x10(%esp),%ebx
40776f:	85 db                	test   %ebx,%ebx
407771:	79 0c                	jns    0x40777f
407773:	8b 5c 24 2c          	mov    0x2c(%esp),%ebx
407777:	89 5c 24 1c          	mov    %ebx,0x1c(%esp)
40777b:	89 4c 24 10          	mov    %ecx,0x10(%esp)
40777f:	83 c9 ff             	or     $0xffffffff,%ecx
407782:	89 4c 24 30          	mov    %ecx,0x30(%esp)
407786:	eb d5                	jmp    0x40775d
407788:	39 54 24 1c          	cmp    %edx,0x1c(%esp)
40778c:	75 98                	jne    0x407726
40778e:	0b d9                	or     %ecx,%ebx
407790:	89 54 24 1c          	mov    %edx,0x1c(%esp)
407794:	89 5c 24 10          	mov    %ebx,0x10(%esp)
407798:	eb 91                	jmp    0x40772b
40779a:	89 47 40             	mov    %eax,0x40(%edi)
40779d:	e9 71 fd ff ff       	jmp    0x407513
4077a2:	cc                   	int3
4077a3:	cc                   	int3
4077a4:	cc                   	int3
4077a5:	cc                   	int3
4077a6:	cc                   	int3
4077a7:	cc                   	int3
4077a8:	cc                   	int3
4077a9:	cc                   	int3
4077aa:	cc                   	int3
4077ab:	cc                   	int3
4077ac:	cc                   	int3
4077ad:	cc                   	int3
4077ae:	cc                   	int3
4077af:	cc                   	int3
4077b0:	55                   	push   %ebp
4077b1:	8b ec                	mov    %esp,%ebp
4077b3:	81 ec 44 01 00 00    	sub    $0x144,%esp
4077b9:	53                   	push   %ebx
4077ba:	8b 19                	mov    (%ecx),%ebx
4077bc:	56                   	push   %esi
4077bd:	57                   	push   %edi
4077be:	8b 7d 08             	mov    0x8(%ebp),%edi
4077c1:	8b c2                	mov    %edx,%eax
4077c3:	8b 3f                	mov    (%edi),%edi
4077c5:	8b 10                	mov    (%eax),%edx
4077c7:	89 8d e8 fe ff ff    	mov    %ecx,-0x118(%ebp)
4077cd:	33 c9                	xor    %ecx,%ecx
4077cf:	89 85 ec fe ff ff    	mov    %eax,-0x114(%ebp)
4077d5:	c7 45 ac 00 00 00 00 	movl   $0x0,-0x54(%ebp)
4077dc:	c7 45 c4 00 00 00 00 	movl   $0x0,-0x3c(%ebp)
4077e3:	89 5d f4             	mov    %ebx,-0xc(%ebp)
4077e6:	c7 85 58 ff ff ff 00 	movl   $0x0,-0xa8(%ebp)
4077ed:	00 00 00
4077f0:	c7 85 74 ff ff ff 00 	movl   $0x0,-0x8c(%ebp)
4077f7:	00 00 00
4077fa:	89 55 f8             	mov    %edx,-0x8(%ebp)
4077fd:	89 95 50 ff ff ff    	mov    %edx,-0xb0(%ebp)
407803:	89 95 48 ff ff ff    	mov    %edx,-0xb8(%ebp)
407809:	c7 45 cc 00 00 00 00 	movl   $0x0,-0x34(%ebp)
407810:	c7 85 64 ff ff ff 00 	movl   $0x0,-0x9c(%ebp)
407817:	00 00 00
40781a:	89 7d fc             	mov    %edi,-0x4(%ebp)
40781d:	89 4d 84             	mov    %ecx,-0x7c(%ebp)
407820:	89 4d e0             	mov    %ecx,-0x20(%ebp)
407823:	89 8d 78 ff ff ff    	mov    %ecx,-0x88(%ebp)
407829:	89 4d c0             	mov    %ecx,-0x40(%ebp)
40782c:	f7 c3 00 08 00 00    	test   $0x800,%ebx
407832:	0f 84 26 0f 00 00    	je     0x40875e
407838:	c7 45 dc 01 00 00 00 	movl   $0x1,-0x24(%ebp)
40783f:	f7 c3 00 02 00 00    	test   $0x200,%ebx
407845:	0f 85 1b 0f 00 00    	jne    0x408766
40784b:	33 c0                	xor    %eax,%eax
40784d:	89 85 60 ff ff ff    	mov    %eax,-0xa0(%ebp)
407853:	83 f0 01             	xor    $0x1,%eax
407856:	89 85 1c ff ff ff    	mov    %eax,-0xe4(%ebp)
40785c:	0f be c3             	movsbl %bl,%eax
40785f:	83 e0 01             	and    $0x1,%eax
407862:	89 4d d8             	mov    %ecx,-0x28(%ebp)
407865:	89 8d 7c ff ff ff    	mov    %ecx,-0x84(%ebp)
40786b:	89 4d a0             	mov    %ecx,-0x60(%ebp)
40786e:	89 4d 90             	mov    %ecx,-0x70(%ebp)
407871:	c7 45 98 fe ff ff ff 	movl   $0xfffffffe,-0x68(%ebp)
407878:	c7 45 8c fe ff ff ff 	movl   $0xfffffffe,-0x74(%ebp)
40787f:	c7 45 a8 fe ff ff ff 	movl   $0xfffffffe,-0x58(%ebp)
407886:	c7 45 d0 fe ff ff ff 	movl   $0xfffffffe,-0x30(%ebp)
40788d:	89 85 70 ff ff ff    	mov    %eax,-0x90(%ebp)
407893:	0f b7 37             	movzwl (%edi),%esi
407896:	dd 05 f8 69 4b 00    	fldl   0x4b69f8
40789c:	85 f6                	test   %esi,%esi
40789e:	0f 84 30 04 00 00    	je     0x407cd4
4078a4:	8b 45 28             	mov    0x28(%ebp),%eax
4078a7:	8b 48 3c             	mov    0x3c(%eax),%ecx
4078aa:	8b 40 10             	mov    0x10(%eax),%eax
4078ad:	8d 04 48             	lea    (%eax,%ecx,2),%eax
4078b0:	05 38 ff ff ff       	add    $0xffffff38,%eax
4078b5:	83 7d 2c 00          	cmpl   $0x0,0x2c(%ebp)
4078b9:	0f 84 7a 01 00 00    	je     0x407a39
4078bf:	3b d0                	cmp    %eax,%edx
4078c1:	0f 87 4e aa 07 00    	ja     0x482315
4078c7:	8b 85 50 ff ff ff    	mov    -0xb0(%ebp),%eax
4078cd:	3b d0                	cmp    %eax,%edx
4078cf:	0f 82 9b 0e 00 00    	jb     0x408770
4078d5:	8b ca                	mov    %edx,%ecx
4078d7:	2b c8                	sub    %eax,%ecx
4078d9:	8b 45 2c             	mov    0x2c(%ebp),%eax
4078dc:	d1 f9                	sar    $1,%ecx
4078de:	8b 10                	mov    (%eax),%edx
4078e0:	b8 eb ff ff 7f       	mov    $0x7fffffeb,%eax
4078e5:	2b c2                	sub    %edx,%eax
4078e7:	3b c1                	cmp    %ecx,%eax
4078e9:	0f 8c 23 a7 07 00    	jl     0x482012
4078ef:	8d 04 0a             	lea    (%edx,%ecx,1),%eax