56a7fa:	0f 85 b9 fe ff ff    	jne    0x56a6b9
56a800:	83 44 24 0c 3c       	addl   $0x3c,0xc(%esp)
56a805:	8b 4c 24 0c          	mov    0xc(%esp),%ecx
56a809:	8b 44 24 10          	mov    0x10(%esp),%eax
56a80d:	3b c8                	cmp    %eax,%ecx
56a80f:	0f 85 72 fe ff ff    	jne    0x56a687
56a815:	81 44 24 04 04 02 00 	addl   $0x204,0x4(%esp)
56a81c:	00
56a81d:	8b 54 24 04          	mov    0x4(%esp),%edx
56a821:	8b 4c 24 08          	mov    0x8(%esp),%ecx
56a825:	3b d1                	cmp    %ecx,%edx
56a827:	0f 85 27 fe ff ff    	jne    0x56a654
56a82d:	83 c4 20             	add    $0x20,%esp
56a830:	5f                   	pop    %edi
56a831:	5e                   	pop    %esi
56a832:	5b                   	pop    %ebx
56a833:	c3                   	ret
56a834:	53                   	push   %ebx
56a835:	56                   	push   %esi
56a836:	57                   	push   %edi
56a837:	55                   	push   %ebp
56a838:	83 c4 ec             	add    $0xffffffec,%esp
56a83b:	89 54 24 04          	mov    %edx,0x4(%esp)
56a83f:	89 04 24             	mov    %eax,(%esp)
56a842:	e8 85 23 00 00       	call   0x56cbcc
56a847:	89 44 24 08          	mov    %eax,0x8(%esp)
56a84b:	85 c0                	test   %eax,%eax
56a84d:	75 07                	jne    0x56a856
56a84f:	33 c0                	xor    %eax,%eax
56a851:	e9 0e 03 00 00       	jmp    0x56ab64
56a856:	8b 54 24 08          	mov    0x8(%esp),%edx
56a85a:	c7 42 68 ff ff ff ff 	movl   $0xffffffff,0x68(%edx)
56a861:	8b 0c 24             	mov    (%esp),%ecx
56a864:	8b 44 24 08          	mov    0x8(%esp),%eax
56a868:	0f b7 59 30          	movzwl 0x30(%ecx),%ebx
56a86c:	89 58 08             	mov    %ebx,0x8(%eax)
56a86f:	8b c3                	mov    %ebx,%eax
56a871:	c1 e0 04             	shl    $0x4,%eax
56a874:	e8 03 db 00 00       	call   0x57837c
56a879:	8b 54 24 08          	mov    0x8(%esp),%edx
56a87d:	85 c0                	test   %eax,%eax
56a87f:	89 42 0c             	mov    %eax,0xc(%edx)
56a882:	75 10                	jne    0x56a894
56a884:	8b 44 24 08          	mov    0x8(%esp),%eax
56a888:	e8 fb 22 00 00       	call   0x56cb88
56a88d:	33 c0                	xor    %eax,%eax
56a88f:	e9 d0 02 00 00       	jmp    0x56ab64
56a894:	33 d2                	xor    %edx,%edx
56a896:	89 54 24 0c          	mov    %edx,0xc(%esp)
56a89a:	8b 4c 24 08          	mov    0x8(%esp),%ecx
56a89e:	8b 71 0c             	mov    0xc(%ecx),%esi
56a8a1:	eb 0c                	jmp    0x56a8af
56a8a3:	33 c0                	xor    %eax,%eax
56a8a5:	89 46 04             	mov    %eax,0x4(%esi)
56a8a8:	ff 44 24 0c          	incl   0xc(%esp)
56a8ac:	83 c6 10             	add    $0x10,%esi
56a8af:	8b 54 24 08          	mov    0x8(%esp),%edx
56a8b3:	8b 4a 08             	mov    0x8(%edx),%ecx
56a8b6:	8b 44 24 0c          	mov    0xc(%esp),%eax
56a8ba:	3b c8                	cmp    %eax,%ecx
56a8bc:	7f e5                	jg     0x56a8a3
56a8be:	33 d2                	xor    %edx,%edx
56a8c0:	89 54 24 0c          	mov    %edx,0xc(%esp)
56a8c4:	8b 4c 24 04          	mov    0x4(%esp),%ecx
56a8c8:	8b 41 2c             	mov    0x2c(%ecx),%eax
56a8cb:	89 44 24 10          	mov    %eax,0x10(%esp)
56a8cf:	8b 54 24 08          	mov    0x8(%esp),%edx
56a8d3:	8b 72 0c             	mov    0xc(%edx),%esi
56a8d6:	e9 9f 00 00 00       	jmp    0x56a97a
56a8db:	8b 44 24 10          	mov    0x10(%esp),%eax
56a8df:	0f b7 18             	movzwl (%eax),%ebx
56a8e2:	89 1e                	mov    %ebx,(%esi)
56a8e4:	8b c3                	mov    %ebx,%eax
56a8e6:	c1 e0 02             	shl    $0x2,%eax
56a8e9:	8d 04 80             	lea    (%eax,%eax,4),%eax
56a8ec:	e8 8b da 00 00       	call   0x57837c
56a8f1:	89 46 04             	mov    %eax,0x4(%esi)
56a8f4:	85 c0                	test   %eax,%eax
56a8f6:	75 10                	jne    0x56a908
56a8f8:	8b 44 24 08          	mov    0x8(%esp),%eax
56a8fc:	e8 87 22 00 00       	call   0x56cb88
56a901:	33 c0                	xor    %eax,%eax
56a903:	e9 5c 02 00 00       	jmp    0x56ab64
56a908:	33 ff                	xor    %edi,%edi
56a90a:	8b 5e 04             	mov    0x4(%esi),%ebx
56a90d:	eb 09                	jmp    0x56a918
56a90f:	33 c0                	xor    %eax,%eax
56a911:	47                   	inc    %edi
56a912:	89 43 04             	mov    %eax,0x4(%ebx)
56a915:	83 c3 14             	add    $0x14,%ebx
56a918:	8b 16                	mov    (%esi),%edx
56a91a:	3b fa                	cmp    %edx,%edi
56a91c:	7c f1                	jl     0x56a90f
56a91e:	33 ff                	xor    %edi,%edi
56a920:	8b 5e 04             	mov    0x4(%esi),%ebx
56a923:	8b 44 24 10          	mov    0x10(%esp),%eax
56a927:	8b 68 04             	mov    0x4(%eax),%ebp
56a92a:	eb 39                	jmp    0x56a965
56a92c:	8b 45 20             	mov    0x20(%ebp),%eax
56a92f:	89 03                	mov    %eax,(%ebx)
56a931:	8b 55 20             	mov    0x20(%ebp),%edx
56a934:	85 d2                	test   %edx,%edx
56a936:	74 21                	je     0x56a959
56a938:	8b 03                	mov    (%ebx),%eax
56a93a:	c1 e0 02             	shl    $0x2,%eax
56a93d:	e8 3a da 00 00       	call   0x57837c
56a942:	89 43 04             	mov    %eax,0x4(%ebx)
56a945:	85 c0                	test   %eax,%eax
56a947:	75 15                	jne    0x56a95e
56a949:	8b 44 24 08          	mov    0x8(%esp),%eax
56a94d:	e8 36 22 00 00       	call   0x56cb88
56a952:	33 c0                	xor    %eax,%eax
56a954:	e9 0b 02 00 00       	jmp    0x56ab64
56a959:	33 d2                	xor    %edx,%edx
56a95b:	89 53 04             	mov    %edx,0x4(%ebx)
56a95e:	47                   	inc    %edi
56a95f:	83 c3 14             	add    $0x14,%ebx
56a962:	83 c5 3c             	add    $0x3c,%ebp
56a965:	8b 0e                	mov    (%esi),%ecx
56a967:	3b f9                	cmp    %ecx,%edi
56a969:	7c c1                	jl     0x56a92c
56a96b:	ff 44 24 0c          	incl   0xc(%esp)
56a96f:	81 44 24 10 04 02 00 	addl   $0x204,0x10(%esp)
56a976:	00
56a977:	83 c6 10             	add    $0x10,%esi
56a97a:	8b 44 24 08          	mov    0x8(%esp),%eax
56a97e:	8b 50 08             	mov    0x8(%eax),%edx
56a981:	8b 4c 24 0c          	mov    0xc(%esp),%ecx
56a985:	3b d1                	cmp    %ecx,%edx
56a987:	0f 8f 4e ff ff ff    	jg     0x56a8db
56a98d:	8b 44 24 08          	mov    0x8(%esp),%eax
56a991:	33 d2                	xor    %edx,%edx
56a993:	89 50 04             	mov    %edx,0x4(%eax)
56a996:	33 c9                	xor    %ecx,%ecx
56a998:	89 4c 24 0c          	mov    %ecx,0xc(%esp)
56a99c:	8b 44 24 04          	mov    0x4(%esp),%eax
56a9a0:	8b 50 2c             	mov    0x2c(%eax),%edx
56a9a3:	89 54 24 10          	mov    %edx,0x10(%esp)
56a9a7:	8b 4c 24 08          	mov    0x8(%esp),%ecx
56a9ab:	8b 71 0c             	mov    0xc(%ecx),%esi
56a9ae:	e9 90 00 00 00       	jmp    0x56aa43
56a9b3:	8b 44 24 0c          	mov    0xc(%esp),%eax
56a9b7:	8b 14 24             	mov    (%esp),%edx
56a9ba:	8d 04 40             	lea    (%eax,%eax,2),%eax
56a9bd:	8b 4a 34             	mov    0x34(%edx),%ecx
56a9c0:	33 d2                	xor    %edx,%edx
56a9c2:	33 ff                	xor    %edi,%edi
56a9c4:	8d 04 c0             	lea    (%eax,%eax,8),%eax
56a9c7:	8a 14 c1             	mov    (%ecx,%eax,8),%dl
56a9ca:	89 56 08             	mov    %edx,0x8(%esi)
56a9cd:	8b 0c 24             	mov    (%esp),%ecx
56a9d0:	8b 51 34             	mov    0x34(%ecx),%edx
56a9d3:	0f b6 44 c2 01       	movzbl 0x1(%edx,%eax,8),%eax
56a9d8:	89 46 0c             	mov    %eax,0xc(%esi)
56a9db:	8b 44 24 10          	mov    0x10(%esp),%eax
56a9df:	8b 5e 04             	mov    0x4(%esi),%ebx
56a9e2:	8b 68 04             	mov    0x4(%eax),%ebp
56a9e5:	eb 2e                	jmp    0x56aa15
56a9e7:	8b 45 10             	mov    0x10(%ebp),%eax
56a9ea:	89 43 08             	mov    %eax,0x8(%ebx)
56a9ed:	8b 55 14             	mov    0x14(%ebp),%edx
56a9f0:	89 53 0c             	mov    %edx,0xc(%ebx)
56a9f3:	33 c0                	xor    %eax,%eax
56a9f5:	8b 53 04             	mov    0x4(%ebx),%edx
56a9f8:	eb 08                	jmp    0x56aa02
56a9fa:	33 c9                	xor    %ecx,%ecx
56a9fc:	40                   	inc    %eax
56a9fd:	89 0a                	mov    %ecx,(%edx)
56a9ff:	83 c2 04             	add    $0x4,%edx
56aa02:	8b 0b                	mov    (%ebx),%ecx
56aa04:	3b c1                	cmp    %ecx,%eax
56aa06:	7c f2                	jl     0x56a9fa
56aa08:	8b 45 18             	mov    0x18(%ebp),%eax
56aa0b:	47                   	inc    %edi
56aa0c:	89 43 10             	mov    %eax,0x10(%ebx)
56aa0f:	83 c3 14             	add    $0x14,%ebx
56aa12:	83 c5 3c             	add    $0x3c,%ebp
56aa15:	8b 16                	mov    (%esi),%edx
56aa17:	3b fa                	cmp    %edx,%edi
56aa19:	7c cc                	jl     0x56a9e7
56aa1b:	8b 44 24 10          	mov    0x10(%esp),%eax
56aa1f:	8b 54 24 08          	mov    0x8(%esp),%edx
56aa23:	0f b7 00             	movzwl (%eax),%eax
56aa26:	8b 4a 04             	mov    0x4(%edx),%ecx
56aa29:	3b c1                	cmp    %ecx,%eax
56aa2b:	7e 07                	jle    0x56aa34
56aa2d:	8b 54 24 08          	mov    0x8(%esp),%edx
56aa31:	89 42 04             	mov    %eax,0x4(%edx)
56aa34:	ff 44 24 0c          	incl   0xc(%esp)
56aa38:	81 44 24 10 04 02 00 	addl   $0x204,0x10(%esp)
56aa3f:	00
56aa40:	83 c6 10             	add    $0x10,%esi
56aa43:	8b 44 24 08          	mov    0x8(%esp),%eax
56aa47:	8b 48 08             	mov    0x8(%eax),%ecx
56aa4a:	8b 44 24 0c          	mov    0xc(%esp),%eax
56aa4e:	3b c8                	cmp    %eax,%ecx
56aa50:	0f 8f 5d ff ff ff    	jg     0x56a9b3
56aa56:	8b 54 24 04          	mov    0x4(%esp),%edx
56aa5a:	8b 44 24 08          	mov    0x8(%esp),%eax
56aa5e:	0f b7 4a 16          	movzwl 0x16(%edx),%ecx
56aa62:	89 08                	mov    %ecx,(%eax)
56aa64:	8b 54 24 04          	mov    0x4(%esp),%edx
56aa68:	8b 44 24 08          	mov    0x8(%esp),%eax
56aa6c:	8b 4a 04             	mov    0x4(%edx),%ecx
56aa6f:	89 48 38             	mov    %ecx,0x38(%eax)
56aa72:	8b 54 24 04          	mov    0x4(%esp),%edx
56aa76:	8b 44 24 08          	mov    0x8(%esp),%eax
56aa7a:	8b 4a 08             	mov    0x8(%edx),%ecx
56aa7d:	89 48 3c             	mov    %ecx,0x3c(%eax)
56aa80:	8b 54 24 04          	mov    0x4(%esp),%edx
56aa84:	8b 44 24 08          	mov    0x8(%esp),%eax
56aa88:	8b 4a 0c             	mov    0xc(%edx),%ecx
56aa8b:	89 48 40             	mov    %ecx,0x40(%eax)
56aa8e:	8b 54 24 04          	mov    0x4(%esp),%edx
56aa92:	8b 44 24 08          	mov    0x8(%esp),%eax
56aa96:	8b 4a 10             	mov    0x10(%edx),%ecx
56aa99:	89 48 44             	mov    %ecx,0x44(%eax)
56aa9c:	33 c9                	xor    %ecx,%ecx
56aa9e:	8b 54 24 08          	mov    0x8(%esp),%edx
56aaa2:	89 4a 10             	mov    %ecx,0x10(%edx)
56aaa5:	33 d2                	xor    %edx,%edx
56aaa7:	8b 44 24 08          	mov    0x8(%esp),%eax
56aaab:	89 50 14             	mov    %edx,0x14(%eax)
56aaae:	33 c0                	xor    %eax,%eax
56aab0:	8b 4c 24 08          	mov    0x8(%esp),%ecx
56aab4:	89 41 28             	mov    %eax,0x28(%ecx)
56aab7:	33 c9                	xor    %ecx,%ecx
56aab9:	8b 54 24 08          	mov    0x8(%esp),%edx
56aabd:	89 4a 2c             	mov    %ecx,0x2c(%edx)
56aac0:	33 d2                	xor    %edx,%edx
56aac2:	8b 44 24 08          	mov    0x8(%esp),%eax
56aac6:	89 50 18             	mov    %edx,0x18(%eax)
56aac9:	33 c0                	xor    %eax,%eax
56aacb:	8b 4c 24 08          	mov    0x8(%esp),%ecx
56aacf:	89 41 1c             	mov    %eax,0x1c(%ecx)
56aad2:	33 c9                	xor    %ecx,%ecx
56aad4:	8b 54 24 08          	mov    0x8(%esp),%edx
56aad8:	89 4a 20             	mov    %ecx,0x20(%edx)
56aadb:	33 d2                	xor    %edx,%edx
56aadd:	8b 44 24 08          	mov    0x8(%esp),%eax
56aae1:	89 50 24             	mov    %edx,0x24(%eax)
56aae4:	33 c0                	xor    %eax,%eax
56aae6:	8b 4c 24 08          	mov    0x8(%esp),%ecx
56aaea:	89 41 30             	mov    %eax,0x30(%ecx)
56aaed:	33 c9                	xor    %ecx,%ecx
56aaef:	8b 54 24 08          	mov    0x8(%esp),%edx
56aaf3:	89 4a 34             	mov    %ecx,0x34(%edx)
56aaf6:	8b 44 24 08          	mov    0x8(%esp),%eax
56aafa:	c7 40 5c ff ff ff ff 	movl   $0xffffffff,0x5c(%eax)
56ab01:	8b 54 24 04          	mov    0x4(%esp),%edx
56ab05:	8b 44 24 08          	mov    0x8(%esp),%eax
56ab09:	8a 4a 15             	mov    0x15(%edx),%cl
56ab0c:	88 48 50             	mov    %cl,0x50(%eax)
56ab0f:	8b 54 24 08          	mov    0x8(%esp),%edx
56ab13:	66 c7 42 54 00 00    	movw   $0x0,0x54(%edx)
56ab19:	8b 4c 24 08          	mov    0x8(%esp),%ecx
56ab1d:	8b 54 24 08          	mov    0x8(%esp),%edx
56ab21:	66 8b 41 08          	mov    0x8(%ecx),%ax
56ab25:	66 89 42 56          	mov    %ax,0x56(%edx)
56ab29:	8b 4c 24 08          	mov    0x8(%esp),%ecx
56ab2d:	c6 41 51 00          	movb   $0x0,0x51(%ecx)
56ab31:	8b 44 24 08          	mov    0x8(%esp),%eax
56ab35:	8b 4c 24 08          	mov    0x8(%esp),%ecx
56ab39:	8a 50 04             	mov    0x4(%eax),%dl
56ab3c:	88 51 52             	mov    %dl,0x52(%ecx)
56ab3f:	8b 44 24 08          	mov    0x8(%esp),%eax
56ab43:	8b 4c 24 08          	mov    0x8(%esp),%ecx
56ab47:	66 8b 10             	mov    (%eax),%dx
56ab4a:	66 89 51 58          	mov    %dx,0x58(%ecx)
56ab4e:	33 d2                	xor    %edx,%edx
56ab50:	8b 44 24 08          	mov    0x8(%esp),%eax
56ab54:	89 50 48             	mov    %edx,0x48(%eax)
56ab57:	33 c0                	xor    %eax,%eax
56ab59:	8b 4c 24 08          	mov    0x8(%esp),%ecx
56ab5d:	89 41 64             	mov    %eax,0x64(%ecx)
56ab60:	8b 44 24 08          	mov    0x8(%esp),%eax
56ab64:	83 c4 14             	add    $0x14,%esp
56ab67:	5d                   	pop    %ebp
56ab68:	5f                   	pop    %edi
56ab69:	5e                   	pop    %esi
56ab6a:	5b                   	pop    %ebx
56ab6b:	c3                   	ret
56ab6c:	53                   	push   %ebx
56ab6d:	56                   	push   %esi
56ab6e:	57                   	push   %edi
56ab6f:	8b d8                	mov    %eax,%ebx
56ab71:	33 ff                	xor    %edi,%edi
56ab73:	f6 43 10 01          	testb  $0x1,0x10(%ebx)
56ab77:	75 17                	jne    0x56ab90
56ab79:	68 a3 00 00 00       	push   $0xa3
56ab7e:	68 d5 fb 69 00       	push   $0x69fbd5
56ab83:	68 b0 fb 69 00       	push   $0x69fbb0
56ab88:	e8 b3 ff fe ff       	call   0x55ab40
56ab8d:	83 c4 0c             	add    $0xc,%esp
56ab90:	ff 4b 08             	decl   0x8(%ebx)
56ab93:	78 0e                	js     0x56aba3
56ab95:	8b 4b 08             	mov    0x8(%ebx),%ecx
56ab98:	0f b7 73 04          	movzwl 0x4(%ebx),%esi
56ab9c:	d3 fe                	sar    %cl,%esi
56ab9e:	83 e6 01             	and    $0x1,%esi
56aba1:	eb 09                	jmp    0x56abac
56aba3:	8b c3                	mov    %ebx,%eax
56aba5:	e8 d2 60 00 00       	call   0x570c7c
56abaa:	8b f0                	mov    %eax,%esi
56abac:	85 f6                	test   %esi,%esi
56abae:	7d 05                	jge    0x56abb5
56abb0:	83 c8 ff             	or     $0xffffffff,%eax
56abb3:	eb 13                	jmp    0x56abc8
56abb5:	f6 03 02             	testb  $0x2,(%ebx)
56abb8:	74 05                	je     0x56abbf
56abba:	83 c8 ff             	or     $0xffffffff,%eax
56abbd:	eb 09                	jmp    0x56abc8
56abbf:	85 f6                	test   %esi,%esi
56abc1:	74 03                	je     0x56abc6
56abc3:	47                   	inc    %edi
56abc4:	eb ad                	jmp    0x56ab73
56abc6:	8b c7                	mov    %edi,%eax
56abc8:	5f                   	pop    %edi
56abc9:	5e                   	pop    %esi
56abca:	5b                   	pop    %ebx
56abcb:	c3                   	ret
56abcc:	53                   	push   %ebx
56abcd:	8b d8                	mov    %eax,%ebx
56abcf:	56                   	push   %esi
56abd0:	f6 43 10 01          	testb  $0x1,0x10(%ebx)
56abd4:	75 17                	jne    0x56abed
56abd6:	68 b6 00 00 00       	push   $0xb6
56abdb:	68 06 fc 69 00       	push   $0x69fc06
56abe0:	68 e1 fb 69 00       	push   $0x69fbe1
56abe5:	e8 56 ff fe ff       	call   0x55ab40
56abea:	83 c4 0c             	add    $0xc,%esp
56abed:	ff 4b 08             	decl   0x8(%ebx)
56abf0:	78 0e                	js     0x56ac00
56abf2:	8b 4b 08             	mov    0x8(%ebx),%ecx
56abf5:	0f b7 73 04          	movzwl 0x4(%ebx),%esi
56abf9:	d3 fe                	sar    %cl,%esi
56abfb:	83 e6 01             	and    $0x1,%esi
56abfe:	eb 09                	jmp    0x56ac09
56ac00:	8b c3                	mov    %ebx,%eax
56ac02:	e8 75 60 00 00       	call   0x570c7c
56ac07:	8b f0                	mov    %eax,%esi
56ac09:	85 f6                	test   %esi,%esi
56ac0b:	0f 8e 95 00 00 00    	jle    0x56aca6
56ac11:	f6 43 10 01          	testb  $0x1,0x10(%ebx)
56ac15:	75 17                	jne    0x56ac2e
56ac17:	68 b7 00 00 00       	push   $0xb7
56ac1c:	68 37 fc 69 00       	push   $0x69fc37
56ac21:	68 12 fc 69 00       	push   $0x69fc12
56ac26:	e8 15 ff fe ff       	call   0x55ab40
56ac2b:	83 c4 0c             	add    $0xc,%esp