402375:	c2 04 00             	ret    $0x4
402378:	cc                   	int3
402379:	cc                   	int3
40237a:	cc                   	int3
40237b:	cc                   	int3
40237c:	cc                   	int3
40237d:	cc                   	int3
40237e:	cc                   	int3
40237f:	cc                   	int3
402380:	8b 11                	mov    (%ecx),%edx
402382:	83 c8 ff             	or     $0xffffffff,%eax
402385:	83 ea 10             	sub    $0x10,%edx
402388:	f0 0f c1 42 0c       	lock xadd %eax,0xc(%edx)
40238d:	48                   	dec    %eax
40238e:	85 c0                	test   %eax,%eax
402390:	7f 08                	jg     0x40239a
402392:	8b 0a                	mov    (%edx),%ecx
402394:	52                   	push   %edx
402395:	8b 01                	mov    (%ecx),%eax
402397:	ff 50 04             	call   *0x4(%eax)
40239a:	c3                   	ret
40239b:	cc                   	int3
40239c:	cc                   	int3
40239d:	cc                   	int3
40239e:	cc                   	int3
40239f:	cc                   	int3
4023a0:	56                   	push   %esi
4023a1:	8b f1                	mov    %ecx,%esi
4023a3:	57                   	push   %edi
4023a4:	8b 0e                	mov    (%esi),%ecx
4023a6:	8b 01                	mov    (%ecx),%eax
4023a8:	ff 50 10             	call   *0x10(%eax)
4023ab:	83 7e 0c 00          	cmpl   $0x0,0xc(%esi)
4023af:	8b c8                	mov    %eax,%ecx
4023b1:	8d 46 0c             	lea    0xc(%esi),%eax
4023b4:	7c 0e                	jl     0x4023c4
4023b6:	3b 0e                	cmp    (%esi),%ecx
4023b8:	75 0a                	jne    0x4023c4
4023ba:	8b fe                	mov    %esi,%edi
4023bc:	f0 ff 00             	lock incl (%eax)
4023bf:	8b c7                	mov    %edi,%eax
4023c1:	5f                   	pop    %edi
4023c2:	5e                   	pop    %esi
4023c3:	c3                   	ret
4023c4:	8b 01                	mov    (%ecx),%eax
4023c6:	6a 02                	push   $0x2
4023c8:	ff 76 04             	push   0x4(%esi)
4023cb:	ff 10                	call   *(%eax)
4023cd:	8b f8                	mov    %eax,%edi
4023cf:	85 ff                	test   %edi,%edi
4023d1:	74 25                	je     0x4023f8
4023d3:	8b 46 04             	mov    0x4(%esi),%eax
4023d6:	8d 4f 10             	lea    0x10(%edi),%ecx
4023d9:	89 47 04             	mov    %eax,0x4(%edi)
4023dc:	8b 46 04             	mov    0x4(%esi),%eax
4023df:	8d 14 45 02 00 00 00 	lea    0x2(,%eax,2),%edx
4023e6:	52                   	push   %edx
4023e7:	8d 46 10             	lea    0x10(%esi),%eax
4023ea:	50                   	push   %eax
4023eb:	e8 30 04 00 00       	call   0x402820
4023f0:	83 c4 08             	add    $0x8,%esp
4023f3:	8b c7                	mov    %edi,%eax
4023f5:	5f                   	pop    %edi
4023f6:	5e                   	pop    %esi
4023f7:	c3                   	ret
4023f8:	e8 53 01 00 00       	call   0x402550
4023fd:	cc                   	int3
4023fe:	cc                   	int3
4023ff:	cc                   	int3
402400:	55                   	push   %ebp
402401:	8b ec                	mov    %esp,%ebp
402403:	56                   	push   %esi
402404:	8b 75 0c             	mov    0xc(%ebp),%esi
402407:	57                   	push   %edi
402408:	8b f9                	mov    %ecx,%edi
40240a:	85 f6                	test   %esi,%esi
40240c:	75 0b                	jne    0x402419
40240e:	e8 bd 01 00 00       	call   0x4025d0
402413:	5f                   	pop    %edi
402414:	5e                   	pop    %esi
402415:	5d                   	pop    %ebp
402416:	c2 08 00             	ret    $0x8
402419:	8b 55 08             	mov    0x8(%ebp),%edx
40241c:	85 d2                	test   %edx,%edx
40241e:	74 70                	je     0x402490
402420:	8b 07                	mov    (%edi),%eax
402422:	53                   	push   %ebx
402423:	8b da                	mov    %edx,%ebx
402425:	2b d8                	sub    %eax,%ebx
402427:	8b 48 f4             	mov    -0xc(%eax),%ecx
40242a:	d1 fb                	sar    $1,%ebx
40242c:	89 4d 0c             	mov    %ecx,0xc(%ebp)
40242f:	85 f6                	test   %esi,%esi
402431:	78 67                	js     0x40249a
402433:	b9 01 00 00 00       	mov    $0x1,%ecx
402438:	2b 48 fc             	sub    -0x4(%eax),%ecx
40243b:	8b 40 f8             	mov    -0x8(%eax),%eax
40243e:	2b c6                	sub    %esi,%eax
402440:	0b c8                	or     %eax,%ecx
402442:	7d 0b                	jge    0x40244f
402444:	56                   	push   %esi
402445:	8b cf                	mov    %edi,%ecx
402447:	e8 b4 02 00 00       	call   0x402700
40244c:	8b 55 08             	mov    0x8(%ebp),%edx
40244f:	8b 0f                	mov    (%edi),%ecx
402451:	3b 5d 0c             	cmp    0xc(%ebp),%ebx
402454:	77 0f                	ja     0x402465
402456:	8b 51 f8             	mov    -0x8(%ecx),%edx
402459:	8d 04 59             	lea    (%ecx,%ebx,2),%eax
40245c:	56                   	push   %esi
40245d:	50                   	push   %eax
40245e:	e8 fd 00 00 00       	call   0x402560
402463:	eb 0f                	jmp    0x402474
402465:	8d 04 36             	lea    (%esi,%esi,1),%eax
402468:	50                   	push   %eax
402469:	52                   	push   %edx
40246a:	8b 51 f8             	mov    -0x8(%ecx),%edx
40246d:	03 d2                	add    %edx,%edx
40246f:	e8 ac 03 00 00       	call   0x402820
402474:	8b 07                	mov    (%edi),%eax
402476:	83 c4 08             	add    $0x8,%esp
402479:	5b                   	pop    %ebx
40247a:	3b 70 f8             	cmp    -0x8(%eax),%esi
40247d:	7f 11                	jg     0x402490
40247f:	89 70 f4             	mov    %esi,-0xc(%eax)
402482:	33 c9                	xor    %ecx,%ecx
402484:	8b 07                	mov    (%edi),%eax
402486:	5f                   	pop    %edi
402487:	66 89 0c 70          	mov    %cx,(%eax,%esi,2)
40248b:	5e                   	pop    %esi
40248c:	5d                   	pop    %ebp
40248d:	c2 08 00             	ret    $0x8
402490:	68 57 00 07 80       	push   $0x80070057
402495:	e8 26 ef ff ff       	call   0x4013c0
40249a:	68 57 00 07 80       	push   $0x80070057
40249f:	e8 1c ef ff ff       	call   0x4013c0
4024a4:	cc                   	int3
4024a5:	cc                   	int3
4024a6:	cc                   	int3
4024a7:	cc                   	int3
4024a8:	cc                   	int3
4024a9:	cc                   	int3
4024aa:	cc                   	int3
4024ab:	cc                   	int3
4024ac:	cc                   	int3
4024ad:	cc                   	int3
4024ae:	cc                   	int3
4024af:	cc                   	int3
4024b0:	55                   	push   %ebp
4024b1:	8b ec                	mov    %esp,%ebp
4024b3:	53                   	push   %ebx
4024b4:	8b 5d 08             	mov    0x8(%ebp),%ebx
4024b7:	56                   	push   %esi
4024b8:	8b 75 0c             	mov    0xc(%ebp),%esi
4024bb:	8b c6                	mov    %esi,%eax
4024bd:	57                   	push   %edi
4024be:	c1 e8 04             	shr    $0x4,%eax
4024c1:	8b f9                	mov    %ecx,%edi
4024c3:	40                   	inc    %eax
4024c4:	6a 06                	push   $0x6
4024c6:	0f b7 c0             	movzwl %ax,%eax
4024c9:	50                   	push   %eax
4024ca:	53                   	push   %ebx
4024cb:	ff 15 5c b0 41 00    	call   *0x41b05c
4024d1:	85 c0                	test   %eax,%eax
4024d3:	74 66                	je     0x40253b
4024d5:	56                   	push   %esi
4024d6:	8b d0                	mov    %eax,%edx
4024d8:	8b cb                	mov    %ebx,%ecx
4024da:	e8 d1 ef ff ff       	call   0x4014b0
4024df:	8b d8                	mov    %eax,%ebx
4024e1:	83 c4 04             	add    $0x4,%esp
4024e4:	85 db                	test   %ebx,%ebx
4024e6:	74 53                	je     0x40253b
4024e8:	8b 07                	mov    (%edi),%eax
4024ea:	b9 01 00 00 00       	mov    $0x1,%ecx
4024ef:	0f b7 33             	movzwl (%ebx),%esi
4024f2:	2b 48 fc             	sub    -0x4(%eax),%ecx
4024f5:	8b 40 f8             	mov    -0x8(%eax),%eax
4024f8:	2b c6                	sub    %esi,%eax
4024fa:	0b c8                	or     %eax,%ecx
4024fc:	7d 08                	jge    0x402506
4024fe:	56                   	push   %esi
4024ff:	8b cf                	mov    %edi,%ecx
402501:	e8 fa 01 00 00       	call   0x402700
402506:	0f b7 0b             	movzwl (%ebx),%ecx
402509:	8d 43 02             	lea    0x2(%ebx),%eax
40250c:	51                   	push   %ecx
40250d:	50                   	push   %eax
40250e:	56                   	push   %esi
40250f:	ff 37                	push   (%edi)
402511:	e8 04 58 00 00       	call   0x407d1a
402516:	50                   	push   %eax
402517:	e8 c4 ee ff ff       	call   0x4013e0
40251c:	8b 0f                	mov    (%edi),%ecx
40251e:	83 c4 14             	add    $0x14,%esp
402521:	3b 71 f8             	cmp    -0x8(%ecx),%esi
402524:	7f 1e                	jg     0x402544
402526:	89 71 f4             	mov    %esi,-0xc(%ecx)
402529:	33 d2                	xor    %edx,%edx
40252b:	8b 0f                	mov    (%edi),%ecx
40252d:	5f                   	pop    %edi
40252e:	8d 42 01             	lea    0x1(%edx),%eax
402531:	66 89 14 71          	mov    %dx,(%ecx,%esi,2)
402535:	5e                   	pop    %esi
402536:	5b                   	pop    %ebx
402537:	5d                   	pop    %ebp
402538:	c2 08 00             	ret    $0x8
40253b:	5f                   	pop    %edi
40253c:	5e                   	pop    %esi
40253d:	33 c0                	xor    %eax,%eax
40253f:	5b                   	pop    %ebx
402540:	5d                   	pop    %ebp
402541:	c2 08 00             	ret    $0x8
402544:	68 57 00 07 80       	push   $0x80070057
402549:	e8 72 ee ff ff       	call   0x4013c0
40254e:	cc                   	int3
40254f:	cc                   	int3
402550:	68 0e 00 07 80       	push   $0x8007000e
402555:	e8 66 ee ff ff       	call   0x4013c0
40255a:	cc                   	int3
40255b:	cc                   	int3
40255c:	cc                   	int3
40255d:	cc                   	int3
40255e:	cc                   	int3
40255f:	cc                   	int3
402560:	55                   	push   %ebp
402561:	8b ec                	mov    %esp,%ebp
402563:	8b 45 0c             	mov    0xc(%ebp),%eax
402566:	56                   	push   %esi
402567:	57                   	push   %edi
402568:	8b f9                	mov    %ecx,%edi
40256a:	8d 34 00             	lea    (%eax,%eax,1),%esi
40256d:	85 f6                	test   %esi,%esi
40256f:	74 56                	je     0x4025c7
402571:	85 ff                	test   %edi,%edi
402573:	75 13                	jne    0x402588
402575:	e8 8d 57 00 00       	call   0x407d07
40257a:	5f                   	pop    %edi
40257b:	5e                   	pop    %esi
40257c:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
402582:	5d                   	pop    %ebp
402583:	e9 a6 56 00 00       	jmp    0x407c2e
402588:	8b 4d 08             	mov    0x8(%ebp),%ecx
40258b:	85 c9                	test   %ecx,%ecx
40258d:	75 13                	jne    0x4025a2
40258f:	e8 73 57 00 00       	call   0x407d07
402594:	5f                   	pop    %edi
402595:	5e                   	pop    %esi
402596:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40259c:	5d                   	pop    %ebp
40259d:	e9 8c 56 00 00       	jmp    0x407c2e
4025a2:	8d 04 12             	lea    (%edx,%edx,1),%eax
4025a5:	3b c6                	cmp    %esi,%eax
4025a7:	73 13                	jae    0x4025bc
4025a9:	e8 59 57 00 00       	call   0x407d07
4025ae:	5f                   	pop    %edi
4025af:	5e                   	pop    %esi
4025b0:	c7 00 22 00 00 00    	movl   $0x22,(%eax)
4025b6:	5d                   	pop    %ebp
4025b7:	e9 72 56 00 00       	jmp    0x407c2e
4025bc:	56                   	push   %esi
4025bd:	51                   	push   %ecx
4025be:	57                   	push   %edi
4025bf:	e8 dc 18 00 00       	call   0x403ea0
4025c4:	83 c4 0c             	add    $0xc,%esp
4025c7:	5f                   	pop    %edi
4025c8:	5e                   	pop    %esi
4025c9:	5d                   	pop    %ebp
4025ca:	c3                   	ret
4025cb:	cc                   	int3
4025cc:	cc                   	int3
4025cd:	cc                   	int3
4025ce:	cc                   	int3
4025cf:	cc                   	int3
4025d0:	56                   	push   %esi
4025d1:	8b f1                	mov    %ecx,%esi
4025d3:	57                   	push   %edi
4025d4:	8b 06                	mov    (%esi),%eax
4025d6:	83 78 f4 00          	cmpl   $0x0,-0xc(%eax)
4025da:	8d 50 f0             	lea    -0x10(%eax),%edx
4025dd:	8b 3a                	mov    (%edx),%edi
4025df:	74 40                	je     0x402621
4025e1:	83 7a 0c 00          	cmpl   $0x0,0xc(%edx)
4025e5:	8d 4a 0c             	lea    0xc(%edx),%ecx
4025e8:	7d 17                	jge    0x402601
4025ea:	83 78 f8 00          	cmpl   $0x0,-0x8(%eax)
4025ee:	7c 34                	jl     0x402624
4025f0:	c7 40 f4 00 00 00 00 	movl   $0x0,-0xc(%eax)
4025f7:	33 c9                	xor    %ecx,%ecx
4025f9:	8b 06                	mov    (%esi),%eax
4025fb:	5f                   	pop    %edi
4025fc:	5e                   	pop    %esi
4025fd:	66 89 08             	mov    %cx,(%eax)
402600:	c3                   	ret
402601:	83 c8 ff             	or     $0xffffffff,%eax
402604:	f0 0f c1 01          	lock xadd %eax,(%ecx)
402608:	48                   	dec    %eax
402609:	85 c0                	test   %eax,%eax
40260b:	7f 08                	jg     0x402615
40260d:	8b 0a                	mov    (%edx),%ecx
40260f:	52                   	push   %edx
402610:	8b 01                	mov    (%ecx),%eax
402612:	ff 50 04             	call   *0x4(%eax)
402615:	8b 07                	mov    (%edi),%eax
402617:	8b cf                	mov    %edi,%ecx
402619:	ff 50 0c             	call   *0xc(%eax)
40261c:	83 c0 10             	add    $0x10,%eax
40261f:	89 06                	mov    %eax,(%esi)
402621:	5f                   	pop    %edi
402622:	5e                   	pop    %esi
402623:	c3                   	ret
402624:	68 57 00 07 80       	push   $0x80070057
402629:	e8 92 ed ff ff       	call   0x4013c0
40262e:	cc                   	int3
40262f:	cc                   	int3
402630:	55                   	push   %ebp
402631:	8b ec                	mov    %esp,%ebp
402633:	51                   	push   %ecx
402634:	53                   	push   %ebx
402635:	8b d9                	mov    %ecx,%ebx
402637:	8b 4d 08             	mov    0x8(%ebp),%ecx
40263a:	56                   	push   %esi
40263b:	57                   	push   %edi
40263c:	8b f9                	mov    %ecx,%edi
40263e:	8b 03                	mov    (%ebx),%eax
402640:	2b f8                	sub    %eax,%edi
402642:	d1 ff                	sar    $1,%edi
402644:	8b 70 f4             	mov    -0xc(%eax),%esi
402647:	8b 45 0c             	mov    0xc(%ebp),%eax
40264a:	89 75 fc             	mov    %esi,-0x4(%ebp)
40264d:	85 c0                	test   %eax,%eax
40264f:	0f 88 82 00 00 00    	js     0x4026d7
402655:	85 c9                	test   %ecx,%ecx
402657:	75 07                	jne    0x402660
402659:	33 d2                	xor    %edx,%edx
40265b:	89 55 0c             	mov    %edx,0xc(%ebp)
40265e:	eb 0f                	jmp    0x40266f
402660:	50                   	push   %eax
402661:	51                   	push   %ecx
402662:	e8 63 57 00 00       	call   0x407dca
402667:	83 c4 08             	add    $0x8,%esp
40266a:	89 45 0c             	mov    %eax,0xc(%ebp)
40266d:	8b d0                	mov    %eax,%edx
40266f:	b9 ff ff ff 7f       	mov    $0x7fffffff,%ecx
402674:	2b ca                	sub    %edx,%ecx
402676:	3b ce                	cmp    %esi,%ecx
402678:	7c 67                	jl     0x4026e1
40267a:	03 f2                	add    %edx,%esi
40267c:	78 6d                	js     0x4026eb