summary history branches tags files
commit:2bd824f7c08a231290ba864f1362765887f508a8
author:mrmekon
committer:mrmekon
date:Fri Nov 11 15:48:49 2011 -0500
parents:9e8e669d99848dfcedefb3633103600478a4d140
Literal data packets stored.  Apache license applied.
diff --git a/LICENSE b/LICENSE
line changes: +202/-0
index 0000000..d645695
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.

diff --git a/README b/README
line changes: +30/-0
index 0000000..b7773d5
--- /dev/null
+++ b/README
@@ -0,0 +1,30 @@
+libsimplepgp - C library for parsing OpenPGP messages.  
+
+Copyright 2011 Trevor Bentley
+Provided under Apache License, Version 2.0
+See LICENSE file for details
+
+libsimplepgp is a library for loading PGP keys and decrypting PGP messages.
+
+Instead of aiming to support the entire OpenPGP standard, as GnuPG does, this 
+project aims to support only the most common PGP message formats used for 
+encrypting e-mail messages.  
+
+Initial goals are:
+ * Parse secret and public keys
+ * Store secret keys in an in-memory keychain
+ * Decrypt message formats commonly found in e-mail communication:
+   - DSA/Elgamal asymmetric keys
+   - TripleDES, CAST5, and AES-256 symmetric ciphers
+   - SHA-1 hashes
+   - ZIP and ZLIB compression
+   
+Known limitations:
+ * No support for RSA keys
+ * No support for creating messages (encryption)
+ * No support for validating signatures
+ * No support for old formats, or deprecated message types
+
+Note that this is a C library, but currently the build script is an Xcode 
+project for OS X.  I want the code to be semi-portable, but this library is a 
+subset of an iOS project.

diff --git a/simplepgp.xcodeproj/project.pbxproj b/simplepgp.xcodeproj/project.pbxproj
line changes: +2/-0
index a1c0137..01224f8
--- a/simplepgp.xcodeproj/project.pbxproj
+++ b/simplepgp.xcodeproj/project.pbxproj
@@ -33,6 +33,7 @@
 		6926A661146B38F200F69705 /* keychain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = keychain.h; path = src/keychain.h; sourceTree = "<group>"; };
 		6926A9BC146C608900F69705 /* libz.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libz.a; sourceTree = "<group>"; };
 		6926A9BE146C609200F69705 /* zlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zlib.h; sourceTree = "<group>"; };
+		6926AC66146DBC7D00F69705 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
 		69868BC21460F343004C5D9B /* libgcrypt.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgcrypt.a; sourceTree = "<group>"; };
 		69868BC41460F34A004C5D9B /* libgpg-error.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libgpg-error.a"; sourceTree = "<group>"; };
 		69868BC61460F37E004C5D9B /* gpg-error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gpg-error.h"; sourceTree = "<group>"; };
@@ -69,6 +70,7 @@
 		0867D691FE84028FC02AAC07 /* libsimplepgp */ = {
 			isa = PBXGroup;
 			children = (
+				6926AC66146DBC7D00F69705 /* README */,
 				08FB77AEFE84172EC02AAC07 /* Classes */,
 				32C88DFF0371C24200C91783 /* Other Sources */,
 				0867D69AFE84028FC02AAC07 /* Frameworks */,

diff --git a/simplepgp.xcodeproj/trevor.mode1v3 b/simplepgp.xcodeproj/trevor.mode1v3
line changes: +14/-14
index 4a4fcbc..26d8a06
--- a/simplepgp.xcodeproj/trevor.mode1v3
+++ b/simplepgp.xcodeproj/trevor.mode1v3
@@ -274,7 +274,6 @@
 							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
 							<array>
 								<array>
-									<integer>6</integer>
 									<integer>1</integer>
 									<integer>0</integer>
 								</array>
@@ -299,7 +298,7 @@
 							<real>186</real>
 						</array>
 						<key>RubberWindowFrame</key>
-						<string>-1248 490 1174 810 -1680 385 1680 1050 </string>
+						<string>-1645 546 1174 810 -1680 385 1680 1050 </string>
 					</dict>
 					<key>Module</key>
 					<string>PBXSmartGroupTreeModule</string>
@@ -317,7 +316,7 @@
 								<key>PBXProjectModuleGUID</key>
 								<string>1CE0B20306471E060097A5F4</string>
 								<key>PBXProjectModuleLabel</key>
-								<string>packet.c</string>
+								<string>README</string>
 								<key>PBXSplitModuleInNavigatorKey</key>
 								<dict>
 									<key>Split0</key>
@@ -325,25 +324,26 @@
 										<key>PBXProjectModuleGUID</key>
 										<string>1CE0B20406471E060097A5F4</string>
 										<key>PBXProjectModuleLabel</key>
-										<string>packet.c</string>
+										<string>README</string>
 										<key>_historyCapacity</key>
 										<integer>0</integer>
 										<key>bookmark</key>
-										<string>6926ABB1146C965700F69705</string>
+										<string>6926AC7B146DC18500F69705</string>
 										<key>history</key>
 										<array>
 											<string>69868BD11460F42D004C5D9B</string>
 											<string>69868BD91460F468004C5D9B</string>
 											<string>69868C931460F7C3004C5D9B</string>
 											<string>69269F5214620FC500F69705</string>
-											<string>69269F5314620FC500F69705</string>
-											<string>6926A6D0146B44A300F69705</string>
-											<string>6926A6E1146B44E000F69705</string>
 											<string>6926A9C7146C658300F69705</string>
-											<string>6926AA5A146C817F00F69705</string>
 											<string>6926AA91146C83FA00F69705</string>
-											<string>6926AAD4146C882900F69705</string>
-											<string>6926AB85146C935300F69705</string>
+											<string>6926AC72146DBFB600F69705</string>
+											<string>6926AC73146DBFB600F69705</string>
+											<string>6926AC74146DBFB600F69705</string>
+											<string>6926AC75146DBFB600F69705</string>
+											<string>6926AC76146DBFB600F69705</string>
+											<string>6926AC79146DC18500F69705</string>
+											<string>6926AC7A146DC18500F69705</string>
 										</array>
 									</dict>
 									<key>SplitCount</key>
@@ -357,7 +357,7 @@
 								<key>Frame</key>
 								<string>{{0, 0}, {966, 675}}</string>
 								<key>RubberWindowFrame</key>
-								<string>-1248 490 1174 810 -1680 385 1680 1050 </string>
+								<string>-1645 546 1174 810 -1680 385 1680 1050 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
@@ -377,7 +377,7 @@
 								<key>Frame</key>
 								<string>{{0, 680}, {966, 89}}</string>
 								<key>RubberWindowFrame</key>
-								<string>-1248 490 1174 810 -1680 385 1680 1050 </string>
+								<string>-1645 546 1174 810 -1680 385 1680 1050 </string>
 							</dict>
 							<key>Module</key>
 							<string>XCDetailModule</string>
@@ -546,7 +546,7 @@
 		<string>/Users/trevor/Documents/Cocoa Projects/libsimplepgp/simplepgp.xcodeproj</string>
 	</array>
 	<key>WindowString</key>
-	<string>-1248 490 1174 810 -1680 385 1680 1050 </string>
+	<string>-1645 546 1174 810 -1680 385 1680 1050 </string>
 	<key>WindowToolsV3</key>
 	<array>
 		<dict>

diff --git a/simplepgp.xcodeproj/trevor.pbxuser b/simplepgp.xcodeproj/trevor.pbxuser
line changes: +674/-272
index 52506ed..c8e71ef
--- a/simplepgp.xcodeproj/trevor.pbxuser
+++ b/simplepgp.xcodeproj/trevor.pbxuser
@@ -4,11 +4,10 @@
 		activeBuildConfigurationName = Debug;
 		activeTarget = D2AAC07D0554694100DB518D /* simplepgp */;
 		addToTargets = (
-			D2AAC07D0554694100DB518D /* simplepgp */,
 		);
 		breakpoints = (
-			69868C9D14618450004C5D9B /* packet.c:9 */,
-			69269F4E14620FC200F69705 /* packet.c:290 */,
+			69868C9D14618450004C5D9B /* packet.c:22 */,
+			69269F4E14620FC200F69705 /* packet.c:241 */,
 		);
 		codeSenseManager = 69868AD51460E35F004C5D9B /* Code sense */;
 		perUserDictionary = {
@@ -319,6 +318,42 @@
 			6926AB9D146C950600F69705 /* PBXTextBookmark */ = 6926AB9D146C950600F69705 /* PBXTextBookmark */;
 			6926ABA6146C95C600F69705 /* PBXTextBookmark */ = 6926ABA6146C95C600F69705 /* PBXTextBookmark */;
 			6926ABB1146C965700F69705 /* PBXTextBookmark */ = 6926ABB1146C965700F69705 /* PBXTextBookmark */;
+			6926ABC1146C97B300F69705 /* PBXTextBookmark */ = 6926ABC1146C97B300F69705 /* PBXTextBookmark */;
+			6926ABC2146C97B300F69705 /* PBXTextBookmark */ = 6926ABC2146C97B300F69705 /* PBXTextBookmark */;
+			6926ABC3146C97B300F69705 /* PBXTextBookmark */ = 6926ABC3146C97B300F69705 /* PBXTextBookmark */;
+			6926ABE1146DAA7300F69705 /* PBXTextBookmark */ = 6926ABE1146DAA7300F69705 /* PBXTextBookmark */;
+			6926ABE2146DAA7300F69705 /* PBXTextBookmark */ = 6926ABE2146DAA7300F69705 /* PBXTextBookmark */;
+			6926ABE3146DAA7300F69705 /* PBXTextBookmark */ = 6926ABE3146DAA7300F69705 /* PBXTextBookmark */;
+			6926ABE7146DAAA100F69705 /* PBXTextBookmark */ = 6926ABE7146DAAA100F69705 /* PBXTextBookmark */;
+			6926ABE9146DAAFE00F69705 /* PBXTextBookmark */ = 6926ABE9146DAAFE00F69705 /* PBXTextBookmark */;
+			6926ABEB146DADCD00F69705 /* PBXTextBookmark */ = 6926ABEB146DADCD00F69705 /* PBXTextBookmark */;
+			6926ABF1146DAE1B00F69705 /* PBXTextBookmark */ = 6926ABF1146DAE1B00F69705 /* PBXTextBookmark */;
+			6926ABF5146DAE3A00F69705 /* PBXTextBookmark */ = 6926ABF5146DAE3A00F69705 /* PBXTextBookmark */;
+			6926ABF9146DB0DE00F69705 /* PBXTextBookmark */ = 6926ABF9146DB0DE00F69705 /* PBXTextBookmark */;
+			6926AC0A146DB19400F69705 /* PBXTextBookmark */ = 6926AC0A146DB19400F69705 /* PBXTextBookmark */;
+			6926AC0B146DB19400F69705 /* PBXTextBookmark */ = 6926AC0B146DB19400F69705 /* PBXTextBookmark */;
+			6926AC16146DB28400F69705 /* PBXTextBookmark */ = 6926AC16146DB28400F69705 /* PBXTextBookmark */;
+			6926AC24146DB40000F69705 /* PBXTextBookmark */ = 6926AC24146DB40000F69705 /* PBXTextBookmark */;
+			6926AC2B146DB42200F69705 /* PBXTextBookmark */ = 6926AC2B146DB42200F69705 /* PBXTextBookmark */;
+			6926AC42146DB5D000F69705 /* PBXTextBookmark */ = 6926AC42146DB5D000F69705 /* PBXTextBookmark */;
+			6926AC43146DB5D000F69705 /* PBXTextBookmark */ = 6926AC43146DB5D000F69705 /* PBXTextBookmark */;
+			6926AC44146DB5D000F69705 /* PBXTextBookmark */ = 6926AC44146DB5D000F69705 /* PBXTextBookmark */;
+			6926AC67146DBC9B00F69705 /* PBXTextBookmark */ = 6926AC67146DBC9B00F69705 /* PBXTextBookmark */;
+			6926AC68146DBC9B00F69705 /* PBXTextBookmark */ = 6926AC68146DBC9B00F69705 /* PBXTextBookmark */;
+			6926AC69146DBC9B00F69705 /* PBXTextBookmark */ = 6926AC69146DBC9B00F69705 /* PBXTextBookmark */;
+			6926AC6A146DBC9B00F69705 /* PBXTextBookmark */ = 6926AC6A146DBC9B00F69705 /* PBXTextBookmark */;
+			6926AC6B146DBE2B00F69705 /* PBXTextBookmark */ = 6926AC6B146DBE2B00F69705 /* PBXTextBookmark */;
+			6926AC71146DBFB600F69705 /* PBXTextBookmark */ = 6926AC71146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC72146DBFB600F69705 /* PBXTextBookmark */ = 6926AC72146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC73146DBFB600F69705 /* PBXTextBookmark */ = 6926AC73146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC74146DBFB600F69705 /* PBXTextBookmark */ = 6926AC74146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC75146DBFB600F69705 /* PBXTextBookmark */ = 6926AC75146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC76146DBFB600F69705 /* PBXTextBookmark */ = 6926AC76146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC77146DBFB600F69705 /* PBXTextBookmark */ = 6926AC77146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC78146DBFB600F69705 /* PBXTextBookmark */ = 6926AC78146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC79146DC18500F69705 /* PBXTextBookmark */ = 6926AC79146DC18500F69705 /* PBXTextBookmark */;
+			6926AC7A146DC18500F69705 /* PBXTextBookmark */ = 6926AC7A146DC18500F69705 /* PBXTextBookmark */;
+			6926AC7B146DC18500F69705 /* PBXTextBookmark */ = 6926AC7B146DC18500F69705 /* PBXTextBookmark */;
 			69868BD11460F42D004C5D9B = 69868BD11460F42D004C5D9B /* PBXTextBookmark */;
 			69868BD91460F468004C5D9B = 69868BD91460F468004C5D9B /* PBXTextBookmark */;
 			69868C931460F7C3004C5D9B = 69868C931460F7C3004C5D9B /* PBXTextBookmark */;
@@ -329,34 +364,34 @@
 	};
 	69269F2114620D0F00F69705 /* packet_test.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1030, 780}}";
-			sepNavSelRange = "{0, 0}";
-			sepNavVisRange = "{0, 1356}";
+			sepNavIntBoundsRect = "{{0, 0}, {905, 897}}";
+			sepNavSelRange = "{683, 0}";
+			sepNavVisRange = "{0, 1509}";
 		};
 	};
 	69269F2214620D0F00F69705 /* packet_test.h */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {905, 618}}";
-			sepNavSelRange = "{0, 0}";
-			sepNavVisRange = "{0, 291}";
+			sepNavSelRange = "{683, 0}";
+			sepNavVisRange = "{0, 839}";
 		};
 	};
 	69269F2314620D0F00F69705 /* packet.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {905, 21450}}";
-			sepNavSelRange = "{7197, 0}";
-			sepNavVisRange = "{6105, 1737}";
+			sepNavIntBoundsRect = "{{0, 0}, {509, 23660}}";
+			sepNavSelRange = "{48986, 0}";
+			sepNavVisRange = "{39463, 248}";
 			sepNavWindowFrame = "{{139, 11}, {1136, 746}}";
 		};
 	};
 	69269F2414620D0F00F69705 /* packet.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {905, 2457}}";
-			sepNavSelRange = "{2419, 17}";
-			sepNavVisRange = "{1941, 1104}";
+			sepNavIntBoundsRect = "{{0, 0}, {905, 2691}}";
+			sepNavSelRange = "{80, 0}";
+			sepNavVisRange = "{0, 1540}";
 		};
 	};
-	69269F4E14620FC200F69705 /* packet.c:290 */ = {
+	69269F4E14620FC200F69705 /* packet.c:241 */ = {
 		isa = PBXFileBreakpoint;
 		actions = (
 		);
@@ -368,9 +403,9 @@
 		functionName = "spgp_decode_message()";
 		hitCount = 0;
 		ignoreCount = 0;
-		lineNumber = 290;
+		lineNumber = 241;
 		location = duckdog;
-		modificationTime = 342660550.99514;
+		modificationTime = 342734490.62607;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -419,7 +454,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 76";
 		rLen = 0;
-		rLoc = 2176;
+		rLoc = 2933;
 		rType = 0;
 		vrLen = 902;
 		vrLoc = 1034;
@@ -429,7 +464,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 816";
 		rLen = 0;
-		rLoc = 28405;
+		rLoc = 30811;
 		rType = 0;
 		vrLen = 1446;
 		vrLoc = 24434;
@@ -439,7 +474,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 820";
 		rLen = 0;
-		rLoc = 28573;
+		rLoc = 30979;
 		rType = 0;
 		vrLen = 1479;
 		vrLoc = 24016;
@@ -449,7 +484,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 791";
 		rLen = 0;
-		rLoc = 27572;
+		rLoc = 29978;
 		rType = 0;
 		vrLen = 1529;
 		vrLoc = 27306;
@@ -459,7 +494,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 179";
 		rLen = 0;
-		rLoc = 9021;
+		rLoc = 7446;
 		rType = 0;
 		vrLen = 1966;
 		vrLoc = 4084;
@@ -469,7 +504,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 960";
 		rLen = 0;
-		rLoc = 48348;
+		rLoc = 52644;
 		rType = 0;
 		vrLen = 1655;
 		vrLoc = 28491;
@@ -479,7 +514,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 975";
 		rLen = 0;
-		rLoc = 48820;
+		rLoc = 53116;
 		rType = 0;
 		vrLen = 1799;
 		vrLoc = 28668;
@@ -489,7 +524,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 974";
 		rLen = 0;
-		rLoc = 48766;
+		rLoc = 53062;
 		rType = 0;
 		vrLen = 1802;
 		vrLoc = 28668;
@@ -499,7 +534,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 672";
 		rLen = 0;
-		rLoc = 23340;
+		rLoc = 25746;
 		rType = 0;
 		vrLen = 2232;
 		vrLoc = 19150;
@@ -509,7 +544,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 672";
 		rLen = 0;
-		rLoc = 23340;
+		rLoc = 25746;
 		rType = 0;
 		vrLen = 2232;
 		vrLoc = 19150;
@@ -519,7 +554,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 671";
 		rLen = 0;
-		rLoc = 23298;
+		rLoc = 25704;
 		rType = 0;
 		vrLen = 2244;
 		vrLoc = 19150;
@@ -529,7 +564,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 729";
 		rLen = 0;
-		rLoc = 25261;
+		rLoc = 27667;
 		rType = 0;
 		vrLen = 2063;
 		vrLoc = 21499;
@@ -539,7 +574,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 251";
 		rLen = 0;
-		rLoc = 11326;
+		rLoc = 9751;
 		rType = 0;
 		vrLen = 1791;
 		vrLoc = 6607;
@@ -559,7 +594,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 144";
 		rLen = 0;
-		rLoc = 4030;
+		rLoc = 4787;
 		rType = 0;
 		vrLen = 1408;
 		vrLoc = 1952;
@@ -569,7 +604,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 233";
 		rLen = 0;
-		rLoc = 10615;
+		rLoc = 9040;
 		rType = 0;
 		vrLen = 1575;
 		vrLoc = 6539;
@@ -579,7 +614,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 233";
 		rLen = 0;
-		rLoc = 10615;
+		rLoc = 9040;
 		rType = 0;
 		vrLen = 1575;
 		vrLoc = 6539;
@@ -589,7 +624,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 147";
 		rLen = 0;
-		rLoc = 4139;
+		rLoc = 4896;
 		rType = 0;
 		vrLen = 1402;
 		vrLoc = 1936;
@@ -599,7 +634,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 325";
 		rLen = 0;
-		rLoc = 13722;
+		rLoc = 13424;
 		rType = 0;
 		vrLen = 1425;
 		vrLoc = 8435;
@@ -609,7 +644,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 243";
 		rLen = 0;
-		rLoc = 11474;
+		rLoc = 9899;
 		rType = 0;
 		vrLen = 1663;
 		vrLoc = 6777;
@@ -619,7 +654,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 226";
 		rLen = 0;
-		rLoc = 10826;
+		rLoc = 9251;
 		rType = 0;
 		vrLen = 1673;
 		vrLoc = 6472;
@@ -629,7 +664,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 96";
 		rLen = 16;
-		rLoc = 2535;
+		rLoc = 3292;
 		rType = 0;
 		vrLen = 1315;
 		vrLoc = 1627;
@@ -639,7 +674,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 181";
 		rLen = 1;
-		rLoc = 9373;
+		rLoc = 7798;
 		rType = 0;
 		vrLen = 1900;
 		vrLoc = 4533;
@@ -649,7 +684,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 959";
 		rLen = 0;
-		rLoc = 42262;
+		rLoc = 46558;
 		rType = 0;
 		vrLen = 1765;
 		vrLoc = 29422;
@@ -659,7 +694,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 969";
 		rLen = 0;
-		rLoc = 42744;
+		rLoc = 47040;
 		rType = 0;
 		vrLen = 1684;
 		vrLoc = 29422;
@@ -669,7 +704,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 55";
 		rLen = 0;
-		rLoc = 1438;
+		rLoc = 2195;
 		rType = 0;
 		vrLen = 1225;
 		vrLoc = 539;
@@ -679,7 +714,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 977";
 		rLen = 0;
-		rLoc = 43046;
+		rLoc = 47342;
 		rType = 0;
 		vrLen = 1601;
 		vrLoc = 29516;
@@ -689,7 +724,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 977";
 		rLen = 0;
-		rLoc = 43046;
+		rLoc = 47342;
 		rType = 0;
 		vrLen = 1598;
 		vrLoc = 29516;
@@ -699,7 +734,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 959";
 		rLen = 0;
-		rLoc = 42223;
+		rLoc = 46519;
 		rType = 0;
 		vrLen = 1633;
 		vrLoc = 29516;
@@ -709,7 +744,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 974";
 		rLen = 0;
-		rLoc = 42712;
+		rLoc = 47008;
 		rType = 0;
 		vrLen = 1643;
 		vrLoc = 29261;
@@ -719,7 +754,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 984";
 		rLen = 0;
-		rLoc = 43022;
+		rLoc = 47318;
 		rType = 0;
 		vrLen = 1637;
 		vrLoc = 29261;
@@ -729,7 +764,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 993";
 		rLen = 0;
-		rLoc = 43772;
+		rLoc = 48068;
 		rType = 0;
 		vrLen = 1784;
 		vrLoc = 30278;
@@ -739,7 +774,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 55";
 		rLen = 0;
-		rLoc = 1438;
+		rLoc = 2195;
 		rType = 0;
 		vrLen = 1429;
 		vrLoc = 1284;
@@ -749,7 +784,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 993";
 		rLen = 0;
-		rLoc = 43772;
+		rLoc = 48068;
 		rType = 0;
 		vrLen = 1784;
 		vrLoc = 30278;
@@ -759,7 +794,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 993";
 		rLen = 0;
-		rLoc = 43772;
+		rLoc = 48068;
 		rType = 0;
 		vrLen = 1847;
 		vrLoc = 30172;
@@ -769,7 +804,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 55";
 		rLen = 0;
-		rLoc = 1438;
+		rLoc = 2195;
 		rType = 0;
 		vrLen = 1357;
 		vrLoc = 1744;
@@ -779,7 +814,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 990";
 		rLen = 0;
-		rLoc = 43137;
+		rLoc = 47433;
 		rType = 0;
 		vrLen = 1796;
 		vrLoc = 29921;
@@ -789,7 +824,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1025";
 		rLen = 0;
-		rLoc = 46754;
+		rLoc = 51050;
 		rType = 0;
 		vrLen = 1708;
 		vrLoc = 30610;
@@ -799,7 +834,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 55";
 		rLen = 0;
-		rLoc = 1438;
+		rLoc = 2195;
 		rType = 0;
 		vrLen = 1318;
 		vrLoc = 1099;
@@ -809,7 +844,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1025";
 		rLen = 0;
-		rLoc = 46730;
+		rLoc = 51026;
 		rType = 0;
 		vrLen = 1740;
 		vrLoc = 30610;
@@ -819,7 +854,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1002";
 		rLen = 0;
-		rLoc = 43447;
+		rLoc = 47743;
 		rType = 0;
 		vrLen = 1864;
 		vrLoc = 29944;
@@ -829,7 +864,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 154";
 		rLen = 56;
-		rLoc = 3840;
+		rLoc = 4597;
 		rType = 0;
 		vrLen = 1515;
 		vrLoc = 2213;
@@ -839,7 +874,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1001";
 		rLen = 0;
-		rLoc = 43446;
+		rLoc = 47742;
 		rType = 0;
 		vrLen = 1801;
 		vrLoc = 30007;
@@ -849,23 +884,23 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 249";
 		rLen = 0;
-		rLoc = 11275;
+		rLoc = 9700;
 		rType = 0;
 		vrLen = 1363;
 		vrLoc = 6644;
 	};
 	6926A660146B38F200F69705 /* keychain.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {905, 1300}}";
-			sepNavSelRange = "{1871, 0}";
-			sepNavVisRange = "{1048, 1035}";
+			sepNavIntBoundsRect = "{{0, 0}, {905, 1482}}";
+			sepNavSelRange = "{117, 563}";
+			sepNavVisRange = "{0, 1255}";
 		};
 	};
 	6926A661146B38F200F69705 /* keychain.h */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {905, 618}}";
-			sepNavSelRange = "{330, 0}";
-			sepNavVisRange = "{0, 659}";
+			sepNavSelRange = "{680, 0}";
+			sepNavVisRange = "{0, 1207}";
 		};
 	};
 	6926A671146B39B700F69705 /* PBXTextBookmark */ = {
@@ -873,7 +908,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 50";
 		rLen = 0;
-		rLoc = 921;
+		rLoc = 1469;
 		rType = 0;
 		vrLen = 1332;
 		vrLoc = 30243;
@@ -883,7 +918,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 153";
 		rLen = 0;
-		rLoc = 3793;
+		rLoc = 4550;
 		rType = 0;
 		vrLen = 1139;
 		vrLoc = 2589;
@@ -893,7 +928,7 @@
 		fRef = 6926A660146B38F200F69705 /* keychain.c */;
 		name = "keychain.c: 37";
 		rLen = 0;
-		rLoc = 742;
+		rLoc = 1290;
 		rType = 0;
 		vrLen = 1008;
 		vrLoc = 0;
@@ -903,7 +938,7 @@
 		fRef = 6926A661146B38F200F69705 /* keychain.h */;
 		name = "keychain.h: 17";
 		rLen = 18;
-		rLoc = 233;
+		rLoc = 781;
 		rType = 0;
 		vrLen = 621;
 		vrLoc = 0;
@@ -913,7 +948,7 @@
 		fRef = 6926A661146B38F200F69705 /* keychain.h */;
 		name = "keychain.h: 17";
 		rLen = 18;
-		rLoc = 233;
+		rLoc = 781;
 		rType = 0;
 		vrLen = 621;
 		vrLoc = 0;
@@ -923,7 +958,7 @@
 		fRef = 6926A661146B38F200F69705 /* keychain.h */;
 		name = "keychain.h: 16";
 		rLen = 0;
-		rLoc = 224;
+		rLoc = 772;
 		rType = 0;
 		vrLen = 621;
 		vrLoc = 0;
@@ -933,7 +968,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 49";
 		rLen = 25;
-		rLoc = 1001;
+		rLoc = 1549;
 		rType = 0;
 		vrLen = 1196;
 		vrLoc = 262;
@@ -943,7 +978,7 @@
 		fRef = 6926A660146B38F200F69705 /* keychain.c */;
 		name = "keychain.c: 9";
 		rLen = 0;
-		rLoc = 140;
+		rLoc = 688;
 		rType = 0;
 		vrLen = 1020;
 		vrLoc = 35;
@@ -953,7 +988,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 20";
 		rLen = 0;
-		rLoc = 423;
+		rLoc = 971;
 		rType = 0;
 		vrLen = 1201;
 		vrLoc = 0;
@@ -963,7 +998,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 12";
 		rLen = 0;
-		rLoc = 180;
+		rLoc = 728;
 		rType = 0;
 		vrLen = 1217;
 		vrLoc = 0;
@@ -973,7 +1008,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 12";
 		rLen = 0;
-		rLoc = 180;
+		rLoc = 728;
 		rType = 0;
 		vrLen = 1217;
 		vrLoc = 0;
@@ -983,7 +1018,7 @@
 		fRef = 6926A661146B38F200F69705 /* keychain.h */;
 		name = "keychain.h: 16";
 		rLen = 0;
-		rLoc = 224;
+		rLoc = 772;
 		rType = 0;
 		vrLen = 621;
 		vrLoc = 0;
@@ -993,7 +1028,7 @@
 		fRef = 6926A660146B38F200F69705 /* keychain.c */;
 		name = "keychain.c: 9";
 		rLen = 0;
-		rLoc = 140;
+		rLoc = 688;
 		rType = 0;
 		vrLen = 989;
 		vrLoc = 164;
@@ -1003,7 +1038,7 @@
 		fRef = 6926A660146B38F200F69705 /* keychain.c */;
 		name = "keychain.c: 9";
 		rLen = 0;
-		rLoc = 140;
+		rLoc = 688;
 		rType = 0;
 		vrLen = 989;
 		vrLoc = 164;
@@ -1013,7 +1048,7 @@
 		fRef = 6926A661146B38F200F69705 /* keychain.h */;
 		name = "keychain.h: 19";
 		rLen = 0;
-		rLoc = 330;
+		rLoc = 878;
 		rType = 0;
 		vrLen = 659;
 		vrLoc = 0;
@@ -1023,7 +1058,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 108";
 		rLen = 0;
-		rLoc = 2501;
+		rLoc = 3258;
 		rType = 0;
 		vrLen = 1088;
 		vrLoc = 2043;
@@ -1033,7 +1068,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 90";
 		rLen = 0;
-		rLoc = 3412;
+		rLoc = 4429;
 		rType = 0;
 		vrLen = 1411;
 		vrLoc = 30330;
@@ -1043,7 +1078,7 @@
 		fRef = 6926A660146B38F200F69705 /* keychain.c */;
 		name = "keychain.c: 41";
 		rLen = 36;
-		rLoc = 779;
+		rLoc = 1327;
 		rType = 0;
 		vrLen = 1036;
 		vrLoc = 1048;
@@ -1053,7 +1088,7 @@
 		fRef = 6926A660146B38F200F69705 /* keychain.c */;
 		name = "keychain.c: 88";
 		rLen = 0;
-		rLoc = 1871;
+		rLoc = 2419;
 		rType = 0;
 		vrLen = 1069;
 		vrLoc = 1014;
@@ -1063,7 +1098,7 @@
 		fRef = 6926A660146B38F200F69705 /* keychain.c */;
 		name = "keychain.c: 88";
 		rLen = 0;
-		rLoc = 1871;
+		rLoc = 2419;
 		rType = 0;
 		vrLen = 1035;
 		vrLoc = 1048;
@@ -1083,7 +1118,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 90";
 		rLen = 0;
-		rLoc = 3412;
+		rLoc = 4429;
 		rType = 0;
 		vrLen = 1432;
 		vrLoc = 31262;
@@ -1093,7 +1128,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 90";
 		rLen = 0;
-		rLoc = 3412;
+		rLoc = 4429;
 		rType = 0;
 		vrLen = 1432;
 		vrLoc = 31262;
@@ -1103,7 +1138,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 46611;
+		rLoc = 50907;
 		rType = 0;
 		vrLen = 1444;
 		vrLoc = 31262;
@@ -1113,7 +1148,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 46611;
+		rLoc = 50907;
 		rType = 0;
 		vrLen = 1444;
 		vrLoc = 31262;
@@ -1123,7 +1158,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 46611;
+		rLoc = 50907;
 		rType = 0;
 		vrLen = 1444;
 		vrLoc = 31262;
@@ -1133,7 +1168,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 46611;
+		rLoc = 50907;
 		rType = 0;
 		vrLen = 1453;
 		vrLoc = 31262;
@@ -1143,7 +1178,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 46611;
+		rLoc = 50907;
 		rType = 0;
 		vrLen = 1453;
 		vrLoc = 31262;
@@ -1153,7 +1188,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 108";
 		rLen = 0;
-		rLoc = 2501;
+		rLoc = 3258;
 		rType = 0;
 		vrLen = 1217;
 		vrLoc = 0;
@@ -1163,7 +1198,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 21";
 		rLen = 0;
-		rLoc = 423;
+		rLoc = 971;
 		rType = 0;
 		vrLen = 1217;
 		vrLoc = 0;
@@ -1173,7 +1208,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1046";
 		rLen = 0;
-		rLoc = 46611;
+		rLoc = 50907;
 		rType = 0;
 		vrLen = 1450;
 		vrLoc = 31285;
@@ -1183,7 +1218,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1043";
 		rLen = 0;
-		rLoc = 46534;
+		rLoc = 50830;
 		rType = 0;
 		vrLen = 1450;
 		vrLoc = 31285;
@@ -1193,7 +1228,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1043";
 		rLen = 0;
-		rLoc = 46534;
+		rLoc = 50830;
 		rType = 0;
 		vrLen = 1450;
 		vrLoc = 31285;
@@ -1203,7 +1238,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1048";
 		rLen = 0;
-		rLoc = 46503;
+		rLoc = 50799;
 		rType = 0;
 		vrLen = 1333;
 		vrLoc = 31285;
@@ -1213,7 +1248,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 67";
 		rLen = 0;
-		rLoc = 1598;
+		rLoc = 2355;
 		rType = 0;
 		vrLen = 895;
 		vrLoc = 993;
@@ -1223,7 +1258,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1226";
 		rLen = 74;
-		rLoc = 51163;
+		rLoc = 55459;
 		rType = 0;
 		vrLen = 1307;
 		vrLoc = 36795;
@@ -1233,7 +1268,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1034";
 		rLen = 0;
-		rLoc = 44499;
+		rLoc = 48795;
 		rType = 0;
 		vrLen = 1205;
 		vrLoc = 30973;
@@ -1243,7 +1278,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1032";
 		rLen = 0;
-		rLoc = 44311;
+		rLoc = 48607;
 		rType = 0;
 		vrLen = 1408;
 		vrLoc = 30775;
@@ -1253,7 +1288,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 67";
 		rLen = 0;
-		rLoc = 1598;
+		rLoc = 2355;
 		rType = 0;
 		vrLen = 895;
 		vrLoc = 993;
@@ -1263,7 +1298,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1032";
 		rLen = 0;
-		rLoc = 43930;
+		rLoc = 48226;
 		rType = 0;
 		vrLen = 1492;
 		vrLoc = 31248;
@@ -1273,7 +1308,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 44406;
+		rLoc = 48702;
 		rType = 0;
 		vrLen = 1462;
 		vrLoc = 31147;
@@ -1283,7 +1318,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1048";
 		rLen = 0;
-		rLoc = 44628;
+		rLoc = 48924;
 		rType = 0;
 		vrLen = 1462;
 		vrLoc = 31147;
@@ -1293,7 +1328,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1049";
 		rLen = 0;
-		rLoc = 44572;
+		rLoc = 48868;
 		rType = 0;
 		vrLen = 1394;
 		vrLoc = 31415;
@@ -1303,7 +1338,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1049";
 		rLen = 0;
-		rLoc = 44572;
+		rLoc = 48868;
 		rType = 0;
 		vrLen = 1394;
 		vrLoc = 31415;
@@ -1313,7 +1348,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1029";
 		rLen = 0;
-		rLoc = 43797;
+		rLoc = 48093;
 		rType = 0;
 		vrLen = 1498;
 		vrLoc = 30842;
@@ -1323,7 +1358,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1032";
 		rLen = 0;
-		rLoc = 43874;
+		rLoc = 48170;
 		rType = 0;
 		vrLen = 1502;
 		vrLoc = 30842;
@@ -1333,7 +1368,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1032";
 		rLen = 0;
-		rLoc = 43874;
+		rLoc = 48170;
 		rType = 0;
 		vrLen = 1508;
 		vrLoc = 30842;
@@ -1343,7 +1378,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 51";
 		rLen = 15;
-		rLoc = 1271;
+		rLoc = 1914;
 		rType = 0;
 		vrLen = 955;
 		vrLoc = 1025;
@@ -1353,7 +1388,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 970";
 		rLen = 119;
-		rLoc = 41860;
+		rLoc = 46156;
 		rType = 0;
 		vrLen = 1389;
 		vrLoc = 31415;
@@ -1363,7 +1398,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1250";
 		rLen = 0;
-		rLoc = 51446;
+		rLoc = 55742;
 		rType = 0;
 		vrLen = 1185;
 		vrLoc = 37615;
@@ -1373,7 +1408,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1250";
 		rLen = 0;
-		rLoc = 51446;
+		rLoc = 55742;
 		rType = 0;
 		vrLen = 1185;
 		vrLoc = 37619;
@@ -1383,7 +1418,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1039";
 		rLen = 0;
-		rLoc = 44158;
+		rLoc = 48454;
 		rType = 0;
 		vrLen = 1356;
 		vrLoc = 31419;
@@ -1393,7 +1428,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1064";
 		rLen = 0;
-		rLoc = 45010;
+		rLoc = 49306;
 		rType = 0;
 		vrLen = 1461;
 		vrLoc = 31857;
@@ -1403,7 +1438,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1062";
 		rLen = 0;
-		rLoc = 44870;
+		rLoc = 49166;
 		rType = 0;
 		vrLen = 1476;
 		vrLoc = 31764;
@@ -1414,7 +1449,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		fallbackIsa = XCBuildMessageTextBookmark;
 		rLen = 1;
-		rLoc = 1424;
+		rLoc = 1553;
 		rType = 1;
 	};
 	6926A7E1146B59BC00F69705 /* PBXTextBookmark */ = {
@@ -1422,7 +1457,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 978";
 		rLen = 0;
-		rLoc = 42194;
+		rLoc = 46490;
 		rType = 0;
 		vrLen = 1540;
 		vrLoc = 31881;
@@ -1432,7 +1467,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1064";
 		rLen = 0;
-		rLoc = 45010;
+		rLoc = 49306;
 		rType = 0;
 		vrLen = 1532;
 		vrLoc = 31881;
@@ -1442,7 +1477,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 108";
 		rLen = 14;
-		rLoc = 2440;
+		rLoc = 3197;
 		rType = 0;
 		vrLen = 1072;
 		vrLoc = 2099;
@@ -1452,7 +1487,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1065";
 		rLen = 0;
-		rLoc = 44997;
+		rLoc = 49293;
 		rType = 0;
 		vrLen = 1532;
 		vrLoc = 31881;
@@ -1462,7 +1497,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1069";
 		rLen = 0;
-		rLoc = 45286;
+		rLoc = 49582;
 		rType = 0;
 		vrLen = 1453;
 		vrLoc = 31881;
@@ -1472,7 +1507,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1071";
 		rLen = 0;
-		rLoc = 45322;
+		rLoc = 49618;
 		rType = 0;
 		vrLen = 1532;
 		vrLoc = 31881;
@@ -1482,7 +1517,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1069";
 		rLen = 0;
-		rLoc = 45161;
+		rLoc = 49457;
 		rType = 0;
 		vrLen = 1612;
 		vrLoc = 31913;
@@ -1492,7 +1527,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 67";
 		rLen = 0;
-		rLoc = 1559;
+		rLoc = 2316;
 		rType = 0;
 		vrLen = 959;
 		vrLoc = 1262;
@@ -1502,7 +1537,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1067";
 		rLen = 0;
-		rLoc = 45052;
+		rLoc = 49348;
 		rType = 0;
 		vrLen = 1555;
 		vrLoc = 31987;
@@ -1512,7 +1547,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1067";
 		rLen = 0;
-		rLoc = 45052;
+		rLoc = 49348;
 		rType = 0;
 		vrLen = 1555;
 		vrLoc = 31987;
@@ -1522,7 +1557,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1073";
 		rLen = 0;
-		rLoc = 45328;
+		rLoc = 49624;
 		rType = 0;
 		vrLen = 1560;
 		vrLoc = 31987;
@@ -1532,7 +1567,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 68";
 		rLen = 0;
-		rLoc = 1559;
+		rLoc = 2316;
 		rType = 0;
 		vrLen = 945;
 		vrLoc = 1262;
@@ -1542,7 +1577,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1073";
 		rLen = 0;
-		rLoc = 45328;
+		rLoc = 49624;
 		rType = 0;
 		vrLen = 1560;
 		vrLoc = 31987;
@@ -1552,7 +1587,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1075";
 		rLen = 0;
-		rLoc = 45402;
+		rLoc = 49698;
 		rType = 0;
 		vrLen = 1486;
 		vrLoc = 31987;
@@ -1562,7 +1597,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1086";
 		rLen = 0;
-		rLoc = 45762;
+		rLoc = 50058;
 		rType = 0;
 		vrLen = 1581;
 		vrLoc = 32939;
@@ -1572,7 +1607,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1088";
 		rLen = 0;
-		rLoc = 45762;
+		rLoc = 50058;
 		rType = 0;
 		vrLen = 1636;
 		vrLoc = 32363;
@@ -1582,7 +1617,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1088";
 		rLen = 0;
-		rLoc = 45762;
+		rLoc = 50058;
 		rType = 0;
 		vrLen = 1637;
 		vrLoc = 32362;
@@ -1592,7 +1627,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1089";
 		rLen = 0;
-		rLoc = 45762;
+		rLoc = 50058;
 		rType = 0;
 		vrLen = 1647;
 		vrLoc = 32362;
@@ -1602,7 +1637,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1090";
 		rLen = 0;
-		rLoc = 45816;
+		rLoc = 50112;
 		rType = 0;
 		vrLen = 1651;
 		vrLoc = 32366;
@@ -1612,7 +1647,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1090";
 		rLen = 0;
-		rLoc = 45816;
+		rLoc = 50112;
 		rType = 0;
 		vrLen = 1651;
 		vrLoc = 32366;
@@ -1622,7 +1657,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1090";
 		rLen = 0;
-		rLoc = 45816;
+		rLoc = 50112;
 		rType = 0;
 		vrLen = 1658;
 		vrLoc = 32366;
@@ -1632,7 +1667,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1090";
 		rLen = 0;
-		rLoc = 45816;
+		rLoc = 50112;
 		rType = 0;
 		vrLen = 1658;
 		vrLoc = 32366;
@@ -1642,7 +1677,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1090";
 		rLen = 0;
-		rLoc = 45816;
+		rLoc = 50112;
 		rType = 0;
 		vrLen = 1543;
 		vrLoc = 32544;
@@ -1652,7 +1687,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1096";
 		rLen = 0;
-		rLoc = 45969;
+		rLoc = 50265;
 		rType = 0;
 		vrLen = 1484;
 		vrLoc = 32775;
@@ -1662,7 +1697,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 438";
 		rLen = 0;
-		rLoc = 16148;
+		rLoc = 18554;
 		rType = 0;
 		vrLen = 1856;
 		vrLoc = 11348;
@@ -1672,7 +1707,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 438";
 		rLen = 0;
-		rLoc = 16148;
+		rLoc = 18554;
 		rType = 0;
 		vrLen = 1886;
 		vrLoc = 11348;
@@ -1682,7 +1717,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 438";
 		rLen = 0;
-		rLoc = 16148;
+		rLoc = 18554;
 		rType = 0;
 		vrLen = 1864;
 		vrLoc = 11538;
@@ -1692,7 +1727,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 438";
 		rLen = 0;
-		rLoc = 16148;
+		rLoc = 18554;
 		rType = 0;
 		vrLen = 1858;
 		vrLoc = 11538;
@@ -1702,7 +1737,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 470";
 		rLen = 0;
-		rLoc = 17258;
+		rLoc = 19664;
 		rType = 0;
 		vrLen = 1250;
 		vrLoc = 13332;
@@ -1712,7 +1747,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 38";
 		rLen = 0;
-		rLoc = 1013;
+		rLoc = 1623;
 		rType = 0;
 		vrLen = 1096;
 		vrLoc = 485;
@@ -1722,7 +1757,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 444";
 		rLen = 0;
-		rLoc = 16148;
+		rLoc = 18554;
 		rType = 0;
 		vrLen = 1464;
 		vrLoc = 12557;
@@ -1732,7 +1767,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 68";
 		rLen = 0;
-		rLoc = 1532;
+		rLoc = 2295;
 		rType = 0;
 		vrLen = 1528;
 		vrLoc = 12678;
@@ -1742,7 +1777,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 68";
 		rLen = 0;
-		rLoc = 1532;
+		rLoc = 2295;
 		rType = 0;
 		vrLen = 1528;
 		vrLoc = 12678;
@@ -1752,7 +1787,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 68";
 		rLen = 0;
-		rLoc = 1532;
+		rLoc = 2295;
 		rType = 0;
 		vrLen = 1529;
 		vrLoc = 12678;
@@ -1762,7 +1797,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 68";
 		rLen = 0;
-		rLoc = 1532;
+		rLoc = 2295;
 		rType = 0;
 		vrLen = 1530;
 		vrLoc = 12679;
@@ -1772,7 +1807,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 68";
 		rLen = 0;
-		rLoc = 1532;
+		rLoc = 2295;
 		rType = 0;
 		vrLen = 1530;
 		vrLoc = 12679;
@@ -1782,7 +1817,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 38";
 		rLen = 0;
-		rLoc = 1013;
+		rLoc = 1623;
 		rType = 0;
 		vrLen = 1093;
 		vrLoc = 485;
@@ -1792,7 +1827,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 127";
 		rLen = 25;
-		rLoc = 2841;
+		rLoc = 3598;
 		rType = 0;
 		vrLen = 1088;
 		vrLoc = 2155;
@@ -1802,7 +1837,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 139";
 		rLen = 54;
-		rLoc = 7705;
+		rLoc = 6130;
 		rType = 0;
 		vrLen = 1692;
 		vrLoc = 5114;
@@ -1812,7 +1847,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1012";
 		rLen = 0;
-		rLoc = 41503;
+		rLoc = 43990;
 		rType = 0;
 		vrLen = 1382;
 		vrLoc = 30008;
@@ -1822,7 +1857,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1007";
 		rLen = 0;
-		rLoc = 37601;
+		rLoc = 40088;
 		rType = 0;
 		vrLen = 1403;
 		vrLoc = 30374;
@@ -1832,7 +1867,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1017";
 		rLen = 0;
-		rLoc = 37986;
+		rLoc = 40473;
 		rType = 0;
 		vrLen = 1491;
 		vrLoc = 30915;
@@ -1842,7 +1877,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 108";
 		rLen = 18;
-		rLoc = 2364;
+		rLoc = 3121;
 		rType = 0;
 		vrLen = 1072;
 		vrLoc = 2171;
@@ -1852,7 +1887,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1017";
 		rLen = 0;
-		rLoc = 38018;
+		rLoc = 40505;
 		rType = 0;
 		vrLen = 1495;
 		vrLoc = 30915;
@@ -1862,7 +1897,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1012";
 		rLen = 0;
-		rLoc = 37764;
+		rLoc = 40251;
 		rType = 0;
 		vrLen = 1481;
 		vrLoc = 30905;
@@ -1872,7 +1907,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1040";
 		rLen = 0;
-		rLoc = 38977;
+		rLoc = 41464;
 		rType = 0;
 		vrLen = 1427;
 		vrLoc = 30905;
@@ -1882,7 +1917,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 50";
 		rLen = 0;
-		rLoc = 1259;
+		rLoc = 1902;
 		rType = 0;
 		vrLen = 1066;
 		vrLoc = 534;
@@ -1892,7 +1927,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 41503;
+		rLoc = 43990;
 		rType = 0;
 		vrLen = 1420;
 		vrLoc = 30908;
@@ -1902,7 +1937,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1050";
 		rLen = 119;
-		rLoc = 41860;
+		rLoc = 46156;
 		rType = 0;
 		vrLen = 1509;
 		vrLoc = 31655;
@@ -1912,7 +1947,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 50";
 		rLen = 0;
-		rLoc = 1259;
+		rLoc = 1902;
 		rType = 0;
 		vrLen = 906;
 		vrLoc = 823;
@@ -1922,7 +1957,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1058";
 		rLen = 0;
-		rLoc = 41694;
+		rLoc = 45990;
 		rType = 0;
 		vrLen = 1317;
 		vrLoc = 32232;
@@ -1932,7 +1967,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1062";
 		rLen = 0;
-		rLoc = 41841;
+		rLoc = 46137;
 		rType = 0;
 		vrLen = 1285;
 		vrLoc = 32232;
@@ -1942,7 +1977,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1030";
 		rLen = 0;
-		rLoc = 38168;
+		rLoc = 40655;
 		rType = 0;
 		vrLen = 1417;
 		vrLoc = 31218;
@@ -1952,7 +1987,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1030";
 		rLen = 0;
-		rLoc = 38168;
+		rLoc = 40655;
 		rType = 0;
 		vrLen = 1417;
 		vrLoc = 31218;
@@ -1962,7 +1997,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1032";
 		rLen = 0;
-		rLoc = 38168;
+		rLoc = 40655;
 		rType = 0;
 		vrLen = 1392;
 		vrLoc = 31253;
@@ -1972,7 +2007,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1032";
 		rLen = 0;
-		rLoc = 38168;
+		rLoc = 40655;
 		rType = 0;
 		vrLen = 1392;
 		vrLoc = 31253;
@@ -1982,7 +2017,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1032";
 		rLen = 0;
-		rLoc = 38168;
+		rLoc = 40655;
 		rType = 0;
 		vrLen = 1451;
 		vrLoc = 31194;
@@ -1992,7 +2027,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 436";
 		rLen = 0;
-		rLoc = 16365;
+		rLoc = 18771;
 		rType = 0;
 		vrLen = 1818;
 		vrLoc = 11735;
@@ -2002,7 +2037,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 436";
 		rLen = 0;
-		rLoc = 16365;
+		rLoc = 18771;
 		rType = 0;
 		vrLen = 1451;
 		vrLoc = 12773;
@@ -2012,7 +2047,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 437";
 		rLen = 0;
-		rLoc = 16371;
+		rLoc = 18777;
 		rType = 0;
 		vrLen = 1519;
 		vrLoc = 12550;
@@ -2022,7 +2057,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 437";
 		rLen = 0;
-		rLoc = 16371;
+		rLoc = 18777;
 		rType = 0;
 		vrLen = 1523;
 		vrLoc = 12550;
@@ -2032,7 +2067,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 437";
 		rLen = 0;
-		rLoc = 16371;
+		rLoc = 18777;
 		rType = 0;
 		vrLen = 1519;
 		vrLoc = 12550;
@@ -2042,7 +2077,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 437";
 		rLen = 0;
-		rLoc = 16371;
+		rLoc = 18777;
 		rType = 0;
 		vrLen = 1519;
 		vrLoc = 12550;
@@ -2052,7 +2087,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1074";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 1529;
 		vrLoc = 31834;
@@ -2062,7 +2097,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1074";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 1529;
 		vrLoc = 31834;
@@ -2072,7 +2107,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1074";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 1635;
 		vrLoc = 31881;
@@ -2082,7 +2117,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1074";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 1635;
 		vrLoc = 31881;
@@ -2092,7 +2127,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1074";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 1634;
 		vrLoc = 31881;
@@ -2102,7 +2137,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 454";
 		rLen = 0;
-		rLoc = 16808;
+		rLoc = 19214;
 		rType = 0;
 		vrLen = 1502;
 		vrLoc = 12734;
@@ -2112,7 +2147,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1076";
 		rLen = 0;
-		rLoc = 39649;
+		rLoc = 42136;
 		rType = 0;
 		vrLen = 1580;
 		vrLoc = 32022;
@@ -2122,7 +2157,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 50";
 		rLen = 0;
-		rLoc = 1259;
+		rLoc = 1902;
 		rType = 0;
 		vrLen = 887;
 		vrLoc = 823;
@@ -2132,7 +2167,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1090";
 		rLen = 0;
-		rLoc = 40897;
+		rLoc = 43384;
 		rType = 0;
 		vrLen = 1776;
 		vrLoc = 32146;
@@ -2142,7 +2177,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 177";
 		rLen = 0;
-		rLoc = 8411;
+		rLoc = 6836;
 		rType = 0;
 		vrLen = 1558;
 		vrLoc = 5039;
@@ -2152,7 +2187,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 210";
 		rLen = 0;
-		rLoc = 9443;
+		rLoc = 7868;
 		rType = 0;
 		vrLen = 1859;
 		vrLoc = 5449;
@@ -2162,7 +2197,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1020";
 		rLen = 211;
-		rLoc = 37297;
+		rLoc = 39784;
 		rType = 0;
 		vrLen = 1580;
 		vrLoc = 33567;
@@ -2172,7 +2207,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1020";
 		rLen = 211;
-		rLoc = 37297;
+		rLoc = 39784;
 		rType = 0;
 		vrLen = 1580;
 		vrLoc = 33567;
@@ -2182,7 +2217,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1119";
 		rLen = 0;
-		rLoc = 41284;
+		rLoc = 43771;
 		rType = 0;
 		vrLen = 1634;
 		vrLoc = 33895;
@@ -2192,7 +2227,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1070";
 		rLen = 0;
-		rLoc = 38977;
+		rLoc = 41464;
 		rType = 0;
 		vrLen = 1725;
 		vrLoc = 32525;
@@ -2202,7 +2237,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 16";
 		rLen = 0;
-		rLoc = 281;
+		rLoc = 829;
 		rType = 0;
 		vrLen = 975;
 		vrLoc = 0;
@@ -2212,7 +2247,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1037";
 		rLen = 0;
-		rLoc = 37268;
+		rLoc = 39755;
 		rType = 0;
 		vrLen = 1329;
 		vrLoc = 31486;
@@ -2222,7 +2257,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1041";
 		rLen = 0;
-		rLoc = 36921;
+		rLoc = 39372;
 		rType = 0;
 		vrLen = 1193;
 		vrLoc = 32102;
@@ -2232,7 +2267,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1035";
 		rLen = 0;
-		rLoc = 36142;
+		rLoc = 38548;
 		rType = 0;
 		vrLen = 1145;
 		vrLoc = 32098;
@@ -2242,7 +2277,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1052";
 		rLen = 0;
-		rLoc = 36910;
+		rLoc = 39316;
 		rType = 0;
 		vrLen = 1164;
 		vrLoc = 32098;
@@ -2279,7 +2314,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 50";
 		rLen = 0;
-		rLoc = 1259;
+		rLoc = 1902;
 		rType = 0;
 		vrLen = 887;
 		vrLoc = 823;
@@ -2289,7 +2324,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1052";
 		rLen = 0;
-		rLoc = 36910;
+		rLoc = 39316;
 		rType = 0;
 		vrLen = 1164;
 		vrLoc = 32098;
@@ -2299,7 +2334,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1031";
 		rLen = 0;
-		rLoc = 34297;
+		rLoc = 36703;
 		rType = 0;
 		vrLen = 1078;
 		vrLoc = 32098;
@@ -2309,7 +2344,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1043";
 		rLen = 0;
-		rLoc = 35894;
+		rLoc = 38300;
 		rType = 0;
 		vrLen = 1055;
 		vrLoc = 32098;
@@ -2320,7 +2355,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		fallbackIsa = XCBuildMessageTextBookmark;
 		rLen = 1;
-		rLoc = 1424;
+		rLoc = 1553;
 		rType = 1;
 	};
 	6926A9D2146C759700F69705 /* PBXTextBookmark */ = {
@@ -2328,7 +2363,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1287";
 		rLen = 0;
-		rLoc = 44690;
+		rLoc = 48986;
 		rType = 0;
 		vrLen = 193;
 		vrLoc = 37053;
@@ -2338,7 +2373,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1139";
 		rLen = 0;
-		rLoc = 39343;
+		rLoc = 41830;
 		rType = 0;
 		vrLen = 1815;
 		vrLoc = 34704;
@@ -2348,7 +2383,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1147";
 		rLen = 899;
-		rLoc = 39698;
+		rLoc = 42185;
 		rType = 0;
 		vrLen = 1908;
 		vrLoc = 34706;
@@ -2358,7 +2393,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1153";
 		rLen = 0;
-		rLoc = 40020;
+		rLoc = 42507;
 		rType = 0;
 		vrLen = 2044;
 		vrLoc = 35207;
@@ -2368,7 +2403,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1178";
 		rLen = 0;
-		rLoc = 41022;
+		rLoc = 43509;
 		rType = 0;
 		vrLen = 2065;
 		vrLoc = 35634;
@@ -2378,7 +2413,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1043";
 		rLen = 0;
-		rLoc = 34996;
+		rLoc = 37402;
 		rType = 0;
 		vrLen = 1109;
 		vrLoc = 32174;
@@ -2388,7 +2423,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1037";
 		rLen = 0;
-		rLoc = 34838;
+		rLoc = 37244;
 		rType = 0;
 		vrLen = 1119;
 		vrLoc = 32174;
@@ -2398,7 +2433,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 116";
 		rLen = 0;
-		rLoc = 2501;
+		rLoc = 3258;
 		rType = 0;
 		vrLen = 1083;
 		vrLoc = 1859;
@@ -2408,7 +2443,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1043";
 		rLen = 10;
-		rLoc = 35035;
+		rLoc = 37441;
 		rType = 0;
 		vrLen = 1150;
 		vrLoc = 32174;
@@ -2418,7 +2453,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1043";
 		rLen = 0;
-		rLoc = 35018;
+		rLoc = 37424;
 		rType = 0;
 		vrLen = 1147;
 		vrLoc = 32174;
@@ -2428,7 +2463,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1052";
 		rLen = 0;
-		rLoc = 35802;
+		rLoc = 38208;
 		rType = 0;
 		vrLen = 1124;
 		vrLoc = 32174;
@@ -2438,7 +2473,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1050";
 		rLen = 0;
-		rLoc = 35018;
+		rLoc = 37424;
 		rType = 0;
 		vrLen = 1104;
 		vrLoc = 32174;
@@ -2448,7 +2483,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1053";
 		rLen = 0;
-		rLoc = 35233;
+		rLoc = 37639;
 		rType = 0;
 		vrLen = 1137;
 		vrLoc = 32174;
@@ -2458,7 +2493,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1055";
 		rLen = 0;
-		rLoc = 35741;
+		rLoc = 38147;
 		rType = 0;
 		vrLen = 1142;
 		vrLoc = 32174;
@@ -2468,7 +2503,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1036";
 		rLen = 0;
-		rLoc = 34574;
+		rLoc = 36980;
 		rType = 0;
 		vrLen = 1150;
 		vrLoc = 32174;
@@ -2478,7 +2513,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1061";
 		rLen = 0;
-		rLoc = 35456;
+		rLoc = 37862;
 		rType = 0;
 		vrLen = 1122;
 		vrLoc = 32174;
@@ -2488,7 +2523,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1090";
 		rLen = 0;
-		rLoc = 36585;
+		rLoc = 38991;
 		rType = 0;
 		vrLen = 1297;
 		vrLoc = 32706;
@@ -2498,7 +2533,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 441";
 		rLen = 0;
-		rLoc = 15761;
+		rLoc = 18167;
 		rType = 0;
 		vrLen = 1908;
 		vrLoc = 12417;
@@ -2508,7 +2543,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 442";
 		rLen = 0;
-		rLoc = 15667;
+		rLoc = 18073;
 		rType = 0;
 		vrLen = 1779;
 		vrLoc = 12746;
@@ -2518,7 +2553,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1099";
 		rLen = 0;
-		rLoc = 36875;
+		rLoc = 39281;
 		rType = 0;
 		vrLen = 1295;
 		vrLoc = 33118;
@@ -2528,7 +2563,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 445";
 		rLen = 0;
-		rLoc = 15761;
+		rLoc = 18167;
 		rType = 0;
 		vrLen = 1757;
 		vrLoc = 12940;
@@ -2558,7 +2593,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1059";
 		rLen = 0;
-		rLoc = 35242;
+		rLoc = 37648;
 		rType = 0;
 		vrLen = 1177;
 		vrLoc = 32255;
@@ -2568,7 +2603,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1072";
 		rLen = 0;
-		rLoc = 35791;
+		rLoc = 38197;
 		rType = 0;
 		vrLen = 1182;
 		vrLoc = 32235;
@@ -2578,7 +2613,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1072";
 		rLen = 0;
-		rLoc = 35783;
+		rLoc = 38189;
 		rType = 0;
 		vrLen = 1192;
 		vrLoc = 32235;
@@ -2598,7 +2633,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1072";
 		rLen = 0;
-		rLoc = 35783;
+		rLoc = 38189;
 		rType = 0;
 		vrLen = 1192;
 		vrLoc = 32235;
@@ -2608,7 +2643,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1069";
 		rLen = 0;
-		rLoc = 35688;
+		rLoc = 38094;
 		rType = 0;
 		vrLen = 1206;
 		vrLoc = 32235;
@@ -2618,7 +2653,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1069";
 		rLen = 0;
-		rLoc = 35650;
+		rLoc = 38056;
 		rType = 0;
 		vrLen = 1234;
 		vrLoc = 32235;
@@ -2638,7 +2673,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1069";
 		rLen = 0;
-		rLoc = 35650;
+		rLoc = 38056;
 		rType = 0;
 		vrLen = 1234;
 		vrLoc = 32235;
@@ -2648,7 +2683,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 34723;
+		rLoc = 37129;
 		rType = 0;
 		vrLen = 1271;
 		vrLoc = 32235;
@@ -2658,7 +2693,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1058";
 		rLen = 0;
-		rLoc = 34990;
+		rLoc = 37396;
 		rType = 0;
 		vrLen = 1327;
 		vrLoc = 32262;
@@ -2668,7 +2703,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 116";
 		rLen = 0;
-		rLoc = 2501;
+		rLoc = 3258;
 		rType = 0;
 		vrLen = 1083;
 		vrLoc = 1859;
@@ -2678,7 +2713,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 116";
 		rLen = 0;
-		rLoc = 2501;
+		rLoc = 3258;
 		rType = 0;
 		vrLen = 1109;
 		vrLoc = 2600;
@@ -2688,7 +2723,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 164";
 		rLen = 15;
-		rLoc = 3559;
+		rLoc = 4316;
 		rType = 0;
 		vrLen = 1015;
 		vrLoc = 2734;
@@ -2698,7 +2733,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1058";
 		rLen = 0;
-		rLoc = 34990;
+		rLoc = 37396;
 		rType = 0;
 		vrLen = 1327;
 		vrLoc = 32262;
@@ -2708,7 +2743,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 212";
 		rLen = 0;
-		rLoc = 7686;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1596;
 		vrLoc = 4866;
@@ -2718,7 +2753,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 298";
 		rLen = 0;
-		rLoc = 10327;
+		rLoc = 8752;
 		rType = 0;
 		vrLen = 1521;
 		vrLoc = 9063;
@@ -2728,7 +2763,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 112";
 		rLen = 17;
-		rLoc = 2419;
+		rLoc = 3176;
 		rType = 0;
 		vrLen = 1104;
 		vrLoc = 1941;
@@ -2738,7 +2773,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1173";
 		rLen = 0;
-		rLoc = 37081;
+		rLoc = 39532;
 		rType = 0;
 		vrLen = 1361;
 		vrLoc = 35270;
@@ -2748,7 +2783,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 217";
 		rLen = 0;
-		rLoc = 7793;
+		rLoc = 6218;
 		rType = 0;
 		vrLen = 1216;
 		vrLoc = 7015;
@@ -2758,7 +2793,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 189";
 		rLen = 0;
-		rLoc = 6526;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1764;
 		vrLoc = 5299;
@@ -2768,7 +2803,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 189";
 		rLen = 0;
-		rLoc = 6526;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1764;
 		vrLoc = 5299;
@@ -2778,7 +2813,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 184";
 		rLen = 0;
-		rLoc = 6339;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1764;
 		vrLoc = 5299;
@@ -2788,7 +2823,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 189";
 		rLen = 0;
-		rLoc = 6522;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1756;
 		vrLoc = 5299;
@@ -2798,7 +2833,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 190";
 		rLen = 0;
-		rLoc = 6526;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1786;
 		vrLoc = 5299;
@@ -2808,7 +2843,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1134";
 		rLen = 0;
-		rLoc = 35650;
+		rLoc = 38056;
 		rType = 0;
 		vrLen = 1423;
 		vrLoc = 34344;
@@ -2818,7 +2853,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1104";
 		rLen = 0;
-		rLoc = 34719;
+		rLoc = 37125;
 		rType = 0;
 		vrLen = 1485;
 		vrLoc = 35523;
@@ -2828,7 +2863,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1104";
 		rLen = 0;
-		rLoc = 34719;
+		rLoc = 37125;
 		rType = 0;
 		vrLen = 1485;
 		vrLoc = 35523;
@@ -2838,7 +2873,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1104";
 		rLen = 0;
-		rLoc = 34719;
+		rLoc = 37125;
 		rType = 0;
 		vrLen = 1381;
 		vrLoc = 34415;
@@ -2848,7 +2883,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1121";
 		rLen = 0;
-		rLoc = 35091;
+		rLoc = 37497;
 		rType = 0;
 		vrLen = 1375;
 		vrLoc = 34119;
@@ -2858,7 +2893,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1144";
 		rLen = 0;
-		rLoc = 35879;
+		rLoc = 38285;
 		rType = 0;
 		vrLen = 1413;
 		vrLoc = 34544;
@@ -2868,7 +2903,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1127";
 		rLen = 0;
-		rLoc = 35354;
+		rLoc = 37760;
 		rType = 0;
 		vrLen = 1413;
 		vrLoc = 34544;
@@ -2878,7 +2913,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1124";
 		rLen = 0;
-		rLoc = 35208;
+		rLoc = 37614;
 		rType = 0;
 		vrLen = 1411;
 		vrLoc = 34544;
@@ -2888,7 +2923,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1277";
 		rLen = 0;
-		rLoc = 40567;
+		rLoc = 43054;
 		rType = 0;
 		vrLen = 1880;
 		vrLoc = 39504;
@@ -2898,7 +2933,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1277";
 		rLen = 0;
-		rLoc = 40594;
+		rLoc = 43081;
 		rType = 0;
 		vrLen = 1884;
 		vrLoc = 39504;
@@ -2908,7 +2943,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1278";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 1881;
 		vrLoc = 39504;
@@ -2918,7 +2953,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1281";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 2087;
 		vrLoc = 38355;
@@ -2928,7 +2963,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1281";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 2087;
 		vrLoc = 38355;
@@ -2938,7 +2973,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1277";
 		rLen = 0;
-		rLoc = 40594;
+		rLoc = 43081;
 		rType = 0;
 		vrLen = 2091;
 		vrLoc = 38355;
@@ -2948,7 +2983,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 183";
 		rLen = 0;
-		rLoc = 6312;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1879;
 		vrLoc = 5538;
@@ -2958,7 +2993,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 183";
 		rLen = 0;
-		rLoc = 6322;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1879;
 		vrLoc = 5538;
@@ -2968,7 +3003,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1184";
 		rLen = 0;
-		rLoc = 37264;
+		rLoc = 39751;
 		rType = 0;
 		vrLen = 1433;
 		vrLoc = 35814;
@@ -2978,11 +3013,378 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 204";
 		rLen = 0;
-		rLoc = 7197;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1737;
 		vrLoc = 6105;
 	};
+	6926ABC1146C97B300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1198";
+		rLen = 0;
+		rLoc = 39668;
+		rType = 0;
+		vrLen = 1219;
+		vrLoc = 36144;
+	};
+	6926ABC2146C97B300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 112";
+		rLen = 17;
+		rLoc = 3176;
+		rType = 0;
+		vrLen = 1104;
+		vrLoc = 1941;
+	};
+	6926ABC3146C97B300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 30";
+		rLen = 0;
+		rLoc = 1424;
+		rType = 0;
+		vrLen = 1204;
+		vrLoc = 375;
+	};
+	6926ABE1146DAA7300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 66";
+		rLen = 0;
+		rLoc = 2113;
+		rType = 0;
+		vrLen = 1087;
+		vrLoc = 577;
+	};
+	6926ABE2146DAA7300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1344";
+		rLen = 0;
+		rLoc = 44841;
+		rType = 0;
+		vrLen = 1542;
+		vrLoc = 41396;
+	};
+	6926ABE3146DAA7300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1344";
+		rLen = 0;
+		rLoc = 44841;
+		rType = 0;
+		vrLen = 1542;
+		vrLoc = 41396;
+	};
+	6926ABE7146DAAA100F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1346";
+		rLen = 0;
+		rLoc = 44828;
+		rType = 0;
+		vrLen = 1602;
+		vrLoc = 41258;
+	};
+	6926ABE9146DAAFE00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1349";
+		rLen = 0;
+		rLoc = 44954;
+		rType = 0;
+		vrLen = 1653;
+		vrLoc = 41258;
+	};
+	6926ABEB146DADCD00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1352";
+		rLen = 0;
+		rLoc = 45238;
+		rType = 0;
+		vrLen = 1725;
+		vrLoc = 41258;
+	};
+	6926ABF1146DAE1B00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1354";
+		rLen = 0;
+		rLoc = 45238;
+		rType = 0;
+		vrLen = 1698;
+		vrLoc = 41258;
+	};
+	6926ABF5146DAE3A00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1354";
+		rLen = 0;
+		rLoc = 45182;
+		rType = 0;
+		vrLen = 1699;
+		vrLoc = 41258;
+	};
+	6926ABF9146DB0DE00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1356";
+		rLen = 0;
+		rLoc = 45240;
+		rType = 0;
+		vrLen = 1472;
+		vrLoc = 42122;
+	};
+	6926AC0A146DB19400F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1346";
+		rLen = 0;
+		rLoc = 44784;
+		rType = 0;
+		vrLen = 1629;
+		vrLoc = 41950;
+	};
+	6926AC0B146DB19400F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1346";
+		rLen = 0;
+		rLoc = 44784;
+		rType = 0;
+		vrLen = 1629;
+		vrLoc = 41950;
+	};
+	6926AC16146DB28400F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1371";
+		rLen = 0;
+		rLoc = 45519;
+		rType = 0;
+		vrLen = 1666;
+		vrLoc = 41950;
+	};
+	6926AC24146DB40000F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1339";
+		rLen = 0;
+		rLoc = 44359;
+		rType = 0;
+		vrLen = 1625;
+		vrLoc = 41950;
+	};
+	6926AC2B146DB42200F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1379";
+		rLen = 0;
+		rLoc = 45753;
+		rType = 0;
+		vrLen = 1393;
+		vrLoc = 42689;
+	};
+	6926AC42146DB5D000F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 63";
+		rLen = 29;
+		rLoc = 2043;
+		rType = 0;
+		vrLen = 863;
+		vrLoc = 1205;
+	};
+	6926AC43146DB5D000F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 347";
+		rLen = 0;
+		rLoc = 11458;
+		rType = 0;
+		vrLen = 1144;
+		vrLoc = 10747;
+	};
+	6926AC44146DB5D000F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 335";
+		rLen = 0;
+		rLoc = 11002;
+		rType = 0;
+		vrLen = 1083;
+		vrLoc = 11237;
+	};
+	6926AC66146DBC7D00F69705 /* README */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {905, 618}}";
+			sepNavSelRange = "{236, 0}";
+			sepNavVisRange = "{0, 1100}";
+		};
+	};
+	6926AC67146DBC9B00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926A660146B38F200F69705 /* keychain.c */;
+		name = "keychain.c: 88";
+		rLen = 0;
+		rLoc = 2419;
+		rType = 0;
+		vrLen = 1032;
+		vrLoc = 201;
+	};
+	6926AC68146DBC9B00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 335";
+		rLen = 0;
+		rLoc = 11002;
+		rType = 0;
+		vrLen = 1083;
+		vrLoc = 11237;
+	};
+	6926AC69146DBC9B00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926AC66146DBC7D00F69705 /* README */;
+		name = "README: 1";
+		rLen = 0;
+		rLoc = 1100;
+		rType = 0;
+		vrLen = 0;
+		vrLoc = 0;
+	};
+	6926AC6A146DBC9B00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926AC66146DBC7D00F69705 /* README */;
+		name = "README: 1";
+		rLen = 0;
+		rLoc = 1100;
+		rType = 0;
+		vrLen = 0;
+		vrLoc = 0;
+	};
+	6926AC6B146DBE2B00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926AC66146DBC7D00F69705 /* README */;
+		name = "README: 25";
+		rLen = 0;
+		rLoc = 1074;
+		rType = 0;
+		vrLen = 921;
+		vrLoc = 0;
+	};
+	6926AC71146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926AC66146DBC7D00F69705 /* README */;
+		name = "README: 5";
+		rLen = 0;
+		rLoc = 238;
+		rType = 0;
+		vrLen = 953;
+		vrLoc = 0;
+	};
+	6926AC72146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 6";
+		rLen = 0;
+		rLoc = 80;
+		rType = 0;
+		vrLen = 1540;
+		vrLoc = 0;
+	};
+	6926AC73146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 7";
+		rLen = 600;
+		rLoc = 81;
+		rType = 0;
+		vrLen = 1246;
+		vrLoc = 0;
+	};
+	6926AC74146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2214620D0F00F69705 /* packet_test.h */;
+		name = "packet_test.h: 19";
+		rLen = 0;
+		rLoc = 683;
+		rType = 0;
+		vrLen = 839;
+		vrLoc = 0;
+	};
+	6926AC75146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2114620D0F00F69705 /* packet_test.c */;
+		name = "packet_test.c: 19";
+		rLen = 0;
+		rLoc = 683;
+		rType = 0;
+		vrLen = 1509;
+		vrLoc = 0;
+	};
+	6926AC76146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926A661146B38F200F69705 /* keychain.h */;
+		name = "keychain.h: 19";
+		rLen = 0;
+		rLoc = 680;
+		rType = 0;
+		vrLen = 1207;
+		vrLoc = 0;
+	};
+	6926AC77146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926A660146B38F200F69705 /* keychain.c */;
+		name = "keychain.c: 88";
+		rLen = 0;
+		rLoc = 2419;
+		rType = 0;
+		vrLen = 1032;
+		vrLoc = 201;
+	};
+	6926AC78146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926A660146B38F200F69705 /* keychain.c */;
+		name = "keychain.c: 19";
+		rLen = 0;
+		rLoc = 680;
+		rType = 0;
+		vrLen = 1255;
+		vrLoc = 0;
+	};
+	6926AC79146DC18500F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926A660146B38F200F69705 /* keychain.c */;
+		name = "keychain.c: 9";
+		rLen = 563;
+		rLoc = 117;
+		rType = 0;
+		vrLen = 1255;
+		vrLoc = 0;
+	};
+	6926AC7A146DC18500F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926AC66146DBC7D00F69705 /* README */;
+		name = "README: 5";
+		rLen = 0;
+		rLoc = 238;
+		rType = 0;
+		vrLen = 953;
+		vrLoc = 0;
+	};
+	6926AC7B146DC18500F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926AC66146DBC7D00F69705 /* README */;
+		name = "README: 7";
+		rLen = 0;
+		rLoc = 236;
+		rType = 0;
+		vrLen = 1100;
+		vrLoc = 0;
+	};
 	69868AD41460E35F004C5D9B /* Source Control */ = {
 		isa = PBXSourceControlManager;
 		fallbackIsa = XCSourceControlManager;
@@ -3055,7 +3457,7 @@
 		vrLen = 824;
 		vrLoc = 0;
 	};
-	69868C9D14618450004C5D9B /* packet.c:9 */ = {
+	69868C9D14618450004C5D9B /* packet.c:22 */ = {
 		isa = PBXFileBreakpoint;
 		actions = (
 		);
@@ -3066,9 +3468,9 @@
 		fileReference = 69269F2314620D0F00F69705 /* packet.c */;
 		hitCount = 0;
 		ignoreCount = 0;
-		lineNumber = 9;
+		lineNumber = 22;
 		location = duckdog;
-		modificationTime = 342660550.994715;
+		modificationTime = 342734490.624816;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};

diff --git a/src/keychain.c b/src/keychain.c
line changes: +14/-1
index c48d044..73ea9c4
--- a/src/keychain.c
+++ b/src/keychain.c
@@ -3,7 +3,20 @@
  *  simplepgp
  *
  *  Created by Trevor Bentley on 11/8/11.
- *  Copyright 2011 Trevor Bentley. All rights reserved.
+ *
+ *  Copyright 2011 Trevor Bentley
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  *
  */
 

diff --git a/src/keychain.h b/src/keychain.h
line changes: +14/-1
index e8bc3fd..1712985
--- a/src/keychain.h
+++ b/src/keychain.h
@@ -3,7 +3,20 @@
  *  simplepgp
  *
  *  Created by Trevor Bentley on 11/8/11.
- *  Copyright 2011 Trevor Bentley. All rights reserved.
+ *
+ *  Copyright 2011 Trevor Bentley
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  *
  */
 

diff --git a/src/packet.c b/src/packet.c
line changes: +202/-73
index 770bdcf..1cc6452
--- a/src/packet.c
+++ b/src/packet.c
@@ -3,7 +3,20 @@
  *  libsimplepgp
  *
  *  Created by Trevor Bentley on 11/1/11.
- *  Copyright 2011 Trevor Bentley. All rights reserved.
+ *
+ *  Copyright 2011 Trevor Bentley
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  *
  */
 
@@ -60,6 +73,10 @@ uint8_t debug_log_enabled = 0;
 **
 ***********************************************************************/
 
+static spgp_packet_t* spgp_packet_decode_loop(uint8_t *message, 
+																							uint32_t *idx, 
+                                              uint32_t length);
+                                              
 static uint8_t spgp_parse_header(uint8_t *msg, uint32_t *idx, 
 														uint32_t length, spgp_packet_t *pkt);
 
@@ -97,7 +114,12 @@ static uint8_t spgp_parse_encrypted_packet(uint8_t *msg,
                                            uint32_t *idx, 
           														 		 uint32_t *length, 
                                            spgp_packet_t *pkt);
-                                 
+             
+static uint8_t spgp_parse_literal_packet(uint8_t *msg, 
+                                         uint32_t *idx, 
+          													 		 uint32_t length, 
+                                         spgp_packet_t *pkt);
+                                                     
 static spgp_packet_t *spgp_find_session_packet(spgp_packet_t *chain);
          
 static uint8_t spgp_parse_session_packet(uint8_t *msg, uint32_t *idx, 
@@ -147,77 +169,6 @@ static uint8_t spgp_salt_length_for_hash_algo(uint8_t algo);
 ***********************************************************************/
 #pragma mark External Function Definitions
 
-static spgp_packet_t* spgp_packet_decode_loop(uint8_t *message, uint32_t *idx, uint32_t length) {
-	spgp_packet_t *head = NULL;
-  spgp_packet_t *pkt = NULL;
-
-  // There must be at least one packet, yeah?
-  head = malloc(sizeof(*head));
-  if (NULL == head) RAISE(OUT_OF_MEMORY);
-  memset(head, 0, sizeof(*head));
-  pkt = head;
-  
-  // Loop to decode every packet in message
-  while (*idx < length-1) {
-   	// Every packet starts with a header
-    spgp_parse_header(message, idx, length, pkt);
-    if (!pkt->header) RAISE(FORMAT_UNSUPPORTED);
-    
-    // Decode packet contents based on the type marked in its header
-    switch (pkt->header->type) {
-    	case PKT_TYPE_USER_ID:
-      	spgp_parse_user_id(message, idx, length, pkt);
-        break;
-      case PKT_TYPE_PUBLIC_KEY:
-      case PKT_TYPE_PUBLIC_SUBKEY:
-      	spgp_parse_public_key(message, idx, length, pkt);
-        break;
-      case PKT_TYPE_SECRET_KEY:
-      case PKT_TYPE_SECRET_SUBKEY:
-        spgp_parse_secret_key(message, idx, length, pkt);
-        break;
-      case PKT_TYPE_SESSION:
-      	spgp_parse_session_packet(message, idx, length, pkt);
-      	break;
-      case PKT_TYPE_SYM_ENC_INT_DATA:
-      	spgp_parse_encrypted_packet(message, idx, &length, pkt);
-      	break;
-      case PKT_TYPE_COMPRESSED_DATA:
-      	spgp_parse_compressed_packet(message, idx, length, pkt);
-        break;
-      case PKT_TYPE_LITERAL_DATA:
-      	LOG_PRINT("Literal data\n");
-      default:
-        LOG_PRINT("WARNING: Unsupported packet type %u\n", pkt->header->type);
-        // Increment to next packet.  We add the contentLength, but subtract
-        // one parse_header() left us on the first byte of content.
-        if (*idx + pkt->header->contentLength - 1 < length)
-          *idx = *idx + pkt->header->contentLength - 1;
-        break;
-    }
-    
-    // If we're at the end of the buffer, we're done
-    if (*idx >= length-1) break;
-        
-    // A packet can contain other packets -- if such a thing was just decoded,
-    // new packets have already been added to the list.  Progress until we
-    // get to the end of the packet list.
-    while (pkt->next != NULL) pkt = pkt->next;
-        
-    // Allocate space for another packet
-    pkt->next = malloc(sizeof(*pkt->next));
-    if (NULL == pkt->next) RAISE(OUT_OF_MEMORY);
-    memset(pkt->next, 0, sizeof(*pkt->next));
-    pkt->next->prev = pkt; // make backwards pointer
-    pkt = pkt->next;
-    
-    // Packet parser increments to it's own last byte.  Need one more to get
-    // to the next packet's first byte. 
-    SAFE_IDX_INCREMENT(*idx, length);
-	}
-
-	return head;
-}
 
 spgp_packet_t *spgp_decode_message(uint8_t *message, uint32_t length) {
 	spgp_packet_t *head = NULL;
@@ -394,6 +345,23 @@ void spgp_free_packet(spgp_packet_t **pkt) {
     free((*pkt)->c.secret);
     (*pkt)->c.secret = NULL;
   }
+  
+  else if (((*pkt)->header->type == PKT_TYPE_PUBLIC_KEY ||
+            (*pkt)->header->type == PKT_TYPE_PUBLIC_SUBKEY) &&
+            (*pkt)->c.pub != NULL) {
+  	if ((*pkt)->c.pub->mpiCount > 0) {
+    	curMpi = (*pkt)->c.pub->mpiHead;
+      while (curMpi->next) {
+      	nextMpi = curMpi->next;
+        if (curMpi->data) free(curMpi->data);
+        free(curMpi);
+        curMpi = nextMpi;
+      }
+      (*pkt)->c.pub->mpiHead = NULL;
+      (*pkt)->c.pub->mpiCount = 0;
+    }            
+  }
+  
   else if ((*pkt)->header->type == PKT_TYPE_USER_ID &&
   				 (*pkt)->c.userid->data != NULL) {
   	free((*pkt)->c.userid->data);
@@ -403,6 +371,34 @@ void spgp_free_packet(spgp_packet_t **pkt) {
     (*pkt)->c.userid = NULL;
   }
   
+  else if ((*pkt)->header->type == PKT_TYPE_SESSION &&
+  				 (*pkt)->c.session != NULL) {
+  	if ((*pkt)->c.session->key) {
+    	free((*pkt)->c.session->key);
+      (*pkt)->c.session->key = NULL;
+    }
+  	if ((*pkt)->c.session->mpi1) {
+    	free((*pkt)->c.session->mpi1);
+      (*pkt)->c.session->mpi1 = NULL;
+    }
+  	if ((*pkt)->c.session->mpi2) {
+    	free((*pkt)->c.session->mpi2);
+      (*pkt)->c.session->mpi2 = NULL;
+    }
+  }
+  
+  else if ((*pkt)->header->type == PKT_TYPE_LITERAL_DATA &&
+  				 (*pkt)->c.literal != NULL) {
+  	if ((*pkt)->c.literal->filename) {
+    	free((*pkt)->c.literal->filename);
+      (*pkt)->c.literal->filename = NULL;
+    }
+  	if ((*pkt)->c.literal->data) {
+    	free((*pkt)->c.literal->data);
+      (*pkt)->c.literal->data = NULL;
+    }
+  }
+  
   // release header
   if ((*pkt)->header) {
 	  free((*pkt)->header);
@@ -454,6 +450,81 @@ void spgp_debug_log_set(uint8_t enable) {
 #pragma mark Static Function Definitions
 
 
+static spgp_packet_t* spgp_packet_decode_loop(uint8_t *message, 
+																							uint32_t *idx, 
+                                              uint32_t length) {
+	spgp_packet_t *head = NULL;
+  spgp_packet_t *pkt = NULL;
+
+  // There must be at least one packet, yeah?
+  head = malloc(sizeof(*head));
+  if (NULL == head) RAISE(OUT_OF_MEMORY);
+  memset(head, 0, sizeof(*head));
+  pkt = head;
+  
+  // Loop to decode every packet in message
+  while (*idx < length-1) {
+   	// Every packet starts with a header
+    spgp_parse_header(message, idx, length, pkt);
+    if (!pkt->header) RAISE(FORMAT_UNSUPPORTED);
+    
+    // Decode packet contents based on the type marked in its header
+    switch (pkt->header->type) {
+    	case PKT_TYPE_USER_ID:
+      	spgp_parse_user_id(message, idx, length, pkt);
+        break;
+      case PKT_TYPE_PUBLIC_KEY:
+      case PKT_TYPE_PUBLIC_SUBKEY:
+      	spgp_parse_public_key(message, idx, length, pkt);
+        break;
+      case PKT_TYPE_SECRET_KEY:
+      case PKT_TYPE_SECRET_SUBKEY:
+        spgp_parse_secret_key(message, idx, length, pkt);
+        break;
+      case PKT_TYPE_SESSION:
+      	spgp_parse_session_packet(message, idx, length, pkt);
+      	break;
+      case PKT_TYPE_SYM_ENC_INT_DATA:
+      	spgp_parse_encrypted_packet(message, idx, &length, pkt);
+      	break;
+      case PKT_TYPE_COMPRESSED_DATA:
+      	spgp_parse_compressed_packet(message, idx, length, pkt);
+        break;
+      case PKT_TYPE_LITERAL_DATA:
+      	spgp_parse_literal_packet(message, idx, length, pkt);
+        break;
+      default:
+        LOG_PRINT("WARNING: Unsupported packet type %u\n", pkt->header->type);
+        // Increment to next packet.  We add the contentLength, but subtract
+        // one parse_header() left us on the first byte of content.
+        if (*idx + pkt->header->contentLength - 1 < length)
+          *idx = *idx + pkt->header->contentLength - 1;
+        break;
+    }
+    
+    // If we're at the end of the buffer, we're done
+    if (*idx >= length-1) break;
+        
+    // A packet can contain other packets -- if such a thing was just decoded,
+    // new packets have already been added to the list.  Progress until we
+    // get to the end of the packet list.
+    while (pkt->next != NULL) pkt = pkt->next;
+        
+    // Allocate space for another packet
+    pkt->next = malloc(sizeof(*pkt->next));
+    if (NULL == pkt->next) RAISE(OUT_OF_MEMORY);
+    memset(pkt->next, 0, sizeof(*pkt->next));
+    pkt->next->prev = pkt; // make backwards pointer
+    pkt = pkt->next;
+    
+    // Packet parser increments to it's own last byte.  Need one more to get
+    // to the next packet's first byte. 
+    SAFE_IDX_INCREMENT(*idx, length);
+	}
+
+	return head;
+}
+
 static uint8_t spgp_parse_header(uint8_t *msg, uint32_t *idx, 
 														uint32_t length, spgp_packet_t *pkt) {
 	uint8_t i;
@@ -1183,6 +1254,7 @@ static uint8_t spgp_parse_compressed_packet(uint8_t *msg,
       RAISE(FORMAT_UNSUPPORTED);
   }
   
+  if (NULL == decomp) RAISE(DECRYPT_FAILED);
   
   // Decode all the packets in this compressed packet        
 	didx = 0;
@@ -1193,6 +1265,9 @@ static uint8_t spgp_parse_compressed_packet(uint8_t *msg,
   pkt->next = pkts;
   pkts->prev = pkt;
   
+  free(decomp);
+  decomp = NULL;
+  
   // Progress index through current chain
   *idx += pkt->header->contentLength;
  
@@ -1315,6 +1390,60 @@ static uint8_t spgp_parse_encrypted_packet(uint8_t *msg,
 	return 0;
 }
 
+static uint8_t spgp_parse_literal_packet(uint8_t *msg, 
+                                         uint32_t *idx, 
+          													 		 uint32_t length, 
+                                         spgp_packet_t *pkt) {
+	spgp_literal_pkt_t *literal = NULL;
+  uint32_t date;
+  uint32_t startidx;
+  uint8_t format;
+  
+  LOG_PRINT("Parsing literal packet\n");
+
+	if (NULL == msg || NULL == idx || NULL == pkt || length == 0)                              
+  	RAISE(INVALID_ARGS);
+
+	startidx = *idx;
+
+  pkt->c.literal = malloc(sizeof(*(pkt->c.literal)));
+  if (NULL == pkt->c.literal) RAISE(OUT_OF_MEMORY);
+  memset(pkt->c.literal, 0, sizeof(*(pkt->c.literal)));
+  literal = pkt->c.literal;                                       
+
+	// Read the format of the message.  This is ignored.
+	format = msg[*idx];
+  SAFE_IDX_INCREMENT(*idx, length);
+
+	// Read the length byte of the fylename
+	literal->filenameLen = msg[*idx];
+  SAFE_IDX_INCREMENT(*idx, length);
+  
+  // Read the filename
+  literal->filename = malloc(literal->filenameLen + 1);
+  if (NULL == literal->filename) RAISE(OUT_OF_MEMORY);
+  memcpy(literal->filename, msg+*idx, literal->filenameLen);
+  literal->filename[literal->filenameLen] = '\0';
+  *idx += literal->filenameLen - 1;
+	SAFE_IDX_INCREMENT(*idx, length);
+  
+  // Read the timestamp.  This is ignored.
+  memcpy(&date, msg+*idx, sizeof(date));
+  *idx += 3;
+  SAFE_IDX_INCREMENT(*idx, length);
+  
+  // Read the actual data in to buffer
+  literal->dataLen = pkt->header->contentLength - (*idx - startidx);
+  literal->data = malloc(literal->dataLen);
+  if (NULL == literal->data) RAISE(OUT_OF_MEMORY);
+  memcpy(literal->data, msg+*idx, literal->dataLen);
+  *idx += literal->dataLen - 1;
+  
+  LOG_PRINT("Stored %u bytes\n", literal->dataLen);
+  
+	return 0;
+}
+                                         
 static spgp_packet_t *spgp_find_session_packet(spgp_packet_t *chain) {
 	spgp_packet_t *cur;
   

diff --git a/src/packet.h b/src/packet.h
line changes: +23/-1
index 3ac698f..c914b01
--- a/src/packet.h
+++ b/src/packet.h
@@ -3,7 +3,20 @@
  *  libsimplepgp
  *
  *  Created by Trevor Bentley on 11/1/11.
- *  Copyright 2011 Trevor Bentley. All rights reserved.
+ *
+ *  Copyright 2011 Trevor Bentley
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  *
  */
  
@@ -27,6 +40,7 @@ typedef struct spgp_public_packet_struct  spgp_public_pkt_t;
 typedef struct spgp_secret_packet_struct  spgp_secret_pkt_t;
 typedef struct spgp_userid_packet_struct  spgp_userid_pkt_t;
 typedef struct spgp_session_packet_struct spgp_session_pkt_t;
+typedef struct spgp_literal_packet_struct spgp_literal_pkt_t;
 
 struct spgp_packet_header_struct {
 	spgp_packet_t *parent;
@@ -45,6 +59,7 @@ struct spgp_packet_struct {
   	spgp_secret_pkt_t  *secret;
     spgp_userid_pkt_t  *userid;
     spgp_session_pkt_t *session;
+    spgp_literal_pkt_t *literal;
   } c;
 	spgp_packet_t *next;
   spgp_packet_t *prev;
@@ -57,6 +72,13 @@ struct spgp_mpi_struct {
 	spgp_mpi_t *next;
 }; 
 
+struct spgp_literal_packet_struct {
+	char *filename;
+	char *data;
+  uint32_t dataLen;
+  uint32_t filenameLen;
+};
+
 struct spgp_userid_packet_struct {
 	uint8_t *data;
 };

diff --git a/src/packet_test.c b/src/packet_test.c
line changes: +14/-1
index d9fac7f..642c843
--- a/src/packet_test.c
+++ b/src/packet_test.c
@@ -3,7 +3,20 @@
  *  simplepgp
  *
  *  Created by Trevor Bentley on 11/2/11.
- *  Copyright 2011 Trevor Bentley. All rights reserved.
+ *
+ *  Copyright 2011 Trevor Bentley
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  *
  */
 

diff --git a/src/packet_test.h b/src/packet_test.h
line changes: +14/-1
index 819b95f..0845678
--- a/src/packet_test.h
+++ b/src/packet_test.h
@@ -3,7 +3,20 @@
  *  simplepgp
  *
  *  Created by Trevor Bentley on 11/2/11.
- *  Copyright 2011 Trevor Bentley. All rights reserved.
+ *
+ *  Copyright 2011 Trevor Bentley
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  *
  */