40a195:	83 e8 20             	sub    $0x20,%eax
40a198:	83 c0 c9             	add    $0xffffffc9,%eax
40a19b:	eb 03                	jmp    0x40a1a0
40a19d:	83 c8 ff             	or     $0xffffffff,%eax
40a1a0:	83 f8 ff             	cmp    $0xffffffff,%eax
40a1a3:	74 31                	je     0x40a1d6
40a1a5:	3b 45 14             	cmp    0x14(%ebp),%eax
40a1a8:	73 2c                	jae    0x40a1d6
40a1aa:	8b 75 f8             	mov    -0x8(%ebp),%esi
40a1ad:	83 cb 08             	or     $0x8,%ebx
40a1b0:	3b f1                	cmp    %ecx,%esi
40a1b2:	72 0b                	jb     0x40a1bf
40a1b4:	75 04                	jne    0x40a1ba
40a1b6:	3b c2                	cmp    %edx,%eax
40a1b8:	76 05                	jbe    0x40a1bf
40a1ba:	83 cb 04             	or     $0x4,%ebx
40a1bd:	eb 09                	jmp    0x40a1c8
40a1bf:	0f af 75 14          	imul   0x14(%ebp),%esi
40a1c3:	03 f0                	add    %eax,%esi
40a1c5:	89 75 f8             	mov    %esi,-0x8(%ebp)
40a1c8:	0f b7 37             	movzwl (%edi),%esi
40a1cb:	83 c7 02             	add    $0x2,%edi
40a1ce:	89 7d 0c             	mov    %edi,0xc(%ebp)
40a1d1:	e9 39 fd ff ff       	jmp    0x409f0f
40a1d6:	56                   	push   %esi
40a1d7:	8d 4d 0c             	lea    0xc(%ebp),%ecx
40a1da:	e8 92 00 00 00       	call   0x40a271
40a1df:	f6 c3 08             	test   $0x8,%bl
40a1e2:	75 0a                	jne    0x40a1ee
40a1e4:	8b 45 f4             	mov    -0xc(%ebp),%eax
40a1e7:	33 db                	xor    %ebx,%ebx
40a1e9:	89 45 0c             	mov    %eax,0xc(%ebp)
40a1ec:	eb 41                	jmp    0x40a22f
40a1ee:	8b 75 f8             	mov    -0x8(%ebp),%esi
40a1f1:	56                   	push   %esi
40a1f2:	53                   	push   %ebx
40a1f3:	e8 11 f7 ff ff       	call   0x409909
40a1f8:	59                   	pop    %ecx
40a1f9:	59                   	pop    %ecx
40a1fa:	84 c0                	test   %al,%al
40a1fc:	74 28                	je     0x40a226
40a1fe:	e8 04 db ff ff       	call   0x407d07
40a203:	c7 00 22 00 00 00    	movl   $0x22,(%eax)
40a209:	f6 c3 01             	test   $0x1,%bl
40a20c:	75 05                	jne    0x40a213
40a20e:	83 ce ff             	or     $0xffffffff,%esi
40a211:	eb 1a                	jmp    0x40a22d
40a213:	f6 c3 02             	test   $0x2,%bl
40a216:	74 07                	je     0x40a21f
40a218:	bb 00 00 00 80       	mov    $0x80000000,%ebx
40a21d:	eb 10                	jmp    0x40a22f
40a21f:	bb ff ff ff 7f       	mov    $0x7fffffff,%ebx
40a224:	eb 09                	jmp    0x40a22f
40a226:	f6 c3 02             	test   $0x2,%bl
40a229:	74 02                	je     0x40a22d
40a22b:	f7 de                	neg    %esi
40a22d:	8b de                	mov    %esi,%ebx
40a22f:	80 7d f0 00          	cmpb   $0x0,-0x10(%ebp)
40a233:	5e                   	pop    %esi
40a234:	0f 84 65 f9 ff ff    	je     0x409b9f
40a23a:	8b 45 e4             	mov    -0x1c(%ebp),%eax
40a23d:	83 a0 50 03 00 00 fd 	andl   $0xfffffffd,0x350(%eax)
40a244:	e9 56 f9 ff ff       	jmp    0x409b9f
40a249:	8b ff                	mov    %edi,%edi
40a24b:	55                   	push   %ebp
40a24c:	8b ec                	mov    %esp,%ebp
40a24e:	ff 09                	decl   (%ecx)
40a250:	8a 45 08             	mov    0x8(%ebp),%al
40a253:	8b 09                	mov    (%ecx),%ecx
40a255:	84 c0                	test   %al,%al
40a257:	74 14                	je     0x40a26d
40a259:	38 01                	cmp    %al,(%ecx)
40a25b:	74 10                	je     0x40a26d
40a25d:	e8 a5 da ff ff       	call   0x407d07
40a262:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40a268:	e8 c1 d9 ff ff       	call   0x407c2e
40a26d:	5d                   	pop    %ebp
40a26e:	c2 04 00             	ret    $0x4
40a271:	8b ff                	mov    %edi,%edi
40a273:	55                   	push   %ebp
40a274:	8b ec                	mov    %esp,%ebp
40a276:	83 01 fe             	addl   $0xfffffffe,(%ecx)
40a279:	66 8b 45 08          	mov    0x8(%ebp),%ax
40a27d:	8b 09                	mov    (%ecx),%ecx
40a27f:	66 85 c0             	test   %ax,%ax
40a282:	74 15                	je     0x40a299
40a284:	66 39 01             	cmp    %ax,(%ecx)
40a287:	74 10                	je     0x40a299
40a289:	e8 79 da ff ff       	call   0x407d07
40a28e:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40a294:	e8 95 d9 ff ff       	call   0x407c2e
40a299:	5d                   	pop    %ebp
40a29a:	c2 04 00             	ret    $0x4
40a29d:	83 39 00             	cmpl   $0x0,(%ecx)
40a2a0:	75 13                	jne    0x40a2b5
40a2a2:	e8 60 da ff ff       	call   0x407d07
40a2a7:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40a2ad:	e8 7c d9 ff ff       	call   0x407c2e
40a2b2:	32 c0                	xor    %al,%al
40a2b4:	c3                   	ret
40a2b5:	b0 01                	mov    $0x1,%al
40a2b7:	c3                   	ret
40a2b8:	8b ff                	mov    %edi,%edi
40a2ba:	55                   	push   %ebp
40a2bb:	8b ec                	mov    %esp,%ebp
40a2bd:	8b 45 10             	mov    0x10(%ebp),%eax
40a2c0:	85 c0                	test   %eax,%eax
40a2c2:	74 0d                	je     0x40a2d1
40a2c4:	8b 00                	mov    (%eax),%eax
40a2c6:	8b 08                	mov    (%eax),%ecx
40a2c8:	8b 45 08             	mov    0x8(%ebp),%eax
40a2cb:	0f b7 04 41          	movzwl (%ecx,%eax,2),%eax
40a2cf:	eb 0c                	jmp    0x40a2dd
40a2d1:	e8 54 66 00 00       	call   0x41092a
40a2d6:	8b 4d 08             	mov    0x8(%ebp),%ecx
40a2d9:	0f b7 04 48          	movzwl (%eax,%ecx,2),%eax
40a2dd:	23 45 0c             	and    0xc(%ebp),%eax
40a2e0:	5d                   	pop    %ebp
40a2e1:	c3                   	ret
40a2e2:	8b ff                	mov    %edi,%edi
40a2e4:	55                   	push   %ebp
40a2e5:	8b ec                	mov    %esp,%ebp
40a2e7:	8b 4d 10             	mov    0x10(%ebp),%ecx
40a2ea:	85 c9                	test   %ecx,%ecx
40a2ec:	74 16                	je     0x40a304
40a2ee:	8b 01                	mov    (%ecx),%eax
40a2f0:	83 78 04 01          	cmpl   $0x1,0x4(%eax)
40a2f4:	7e 0e                	jle    0x40a304
40a2f6:	51                   	push   %ecx
40a2f7:	ff 75 0c             	push   0xc(%ebp)
40a2fa:	ff 75 08             	push   0x8(%ebp)
40a2fd:	e8 23 74 00 00       	call   0x411725
40a302:	eb 0c                	jmp    0x40a310
40a304:	51                   	push   %ecx
40a305:	ff 75 0c             	push   0xc(%ebp)
40a308:	ff 75 08             	push   0x8(%ebp)
40a30b:	e8 a8 ff ff ff       	call   0x40a2b8
40a310:	83 c4 0c             	add    $0xc,%esp
40a313:	5d                   	pop    %ebp
40a314:	c3                   	ret
40a315:	8b ff                	mov    %edi,%edi
40a317:	55                   	push   %ebp
40a318:	8b ec                	mov    %esp,%ebp
40a31a:	51                   	push   %ecx
40a31b:	6a 01                	push   $0x1
40a31d:	6a 0a                	push   $0xa
40a31f:	51                   	push   %ecx
40a320:	51                   	push   %ecx
40a321:	8b c4                	mov    %esp,%eax
40a323:	6a 00                	push   $0x0
40a325:	ff 75 08             	push   0x8(%ebp)
40a328:	50                   	push   %eax
40a329:	e8 27 02 00 00       	call   0x40a555
40a32e:	83 c4 0c             	add    $0xc,%esp
40a331:	6a 00                	push   $0x0
40a333:	e8 04 f6 ff ff       	call   0x40993c
40a338:	83 c4 14             	add    $0x14,%esp
40a33b:	8b e5                	mov    %ebp,%esp
40a33d:	5d                   	pop    %ebp
40a33e:	c3                   	ret
40a33f:	8b ff                	mov    %edi,%edi
40a341:	55                   	push   %ebp
40a342:	8b ec                	mov    %esp,%ebp
40a344:	83 ec 10             	sub    $0x10,%esp
40a347:	ff 75 0c             	push   0xc(%ebp)
40a34a:	8d 4d f0             	lea    -0x10(%ebp),%ecx
40a34d:	e8 5f b3 ff ff       	call   0x4056b1
40a352:	8d 45 f4             	lea    -0xc(%ebp),%eax
40a355:	50                   	push   %eax
40a356:	6a 04                	push   $0x4
40a358:	ff 75 08             	push   0x8(%ebp)
40a35b:	e8 82 ff ff ff       	call   0x40a2e2
40a360:	83 c4 0c             	add    $0xc,%esp
40a363:	80 7d fc 00          	cmpb   $0x0,-0x4(%ebp)
40a367:	74 0a                	je     0x40a373
40a369:	8b 4d f0             	mov    -0x10(%ebp),%ecx
40a36c:	83 a1 50 03 00 00 fd 	andl   $0xfffffffd,0x350(%ecx)
40a373:	8b e5                	mov    %ebp,%esp
40a375:	5d                   	pop    %ebp
40a376:	c3                   	ret
40a377:	8b ff                	mov    %edi,%edi
40a379:	55                   	push   %ebp
40a37a:	8b ec                	mov    %esp,%ebp
40a37c:	a1 98 41 42 00       	mov    0x424198,%eax
40a381:	85 c0                	test   %eax,%eax
40a383:	74 0e                	je     0x40a393
40a385:	6a 00                	push   $0x0
40a387:	ff 75 08             	push   0x8(%ebp)
40a38a:	e8 b0 ff ff ff       	call   0x40a33f
40a38f:	59                   	pop    %ecx
40a390:	59                   	pop    %ecx
40a391:	5d                   	pop    %ebp
40a392:	c3                   	ret
40a393:	8b 4d 08             	mov    0x8(%ebp),%ecx
40a396:	a1 08 31 42 00       	mov    0x423108,%eax
40a39b:	0f b7 04 48          	movzwl (%eax,%ecx,2),%eax
40a39f:	83 e0 04             	and    $0x4,%eax
40a3a2:	5d                   	pop    %ebp
40a3a3:	c3                   	ret
40a3a4:	8b ff                	mov    %edi,%edi
40a3a6:	55                   	push   %ebp
40a3a7:	8b ec                	mov    %esp,%ebp
40a3a9:	83 ec 1c             	sub    $0x1c,%esp
40a3ac:	8d 4d e4             	lea    -0x1c(%ebp),%ecx
40a3af:	53                   	push   %ebx
40a3b0:	ff 75 10             	push   0x10(%ebp)
40a3b3:	e8 f9 b2 ff ff       	call   0x4056b1
40a3b8:	8b 5d 08             	mov    0x8(%ebp),%ebx
40a3bb:	81 fb 00 01 00 00    	cmp    $0x100,%ebx
40a3c1:	73 4b                	jae    0x40a40e
40a3c3:	8d 45 e8             	lea    -0x18(%ebp),%eax
40a3c6:	50                   	push   %eax
40a3c7:	53                   	push   %ebx
40a3c8:	e8 21 01 00 00       	call   0x40a4ee
40a3cd:	59                   	pop    %ecx
40a3ce:	59                   	pop    %ecx
40a3cf:	84 c0                	test   %al,%al
40a3d1:	74 24                	je     0x40a3f7
40a3d3:	80 7d f0 00          	cmpb   $0x0,-0x10(%ebp)
40a3d7:	8b 45 e8             	mov    -0x18(%ebp),%eax
40a3da:	8b 80 94 00 00 00    	mov    0x94(%eax),%eax
40a3e0:	0f b6 0c 18          	movzbl (%eax,%ebx,1),%ecx
40a3e4:	74 0a                	je     0x40a3f0
40a3e6:	8b 45 e4             	mov    -0x1c(%ebp),%eax
40a3e9:	83 a0 50 03 00 00 fd 	andl   $0xfffffffd,0x350(%eax)
40a3f0:	8b c1                	mov    %ecx,%eax
40a3f2:	e9 f2 00 00 00       	jmp    0x40a4e9
40a3f7:	80 7d f0 00          	cmpb   $0x0,-0x10(%ebp)
40a3fb:	74 0a                	je     0x40a407
40a3fd:	8b 4d e4             	mov    -0x1c(%ebp),%ecx
40a400:	83 a1 50 03 00 00 fd 	andl   $0xfffffffd,0x350(%ecx)
40a407:	8b c3                	mov    %ebx,%eax
40a409:	e9 db 00 00 00       	jmp    0x40a4e9
40a40e:	33 c0                	xor    %eax,%eax
40a410:	66 89 45 fc          	mov    %ax,-0x4(%ebp)
40a414:	88 45 fe             	mov    %al,-0x2(%ebp)
40a417:	8b 45 e8             	mov    -0x18(%ebp),%eax
40a41a:	83 78 04 01          	cmpl   $0x1,0x4(%eax)
40a41e:	7e 2e                	jle    0x40a44e
40a420:	8b c3                	mov    %ebx,%eax
40a422:	8d 4d e8             	lea    -0x18(%ebp),%ecx
40a425:	c1 f8 08             	sar    $0x8,%eax
40a428:	89 45 f4             	mov    %eax,-0xc(%ebp)
40a42b:	51                   	push   %ecx
40a42c:	0f b6 c0             	movzbl %al,%eax
40a42f:	50                   	push   %eax
40a430:	e8 c2 73 00 00       	call   0x4117f7
40a435:	59                   	pop    %ecx
40a436:	59                   	pop    %ecx
40a437:	85 c0                	test   %eax,%eax
40a439:	74 13                	je     0x40a44e
40a43b:	8b 45 f4             	mov    -0xc(%ebp),%eax
40a43e:	88 45 fc             	mov    %al,-0x4(%ebp)
40a441:	33 c0                	xor    %eax,%eax
40a443:	6a 02                	push   $0x2
40a445:	88 5d fd             	mov    %bl,-0x3(%ebp)
40a448:	88 45 fe             	mov    %al,-0x2(%ebp)
40a44b:	59                   	pop    %ecx
40a44c:	eb 16                	jmp    0x40a464
40a44e:	e8 b4 d8 ff ff       	call   0x407d07
40a453:	33 c9                	xor    %ecx,%ecx
40a455:	c7 00 2a 00 00 00    	movl   $0x2a,(%eax)
40a45b:	33 c0                	xor    %eax,%eax
40a45d:	88 5d fc             	mov    %bl,-0x4(%ebp)
40a460:	41                   	inc    %ecx
40a461:	88 45 fd             	mov    %al,-0x3(%ebp)
40a464:	66 89 45 f8          	mov    %ax,-0x8(%ebp)
40a468:	8d 55 f8             	lea    -0x8(%ebp),%edx
40a46b:	88 45 fa             	mov    %al,-0x6(%ebp)
40a46e:	8b 45 e8             	mov    -0x18(%ebp),%eax
40a471:	6a 01                	push   $0x1
40a473:	ff 70 08             	push   0x8(%eax)
40a476:	6a 03                	push   $0x3
40a478:	52                   	push   %edx
40a479:	51                   	push   %ecx
40a47a:	8d 4d fc             	lea    -0x4(%ebp),%ecx
40a47d:	51                   	push   %ecx
40a47e:	ff 75 0c             	push   0xc(%ebp)
40a481:	ff b0 a8 00 00 00    	push   0xa8(%eax)
40a487:	8d 45 e8             	lea    -0x18(%ebp),%eax
40a48a:	50                   	push   %eax
40a48b:	e8 bd 75 00 00       	call   0x411a4d
40a490:	83 c4 24             	add    $0x24,%esp
40a493:	85 c0                	test   %eax,%eax
40a495:	75 18                	jne    0x40a4af
40a497:	38 45 f0             	cmp    %al,-0x10(%ebp)
40a49a:	0f 84 67 ff ff ff    	je     0x40a407
40a4a0:	8b 45 e4             	mov    -0x1c(%ebp),%eax
40a4a3:	83 a0 50 03 00 00 fd 	andl   $0xfffffffd,0x350(%eax)
40a4aa:	e9 58 ff ff ff       	jmp    0x40a407
40a4af:	83 f8 01             	cmp    $0x1,%eax
40a4b2:	75 16                	jne    0x40a4ca
40a4b4:	80 7d f0 00          	cmpb   $0x0,-0x10(%ebp)
40a4b8:	0f b6 45 f8          	movzbl -0x8(%ebp),%eax
40a4bc:	74 2b                	je     0x40a4e9
40a4be:	8b 4d e4             	mov    -0x1c(%ebp),%ecx
40a4c1:	83 a1 50 03 00 00 fd 	andl   $0xfffffffd,0x350(%ecx)
40a4c8:	eb 1f                	jmp    0x40a4e9
40a4ca:	0f b6 55 f8          	movzbl -0x8(%ebp),%edx
40a4ce:	0f b6 45 f9          	movzbl -0x7(%ebp),%eax
40a4d2:	c1 e2 08             	shl    $0x8,%edx
40a4d5:	0b d0                	or     %eax,%edx
40a4d7:	80 7d f0 00          	cmpb   $0x0,-0x10(%ebp)
40a4db:	74 0a                	je     0x40a4e7
40a4dd:	8b 4d e4             	mov    -0x1c(%ebp),%ecx
40a4e0:	83 a1 50 03 00 00 fd 	andl   $0xfffffffd,0x350(%ecx)
40a4e7:	8b c2                	mov    %edx,%eax
40a4e9:	5b                   	pop    %ebx
40a4ea:	8b e5                	mov    %ebp,%esp
40a4ec:	5d                   	pop    %ebp
40a4ed:	c3                   	ret
40a4ee:	8b ff                	mov    %edi,%edi
40a4f0:	55                   	push   %ebp
40a4f1:	8b ec                	mov    %esp,%ebp
40a4f3:	ff 75 0c             	push   0xc(%ebp)
40a4f6:	6a 01                	push   $0x1
40a4f8:	ff 75 08             	push   0x8(%ebp)
40a4fb:	e8 e2 fd ff ff       	call   0x40a2e2
40a500:	83 c4 0c             	add    $0xc,%esp
40a503:	f7 d8                	neg    %eax
40a505:	1b c0                	sbb    %eax,%eax
40a507:	f7 d8                	neg    %eax
40a509:	5d                   	pop    %ebp
40a50a:	c3                   	ret
40a50b:	8b ff                	mov    %edi,%edi
40a50d:	55                   	push   %ebp
40a50e:	8b ec                	mov    %esp,%ebp
40a510:	ff 75 0c             	push   0xc(%ebp)
40a513:	68 00 01 00 00       	push   $0x100
40a518:	ff 75 08             	push   0x8(%ebp)
40a51b:	e8 84 fe ff ff       	call   0x40a3a4
40a520:	83 c4 0c             	add    $0xc,%esp
40a523:	5d                   	pop    %ebp
40a524:	c3                   	ret
40a525:	8b ff                	mov    %edi,%edi
40a527:	55                   	push   %ebp
40a528:	8b ec                	mov    %esp,%ebp
40a52a:	a1 98 41 42 00       	mov    0x424198,%eax
40a52f:	85 c0                	test   %eax,%eax
40a531:	74 10                	je     0x40a543
40a533:	6a 00                	push   $0x0
40a535:	ff 75 08             	push   0x8(%ebp)
40a538:	e8 ce ff ff ff       	call   0x40a50b
40a53d:	59                   	pop    %ecx
40a53e:	59                   	pop    %ecx
40a53f:	8b c8                	mov    %eax,%ecx
40a541:	eb 0e                	jmp    0x40a551
40a543:	8b 4d 08             	mov    0x8(%ebp),%ecx
40a546:	8d 41 bf             	lea    -0x41(%ecx),%eax
40a549:	83 f8 19             	cmp    $0x19,%eax