40a2d4:	75 29                	jne    0x40a2ff
40a2d6:	8b 47 04             	mov    0x4(%edi),%eax
40a2d9:	89 45 d0             	mov    %eax,-0x30(%ebp)
40a2dc:	83 67 04 00          	andl   $0x0,0x4(%edi)
40a2e0:	83 fe 08             	cmp    $0x8,%esi
40a2e3:	75 41                	jne    0x40a326
40a2e5:	e8 b6 d1 ff ff       	call   0x4074a0
40a2ea:	8b 40 08             	mov    0x8(%eax),%eax
40a2ed:	89 45 cc             	mov    %eax,-0x34(%ebp)
40a2f0:	e8 ab d1 ff ff       	call   0x4074a0
40a2f5:	c7 40 08 8c 00 00 00 	movl   $0x8c,0x8(%eax)
40a2fc:	8b 4d e0             	mov    -0x20(%ebp),%ecx
40a2ff:	83 fe 08             	cmp    $0x8,%esi
40a302:	75 22                	jne    0x40a326
40a304:	6b 05 5c fd 40 00 0c 	imul   $0xc,0x40fd5c,%eax
40a30b:	03 07                	add    (%edi),%eax
40a30d:	6b 15 60 fd 40 00 0c 	imul   $0xc,0x40fd60,%edx
40a314:	03 d0                	add    %eax,%edx
40a316:	89 45 c8             	mov    %eax,-0x38(%ebp)
40a319:	3b c2                	cmp    %edx,%eax
40a31b:	74 13                	je     0x40a330
40a31d:	83 60 08 00          	andl   $0x0,0x8(%eax)
40a321:	83 c0 0c             	add    $0xc,%eax
40a324:	eb f0                	jmp    0x40a316
40a326:	a1 14 60 41 00       	mov    0x416014,%eax
40a32b:	8b 55 dc             	mov    -0x24(%ebp),%edx
40a32e:	89 02                	mov    %eax,(%edx)
40a330:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
40a337:	e8 34 00 00 00       	call   0x40a370
40a33c:	84 ff                	test   %bh,%bh
40a33e:	75 72                	jne    0x40a3b2
40a340:	83 fe 08             	cmp    $0x8,%esi
40a343:	75 3b                	jne    0x40a380
40a345:	e8 56 d1 ff ff       	call   0x4074a0
40a34a:	ff 70 08             	push   0x8(%eax)
40a34d:	56                   	push   %esi
40a34e:	8b 5d e0             	mov    -0x20(%ebp),%ebx
40a351:	8b cb                	mov    %ebx,%ecx
40a353:	ff 15 18 f1 40 00    	call   *0x40f118
40a359:	ff d3                	call   *%ebx
40a35b:	59                   	pop    %ecx
40a35c:	eb 2e                	jmp    0x40a38c
40a35e:	8b 75 08             	mov    0x8(%ebp),%esi
40a361:	8b 7d d8             	mov    -0x28(%ebp),%edi
40a364:	8a 5d e7             	mov    -0x19(%ebp),%bl
40a367:	8b 4d d4             	mov    -0x2c(%ebp),%ecx
40a36a:	89 4d e0             	mov    %ecx,-0x20(%ebp)
40a36d:	8a 7d e6             	mov    -0x1a(%ebp),%bh
40a370:	84 db                	test   %bl,%bl
40a372:	74 0b                	je     0x40a37f
40a374:	6a 03                	push   $0x3
40a376:	e8 99 d4 ff ff       	call   0x407814
40a37b:	59                   	pop    %ecx
40a37c:	8b 4d e0             	mov    -0x20(%ebp),%ecx
40a37f:	c3                   	ret
40a380:	56                   	push   %esi
40a381:	ff 15 18 f1 40 00    	call   *0x40f118
40a387:	8b 5d e0             	mov    -0x20(%ebp),%ebx
40a38a:	ff d3                	call   *%ebx
40a38c:	59                   	pop    %ecx
40a38d:	83 fe 08             	cmp    $0x8,%esi
40a390:	74 0a                	je     0x40a39c
40a392:	83 fe 0b             	cmp    $0xb,%esi
40a395:	74 05                	je     0x40a39c
40a397:	83 fe 04             	cmp    $0x4,%esi
40a39a:	75 16                	jne    0x40a3b2
40a39c:	8b 45 d0             	mov    -0x30(%ebp),%eax
40a39f:	89 47 04             	mov    %eax,0x4(%edi)
40a3a2:	83 fe 08             	cmp    $0x8,%esi
40a3a5:	75 0b                	jne    0x40a3b2
40a3a7:	e8 f4 d0 ff ff       	call   0x4074a0
40a3ac:	8b 4d cc             	mov    -0x34(%ebp),%ecx
40a3af:	89 48 08             	mov    %ecx,0x8(%eax)
40a3b2:	33 c0                	xor    %eax,%eax
40a3b4:	8b 4d f0             	mov    -0x10(%ebp),%ecx
40a3b7:	64 89 0d 00 00 00 00 	mov    %ecx,%fs:0x0
40a3be:	59                   	pop    %ecx
40a3bf:	5f                   	pop    %edi
40a3c0:	5e                   	pop    %esi
40a3c1:	5b                   	pop    %ebx
40a3c2:	c9                   	leave
40a3c3:	c3                   	ret
40a3c4:	84 db                	test   %bl,%bl
40a3c6:	74 08                	je     0x40a3d0
40a3c8:	6a 03                	push   $0x3
40a3ca:	e8 45 d4 ff ff       	call   0x407814
40a3cf:	59                   	pop    %ecx
40a3d0:	6a 03                	push   $0x3
40a3d2:	e8 e0 c4 ff ff       	call   0x4068b7
40a3d7:	cc                   	int3
40a3d8:	6a 08                	push   $0x8
40a3da:	68 78 4c 41 00       	push   $0x414c78
40a3df:	e8 2c 90 ff ff       	call   0x403410
40a3e4:	8b 45 08             	mov    0x8(%ebp),%eax
40a3e7:	ff 30                	push   (%eax)
40a3e9:	e8 ae 03 00 00       	call   0x40a79c
40a3ee:	59                   	pop    %ecx
40a3ef:	83 65 fc 00          	andl   $0x0,-0x4(%ebp)
40a3f3:	8b 75 0c             	mov    0xc(%ebp),%esi
40a3f6:	ff 76 04             	push   0x4(%esi)
40a3f9:	8b 06                	mov    (%esi),%eax
40a3fb:	ff 30                	push   (%eax)
40a3fd:	e8 5b 01 00 00       	call   0x40a55d
40a402:	59                   	pop    %ecx
40a403:	59                   	pop    %ecx
40a404:	84 c0                	test   %al,%al
40a406:	74 32                	je     0x40a43a
40a408:	8b 46 08             	mov    0x8(%esi),%eax
40a40b:	80 38 00             	cmpb   $0x0,(%eax)
40a40e:	75 0e                	jne    0x40a41e
40a410:	8b 06                	mov    (%esi),%eax
40a412:	8b 00                	mov    (%eax),%eax
40a414:	8b 40 0c             	mov    0xc(%eax),%eax
40a417:	90                   	nop
40a418:	d1 e8                	shr    $1,%eax
40a41a:	a8 01                	test   $0x1,%al
40a41c:	74 1c                	je     0x40a43a
40a41e:	8b 06                	mov    (%esi),%eax
40a420:	ff 30                	push   (%eax)
40a422:	e8 f3 01 00 00       	call   0x40a61a
40a427:	59                   	pop    %ecx
40a428:	83 f8 ff             	cmp    $0xffffffff,%eax
40a42b:	74 07                	je     0x40a434
40a42d:	8b 46 04             	mov    0x4(%esi),%eax
40a430:	ff 00                	incl   (%eax)
40a432:	eb 06                	jmp    0x40a43a
40a434:	8b 46 0c             	mov    0xc(%esi),%eax
40a437:	83 08 ff             	orl    $0xffffffff,(%eax)
40a43a:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
40a441:	e8 12 00 00 00       	call   0x40a458
40a446:	8b 4d f0             	mov    -0x10(%ebp),%ecx
40a449:	64 89 0d 00 00 00 00 	mov    %ecx,%fs:0x0
40a450:	59                   	pop    %ecx
40a451:	5f                   	pop    %edi
40a452:	5e                   	pop    %esi
40a453:	5b                   	pop    %ebx
40a454:	c9                   	leave
40a455:	c2 0c 00             	ret    $0xc
40a458:	8b 45 10             	mov    0x10(%ebp),%eax
40a45b:	ff 30                	push   (%eax)
40a45d:	e8 4e 03 00 00       	call   0x40a7b0
40a462:	59                   	pop    %ecx
40a463:	c3                   	ret
40a464:	6a 2c                	push   $0x2c
40a466:	68 98 4c 41 00       	push   $0x414c98
40a46b:	e8 a0 8f ff ff       	call   0x403410
40a470:	8b 45 08             	mov    0x8(%ebp),%eax
40a473:	ff 30                	push   (%eax)
40a475:	e8 52 d3 ff ff       	call   0x4077cc
40a47a:	59                   	pop    %ecx
40a47b:	83 65 fc 00          	andl   $0x0,-0x4(%ebp)
40a47f:	8b 35 84 73 41 00    	mov    0x417384,%esi
40a485:	a1 80 73 41 00       	mov    0x417380,%eax
40a48a:	8d 1c 86             	lea    (%esi,%eax,4),%ebx
40a48d:	8b 7d 0c             	mov    0xc(%ebp),%edi
40a490:	89 75 d4             	mov    %esi,-0x2c(%ebp)
40a493:	3b f3                	cmp    %ebx,%esi
40a495:	74 4f                	je     0x40a4e6
40a497:	8b 06                	mov    (%esi),%eax
40a499:	89 45 e0             	mov    %eax,-0x20(%ebp)
40a49c:	ff 37                	push   (%edi)
40a49e:	50                   	push   %eax
40a49f:	e8 b9 00 00 00       	call   0x40a55d
40a4a4:	59                   	pop    %ecx
40a4a5:	59                   	pop    %ecx
40a4a6:	84 c0                	test   %al,%al
40a4a8:	74 37                	je     0x40a4e1
40a4aa:	8b 57 08             	mov    0x8(%edi),%edx
40a4ad:	8b 4f 04             	mov    0x4(%edi),%ecx
40a4b0:	8b 07                	mov    (%edi),%eax
40a4b2:	8d 7d e0             	lea    -0x20(%ebp),%edi
40a4b5:	89 7d c4             	mov    %edi,-0x3c(%ebp)
40a4b8:	89 45 c8             	mov    %eax,-0x38(%ebp)
40a4bb:	89 4d cc             	mov    %ecx,-0x34(%ebp)
40a4be:	89 55 d0             	mov    %edx,-0x30(%ebp)
40a4c1:	8b 45 e0             	mov    -0x20(%ebp),%eax
40a4c4:	89 45 dc             	mov    %eax,-0x24(%ebp)
40a4c7:	89 45 d8             	mov    %eax,-0x28(%ebp)
40a4ca:	8d 45 dc             	lea    -0x24(%ebp),%eax
40a4cd:	50                   	push   %eax
40a4ce:	8d 45 c4             	lea    -0x3c(%ebp),%eax
40a4d1:	50                   	push   %eax
40a4d2:	8d 45 d8             	lea    -0x28(%ebp),%eax
40a4d5:	50                   	push   %eax
40a4d6:	8d 4d e7             	lea    -0x19(%ebp),%ecx
40a4d9:	e8 fa fe ff ff       	call   0x40a3d8
40a4de:	8b 7d 0c             	mov    0xc(%ebp),%edi
40a4e1:	83 c6 04             	add    $0x4,%esi
40a4e4:	eb aa                	jmp    0x40a490
40a4e6:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
40a4ed:	e8 12 00 00 00       	call   0x40a504
40a4f2:	8b 4d f0             	mov    -0x10(%ebp),%ecx
40a4f5:	64 89 0d 00 00 00 00 	mov    %ecx,%fs:0x0
40a4fc:	59                   	pop    %ecx
40a4fd:	5f                   	pop    %edi
40a4fe:	5e                   	pop    %esi
40a4ff:	5b                   	pop    %ebx
40a500:	c9                   	leave
40a501:	c2 0c 00             	ret    $0xc
40a504:	8b 45 10             	mov    0x10(%ebp),%eax
40a507:	ff 30                	push   (%eax)
40a509:	e8 06 d3 ff ff       	call   0x407814
40a50e:	59                   	pop    %ecx
40a50f:	c3                   	ret
40a510:	8b ff                	mov    %edi,%edi
40a512:	55                   	push   %ebp
40a513:	8b ec                	mov    %esp,%ebp
40a515:	83 ec 20             	sub    $0x20,%esp
40a518:	83 65 f8 00          	andl   $0x0,-0x8(%ebp)
40a51c:	8d 45 f8             	lea    -0x8(%ebp),%eax
40a51f:	83 65 f4 00          	andl   $0x0,-0xc(%ebp)
40a523:	8d 4d ff             	lea    -0x1(%ebp),%ecx
40a526:	89 45 e0             	mov    %eax,-0x20(%ebp)
40a529:	8d 45 08             	lea    0x8(%ebp),%eax
40a52c:	89 45 e4             	mov    %eax,-0x1c(%ebp)
40a52f:	8d 45 f4             	lea    -0xc(%ebp),%eax
40a532:	6a 08                	push   $0x8
40a534:	89 45 e8             	mov    %eax,-0x18(%ebp)
40a537:	58                   	pop    %eax
40a538:	89 45 f0             	mov    %eax,-0x10(%ebp)
40a53b:	89 45 ec             	mov    %eax,-0x14(%ebp)
40a53e:	8d 45 f0             	lea    -0x10(%ebp),%eax
40a541:	50                   	push   %eax
40a542:	8d 45 e0             	lea    -0x20(%ebp),%eax
40a545:	50                   	push   %eax
40a546:	8d 45 ec             	lea    -0x14(%ebp),%eax
40a549:	50                   	push   %eax
40a54a:	e8 15 ff ff ff       	call   0x40a464
40a54f:	80 7d 08 00          	cmpb   $0x0,0x8(%ebp)
40a553:	8b 45 f8             	mov    -0x8(%ebp),%eax
40a556:	75 03                	jne    0x40a55b
40a558:	8b 45 f4             	mov    -0xc(%ebp),%eax
40a55b:	c9                   	leave
40a55c:	c3                   	ret
40a55d:	8b ff                	mov    %edi,%edi
40a55f:	55                   	push   %ebp
40a560:	8b ec                	mov    %esp,%ebp
40a562:	8b 45 08             	mov    0x8(%ebp),%eax
40a565:	85 c0                	test   %eax,%eax
40a567:	74 1d                	je     0x40a586
40a569:	8b 48 0c             	mov    0xc(%eax),%ecx
40a56c:	90                   	nop
40a56d:	8b c1                	mov    %ecx,%eax
40a56f:	c1 e8 0d             	shr    $0xd,%eax
40a572:	a8 01                	test   $0x1,%al
40a574:	74 10                	je     0x40a586
40a576:	51                   	push   %ecx
40a577:	e8 12 00 00 00       	call   0x40a58e
40a57c:	59                   	pop    %ecx
40a57d:	84 c0                	test   %al,%al
40a57f:	75 09                	jne    0x40a58a
40a581:	8b 45 0c             	mov    0xc(%ebp),%eax
40a584:	ff 00                	incl   (%eax)
40a586:	32 c0                	xor    %al,%al
40a588:	5d                   	pop    %ebp
40a589:	c3                   	ret
40a58a:	b0 01                	mov    $0x1,%al
40a58c:	5d                   	pop    %ebp
40a58d:	c3                   	ret
40a58e:	8b ff                	mov    %edi,%edi
40a590:	55                   	push   %ebp
40a591:	8b ec                	mov    %esp,%ebp
40a593:	8b 4d 08             	mov    0x8(%ebp),%ecx
40a596:	8b c1                	mov    %ecx,%eax
40a598:	24 03                	and    $0x3,%al
40a59a:	3c 02                	cmp    $0x2,%al
40a59c:	75 09                	jne    0x40a5a7
40a59e:	f6 c1 c0             	test   $0xc0,%cl
40a5a1:	74 04                	je     0x40a5a7
40a5a3:	fe c8                	dec    %al
40a5a5:	5d                   	pop    %ebp
40a5a6:	c3                   	ret
40a5a7:	c1 e9 0b             	shr    $0xb,%ecx
40a5aa:	80 e1 01             	and    $0x1,%cl
40a5ad:	8a c1                	mov    %cl,%al
40a5af:	5d                   	pop    %ebp
40a5b0:	c3                   	ret
40a5b1:	8b ff                	mov    %edi,%edi
40a5b3:	55                   	push   %ebp
40a5b4:	8b ec                	mov    %esp,%ebp
40a5b6:	8b 4d 08             	mov    0x8(%ebp),%ecx
40a5b9:	53                   	push   %ebx
40a5ba:	56                   	push   %esi
40a5bb:	57                   	push   %edi
40a5bc:	8d 71 0c             	lea    0xc(%ecx),%esi
40a5bf:	8b 16                	mov    (%esi),%edx
40a5c1:	90                   	nop
40a5c2:	8b c2                	mov    %edx,%eax
40a5c4:	24 03                	and    $0x3,%al
40a5c6:	3c 02                	cmp    $0x2,%al
40a5c8:	75 49                	jne    0x40a613
40a5ca:	f6 c2 c0             	test   $0xc0,%dl
40a5cd:	74 44                	je     0x40a613
40a5cf:	8b 39                	mov    (%ecx),%edi
40a5d1:	8b 59 04             	mov    0x4(%ecx),%ebx
40a5d4:	2b fb                	sub    %ebx,%edi
40a5d6:	89 19                	mov    %ebx,(%ecx)
40a5d8:	83 61 08 00          	andl   $0x0,0x8(%ecx)
40a5dc:	85 ff                	test   %edi,%edi
40a5de:	7e 33                	jle    0x40a613
40a5e0:	51                   	push   %ecx
40a5e1:	e8 13 08 00 00       	call   0x40adf9
40a5e6:	ff 75 0c             	push   0xc(%ebp)
40a5e9:	57                   	push   %edi
40a5ea:	53                   	push   %ebx
40a5eb:	50                   	push   %eax
40a5ec:	e8 32 1b 00 00       	call   0x40c123
40a5f1:	83 c4 14             	add    $0x14,%esp
40a5f4:	3b f8                	cmp    %eax,%edi
40a5f6:	74 0b                	je     0x40a603
40a5f8:	6a 10                	push   $0x10
40a5fa:	58                   	pop    %eax
40a5fb:	f0 09 06             	lock or %eax,(%esi)
40a5fe:	83 c8 ff             	or     $0xffffffff,%eax
40a601:	eb 12                	jmp    0x40a615
40a603:	8b 06                	mov    (%esi),%eax
40a605:	90                   	nop
40a606:	c1 e8 02             	shr    $0x2,%eax
40a609:	a8 01                	test   $0x1,%al
40a60b:	74 06                	je     0x40a613
40a60d:	6a fd                	push   $0xfffffffd
40a60f:	58                   	pop    %eax
40a610:	f0 21 06             	lock and %eax,(%esi)
40a613:	33 c0                	xor    %eax,%eax
40a615:	5f                   	pop    %edi
40a616:	5e                   	pop    %esi
40a617:	5b                   	pop    %ebx
40a618:	5d                   	pop    %ebp
40a619:	c3                   	ret
40a61a:	8b ff                	mov    %edi,%edi
40a61c:	55                   	push   %ebp
40a61d:	8b ec                	mov    %esp,%ebp
40a61f:	83 ec 28             	sub    $0x28,%esp
40a622:	8d 4d d8             	lea    -0x28(%ebp),%ecx
40a625:	56                   	push   %esi
40a626:	57                   	push   %edi
40a627:	33 f6                	xor    %esi,%esi
40a629:	56                   	push   %esi
40a62a:	e8 e1 b3 ff ff       	call   0x405a10
40a62f:	8b 7d 08             	mov    0x8(%ebp),%edi
40a632:	85 ff                	test   %edi,%edi
40a634:	75 0b                	jne    0x40a641
40a636:	56                   	push   %esi
40a637:	e8 d4 fe ff ff       	call   0x40a510
40a63c:	59                   	pop    %ecx
40a63d:	8b f0                	mov    %eax,%esi
40a63f:	eb 30                	jmp    0x40a671
40a641:	8d 45 d8             	lea    -0x28(%ebp),%eax
40a644:	50                   	push   %eax
40a645:	57                   	push   %edi